Arch Linux 簡易打包指南


本文時代久遠,請參閱更可靠的:Arch User Repository (簡體中文) - 分享和維護軟件包


 

這兩天給 Kreogist µ 打 Arch Linux 包,照着 wiki 跟着搞,同時在肥貓和 Wicast C 及暴君還有 jimmy66 等強力大腿及小伙伴的支持下,幾番折騰終於打好了,也算是入了個門。

搞完過來發現也算簡單,總體來說其實就是一個 PKGBUILD 文件的編寫。就着給 µ 打的這個包寫個簡單指南。在寫的時候實在太不知道怎么寫的地方還可以直接參考一下其他軟件包的 PKGBUILD 是怎么寫的我才不會說呢。

編寫 PKGBUILD

在最開頭,復制一份原型: /usr/share/pacman/PKGBUILD.proto(同目錄下也有其他特別類型的原型),之后就從這個文件開始編寫啦。

先讀完文件開頭那段注釋,然后刪掉它~

Maintainer

最開頭一行注釋是維護者的信息,按照它提供的格式填寫上有效的信息即可。

pkgname

軟件包的名字。只能用 小寫字母、數字和@ . _ + - 這些字符,且不允許用.或者-作開頭。

另外不要和 AUR 甚至是官方倉庫里面的軟件包重名了(´・ω・`)

pkgver

軟件包的版本,就是你打包的那個軟件的版本。可以使用數字和小數點,以及其它字符。進一步的規則可參考:VCS package guidelines - ArchWiki

pkgrel

軟件包發行號,一般設為 1,如果你因為某些原因給同版本號的軟件進行反復打包,那么每次打包的時候 pkgrel 就應該在原基礎上遞增一個數字,而在打包新的版本的時候,應該重新設為 1。

epoch

強行干涉包的新舊關系,擁有更大的 epoch 值的包會被認做更新的包(此時無視版本號),可以用在如版本號風格改變等需要的時候。默認值為 0,取值為正整數。一般不會用到。

pkgdesc

軟件包的描述信息,最好一句話,且不包含軟件的名字。

arch

表示支持的 Arch Linux 的架構,比如 i686x86_64,如果包與平台無關的話就填 any

url

與軟件包相關的鏈接,一般是項目首頁什么的。

license

軟件發布協議,如果是常見的 GPL 的話可以對照下面填寫:

  • (L)GPL - (L)GPLv2 及更新版本。
  • (L)GPL2 - 僅 (L)GPL2
  • (L)GPL3 - (L)GPL3 及更新版本

depends

這是非常重要的一項,需要正確填寫上軟件的依賴。

對於直接發布可執行程序的話,可以通過 ldd 來看程序連接了哪些庫文件,結合搜索判斷出具體依賴是什么軟件包。你可以用谷歌在 https://www.archlinux.org 上搜索具體庫的文件名,一般都能夠找到對應的軟件包。

如果你已經用 makepkg 打出了 .tar.xz 的包,也可以用 Namcap 來檢查依賴是否存在問題,它會提供一些有用的信息幫助修正依賴。對於他的輸出含義可以直接參考 ArchWiki

多測試多測試,確保依賴真的沒問題。

source

構建軟件包需要的文件。可以是一個本地文件,也可以是一個遠程文件。 makepkg 會在構建包的時候自動下載填寫的遠程文件,並且會自動解包壓縮文件。

md5sums

對應的 source 里面文件的 md5 校驗碼。

package()

在構架包的時候執行的函數。你需要把安裝軟件對應的操作寫在這里。函數會在一個 fakeroot 環境下執行,對應的 root 目錄就是 $pkgdir,比如你有一個可執行文件名為 $pkgname 要安裝到 /usr/bin 下面,對應的命令就可以類似這么寫:

install -m=775 $pkgname "${pkgdir}/usr/bin"

-m 選項表示目標文件的權限,和 chmod 參數同理。

常用目錄

目錄 用途
/etc 系統關鍵配置文件,如果件有多個,應該創建合適的子目錄來存放
/usr/bin 二進制文件
/usr/lib
/usr/include 頭文件
/usr/lib/{pkg} 模塊,插件等
/usr/share/doc/{pkg} 應用程序文檔
/usr/share/info GNU Info 系統文件
/usr/share/man 手冊
/usr/share/{pkg} 程序數據
/var/lib/{pkg} 應用持久數據
/etc/{pkg} {pkg}的配置文件
/opt/{pkg} 大的獨立程序,例如 Java
/usr/share/applications/ Desktop Entry (.desktop) 文件
/usr/share/icons/ 圖標,存在該目錄下對應子目錄位置

不該碰的目錄:

  • /dev
  • /home
  • /srv
  • /media
  • /mnt
  • /proc
  • /root
  • /selinux
  • /sys
  • /tmp
  • /var/tmp

構建/調試包

在 PKGBUILD 所在目錄下執行 makepkg 可以構建出對應的軟件包,推薦用 namcap 檢測一下構建出來的包有沒有更顯著的問題。

然后你可以用 pacman -U 命令安裝它,看看會不會發生什么奇怪的事情,以及軟件是否正常等。

當然還有可能因為 PKGBUILD 沒寫好,直接就報錯不干了,這個時候需要順着錯誤信息去修正 PKGBUILD。

發布到 AUR

在 PKGBUILD 所在目錄執行 makepkg --source,會生成 .src.tar.gz 源碼包,這就是需要上傳到 AUR 的東西,注意不要把任何二進制文件加入源碼包。

AUR (Arch User Repository) 注冊(登入)帳號。進入 Submit 頁面,選擇好軟件包對應的分類,然后添加源碼包上傳即可。

即使你是要更新一個包,也只需要直接在 Submit 頁面上傳,包的信息 AUR 會自己處理。

如果覺得每次上傳太麻煩,你可以嘗試一下 aurupload 來簡化發布。

參考文檔/維基

需要更詳盡的內容以及更復雜的打包請參考以下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM