Arch 打包準則
在為Arch Linux構建軟件包時,您應該遵循以下的軟件包指導原則,尤其是當打算貢獻軟件包至Arch Linux時。同時需要閱讀PKGBUILD 和 makepkg 手冊。
PKGBUILD樣例[編輯 | 編輯原始碼]
# Maintainer: Your Name <youremail@domain.com> pkgname=NAME pkgver=VERSION pkgrel=1 pkgdesc="" arch=() url="" license=('GPL') groups=() depends=() makedepends=() optdepends=() provides=() conflicts=() replaces=() backup=() options=() install= changelog= source=($pkgname-$pkgver.tar.gz) noextract=() md5sums=() #autofill using updpkgsums build() { cd "$pkgname-$pkgver" ./configure --prefix=/usr make } package() { cd "$pkgname-$pkgver" make DESTDIR="$pkgdir/" install }
可以從 pacman 包的 /usr/share/pacman
目錄中找到其它原型。
打包規則[編輯 | 編輯原始碼]
- 永遠別將軟件包安裝至
/usr/local
- 除非非用不可,否則絕對不要在
PKGBUILD
中自定義和使用新的變量,以避免和 makepkg 本身的變量衝突。 - 即便在非用不可的情況下,我們也強烈建議給自定義變量名前加上下劃線 (
_
)。例如:_customvariable=
- 任何情況下都要避免使用
/usr/libexec/
,應該使用/usr/lib/${pkgname}/
。 - 包信息文件中的
packager
字段可以通過修改/etc/makepkg.conf
文件由編譯者進行自定義。使用~/.makepkg.conf
也可以達到此目的。 - 所有安裝過程中所需輸出的重要的信息,都可以放到 .install 文件中。比如說如果某軟件包需要擴展的安裝步驟才能正常運行,你可以將這些步驟的介紹包含在.install文件中。
- 依賴包是最容易出現錯誤的地方。請花時間仔細核對,例如對動態可執行文件執行
ldd
,檢查腳本需要的工具,查看軟件文檔等。namcap 可以幫助你,它可以解析 PKGBUILD 和生成的打包文件,報告權限錯誤、缺少依賴、過多依賴等常見問題。 - 任何運行該軟件包不需要,或者該軟件包的通用功能不需要的可選依賴不要加入到depends中。這些信息應該加入optdepends 數組,例如:
optdepends=('cups: printing support' 'sane: scanners support' 'libgphoto2: digital cameras support' 'alsa-lib: sound support' 'giflib: GIF images support' 'libjpeg: JPEG images support' 'libpng: PNG images support')
- 例子取自
extra
中的 wine 軟件包。這些信息在安裝和升級時會自動打印,所以不要將這些信息加入 .install 文件。
- 在填寫軟件包描述(description)時,請不要使用下定義的方式。比如說, "Nedit is a text editor for X11" 應當簡寫為"A text editor for X11"。順便注意保持描述在80個字符以內.
- 儘量保持
PKGBUILD
文件中每行不超過100字符。 - 如果可能的話,從
PKGBUILD
文件中去掉空行(沒有設置變量值的行)(如provides
、replaces
等)
- 通常實踐建議按照上文中的
PKGBUILD
示例安排各變量順序。當然這不是強制性的,這裡唯一強制要求的是滿足正確的bash語法。 - 變量名可能包含空格時,請使用引號,例如
"$pkgdir"
和"$srcdir"
. - 請確保軟件包的完整性,確保 校驗變量 包含正確的數值,可以通過
updpkgsums
工具進行更新。
軟件包命名[編輯 | 編輯原始碼]
- 軟件包應當僅包含字母或數字以及
@
,.
,_
,+
,-
,不能以-
和.
開頭,所有的字母應當保持小寫. - 軟件包的名稱不應該包含上游的主版本號,例如如果上游軟件包是 libfoo v2.3.4,不應該命名為 libfoo2。這樣在上游發布新的大版本時,就可以保留軟件包名和依賴可以保持不變。只有個別軟件包是例外,例如圖形庫 GTK 和 Qt。這些軟件升級後,應用程序需要花很長時間和經歷才能移植完成,所以系統需要同時安裝多個版本,軟件包名應該包含大版本號,比如 gtk2, gtk3, qt4, qt5. 如果出現大部分軟件包都可以同步升級,只有個別軟件沒有被 移植的情況,可以把老的軟件包命名為 libfoo1,而新的軟件包繼續使用 libfoo。
- 軟件包版本號應當和作者發行版號保持一致。如果需要的話,版本號可以包含字母(比如:nmap的版本就是2.54BETA32)。版本號裡不能包含連字符,只能允許字母、數字、下劃線、點號。
- Package releases(軟件包發行號) 僅和 Arch 相關. 這樣用戶就可以區分不同的編譯版本。發布號從1開始,軟件包被重新(打包)發布時 ,發行號將增加1。當新版本發布的時候,發行號(release)自動回到1。軟件包發布標記和軟件包版本標記遵從同樣的規則。
目錄[編輯 | 編輯原始碼]
- 配置文件 應該放置到
/etc
目錄.如果有多個配置文件,可以使用子目錄,以保持 /etc 簡潔。即 /etc/{pkgname}/,{pkgname}代表軟件包的名稱 (或者其他合適的名稱,比如apache使用的就是/etc/httpd/
).
- 軟件包文件應該安裝在下列常用目錄:
/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
- 軟件包不應該在下面目錄添加任何文件:
/bin
/sbin
/dev
/home
/srv
/media
/mnt
/proc
/root
/selinux
/sys
/tmp
/var/tmp
/run
Makepkg 的任務[編輯 | 編輯原始碼]
當您使用makepkg為您自己構建軟件包時,makepkg會自動執行如下功能:
- 檢查軟件包的依賴和構建依賴是否安裝
- 從服務器中下載源碼文件
- 校驗源碼文件的完整性
- 解壓源碼文件
- 打上必要的補丁(patch)
- 構建 軟件並以fake root身份安裝
- 從可執行文件中去掉符號標記
- 從可執行文件中去掉調試標記
- 壓縮手冊頁以及 info 頁,若存在
- 生成包信息文件(包含軟件包的基本信息)
- 壓縮 fake root成為軟件包文件(*.pkg.tar.xz)
- 生成的軟件包文件保存在配置的目的目錄中(默認在當前目錄)
架構[編輯 | 編輯原始碼]
如果該軟件包是針對特定架構編譯的,那麼 arch 數組應該包含 x86_64 ,否則使用 any 生成那些架構無關的包。
授權協議[編輯 | 編輯原始碼]
請參考 PKGBUILD#license
特殊包補充手冊[編輯 | 編輯原始碼]
請先閱讀上面的手冊 —— 大多數重點內容都在此頁上面部分列出來了,將不會在下面這些手冊中重複出現。這些特殊手冊是一些特殊類型的包的補充手冊,而不是取代本手冊。
Arch 打包準則
32 位 – CLR – CMake – Cross – DKMS – Eclipse – Electron – Font – Free Pascal – GNOME – Go – Haskell – Java – KDE – Kernel – Lisp – Meson – MinGW – Node.js – Nonfree – OCaml – Perl – PHP – Python – R – Ruby – Rust – VCS – Web – Wine
提交到 AUR 的軟件包必須額外滿足 AUR 提交守則.