Arch 打包準則

出自 Arch Linux 中文维基

在為Arch Linux構建軟件包時,您應該遵循以下的軟件包指導原則,尤其是當打算貢獻軟件包至Arch Linux時。同時需要閱讀PKGBUILDmakepkg 手冊。

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文件中去掉空行(沒有設置變量值的行)(如providesreplaces等)
  • 通常實踐建議按照上文中的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 位CLRCMakeCrossDKMSEclipseElectronFontFree PascalGNOMEGoHaskellJavaKDEKernelLispMesonMinGWNode.jsNonfreeOCamlPerlPHPPythonRRubyRustVCSWebWine

提交到 AUR 的軟件包必須額外滿足 AUR 提交守則.