跳至內容

Arch 用户軟件庫 (AUR)

本頁使用了標題或全文手工轉換
出自 Arch Linux 中文维基

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

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

警告:AUR 中的軟件包是由其他用户編寫的,這些 PKGBUILD 完全是非官方的,未經徹底審查。使用這些檔案的風險由您自行承擔。

入門[編輯 | 編輯原始碼]

用户可以從 AUR 網站下載 PKGBUILDmakepkg 使用該檔案生成軟件包,最後由 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 和修補程式,通常不是實際代碼)的 tar 包。
  2. 用命令 tar -xvf packagename.tar.gz 解包到一個僅用於編譯 AUR 的空閒資料夾。
  3. 驗證 PKGBUILD 和其它相關檔案,確保其中不含有惡意代碼。
  4. 在儲存檔案的目錄下執行makepkg。這將下載代碼,編譯並打包。
  5. 執行 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 checkout package_name

如果需要,取得 PGP 公鑰[編輯 | 編輯原始碼]

檢查 .sig.asc 形式的簽名檔案是否是 PKGBUILD 源數組的一部分,如果是,則取得列表中列出的公鑰之一PKGBUILD 有效的 PGP 金鑰列表。有關詳細資訊,請參閱 Makepkg#Signature checking

組建軟件包[編輯 | 編輯原始碼]

切換到含有軟件包的 PKGBUILD 檔案的目錄:

$ cd package_name
警告:務必認真檢查所有檔案! cd 到新建立的目錄,然後仔細檢查每個檔案確保沒有惡意或危險代碼。PKGBUILD 和所有 .install 檔案都是 shell 腳本檔案,包含若干函數,由 makepkg 調用並執行。這些函數可以調用任何命令,可能包含惡意或危險代碼。makepkg 通過 fakeroot(意為「假root」)執行這些命令(所以不要以 root 用户執行makepkg),能在一定程度防止惡意代碼損壞系統,但還是小心為好。如有疑問,可以到論壇或郵寄清單詢問。

檢視所有提供的檔案中的內容。例如使用 less 檢視 PKGBUILD

$ less PKGBUILD
提示:如果您正在更新軟件包,您可能需要檢視最後一次提交以來的變動。
  • 您可以使用 git show 來檢視最後一次提交之後的變動。
  • 您也可以使用 git 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 包。

帳戶狀態[編輯 | 編輯原始碼]

掛起[編輯 | 編輯原始碼]

將用户編輯為軟件包維護者時,可以設定「掛起」欄位,從而掛起目標用户。當用户被掛起時,他們不能:

非活動[編輯 | 編輯原始碼]

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

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

反饋[編輯 | 編輯原始碼]

在軟件包上添加評論[編輯 | 編輯原始碼]

AUR Web Interface 有一個評論工具,允許用户就改進提出建議和反饋給 PKGBUILD 貢獻者。

提示:避免將修補程式或 PKGBUILD 貼上到評論部分:它們很快就會過時,最終會不必要地佔用大量空間。而是將這些檔案通過電子郵件傳送給維護者,甚至使用 pastebin

[1] 提供基本的 Markdown 語法來格式化評論。

注意:
  • 此實現與官方 語法規則 有一些偶爾的 差異
  • 將雜湊提交到包的 Git 存放庫,並且對 Flyspray 票證的引用會自動轉換為連結。
  • 長評論摺疊,可按需展開。

給軟件包投票[編輯 | 編輯原始碼]

所有的 Arch 用户都可以通過 AUR Web 介面為軟件包投票。大多數軟件包都有機會被 TU 收錄進 community 倉庫。投票數是 community 倉庫軟件包選拔的重要依據之一。

註冊AUR 網站帳戶,在瀏覽軟件包時會看到投票選項。註冊後,還可以通過 aurvoteAURaurvote-gitAUR 或者 aur-auto-vote-gitAUR 投票。

此外,如果您已經按照上述方法設定了 AUR SSH 身份認證,可以使用 ssh 金鑰直接通過命令列投票。不再需要儲存或者輸入 AUR 密碼。

$ ssh aur@aur.archlinux.org vote package_name

將軟件包標記為過期[編輯 | 編輯原始碼]

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

可以通過郵件通知維護人員。如果兩周後還是沒有得到答覆,可以發出遺棄請求,也就是讓一個 Trusted User 不再維護這個軟件包。注意請確保軟件包需要維護人更新,而他/她沒有任何回應的情況下再這麼操作。

注意:VCS 軟件包 在 pkgver 變化時並不會過時,所以不要標記它們,AUR 維護者不應該僅為了 pkgver 進行提交。

除錯包組建過程[編輯 | 編輯原始碼]

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

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

可能每個人的 PKGBUILD 都損壞了。如果您無法自行解決,請將其報告給維護者(例如,通過在 AUR 頁面的評論中發佈您遇到的錯誤)。您也可以在 AUR 問題、討論和 PKGBUILD 請求論壇尋求幫助。

畢竟,原因可能並非微不足道。自訂 CFLAGSLDFLAGSMAKEFLAGS 可能會導致失敗。為避免由您的特定系統配置引起的問題,請在 clean chroot 中組建包。如果在 clean chroot 中組建過程仍然失敗,則問題可能出在 PKGBUILD

請參閱 Creating packages#Checking package sanity 以獲得關於使用 namcap 的資訊。如果您希望審核 PKGBUILD,請將其發佈到 aur-general 郵寄清單以獲得軟件包維護者和其他 AUR 成員的反饋,或發佈到建立和修改包論壇。您還可以在 Libera Chat 上的 IRC 頻道 #archlinux-aur 尋求幫助。

提交[編輯 | 編輯原始碼]

用户可以使用 AUR 分享 PKGBUILD。 參見 AUR submission guidelines 以獲得更多細節。

Web 介面翻譯[編輯 | 編輯原始碼]

參閱 i18n.md 獲得關於建立和維護 AUR Web 介面翻譯的詳細資訊。

歷史[編輯 | 編輯原始碼]

最初,人們僅將 PKGBUILD、所需的補充檔案和組建好的包,通過 ftp://ftp.archlinux.org/incoming 上載至伺服器。包及相關檔案會暫存,直至一位「受信用户」(現已更名為軟件包維護者)看到這個程式並採用它。

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

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

AUR3 包的 Git 倉庫[編輯 | 編輯原始碼]

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

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

常見問題[編輯 | 編輯原始碼]

什麼樣的軟件包能被放到 AUR?[編輯 | 編輯原始碼]

AUR 中的軟件包僅是編譯腳本,只要內容符合軟件版權,滿足上面提到的軟件包要求,就能夠放入。有時候,下載的連結具有 "you may not link" 條款,這時就不能提供下載連結,而是要用程式名稱代替,用户需要用其它方式提前取得受限制的原始碼。有疑問請及時詢問。

怎麼可以為 AUR 中的包投票?[編輯 | 編輯原始碼]

#給軟件包投票

軟件包維護者是什麼?[編輯 | 編輯原始碼]

參見 Arch terminology#Package maintainer.

Arch User Repository 和 extra 倉庫有何區別?[編輯 | 編輯原始碼]

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

makepkg 無法組建某個軟件包,我該怎麼辦?[編輯 | 編輯原始碼]

您很可能忘了點啥,參見 #除錯包組建過程

ERROR: One or more PGP signatures could not be verified! 我該怎麼辦?[編輯 | 編輯原始碼]

最有可能的情況是您沒有所需的公鑰來驗證下載的檔案。詳情參見 Makepkg#Signature checking

如何編寫 PKGBUILD?[編輯 | 編輯原始碼]

查閱 AUR submission guidelines#Rules of submissioncreating packages.

我想提交一個 PKGBUILD,希望別人幫忙檢查錯誤。[編輯 | 編輯原始碼]

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

PKGBUILD(AUR 軟件包)怎樣才能被收錄到 extra 軟件庫?[編輯 | 編輯原始碼]

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

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

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

另見包進入 extra 倉庫的規則

如何加速編譯?[編輯 | 編輯原始碼]

參見 Makepkg#Improving build times

foo 和 foo-git 的區別是什麼?[編輯 | 編輯原始碼]

很多AUR軟件包都包含穩定版本和開發版本。開發版本一般都會有像 -cvs-svn-git-hg-bzr 或者 -darcs 這樣的後綴(見 VCS package guidelines#Package naming英語VCS package guidelines#Package naming)。 開發版本並不是為日常使用而設計的,不過可能包含新功能或者 bug 修復。因為要從上游取得最新的原始碼,所以當執行 makepkg 時版本號可能會發生變化。而且會跳過對原始碼的完整性效驗。

同時請參閱 System maintenance#Use proven software packages

為啥某個軟件包從 AUR 消失了?[編輯 | 編輯原始碼]

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

軟件包可能因為不滿足提交軟件包的規則或是其它原因而被刪除,您可以在 aur-requests archives 找到對應刪除記錄的歸檔。

注意:通常一個被刪除軟件包的 git 倉庫依然保留,細節請參考 AUR submission guidelines#Requests

我要怎麼找出從 AUR 裡消失的軟件包?[編輯 | 編輯原始碼]

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

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

想知道 AUR 裡都有啥 ?[編輯 | 編輯原始碼]

如何得到包含所有 AUR 包的列表?[編輯 | 編輯原始碼]

另請參閱[編輯 | 編輯原始碼]