在Linux生態(tài)中,軟件包的分發(fā)與管理一直是開發(fā)者與用戶關(guān)注的焦點(diǎn)。如意玲瓏(Linyaps)作為一種新興的容器化應(yīng)用格式,憑借其輕量化、強(qiáng)隔離、跨發(fā)行版兼容等特性,正在為 Linux 應(yīng)用生態(tài)注入新的活力。無論是開發(fā)者還是技術(shù)愛好者,掌握玲瓏應(yīng)用的構(gòu)建方法都至關(guān)重要。
本篇作為“如意玲瓏應(yīng)用構(gòu)建從入門到實(shí)戰(zhàn)”系列的第一章,將帶您系統(tǒng)梳理玲瓏應(yīng)用構(gòu)建的核心基礎(chǔ)知識(shí),涵蓋構(gòu)建流程、規(guī)范要求與關(guān)鍵配置文件。通過理解這些基礎(chǔ)概念,您將能夠?yàn)楹罄m(xù)的實(shí)操教程打下堅(jiān)實(shí)根基,從容應(yīng)對(duì)從代碼到安裝包的每一步挑戰(zhàn)。
01玲瓏應(yīng)用構(gòu)建基本步驟
在正式開始構(gòu)建一個(gè)玲瓏應(yīng)用工程前, 我們需要了解一個(gè)玲瓏應(yīng)用從資源(源代碼、二進(jìn)制文件等)輸入到應(yīng)用安裝包導(dǎo)出所經(jīng)過的基本步驟,來確定我們需要準(zhǔn)備哪些必要文件。
玲瓏應(yīng)用構(gòu)建基本流程
獲取構(gòu)建目標(biāo)源文件(開源項(xiàng)目源代碼、應(yīng)用二進(jìn)制文件等);
根據(jù)源文件判斷玲瓏應(yīng)用構(gòu)建類型, 選擇合適的構(gòu)建方案;
準(zhǔn)備符合要求的玲瓏構(gòu)建環(huán)境;
按照構(gòu)建類型及源代碼內(nèi)容定制構(gòu)建配置文件 linglong.yaml ;
準(zhǔn)備應(yīng)用所使用的通用類資源,圖標(biāo)以及其他非二進(jìn)制資源。
02玲瓏應(yīng)用構(gòu)建工程所需材料
結(jié)合上述的知識(shí),我們可以了解到一個(gè)玲瓏應(yīng)用在構(gòu)建的全過程中,主要涉及到以下的文件:
玲瓏應(yīng)用構(gòu)建工程配置文件 linglong.yaml;
應(yīng)用源代碼/需要封裝的二進(jìn)制文件等資源;
非二進(jìn)制文件等通用資源。
03玲瓏應(yīng)用遵循的主流規(guī)范
每一個(gè) Linux 桌面軟件包管理方案為了能夠保障完整的功能和良好的體驗(yàn),均需要遵守軟件包管理方案提出的各類規(guī)范要求以最大限度發(fā)揮軟件包管理方案的功能并保障應(yīng)用生態(tài)體驗(yàn)。 如意玲瓏也并不總是特立獨(dú)行, 需要滿足一定的規(guī)范來保障如意玲瓏生態(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ù)不同尺寸歸類到 $PREFIX/share/icons/hicolor/ 目錄下;
玲瓏應(yīng)用容器中使用 XDG_DATA_DIRS 等變量, 支持讀寫宿主機(jī)中的用戶目錄;
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)境類型而異:
foundation 類:在玲瓏容器中映射為普通系統(tǒng)路徑 /usr/bin、/usr/include 等, 作為基礎(chǔ)運(yùn)行系統(tǒng)環(huán)境存在;
runtime 類:在玲瓏容器中映射為runtime容器路徑 /runtime/usr/bin /、runtime/usr/include 等,作為基礎(chǔ)運(yùn)行系統(tǒng)環(huán)境存在。
默認(rèn)情況下, 玲瓏容器內(nèi)部的環(huán)境變量已自動(dòng)處理好路徑識(shí)別問題, 如:
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足要求。
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à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)用唯一英文名稱或玲瓏應(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)建類型影響的字段我們稱為全局字段, 主要有以下參考的規(guī)范。
1. 一個(gè)可以正常開始構(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ù)滿足程序運(yùn)行要求時(shí), 此模塊可刪除 |
command | 玲瓏應(yīng)用容器啟動(dòng)時(shí)執(zhí)行的命令, 與 desktop 文件的 Exec 字段內(nèi)容一致 |
sources | 玲瓏應(yīng)用構(gòu)建工程源文件類型 |
build | 玲瓏應(yīng)用構(gòu)建工程將要執(zhí)行的構(gòu)建規(guī)則 |
package模塊中存在數(shù)個(gè)子模塊:
子模塊 | 解釋 |
id | 玲瓏應(yīng)用 id/包名 |
name | 玲瓏應(yīng)用名稱, 使用英文名稱 |
version | 玲瓏應(yīng)用版本號(hào) |
kind | 玲瓏應(yīng)用類型, 默認(rèn)為app |
description | 玲瓏應(yīng)用描述 |
2. 玲瓏應(yīng)用遵循 $PREFIX 路徑規(guī)則,該變量自動(dòng)生成,應(yīng)用所有相關(guān)文件需存放于此目錄下. 構(gòu)建規(guī)則中若有需要涉及安裝文件的操作均需要安裝到 $PREFIX 路徑下。
其中$PREFIX 變量名即為填寫的實(shí)際內(nèi)容,請(qǐng)勿使用絕對(duì)路徑或任何具有絕對(duì)值作用的內(nèi)容代替。
3. 玲瓏應(yīng)用目前遵循四位數(shù)字的版本號(hào)命名規(guī)則,不符合規(guī)則無法啟動(dòng)構(gòu)建工程
4. base、runtime 版本支持自動(dòng)匹配最新版本尾號(hào),版本號(hào)可以僅填寫版本號(hào)的前三位數(shù)字,如:
當(dāng) base org.deepin.foundation 同時(shí)提供 23.0.0.28、23.0.0.29, 若 linglong.yaml 中僅填寫:
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)建工程配置文件案例來進(jìn)行適配修改。
詳細(xì)可參考:https://linyaps.org.cn/guide/start/whatis.html
5.2 定制化字段
根據(jù)玲瓏應(yīng)用構(gòu)建工程源文件類型, 又可將玲瓏應(yīng)用構(gòu)建工程劃分為本地文件文件構(gòu)建和 git 源碼倉(cāng)庫(kù)拉取構(gòu)建,不同類型則需要填寫不同的 linglong.yaml。
玲瓏應(yīng)用構(gòu)建工程源文件類型 sources 主要支持這幾種類型: git、local、file、archive。
完整說明可參考:https://linyaps.org.cn/guide/start/whatis.html 5.2.1git 拉取源碼編譯模式 當(dāng)玲瓏應(yīng)用構(gòu)建工程需要通過 git 拉取開源項(xiàng)目倉(cāng)庫(kù)資源到本地進(jìn)行構(gòu)建時(shí), 此事 sources 應(yīng)當(dāng)設(shè)置為 git 類型, 并根據(jù)要求填寫 linglong.yaml。并需要根據(jù)規(guī)范編寫 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
名稱 | 描述 |
kind | 源文件類型 |
url | 需要通過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)簽, 或拉取主線 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 類型, 并根據(jù)要求填寫 linglong.yaml,此時(shí)需要根據(jù)規(guī)范編寫 sources 與 build 模塊。
1. sources示例
sources: source: - kind: local name: "qBittorrent"
名稱 | 描述 |
kind | 源文件類型 |
name | 源文件名稱標(biāo)識(shí), 不具備實(shí)際用途 |
注意,當(dāng) kind 應(yīng)當(dāng)設(shè)置為 local 類型時(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ī)則支持多種寫法以模擬人為操作。
注意需要確保此構(gòu)建規(guī)則所有步驟均可以正常被執(zhí)行, 否則將會(huì)中斷當(dāng)次構(gòu)建任務(wù)。
5.2.3容器內(nèi)部手動(dòng)操作模式
若計(jì)劃直接進(jìn)入玲瓏容器手動(dòng)操作而不是通過構(gòu)建規(guī)則文件 linglong.yaml,那么應(yīng)該參考 本地資源操作模式填寫 linglong.yaml
sources 部分寫法與本地資源操作模式一致;
由于使用手動(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ī)避常見陷阱的“指南針”。
在接下來的系列推文中,我們將深入實(shí)戰(zhàn)環(huán)節(jié)。準(zhǔn)備好您的開發(fā)環(huán)境,下一站,我們將帶大家在玲瓏容器中編譯基于 Qt5 的開源應(yīng)用!
關(guān)于項(xiàng)目
如意玲瓏(Linyaps)是一種新型的獨(dú)立包管理工具集,專注于解決 Linux 系統(tǒng)下由傳統(tǒng)軟件包格式的復(fù)雜性和交叉依賴關(guān)系引起的兼容性問題。項(xiàng)目通過先進(jìn)的隔離技術(shù),將應(yīng)用與系統(tǒng)完全解耦,從根本上解決因環(huán)境變化引發(fā)的應(yīng)用兼容性問題,實(shí)現(xiàn)“一個(gè)架構(gòu),一次構(gòu)建”,致力于簡(jiǎn)化軟件開發(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)注
88文章
11575瀏覽量
216583 -
代碼
+關(guān)注
關(guān)注
30文章
4921瀏覽量
72204 -
軟件包
+關(guān)注
關(guān)注
0文章
112瀏覽量
12049
原文標(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)用程序開發(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)論