通過《如意玲瓏應用構建指南(二):在玲瓏容器中編譯基于 Qt5 的開源應用》的學習后,相信大家已經基本了解了在玲瓏容器中通過怎樣的操作可以將基于 Qt5 的開源應用——qBittorrent 的項目源代碼編譯為可以運行的二進制程序文件。
今天, 我們在此基礎上補齊玲瓏應用構建基本步驟中的最后步驟——編寫一份完整的玲瓏應用構建工程配置文件 linglong.yaml, 主要實現以下的目標:
自動化拉取開源項目源代碼;
自動應用對于源代碼進行修改的 Patch;
自動執行編譯構建、安裝操作。
01前期準備
根據玲瓏應用構建工程通用資源的規范要求,我們應當為一款圖形化應用同時提供保障桌面用戶體驗的 icons 圖標文件及 desktop 啟動文件。因此,為了能夠編寫自動編譯 qBittorrent 的完整 linglong.yaml,需要額外準備以下材料:
非二進制文件通用資源,icons圖標、desktop文件;
主程序 qBittorrent 開源項目的倉庫 Git 信息、Tag 版本、Commit 信息;
第三方運行庫 libtorrent 開源項目的倉庫 Git 信息、Tag版本、Commit信息。
1.1 通用資源準備
由于在上節教程中我們在玲瓏容器內已經成功編譯并運行了 qBittorrent,并且這款應用在安裝到 $PREFIX 之后一并提供了 icons 目錄、desktop 啟動文件。
我們對這兩項進行檢查, 確認均符合 Freedesktop XDG 規范,因此我們僅需要直接從容器中復制到本地即可, 即復制到構建目錄 /project 中。
ziggy@linyaps23:/project/src/qBittorrent-release-4.6.7-szbt2/build$ ls $PREFIX/share/applications/ org.qbittorrent.qBittorrent.desktop
ziggy@linyaps23:/project/src/qBittorrent-release-4.6.7-szbt2/build$ ls $PREFIX/share/icons/hicolor/128x128/apps/ qbittorrent.png
于是, 我們得到了非二進制文件通用資源,為了方便被構建組件使用,我這里將這些文件放到了構建目錄的 template_app子目錄中,現在呈現此類結構:
template_app ├── linglong.yaml └── template_app ├── applications │ └── org.qbittorrent.qBittorrent.desktop ├── icons │ └── hicolor │ ├── 128x128 │ │ ├── apps │ │ │ └── qbittorrent.png │ │ └── status │ │ └── qbittorrent-tray.png │ └── scalable │ ├── apps │ │ └── qbittorrent.svg │ └── status │ ├── qbittorrent-tray-dark.svg │ ├── qbittorrent-tray-light.svg │ └── qbittorrent-tray.svg
1.2desktop 啟動文件定制
根據玲瓏應用構建工程通用資源的規范,我們需要確保當前的 desktop 文件符合相關規范。
我們打開從容器中導出的 desktop 文件,檢查 Exec 和 Icon 字段,得出以下結果:
[Desktop Entry] Categories=Network;FileTransfer;P2P;Qt; Exec=qbittorrent %U GenericName=BitTorrent client Comment=Download and share files over BitTorrent Icon=qbittorrent
Icon 字段值與圖標文件一致,符合規范;
Exec字段值不為玲瓏容器內編譯的結果, 需要修改為符合玲瓏應用構建工程通用資源的規范的內容,這里替換為絕對路徑指向容器中的具體二進制文件,用于喚醒容器并啟動該應用。
02構建?程配置?件 linglong.yaml
在準備圖形化應用所必備的通用資源后,我們著手編寫構建規則。
由于在上節教程中我們已經準備了一版簡單但不具備完整構建功能的 linglong.yaml,因此我們可以在其基礎上進行定制,現在是初始狀態:
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: LGPL-3.0-or-later version: "4.6.7.2" package: id: org.qbittorrent.qBittorrent name: "qBittorrent" version: 4.6.7.2 kind: app description: | qBittorrent binary base: org.deepin.foundation/23.0.0 runtime: org.deepin.Runtime/23.0.1 command: - /opt/apps/org.qbittorrent.qBittorrent/files/bin/qbittorrent sources: - kind: local name: "qBittorrent" build: | mkdir -p ${PREFIX}/bin/ ${PREFIX}/share/
2.1構建規則編寫 & 測試
為了能夠平滑過渡,我這里先將編譯指令導入構建規則,暫不引入自動拉取 Git 倉庫的內容,以確保我們編寫的構建規則準確可用。
由于不建議在構建規則中執行過多 tar指令,因此我這里在構建目錄下同時開啟兩個 Shell 窗口,分別用于玲瓏容器操作和普通操作。
以下是正式開始改造的過程:
通過普通操作窗口使用 git 將 qBittorrent 和 libtorrent-rasterbar 源碼拉取或解壓到構建目錄中,我這里通過源碼壓縮包單獨解壓到子目錄中:
ziggy@linyaps23:/media/szbt/Data/ll-build/QT/qBittorrent-local$ tar -xvf qBittorrent-4.6.7-git-origin-src.tar.zst -C src/ ziggy@linyaps23:/media/szbt/Data/ll-build/QT/qBittorrent-local$ tar -xvf libtorrent-rasterbar-2.0.9.tar.gz -C 3rd/
從玲瓏應用目錄結構規范得知, 構建目錄會被映射為 /project,,因此我們需要將上節課程中使用的手動編譯命令寫入 build 模塊中。
build: | mkdir -p ${PREFIX}/bin/ ${PREFIX}/share/ ##Build 3rd libs 注釋:進入 `libtorrent-rasterbar` 源碼目錄并編譯安裝到容器內 mkdir /project/3rd/libtorrent-rasterbar-2.0.9/build cd /project/3rd/libtorrent-rasterbar-2.0.9/build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX .. make -j$(nproc) make install ##Build main 注釋:進入 `qBittorrent` 源碼目錄并編譯安裝到容器內 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 ##Extract common res 注釋: 將通用文件復制安裝到容器對應目錄內, 符合 `玲瓏應用目錄結構規范` cp -rf /project/template_app/* ${PREFIX}/share/
在將此塊構建規則補全后,我們可以開始嘗試通過自動化構建來將本地源碼編譯為二進制程序并導出玲瓏應用安裝包 binary.layer 了。
注:由于此版配置文件不提供解壓、刪除功能,因此每次重新構建前均需要將這些目錄清空并重新解壓。
2.2 本地一站構建測試
在補全 build 模塊后, 此時的 linglong.yaml 狀態:
# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: LGPL-3.0-or-later version: "2" package: id: org.qbittorrent.qBittorrent name: "qBittorrent" version: 4.6.7.2 kind: app description: | qBittorrent binary base: org.deepin.foundation/23.0.0 runtime: org.deepin.Runtime/23.0.1 command: - /opt/apps/org.qbittorrent.qBittorrent/files/bin/qbittorrent source: - kind: local name: "qBittorrent" build: | ##Build 3rd libs mkdir -p ${PREFIX}/bin/ ${PREFIX}/share/ mkdir /project/3rd/libtorrent-rasterbar-2.0.9/build cd /project/3rd/libtorrent-rasterbar-2.0.9/build cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$PREFIX .. make -j$(nproc) make install ##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 ##Extract common res cp -rf /project/template_app/* ${PREFIX}/share/
此刻我們可以返回構建目錄,開始構建測試了,執行:
ziggy@linyaps23:/media/szbt/Data/ll-build/QT/qBittorrent-local$ ll-builder build -v
得益于在玲瓏容器中的編譯筆記,此次構建很快就成功結束了,我們執行以下指令來將容器導出為玲瓏應用安裝包 binary.layer:
ziggy@linyaps23:/media/szbt/Data/ll-build/QT/qBittorrent-local$ ll-builder export --layer
03本地構建結果測試
在得到玲瓏應用安裝包后,可以在不同支持玲瓏環境的主流發行版上嘗試體驗,來確認通過玲瓏容器構建的二進制程序是否存在通用性。
deepin 23
openKylin 2.0
Ubuntu 2404
OpenEuler 2403
由此可見,基于 Qt5 的開源應用--qBittorrent 構建完成后,在支持如意玲瓏應用方案的第三方發行版中可以成功運行!本教程至此結束,歡迎大家上手體驗!
關于項目
如意玲瓏(Linyaps)是一種新型的獨立包管理工具集,專注于解決 Linux 系統下由傳統軟件包格式的復雜性和交叉依賴關系引起的兼容性問題。項目通過先進的隔離技術,將應用與系統完全解耦,從根本上解決因環境變化引發的應用兼容性問題,實現“一個架構,一次構建”,致力于簡化軟件開發流程、降低維護成本、加強數據安全,促進技術與平臺間的協同合作,構建一個更加繁榮、安全和高效的 Linux 軟件生態環境。
-
開源
+關注
關注
3文章
3510瀏覽量
43192 -
容器
+關注
關注
0文章
503瀏覽量
22300 -
代碼
+關注
關注
30文章
4869瀏覽量
69905 -
編譯
+關注
關注
0文章
672瀏覽量
33455
原文標題:如意玲瓏應用構建指南(三):如意玲瓏應用構建規則實用案例
文章出處:【微信號:linux_deepin,微信公眾號:深度操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
【NanoPi M1試用體驗】開箱評測 小巧玲瓏
###神轟%>小巧玲瓏眼睛紅,地上蹦跳自家園。Fanny 范妮
(:小巧玲瓏眼睛紅,地上蹦跳自家園
工藝規則知識管理系統的研究與開發
推理規則鏈的確定性構建
玲瓏ISP處理器的主要技術特點
ARM中國發布首款ISP玲瓏監控系統
ARM中國發布 “玲瓏”ISP處理器
安謀科技發布“玲瓏”DPU和新一代VPU
如意玲瓏應用構建的基礎知識

評論