在Linux生態(tài)中,軟件包的分發(fā)與管理一直是開(kāi)發(fā)者與用戶(hù)關(guān)注的焦點(diǎn)。如意玲瓏(Linyaps)作為一種新興的容器化應(yīng)用格式,憑借其輕量化、強(qiáng)隔離、跨發(fā)行版兼容等特性,正在為 Linux 應(yīng)用生態(tài)注入新的活力。無(wú)論是開(kāi)發(fā)者還是技術(shù)愛(ài)好者,掌握玲瓏應(yīng)用的構(gòu)建方法都至關(guān)重要。
本篇作為“如意玲瓏應(yīng)用構(gòu)建從入門(mén)到實(shí)戰(zhàn)”系列的第一章,將帶您系統(tǒng)梳理玲瓏應(yīng)用構(gòu)建的核心基礎(chǔ)知識(shí),涵蓋構(gòu)建流程、規(guī)范要求與關(guān)鍵配置文件。通過(guò)理解這些基礎(chǔ)概念,您將能夠?yàn)楹罄m(xù)的實(shí)操教程打下堅(jiān)實(shí)根基,從容應(yīng)對(duì)從代碼到安裝包的每一步挑戰(zhàn)。
01玲瓏應(yīng)用構(gòu)建基本步驟
在正式開(kāi)始構(gòu)建一個(gè)玲瓏應(yīng)用工程前, 我們需要了解一個(gè)玲瓏應(yīng)用從資源(源代碼、二進(jìn)制文件等)輸入到應(yīng)用安裝包導(dǎo)出所經(jīng)過(guò)的基本步驟,來(lái)確定我們需要準(zhǔn)備哪些必要文件。
玲瓏應(yīng)用構(gòu)建基本流程
獲取構(gòu)建目標(biāo)源文件(開(kāi)源項(xiàng)目源代碼、應(yīng)用二進(jìn)制文件等);
根據(jù)源文件判斷玲瓏應(yīng)用構(gòu)建類(lèi)型, 選擇合適的構(gòu)建方案;
準(zhǔn)備符合要求的玲瓏構(gòu)建環(huán)境;
按照構(gòu)建類(lèi)型及源代碼內(nèi)容定制構(gòu)建配置文件 linglong.yaml ;
準(zhǔn)備應(yīng)用所使用的通用類(lèi)資源,圖標(biāo)以及其他非二進(jìn)制資源。
02玲瓏應(yīng)用構(gòu)建工程所需材料
結(jié)合上述的知識(shí),我們可以了解到一個(gè)玲瓏應(yīng)用在構(gòu)建的全過(guò)程中,主要涉及到以下的文件:
玲瓏應(yīng)用構(gòu)建工程配置文件 linglong.yaml;
應(yīng)用源代碼/需要封裝的二進(jìn)制文件等資源;
非二進(jìn)制文件等通用資源。
03玲瓏應(yīng)用遵循的主流規(guī)范
每一個(gè) Linux 桌面軟件包管理方案為了能夠保障完整的功能和良好的體驗(yàn),均需要遵守軟件包管理方案提出的各類(lèi)規(guī)范要求以最大限度發(fā)揮軟件包管理方案的功能并保障應(yīng)用生態(tài)體驗(yàn)。 如意玲瓏也并不總是特立獨(dú)行, 需要滿(mǎn)足一定的規(guī)范來(lái)保障如意玲瓏生態(tài)得以持續(xù)穩(wěn)步發(fā)展。目前如意玲瓏生方案遵守以下主流的規(guī)范:
Freedesktop XDG 規(guī)范;
玲瓏應(yīng)用目錄結(jié)構(gòu)規(guī)范;
玲瓏應(yīng)用構(gòu)建工程配置文件 linglong.yaml 規(guī)范。
3.1 Freedesktop XDG 規(guī)范
玲瓏應(yīng)用解決方案遵循 Freedesktop XDG 規(guī)范,一款正常的圖形化應(yīng)用應(yīng)具備圖標(biāo)文件、desktop 文件并符合 Freedesktop XDG 規(guī)范;
玲瓏應(yīng)用圖標(biāo)文件應(yīng)該根據(jù)不同尺寸歸類(lèi)到 $PREFIX/share/icons/hicolor/ 目錄下;
玲瓏應(yīng)用容器中使用 XDG_DATA_DIRS 等變量, 支持讀寫(xiě)宿主機(jī)中的用戶(hù)目錄;
3.2 玲瓏應(yīng)用目錄結(jié)構(gòu)規(guī)范
玲瓏應(yīng)用遵循 $PREFIX 路徑規(guī)則,該變量自動(dòng)生成, 應(yīng)用所有相關(guān)文件需存放于此目錄下, 該目錄層級(jí)下存在 bin、share 等目錄;
玲瓏應(yīng)用容器中的應(yīng)用將不被允許讀取宿主機(jī)中系統(tǒng)目錄中的二進(jìn)制文件、運(yùn)行庫(kù);
在構(gòu)建工程中, 構(gòu)建工程目錄將會(huì)被映射到玲瓏容器中, 掛載為 /project;
玲瓏應(yīng)用容器中運(yùn)行庫(kù)、頭文件所在目錄將根據(jù)運(yùn)行環(huán)境類(lèi)型而異:
foundation 類(lèi):在玲瓏容器中映射為普通系統(tǒng)路徑 /usr/bin、/usr/include 等, 作為基礎(chǔ)運(yùn)行系統(tǒng)環(huán)境存在;
runtime 類(lèi):在玲瓏容器中映射為runtime容器路徑 /runtime/usr/bin /、runtime/usr/include 等,作為基礎(chǔ)運(yùn)行系統(tǒng)環(huán)境存在。
默認(rèn)情況下, 玲瓏容器內(nèi)部的環(huán)境變量已自動(dòng)處理好路徑識(shí)別問(wèn)題, 如:
PATH=szbt@szbt-linyaps23:/project$ echo $PATH /bin:/usr/bin:/runtime/bin:/opt/apps/com.tencent.wechat/files/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin
通用表達(dá)為:
PATH=szbt@szbt-linyaps23:/project$ echo $PATH /bin:/usr/bin:/runtime/bin:$PREFIX/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/sbin:/usr/sbin
04玲瓏應(yīng)用構(gòu)建工程通用資源的規(guī)范
在玲瓏應(yīng)用構(gòu)建工程中,不同的資源文件均需要遵循相關(guān)規(guī)范以確保構(gòu)建、體驗(yàn)?zāi)軌驖M(mǎn)足要求。
4.1 icon 圖標(biāo)目錄規(guī)范
依據(jù)玲瓏遵循的 Freedesktop XDG 規(guī)范及玲瓏應(yīng)用目錄結(jié)構(gòu)規(guī)范,圖標(biāo)根據(jù)不同尺寸放置在對(duì)應(yīng)的目錄中。 主流的非矢量圖標(biāo)尺寸有: 16x16、24x24、32x32、48x48、128x128、256x256、512x512。為保障圖標(biāo)在系統(tǒng)中能夠獲得較佳的體驗(yàn)效果, 因此需要至少一個(gè)尺寸不小于 128x128 的非矢量圖標(biāo)文件, 矢量圖標(biāo)則不存在該限制。
因此, 一款玲瓏應(yīng)用安裝目錄中, icons 圖標(biāo)目錄應(yīng)為以下示例,其中scalable 目錄用于放置矢量圖標(biāo)文件, 一般為 .svg 格式。
$PREFIX/share/icons/hicolor/16x16/apps $PREFIX/share/icons/hicolor/24x24/apps $PREFIX/share/icons/hicolor/32x32/apps $PREFIX/share/icons/hicolor/48x48/apps $PREFIX/share/icons/hicolor/128x128/apps $PREFIX/share/icons/hicolor/256x256/apps $PREFIX/share/icons/hicolor/512x512/apps $PREFIX/share/icons/hicolor/scalable/apps
假設(shè)你的玲瓏應(yīng)用同時(shí)提供尺寸為 128x128 的非矢量圖標(biāo)文件 linyaps-app-demo.png 和 128x128 的矢量圖標(biāo)文件 linyaps-app-demo.svg,在玲瓏容器中應(yīng)當(dāng)表現(xiàn)為以下?tīng)顟B(tài):
$PREFIX/share/icons/hicolor/128x128/apps/linyaps-app-demo.png $PREFIX/share/icons/hicolor/scalable/apps/linyaps-app-demo.svg注意,為了避免圖標(biāo)沖突被覆蓋,圖標(biāo)文件名請(qǐng)使用應(yīng)用唯一英文名稱(chēng)或玲瓏應(yīng)用id。
4.2 desktop 文件規(guī)范
玲瓏應(yīng)用兼容大部分符合 Freedesktop XDG 規(guī)范的 desktop 啟動(dòng)文件, 其中有以下字段需要額外注意:
字段 | 值要求 |
Exec | 該值用于設(shè)置點(diǎn)擊此 desktop 文件時(shí)執(zhí)行的指令, 需要與 linglong.yaml 中的 command 值保持一致。 |
Icon | 該值用于設(shè)置該 desktop 文件顯示的應(yīng)用圖標(biāo), 需要與 icons 圖標(biāo)目錄規(guī)范中的圖標(biāo)文件名一致, 此值不需要文件名后綴。 |
因此, 一個(gè)符合玲瓏應(yīng)用規(guī)范的 desktop 文件可以參考:
org.qbittorrent.qBittorrent.desktop [Desktop Entry] Categories=Network;FileTransfer;P2P;Qt; Exec=/opt/apps/org.qbittorrent.qBittorrent/files/bin/qbittorrent %U Comment=Download and share files over BitTorrent Icon=qbittorrent MimeType=application/x-bittorrent;x-scheme-handler/magnet; Name=qBittorrent Type=Application StartupWMClass=qbittorrent Keywords=bittorrent;torrent;magnet;download;p2p; StartupNotify=true Terminal=false
05玲瓏應(yīng)用構(gòu)建工程 linglong.yaml 規(guī)范
正如其他傳統(tǒng)包管理套件一樣, 手動(dòng)創(chuàng)建一個(gè)玲瓏應(yīng)用構(gòu)建工程需要設(shè)置構(gòu)建規(guī)則文件 linglong.yaml,在構(gòu)建規(guī)則中, 則根據(jù)用途劃分為全局字段及定制化字段。
請(qǐng)注意,案例中 linglong.yaml 正文內(nèi)所有空格符號(hào)、占位符均為有效字符, 請(qǐng)勿刪除或變更格式。
5.1 全局字段規(guī)范
在 linglong.yaml 中, 對(duì)于不受構(gòu)建類(lèi)型影響的字段我們稱(chēng)為全局字段, 主要有以下參考的規(guī)范。
1. 一個(gè)可以正常開(kāi)始構(gòu)建工程的 linglong.yaml應(yīng)包含以下的關(guān)鍵部分:
模塊 | 解釋 |
version | 構(gòu)建工程版本號(hào) |
package | 玲瓏應(yīng)用基本信息 |
base | 玲瓏應(yīng)用容器基礎(chǔ)環(huán)境及版本設(shè)置, 基礎(chǔ)環(huán)境中包含了部分基礎(chǔ)運(yùn)行庫(kù) |
runtime | 玲瓏應(yīng)用運(yùn)行庫(kù) runtime 及版本設(shè)置, 當(dāng) base 中的基礎(chǔ)運(yùn)行庫(kù)滿(mǎn)足程序運(yùn)行要求時(shí), 此模塊可刪除 |
command | 玲瓏應(yīng)用容器啟動(dòng)時(shí)執(zhí)行的命令, 與 desktop 文件的 Exec 字段內(nèi)容一致 |
sources | 玲瓏應(yīng)用構(gòu)建工程源文件類(lèi)型 |
build | 玲瓏應(yīng)用構(gòu)建工程將要執(zhí)行的構(gòu)建規(guī)則 |
package模塊中存在數(shù)個(gè)子模塊:
子模塊 | 解釋 |
id | 玲瓏應(yīng)用 id/包名 |
name | 玲瓏應(yīng)用名稱(chēng), 使用英文名稱(chēng) |
version | 玲瓏應(yīng)用版本號(hào) |
kind | 玲瓏應(yīng)用類(lèi)型, 默認(rèn)為app |
description | 玲瓏應(yīng)用描述 |
2. 玲瓏應(yīng)用遵循 $PREFIX 路徑規(guī)則,該變量自動(dòng)生成,應(yīng)用所有相關(guān)文件需存放于此目錄下. 構(gòu)建規(guī)則中若有需要涉及安裝文件的操作均需要安裝到 $PREFIX 路徑下。
其中$PREFIX 變量名即為填寫(xiě)的實(shí)際內(nèi)容,請(qǐng)勿使用絕對(duì)路徑或任何具有絕對(duì)值作用的內(nèi)容代替。
3. 玲瓏應(yīng)用目前遵循四位數(shù)字的版本號(hào)命名規(guī)則,不符合規(guī)則無(wú)法啟動(dòng)構(gòu)建工程
4. base、runtime 版本支持自動(dòng)匹配最新版本尾號(hào),版本號(hào)可以?xún)H填寫(xiě)版本號(hào)的前三位數(shù)字,如:
當(dāng) base org.deepin.foundation 同時(shí)提供 23.0.0.28、23.0.0.29, 若 linglong.yaml 中僅填寫(xiě):
base: org.deepin.foundation/23.0.0
那么在啟動(dòng)玲瓏應(yīng)用構(gòu)建工程時(shí), 將會(huì)默認(rèn)采用最高版本號(hào)的 23.0.0.29。
5. 玲瓏應(yīng)用構(gòu)建工程配置文件目前不直接兼容其他包構(gòu)建工具的配置文件,需要根據(jù)構(gòu)建工程配置文件案例來(lái)進(jìn)行適配修改。
詳細(xì)可參考:https://linyaps.org.cn/guide/start/whatis.html
5.2 定制化字段
根據(jù)玲瓏應(yīng)用構(gòu)建工程源文件類(lèi)型, 又可將玲瓏應(yīng)用構(gòu)建工程劃分為本地文件文件構(gòu)建和 git 源碼倉(cāng)庫(kù)拉取構(gòu)建,不同類(lèi)型則需要填寫(xiě)不同的 linglong.yaml。
玲瓏應(yīng)用構(gòu)建工程源文件類(lèi)型 sources 主要支持這幾種類(lèi)型: git、local、file、archive。
完整說(shuō)明可參考:https://linyaps.org.cn/guide/start/whatis.html 5.2.1git 拉取源碼編譯模式 當(dāng)玲瓏應(yīng)用構(gòu)建工程需要通過(guò) git 拉取開(kāi)源項(xiàng)目倉(cāng)庫(kù)資源到本地進(jìn)行構(gòu)建時(shí), 此事 sources 應(yīng)當(dāng)設(shè)置為 git 類(lèi)型, 并根據(jù)要求填寫(xiě) linglong.yaml。并需要根據(jù)規(guī)范編寫(xiě) sources 與 build 模塊。
1. sources示例
sources: - kind: git url: https://githubfast.com/qbittorrent/qBittorrent.git version: release-4.6.7 commit: 839bc696d066aca34ebd994ee1673c4b2d5afd7b - kind: git url: https://githubfast.com/arvidn/libtorrent.git version: v2.0.9 commit: 4b4003d0fdc09a257a0841ad965b22533ed87a0d
名稱(chēng) | 描述 |
kind | 源文件類(lèi)型 |
url | 需要通過(guò)git拉取的源代碼倉(cāng)庫(kù)地址, 該倉(cāng)庫(kù)需要支持git功能. 當(dāng)網(wǎng)絡(luò)狀態(tài)不佳時(shí), 可采用鏡像地址代替 |
version | 指定源代碼倉(cāng)庫(kù)的版本號(hào), 即 tag 標(biāo)簽, 或拉取主線(xiàn) master |
commit | 根據(jù)該倉(cāng)庫(kù) commit 變動(dòng)歷史拉取源碼, 此處填入commit對(duì)應(yīng)的值, 將會(huì)應(yīng)用該倉(cāng)庫(kù)截止本commit 的所有變更. *此字段優(yōu)先級(jí)高于 version, 請(qǐng)勿填入 version 合并時(shí)間之后的任何 commit |
該模式支持同時(shí)添加多個(gè) git 倉(cāng)庫(kù)作為 sources 拉取。
2. build示例
build: | mkdir -p ${PREFIX}/bin/ ${PREFIX}/share/ ##Apply patch for qBittorrent cd /project/linglong/sources/qBittorrent.git git apply -v /project/patches/linyaps-qBittorrent-4.6.7-szbt2.patch
此模塊為構(gòu)建規(guī)則正文,路徑遵守玲瓏應(yīng)用目錄結(jié)構(gòu)規(guī)范。
在 sources 拉取到本地后, 倉(cāng)庫(kù)文件將會(huì)存放在 /project/linglong/sources 目錄中,此時(shí)不同倉(cāng)庫(kù)目錄以 xxx.git 命名;支持運(yùn)用 git patch 功能對(duì)源代碼進(jìn)行便捷維護(hù)。
5.2.2本地資源操作模式
當(dāng)玲瓏應(yīng)用構(gòu)建工程需要對(duì)構(gòu)建目錄中的文件操作時(shí),此時(shí) kind 應(yīng)當(dāng)設(shè)置為 local 類(lèi)型, 并根據(jù)要求填寫(xiě) linglong.yaml,此時(shí)需要根據(jù)規(guī)范編寫(xiě) sources 與 build 模塊。
1. sources示例
sources: source: - kind: local name: "qBittorrent"
名稱(chēng) | 描述 |
kind | 源文件類(lèi)型 |
name | 源文件名稱(chēng)標(biāo)識(shí), 不具備實(shí)際用途 |
注意,當(dāng) kind 應(yīng)當(dāng)設(shè)置為 local 類(lèi)型時(shí), 構(gòu)建工程將不會(huì)對(duì)任何源文件進(jìn)行操作。
2. build示例
build: | ##Build main mkdir /project/src/qBittorrent-release-4.6.7-szbt2/build cd /project/src/qBittorrent-release-4.6.7-szbt2/build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX .. make -j$(nproc) make install此模塊為構(gòu)建規(guī)則正文,路徑遵守玲瓏應(yīng)用目錄結(jié)構(gòu)規(guī)范,此時(shí) build 規(guī)則支持多種寫(xiě)法以模擬人為操作。
注意需要確保此構(gòu)建規(guī)則所有步驟均可以正常被執(zhí)行, 否則將會(huì)中斷當(dāng)次構(gòu)建任務(wù)。
5.2.3容器內(nèi)部手動(dòng)操作模式
若計(jì)劃直接進(jìn)入玲瓏容器手動(dòng)操作而不是通過(guò)構(gòu)建規(guī)則文件 linglong.yaml,那么應(yīng)該參考 本地資源操作模式填寫(xiě) linglong.yaml
sources 部分寫(xiě)法與本地資源操作模式一致;
由于使用手動(dòng)操作, 因此不需要完整且可以正常被執(zhí)行的 build 規(guī)則, 此時(shí) linglong.yaml 用于生成符合描述的玲瓏容器而不是執(zhí)行所有任務(wù),具體操作將在后續(xù)關(guān)于容器內(nèi)部構(gòu)建文件的案例中詳細(xì)展示。
以上便是玲瓏應(yīng)用構(gòu)建的一些基礎(chǔ)知識(shí),相信您已對(duì)玲瓏應(yīng)用構(gòu)建的規(guī)范、目錄結(jié)構(gòu)、資源配置及關(guān)鍵文件(如linglong.yaml)有了較全面的認(rèn)知。這些知識(shí)不僅是構(gòu)建流程的“地圖”,更是規(guī)避常見(jiàn)陷阱的“指南針”。
在接下來(lái)的系列推文中,我們將深入實(shí)戰(zhàn)環(huán)節(jié)。準(zhǔn)備好您的開(kāi)發(fā)環(huán)境,下一站,我們將帶大家在玲瓏容器中編譯基于 Qt5 的開(kāi)源應(yīng)用!
關(guān)于項(xiàng)目
如意玲瓏(Linyaps)是一種新型的獨(dú)立包管理工具集,專(zhuān)注于解決 Linux 系統(tǒng)下由傳統(tǒng)軟件包格式的復(fù)雜性和交叉依賴(lài)關(guān)系引起的兼容性問(wèn)題。項(xiàng)目通過(guò)先進(jìn)的隔離技術(shù),將應(yīng)用與系統(tǒng)完全解耦,從根本上解決因環(huán)境變化引發(fā)的應(yīng)用兼容性問(wèn)題,實(shí)現(xiàn)“一個(gè)架構(gòu),一次構(gòu)建”,致力于簡(jiǎn)化軟件開(kāi)發(fā)流程、降低維護(hù)成本、加強(qiáng)數(shù)據(jù)安全,促進(jìn)技術(shù)與平臺(tái)間的協(xié)同合作,構(gòu)建一個(gè)更加繁榮、安全和高效的 Linux 軟件生態(tài)環(huán)境。
-
Linux
+關(guān)注
關(guān)注
87文章
11509瀏覽量
213751 -
代碼
+關(guān)注
關(guān)注
30文章
4900瀏覽量
70722 -
軟件包
+關(guān)注
關(guān)注
0文章
111瀏覽量
11934
原文標(biāo)題:如意玲瓏應(yīng)用構(gòu)建指南(一):規(guī)范體系與配置文件全解析
文章出處:【微信號(hào):linux_deepin,微信公眾號(hào):深度操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
labview基礎(chǔ)知識(shí)
干貨 | 信號(hào)鏈基礎(chǔ)知識(shí)合輯 1-10
Blackfin應(yīng)用程序開(kāi)發(fā)基礎(chǔ)知識(shí)
通信基礎(chǔ)知識(shí)教程
電子電路基礎(chǔ)知識(shí)
計(jì)算機(jī)基礎(chǔ)知識(shí)介紹
使用Eclipse基礎(chǔ)知識(shí)
電源管理基礎(chǔ)知識(shí)電源管理基礎(chǔ)知識(shí)電源管理基礎(chǔ)知識(shí)

使用Kotlin構(gòu)建Android應(yīng)用的基礎(chǔ)知識(shí)
優(yōu)質(zhì)LDO基礎(chǔ)知識(shí)分享
如意玲瓏社區(qū)2024年度工作總結(jié)

如何在玲瓏容器中編譯qBittorrent并測(cè)試運(yùn)行

如意玲瓏應(yīng)用構(gòu)建規(guī)則實(shí)用案例

評(píng)論