Arch Linux 簡易打包指南
這兩天給 Kreogist μ 打 Arch Linux 包,照著 wiki 跟著搞,同時在肥貓和 Wicast C 及暴君還有 jimmy66 等強力大腿及小伙伴的支持下,幾番折騰終于打好了,也算是入了個門。
搞完過來發現也算簡單,總體來說其實就是一個PKGBUILD文件的編寫。就著給 μ 打的這個包寫個簡單指南。在寫的時候實在太不知道怎么寫的地方還可以直接參考一下其他軟件包的 PKGBUILD 是怎么寫的我才不會說呢。
編寫 PKGBUILD
在最開頭,復制一份原型:/usr/share/pacman/PKGBUILD.proto(同目錄下也有其他特別類型的原型),之后就從這個文件開始編寫啦。
先讀完文件開頭那段注釋,然后刪掉它~
Maintainer
最開頭一行注釋是維護者的信息,按照它提供的格式填寫上有效的信息即可。
pkgname
軟件包的名字。只能用 小寫字母、數字和@ . _ + -這些字符,且不允許用.或者-作開頭。
另外不要和 AUR 甚至是官方倉庫里面的軟件包重名了(′?ω?`)
pkgver
軟件包的版本,就是你打包的那個軟件的版本。可以使用數字和小數點,以及其它字符。
pkgrel
軟件包發行號,一般設為 1,如果你因為某些原因給同版本號的軟件進行反復打包,那么每次打包的時候 pkgrel 就應該在原基礎上遞增一個數字,而在打包新的版本的時候,應該重新設為 1。
epoch
強行干涉包的新舊關系,擁有更大的 epoch 值的包會被認做更新的包(此時無視版本號),可以用在如版本號風格改變等需要的時候。默認值為 0,取值為正整數。一般不會用到。
pkgdesc
軟件包的描述信息,最好一句話,且不包含軟件的名字。
arch
表示支持的 Arch Linux 的架構,比如i686、x86_64,如果包與平臺無關的話就填any。
url
與軟件包相關的鏈接,一般是項目首頁什么的。
license
軟件發布協議,如果是常見的 GPL 的話可以對照下面填寫:
- (L)GPL - (L)GPLv2 及更新版本。
- (L)GPL2 - 僅 (L)GPL2
- (L)GPL3 - (L)GPL3 及更新版本 </ul>
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參數同理。
常用目錄
目錄 | 用途 | </tr> </tbody>|||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
/etc | 系統關鍵配置文件,如果件有多個,應該創建合適的子目錄來存放 | </tr>|||||||||||||||||||||||||
/usr/bin | 二進制文件 | </tr>|||||||||||||||||||||||||
/usr/lib | 庫 | </tr>|||||||||||||||||||||||||
/usr/include | 頭文件 | </tr>|||||||||||||||||||||||||
/usr/lib/{pkg} | 模塊,插件等 | </tr>|||||||||||||||||||||||||
/usr/share/doc/{pkg} | 應用程序文檔 | </tr>|||||||||||||||||||||||||
/usr/share/info | GNU Info 系統文件 | </tr>|||||||||||||||||||||||||
/usr/share/man | 手冊 | </tr>|||||||||||||||||||||||||
/usr/share/{pkg} | 程序數據 | </tr>|||||||||||||||||||||||||
/var/lib/{pkg} | 應用持久數據 | </tr>|||||||||||||||||||||||||
/etc/{pkg} | {pkg}的配置文件 | </tr>|||||||||||||||||||||||||
/opt/{pkg} | 大的獨立程序,例如 Java | </tr>|||||||||||||||||||||||||
/usr/share/applications/ | Desktop Entry (.desktop) 文件 | </tr>|||||||||||||||||||||||||
/usr/share/icons/ | 圖標,存在該目錄下對應子目錄位置 | </tr> </tbody> </table>