跳至內容

Arch 用戶軟體倉庫

出自 Arch Linux 中文维基

Arch 用戶軟體倉庫(Arch User Repository,AUR)是為 Arch Linux 用戶而建,由社區主導的軟體倉庫。AUR 中的軟體包以軟體包描述文件(PKGBUILD)的形式提供,用戶自己通過 makepkg 生成包,再由 pacman 安裝。創建 AUR 的初衷是供社區管理和分享新的軟體包,並由官方定期從中挑選軟體包進入 extra 倉庫。本文介紹用戶訪問和使用 AUR 的方法。

許多官方倉庫軟體包都來自 AUR。通過 AUR,大家可以相互分享新的軟體包生成腳本(PKGBUILD 和其他相關文件)。用戶還可以為軟體包投票。如果一個軟體包投票足夠多,沒有許可證問題且打包質量好,那麼它就很有希望被收錄進官方 extra 倉庫(以後就可以直接通過 pacmanArch 構建系統安裝了)。

警告:AUR 中的軟體包是由其他用戶編寫的,這些 PKGBUILD 完全是非官方的,未經徹底審查。使用這些文件的風險由您自行承擔。
注意:如果你計劃要使用 AUR 倉庫,強烈建議關注 AUR 常規郵件列表,該列表被用於發布安全警告。[1] [2]

入門

用戶可以從 AUR 網站下載 PKGBUILD 文件。這些 PKGBUILD 可以通過 makepkg 生成軟體包,最後由 pacman 進行安裝。

  • 確保已經安裝base-devel
  • 瀏覽 #常見問題一節,以獲得對最常見問題的解答。
  • 在從 AUR 構建軟體包之前,您可能希望調整 /etc/makepkg.conf 以優化系統的構建過程。通過調整 MAKEFLAGS 變量、使用多核進行壓縮或使用不同的壓縮算法,可以在多核處理器的系統上顯著縮短包構建時間。用戶還可以通過 CFLAGS 變量啟用特定於硬體的編譯器優化。詳情參見 makepkg

如果您設置了 AUR SSH 身份驗證,也可以通過 SSH 連接到 AUR:運行 ssh aur@aur.archlinux.org help 以獲得可用指令的列表。

安裝與更新軟體包

從 AUR 安裝軟體包並不困難。基本步驟如下:

  1. 從 AUR 下載 PKGBUILD 和其他構建文件(比如 systemd 單元文件和補丁,通常不是實際代碼)。
  2. 驗證 PKGBUILD 和其它相關文件,確保其中不含有惡意代碼。
  3. 在保存文件的目錄下運行 makepkg。這將下載代碼,編譯並打包。
  4. 運行 pacman -U package_file 將軟體包安裝到您的系統上。

準備

首先,確保安裝base-devel,該元軟體包提供了 make 等用於從源碼進行編譯的工具:

注意:AUR 中的軟體包會假定構建環境裡已安裝了 base-devel

然後,選擇一個合適的構建目錄。該目錄僅用作生成軟體包或從源碼構建時的工作目錄,因此任何空白目錄都可以。下面的示例中使用 ~/builds 作為編譯目錄。

獲取軟體包構建所需文件

通過在 AUR 主頁中搜索,找到要安裝的軟體包。點擊搜索結果中的軟體名稱,進入軟體包信息頁。閱讀描述並確認是否為目標軟體,並檢查軟體的更新時間和評論。

確認無誤後,有幾種方法可以獲取包的構建文件:

  • 克隆其 git 存儲庫,在其 AUR 頁面的「包詳細信息」中標記為「Git Clone URL」。這是首選方法,其優點是您可以通過 git pull 輕鬆獲取包的更新。
$ git clone https://aur.archlinux.org/package_name.git
  • 通過單擊其 AUR 頁面右側「Package Actions」下的「Download snapshot」連結或在終端中下載快照:
$ curl -L -O https://aur.archlinux.org/cgit/aur.git/snapshot/package_name.tar.gz
注意:快照文件是被壓縮的,必須被解壓(最好在為 AUR 構建預留的目錄中):tar -xvf package_name.tar.gz
  • 使用 GitHub 上的 archlinux/aur 只讀鏡像,每個包都位於一個分支中。建議只克隆一個分支(整個存儲庫太大,速度會很慢)。您可以使用以下兩種方法之一執行此操作:
    • 使用 git clone --single-branch
      $ git clone --branch package_name --single-branch https://github.com/archlinux/aur.git
    • 部分克隆這個倉庫 (git clone --depth=1) 和選擇性添加分支
$ git clone --depth=1 https://github.com/archlinux/aur.git; cd aur
$ git remote set-branches --add origin package_name
$ git fetch
$ git switch package_name

如果需要,獲取 PGP 公鑰

檢查 .sig.asc 形式的簽名文件是否是 PKGBUILD 源數組的一部分,如果是,則獲取 PKGBUILD validpgpkeys 數組中列出的公鑰之一。更多信息請參考 makepkg#驗證簽名

構建軟體包

切換到含有軟體包的 PKGBUILD 文件的目錄:

$ cd package_name
警告:請仔細檢查 git 代碼庫中的 PKGBUILD、所有 .install 文件以及其它文件,確認是否帶有惡意或危險命令。如有任何懷疑,請不要構建軟體包,併到論壇或郵件列表中尋求幫助。過去已有發現數例含惡意代碼的軟體包。[3] [4]

查看所有提供的文件中的內容。例如使用 less 查看 PKGBUILD

$ less PKGBUILD
提示:如果您正在更新軟體包,您可能需要查看最後一次提交以來的變動。
  • 您可以使用 git show 來查看最後一次提交之後的變動。
  • 您也可以使用 vimdiffgit difftool @~..@ --tool=vimdiff。使用 vimdiff 的好處是可以查看到所有文件,以及對出現變更部分的提示。

接下來開始生成軟體包。檢查文件後,以普通用戶權限執行 makepkg ,下面是一些有用的參數:

  • -s/--syncdeps 會在構建之前使用 pacman 自動解析和安裝任何依賴項。如果包依賴於其他 AUR 包,則您應先手動安裝它們。
  • -i/--install 會在構建成功後安裝軟體包。這使您可以跳過通常需手動完成的下一步。
  • -r/--rmdeps 會在構建後刪除不需要的構建時依賴項。但是,下次更新包時可能需要重新安裝這些依賴項。
  • -c/--clean 會在構建後清理臨時構建文件,因為它們不再需要。這些文件通常僅在調試構建過程時才需要。
提示:使用 git clean -dfx 可以刪除所有不被 git 跟蹤的文件,從而刪除所有以前構建的包文件。

安裝包

現在可以使用 pacman 安裝該軟體包:

# pacman -U package_name-version-architecture.pkg.tar.zst
注意:
  • 如果您在 makepkg.conf 中更改了 PKGEXT,則包文件的名稱可能會略有不同。
  • 以上示例只是對構建過程的簡要總結。特別推薦閱讀 makepkgArch 構建系統文章以了解更多詳情。
提示:在不進行構建的情況下,您可以用 makepkg --packagelist 來獲取生成的軟體包文件名列表。

升級包

在包含包的 PKGBUILD 的目錄中,您必須首先使用命令更新文件:

$ git pull

然後按照之前的構建和安裝說明進行操作。

更新包

Pacman 不支持 AUR,因此更新您安裝的所有包是您的職責,而不是 pacman 的。如果官方倉庫中的包更新了,您需要重新構建依賴於那些庫的 AUR 包。checkrebuildrebuild-detector 提供的 rebuild-detector 鉤子可用於查找需重新構建的軟體包。

帳戶狀態

封禁(Suspension)

作為軟體包維護者時,可以對用戶配置「封禁」欄位,從而掛起目標用戶。當用戶被封禁時,他們不能:

非活動(Inactivity)

當編輯自己的帳戶或作為軟體包維護者編輯其他用戶的帳戶時,可以設置「非活動」欄位。使用非活動帳戶有兩個原因:

  • 在其帳戶頁面上顯示某人被標記為非活動的日期
  • 根據他們對新提案的不活動情況,生成當前的活躍軟體包維護者計數

反饋

在軟體包上添加評論

AUR 網頁界面中有一個評論工具,允許用戶就改進提出建議和反饋給 PKGBUILD 貢獻者。

提示:避免將補丁或 PKGBUILD 粘貼到評論部分:它們很快就會過時,最終會不必要地占用大量空間。請將這些文件通過電子郵件發送給維護者,甚至可以使用 pastebin

Python-Markdown 提供了基本的 Markdown 語法來格式化評論。

注意:
  • 此實現與官方語法規則或許會有一些差異
  • 對軟體包 Git 存儲庫的提交哈希值,以及對 Flyspray 工單的引用會被自動轉換為連結。
  • 長評論默認摺疊,可按需展開。

給軟體包投票

所有的 Arch 用戶都可以通過 AUR 界面為喜歡的軟體包投票。所有軟體包都有機會被包維護者接手,並收錄至 extra 倉庫。投票數是該選拔過程的重要依據之一,因此請儘可能地投票!

註冊 AUR 網站帳戶,在瀏覽軟體包時會看到投票選項。註冊後,還可以通過 aur-auto-vote-gitAUR 在命令行中投票。

此外,如果你設置了 AUR SSH 身份認證,可以使用 ssh 密鑰直接通過命令行投票,不再需要保存或者輸入 AUR 密碼:

$ ssh aur@aur.archlinux.org vote package_name

將軟體包標記為過期

首先,點擊軟體包頁面的「Flag Out-of-date」(中文版為「標記為過期」),並說明過期的原因,最好包含新版本的發布說明或 tarball 的連結。

可以通過郵件通知維護人員。如果兩周後還是沒有得到答覆,可以發出遺棄(orphan)請求。更多信息請參考 AUR 提交準則#請求

注意:VCS 軟體包pkgver 變化時並不會過時,所以不要標記它們,且維護者也只會取消標記並無視請求。AUR 維護者不應該僅為升高 pkgver 就進行提交。

調試包構建過程

  1. 在構建任何東西之前,通過更新確保您的構建環境是最新的。
  2. 確保您已安裝 base-devel
  3. makepkg 搭配使用 -s 選項,以在開始構建過程之前檢查並安裝所有依賴項。
  4. 試試默認的 makepkg 配置
  5. 常見問題請參閱 Makepkg#問題處理

如果您在構建包時遇到問題,請先閱讀其 PKGBUILD 及其 AUR 頁面上的評論。

可能 PKGBUILD 本身就有配置問題。如果您無法自行解決,請將其報告給維護者(例如,通過在 AUR 頁面的評論中發布您遇到的錯誤)。您也可以在 AUR 問題、討論和 PKGBUILD 請求論壇尋求幫助。

問題原因可能並不簡單,可能會涉及自定義到 CFLAGSLDFLAGSMAKEFLAGS。為排除由您的特定系統配置引起的問題,請在乾淨的 chroot 中構建包。如果在純淨 chroot 中構建仍然失敗,則問題很可能出在 PKGBUILD

請參閱創建軟體包#檢查包的邏輯性以獲得關於使用 namcap 的信息。如果您希望審核 PKGBUILD,請將其發布到 aur-general 郵件列表以獲得軟體包維護者和其他 AUR 成員的反饋,或發布到創建和修改包論壇。您還可以在 Libera Chat 上的 #archlinux-aur IRC 頻道中尋求幫助。

提交

用戶可以使用 AUR 分享 PKGBUILD。參見 AUR 提交準則以獲得更多細節。

Web 接口翻譯

參閱 AUR 源碼中的 i18n.md 獲得關於創建和維護 AUR Web 界面翻譯的詳細信息。

歷史

最初,人們僅將 PKGBUILD、所需的補充文件和構建好的包上傳到 ftp://ftp.archlinux.org/incoming 伺服器。包及相關文件會暫存在此,直至一位「受信用戶」(現已更名為軟體包維護者)看到這個程序並接管維護。

然後,受信用戶倉庫誕生了。社區中,特定的個人被授權託管他們自己的倉庫,以供他人使用。在更靈活、更易用的目標下,AUR 在這個基礎上擴展壯大。事實上,AUR 維護者曾一直被稱作受信用戶(Trusted user,TU),直到更名為軟體包維護者。

在 2015 年 6 月 8 日到 8 月 8 日期間,AUR 從 3.5.1 版本迭代到 4.0.0,引入了通過 Git 倉庫發布 PKGBUILD 的功能。 已存在的包會被丟棄,除非維護者手動地將它們移植到新的基礎架構上。

AUR3 包的 Git 倉庫

Github 上的 AUR 存檔中有一個包含移植時 AUR 3 的所有包的倉庫。

或者,採用等價的 aur-mirror 倉庫。

常見問題

什麼樣的軟體包能被放到 AUR?

AUR 中的軟體包僅是編譯腳本,即為 pacman 構建二進制文件的藍圖。只要你遵循了打包內容的許可條例,基本上符合規則的軟體包都可以提交。有時候,下載的連結具有 "you may not link" 條款(即不可分發),這時就不能提供下載連結,而是要用程序名稱代替,用戶需要用其它方式提前獲取受限制的原始碼。有疑問請及時詢問。

怎麼可以為 AUR 中的包投票?

#給軟體包投票

軟體包維護者是什麼?

參見 Arch 術語#軟體包維護者

Arch User Repository 和 extra 倉庫有何區別?

Arch User Repository 是儲存所有用戶提交的 PKGBUILD 的地方,軟體包需通過 makepkg 手動生成。吸引足夠多的社區關注及有軟體包維護者支持的 PKGBUILD 會被收錄進 extra 倉庫(由軟體包維護者維護),以二進制軟體包形式提供,可以由 pacman 安裝。

AUR 中的軟體包過期了,我該怎麼做?

參見 #將軟體包標記為過期

同時,你可以在本地編輯 PKGBUILD 來自行更新軟體包。有時更新不需要修改構建流程,只用按需更新 pkgversource 數組即可。

makepkg 無法構建某個軟體包,我該怎麼辦?

您很可能忘了點啥,參見 #調試包構建過程

ERROR: One or more PGP signatures could not be verified! 我該怎麼辦?

最有可能的情況是您沒有所需的公鑰來驗證下載的文件。詳情參見 Makepkg#驗證簽名

如何編寫 PKGBUILD?

查閱 AUR 提交準則#提交軟體包的規則創建軟體包

我想提交一個 PKGBUILD,希望別人幫忙檢查錯誤。

您可以通過多種渠道提交您的材料供審核;請看 #調試包構建過程

PKGBUILD(AUR 軟體包)怎樣才能被收錄到 extra 軟體倉庫?

一般至少需要 10 票,並且要有軟體包維護者願意維護,否則即便有上千票也不會收錄。當然,如果某個軟體包維護者願意維護一個軟體包的話,投票數往往不是決定因素。

一些流行的軟體包未被收錄的原因一般是:

  • Arch Linux 的軟體倉庫中已經有了別的版本。
  • 沒有再發布的授權許可。
  • 那個軟體包的功能只和 AUR 相關(例如,是個 AUR helper

另見包進入 extra 倉庫的規則

如何加速編譯?

參見 Makepkg#減少編譯時間

foo 和 foo-git 的區別是什麼?

很多 AUR 軟體包都包含穩定版本和開發版本。開發版本一般都會有代表版本管理系統後綴。開發版本並不是為日常使用而設計的,不過可能包含新功能或者 bug 修復。由於執行 makepkg 時會從軟體源獲取最新的代碼,因此 AUR 上的 pkgver() 並不代表上游的最新更改。這些軟體包很可能會跳過對 VCS 原始碼的完整性效驗。

同時請參閱 系統維護#使用經測試的軟體包

為啥某個軟體包從 AUR 消失了?

可能是有軟體包維護者認領了這個軟體包,並把它收入到 extra 倉庫中了。

軟體包也可能因為不滿足提交軟體包的規則而被刪除,您可以在 aur-requests 存檔中找到刪除原因。

注意:通常被刪除軟體包的 git 倉庫仍被保留,細節請參考 AUR 提交準則#請求

我要怎麼找出從 AUR 裡消失的軟體包?

最簡單的辦法是檢查軟體包 AUR 頁面的 HTTP 狀態:

$ comm -23 <(pacman -Qqm | sort) <(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)

如何得到包含所有 AUR 包的列表?

另請參閱