在Linux生態(tài)中,軟件包的分發(fā)與管理一直是開發(fā)者與用戶關注的焦點。如意玲瓏(Linyaps)作為一種新興的容器化應用格式,憑借其輕量化、強隔離、跨發(fā)行版兼容等特性,正在為 Linux 應用生態(tài)注入新的活力。無論是開發(fā)者還是技術愛好者,掌握玲瓏應用的構建方法都至關重要。
本篇作為“如意玲瓏應用構建從入門到實戰(zhàn)”系列的第一章,將帶您系統(tǒng)梳理玲瓏應用構建的核心基礎知識,涵蓋構建流程、規(guī)范要求與關鍵配置文件。通過理解這些基礎概念,您將能夠為后續(xù)的實操教程打下堅實根基,從容應對從代碼到安裝包的每一步挑戰(zhàn)。
01玲瓏應用構建基本步驟
在正式開始構建一個玲瓏應用工程前, 我們需要了解一個玲瓏應用從資源(源代碼、二進制文件等)輸入到應用安裝包導出所經過的基本步驟,來確定我們需要準備哪些必要文件。
玲瓏應用構建基本流程
獲取構建目標源文件(開源項目源代碼、應用二進制文件等);
根據源文件判斷玲瓏應用構建類型, 選擇合適的構建方案;
準備符合要求的玲瓏構建環(huán)境;
按照構建類型及源代碼內容定制構建配置文件 linglong.yaml ;
準備應用所使用的通用類資源,圖標以及其他非二進制資源。
02玲瓏應用構建工程所需材料
結合上述的知識,我們可以了解到一個玲瓏應用在構建的全過程中,主要涉及到以下的文件:
玲瓏應用構建工程配置文件 linglong.yaml;
應用源代碼/需要封裝的二進制文件等資源;
非二進制文件等通用資源。
03玲瓏應用遵循的主流規(guī)范
每一個 Linux 桌面軟件包管理方案為了能夠保障完整的功能和良好的體驗,均需要遵守軟件包管理方案提出的各類規(guī)范要求以最大限度發(fā)揮軟件包管理方案的功能并保障應用生態(tài)體驗。 如意玲瓏也并不總是特立獨行, 需要滿足一定的規(guī)范來保障如意玲瓏生態(tài)得以持續(xù)穩(wěn)步發(fā)展。目前如意玲瓏生方案遵守以下主流的規(guī)范:
Freedesktop XDG 規(guī)范;
玲瓏應用目錄結構規(guī)范;
玲瓏應用構建工程配置文件 linglong.yaml 規(guī)范。
3.1 Freedesktop XDG 規(guī)范
玲瓏應用解決方案遵循 Freedesktop XDG 規(guī)范,一款正常的圖形化應用應具備圖標文件、desktop 文件并符合 Freedesktop XDG 規(guī)范;
玲瓏應用圖標文件應該根據不同尺寸歸類到 $PREFIX/share/icons/hicolor/ 目錄下;
玲瓏應用容器中使用 XDG_DATA_DIRS 等變量, 支持讀寫宿主機中的用戶目錄;
3.2 玲瓏應用目錄結構規(guī)范
玲瓏應用遵循 $PREFIX 路徑規(guī)則,該變量自動生成, 應用所有相關文件需存放于此目錄下, 該目錄層級下存在 bin、share 等目錄;
玲瓏應用容器中的應用將不被允許讀取宿主機中系統(tǒng)目錄中的二進制文件、運行庫;
在構建工程中, 構建工程目錄將會被映射到玲瓏容器中, 掛載為 /project;
玲瓏應用容器中運行庫、頭文件所在目錄將根據運行環(huán)境類型而異:
foundation 類:在玲瓏容器中映射為普通系統(tǒng)路徑 /usr/bin、/usr/include 等, 作為基礎運行系統(tǒng)環(huán)境存在;
runtime 類:在玲瓏容器中映射為runtime容器路徑 /runtime/usr/bin /、runtime/usr/include 等,作為基礎運行系統(tǒng)環(huán)境存在。
默認情況下, 玲瓏容器內部的環(huá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
通用表達為:
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玲瓏應用構建工程通用資源的規(guī)范
在玲瓏應用構建工程中,不同的資源文件均需要遵循相關規(guī)范以確保構建、體驗能夠滿足要求。
4.1 icon 圖標目錄規(guī)范
依據玲瓏遵循的 Freedesktop XDG 規(guī)范及玲瓏應用目錄結構規(guī)范,圖標根據不同尺寸放置在對應的目錄中。 主流的非矢量圖標尺寸有: 16x16、24x24、32x32、48x48、128x128、256x256、512x512。為保障圖標在系統(tǒng)中能夠獲得較佳的體驗效果, 因此需要至少一個尺寸不小于 128x128 的非矢量圖標文件, 矢量圖標則不存在該限制。
因此, 一款玲瓏應用安裝目錄中, icons 圖標目錄應為以下示例,其中scalable 目錄用于放置矢量圖標文件, 一般為 .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
假設你的玲瓏應用同時提供尺寸為 128x128 的非矢量圖標文件 linyaps-app-demo.png 和 128x128 的矢量圖標文件 linyaps-app-demo.svg,在玲瓏容器中應當表現為以下狀態(tài):
$PREFIX/share/icons/hicolor/128x128/apps/linyaps-app-demo.png $PREFIX/share/icons/hicolor/scalable/apps/linyaps-app-demo.svg注意,為了避免圖標沖突被覆蓋,圖標文件名請使用應用唯一英文名稱或玲瓏應用id。
4.2 desktop 文件規(guī)范
玲瓏應用兼容大部分符合 Freedesktop XDG 規(guī)范的 desktop 啟動文件, 其中有以下字段需要額外注意:
字段 | 值要求 |
Exec | 該值用于設置點擊此 desktop 文件時執(zhí)行的指令, 需要與 linglong.yaml 中的 command 值保持一致。 |
Icon | 該值用于設置該 desktop 文件顯示的應用圖標, 需要與 icons 圖標目錄規(guī)范中的圖標文件名一致, 此值不需要文件名后綴。 |
因此, 一個符合玲瓏應用規(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玲瓏應用構建工程 linglong.yaml 規(guī)范
正如其他傳統(tǒng)包管理套件一樣, 手動創(chuàng)建一個玲瓏應用構建工程需要設置構建規(guī)則文件 linglong.yaml,在構建規(guī)則中, 則根據用途劃分為全局字段及定制化字段。
請注意,案例中 linglong.yaml 正文內所有空格符號、占位符均為有效字符, 請勿刪除或變更格式。
5.1 全局字段規(guī)范
在 linglong.yaml 中, 對于不受構建類型影響的字段我們稱為全局字段, 主要有以下參考的規(guī)范。
1. 一個可以正常開始構建工程的 linglong.yaml應包含以下的關鍵部分:
模塊 | 解釋 |
version | 構建工程版本號 |
package | 玲瓏應用基本信息 |
base | 玲瓏應用容器基礎環(huán)境及版本設置, 基礎環(huán)境中包含了部分基礎運行庫 |
runtime | 玲瓏應用運行庫 runtime 及版本設置, 當 base 中的基礎運行庫滿足程序運行要求時, 此模塊可刪除 |
command | 玲瓏應用容器啟動時執(zhí)行的命令, 與 desktop 文件的 Exec 字段內容一致 |
sources | 玲瓏應用構建工程源文件類型 |
build | 玲瓏應用構建工程將要執(zhí)行的構建規(guī)則 |
package模塊中存在數個子模塊:
子模塊 | 解釋 |
id | 玲瓏應用 id/包名 |
name | 玲瓏應用名稱, 使用英文名稱 |
version | 玲瓏應用版本號 |
kind | 玲瓏應用類型, 默認為app |
description | 玲瓏應用描述 |
2. 玲瓏應用遵循 $PREFIX 路徑規(guī)則,該變量自動生成,應用所有相關文件需存放于此目錄下. 構建規(guī)則中若有需要涉及安裝文件的操作均需要安裝到 $PREFIX 路徑下。
其中$PREFIX 變量名即為填寫的實際內容,請勿使用絕對路徑或任何具有絕對值作用的內容代替。
3. 玲瓏應用目前遵循四位數字的版本號命名規(guī)則,不符合規(guī)則無法啟動構建工程
4. base、runtime 版本支持自動匹配最新版本尾號,版本號可以僅填寫版本號的前三位數字,如:
當 base org.deepin.foundation 同時提供 23.0.0.28、23.0.0.29, 若 linglong.yaml 中僅填寫:
base: org.deepin.foundation/23.0.0
那么在啟動玲瓏應用構建工程時, 將會默認采用最高版本號的 23.0.0.29。
5. 玲瓏應用構建工程配置文件目前不直接兼容其他包構建工具的配置文件,需要根據構建工程配置文件案例來進行適配修改。
詳細可參考:https://linyaps.org.cn/guide/start/whatis.html
5.2 定制化字段
根據玲瓏應用構建工程源文件類型, 又可將玲瓏應用構建工程劃分為本地文件文件構建和 git 源碼倉庫拉取構建,不同類型則需要填寫不同的 linglong.yaml。
玲瓏應用構建工程源文件類型 sources 主要支持這幾種類型: git、local、file、archive。
完整說明可參考:https://linyaps.org.cn/guide/start/whatis.html 5.2.1git 拉取源碼編譯模式 當玲瓏應用構建工程需要通過 git 拉取開源項目倉庫資源到本地進行構建時, 此事 sources 應當設置為 git 類型, 并根據要求填寫 linglong.yaml。并需要根據規(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拉取的源代碼倉庫地址, 該倉庫需要支持git功能. 當網絡狀態(tài)不佳時, 可采用鏡像地址代替 |
version | 指定源代碼倉庫的版本號, 即 tag 標簽, 或拉取主線 master |
commit | 根據該倉庫 commit 變動歷史拉取源碼, 此處填入commit對應的值, 將會應用該倉庫截止本commit 的所有變更. *此字段優(yōu)先級高于 version, 請勿填入 version 合并時間之后的任何 commit |
該模式支持同時添加多個 git 倉庫作為 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
此模塊為構建規(guī)則正文,路徑遵守玲瓏應用目錄結構規(guī)范。
在 sources 拉取到本地后, 倉庫文件將會存放在 /project/linglong/sources 目錄中,此時不同倉庫目錄以 xxx.git 命名;支持運用 git patch 功能對源代碼進行便捷維護。
5.2.2本地資源操作模式
當玲瓏應用構建工程需要對構建目錄中的文件操作時,此時 kind 應當設置為 local 類型, 并根據要求填寫 linglong.yaml,此時需要根據規(guī)范編寫 sources 與 build 模塊。
1. sources示例
sources: source: - kind: local name: "qBittorrent"
名稱 | 描述 |
kind | 源文件類型 |
name | 源文件名稱標識, 不具備實際用途 |
注意,當 kind 應當設置為 local 類型時, 構建工程將不會對任何源文件進行操作。
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此模塊為構建規(guī)則正文,路徑遵守玲瓏應用目錄結構規(guī)范,此時 build 規(guī)則支持多種寫法以模擬人為操作。
注意需要確保此構建規(guī)則所有步驟均可以正常被執(zhí)行, 否則將會中斷當次構建任務。
5.2.3容器內部手動操作模式
若計劃直接進入玲瓏容器手動操作而不是通過構建規(guī)則文件 linglong.yaml,那么應該參考 本地資源操作模式填寫 linglong.yaml
sources 部分寫法與本地資源操作模式一致;
由于使用手動操作, 因此不需要完整且可以正常被執(zhí)行的 build 規(guī)則, 此時 linglong.yaml 用于生成符合描述的玲瓏容器而不是執(zhí)行所有任務,具體操作將在后續(xù)關于容器內部構建文件的案例中詳細展示。
以上便是玲瓏應用構建的一些基礎知識,相信您已對玲瓏應用構建的規(guī)范、目錄結構、資源配置及關鍵文件(如linglong.yaml)有了較全面的認知。這些知識不僅是構建流程的“地圖”,更是規(guī)避常見陷阱的“指南針”。
在接下來的系列推文中,我們將深入實戰(zhàn)環(huán)節(jié)。準備好您的開發(fā)環(huán)境,下一站,我們將帶大家在玲瓏容器中編譯基于 Qt5 的開源應用!
關于項目
如意玲瓏(Linyaps)是一種新型的獨立包管理工具集,專注于解決 Linux 系統(tǒng)下由傳統(tǒng)軟件包格式的復雜性和交叉依賴關系引起的兼容性問題。項目通過先進的隔離技術,將應用與系統(tǒng)完全解耦,從根本上解決因環(huán)境變化引發(fā)的應用兼容性問題,實現“一個架構,一次構建”,致力于簡化軟件開發(fā)流程、降低維護成本、加強數據安全,促進技術與平臺間的協同合作,構建一個更加繁榮、安全和高效的 Linux 軟件生態(tài)環(huán)境。
-
Linux
+關注
關注
87文章
11420瀏覽量
212317 -
代碼
+關注
關注
30文章
4880瀏覽量
69995 -
軟件包
+關注
關注
0文章
108瀏覽量
11845
原文標題:如意玲瓏應用構建指南(一):規(guī)范體系與配置文件全解析
文章出處:【微信號:linux_deepin,微信公眾號:深度操作系統(tǒng)】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
相關推薦
干貨 | 信號鏈基礎知識合輯 1-10
Blackfin應用程序開發(fā)基礎知識
通信基礎知識教程
使用Kotlin構建Android應用的基礎知識
如意玲瓏社區(qū)2024年度工作總結

評論