Arch 用户軟件庫 (AUR)

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

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

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

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

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

用户可以從 AUR 網站下載 PKGBUILDmakepkg 使用該檔案生成軟件包,最後由 pacman 安裝。

  • 確保已經安裝base-devel
  • 瀏覽 #FAQ 取得常見問題的答案。
  • 在從 AUR 組建軟件包之前,您可能希望調整 /etc/makepkg.conf 以最佳化系統的組建過程。通過調整 MAKEFLAGS 變數、使用多核進行壓縮或使用不同的壓縮演算法,可以在多核處理器的系統上顯著縮短包組建時間。用户還可以通過 CFLAGS 變數啟用特定於硬件的編譯器最佳化。詳情參見 makepkg
  • 也可以通過 SSH 連接到 AUR: 執行 ssh aur@aur.archlinux.org help 獲得可用指令的列表。

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

最初,人們上載PKGBUILD、附屬檔案、編譯好的軟件包到 ftp://ftp.archlinux.org/incoming。檔案一直存放在那裏,直到軟件包維護人員發現並收錄。

後來,出現了受信用户軟件庫,部分社羣用户擁有了建設自己的軟件庫的權力。以這個倉庫為基礎,為使其更加靈活易用,AUR 出現了。事實上,AUR 維護人員現在仍被稱為受信用户(Trusted Users,簡稱 TU)。

從 2015-06-08 到 2015-08-08,AUR 版本從 3.5.1 到 4.0.0,Git 倉庫成為 PKGBUILD 的發佈方式。

當時現存的所有軟件包都會被刪除,除非維護者將他們手動遷移到新的架構上。

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

Github 上的 AUR Archive 儲存了遷移過程中的所有 AUR3 軟件包倉庫。 除此之外,aur3-mirror 也提供了同樣的內容。

安裝與更新軟件包[編輯 | 編輯原始碼]

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

  1. 從 AUR 下載包含 PKGBUILD 和其他安裝檔案(比如 systemd 和修補程式,通常不是實際代碼)的 tar 包。
  2. 用命令 tar -xvf packagename.tar.gz 解包到一個僅用於編譯 AUR 的空閒資料夾。
  3. 驗證 PKGBUILD 和其它相關檔案,確保其中不含有惡意代碼。
  4. 在儲存檔案的目錄下執行makepkg。這將下載代碼,編譯並打包。
  5. 執行 pacman -U package_file 將軟件包安裝到您的系統上。
注意: AUR是不受支援的,所以更新這些軟件包是您的責任而不是 pacman 的。如果官方倉庫中的軟件包更新了,您可能需要重建相關的 AUR 軟件包。

準備[編輯 | 編輯原始碼]

首先確定安裝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 --depth=1 https://github.com/archlinux/aur; 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 @~..@ 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,則包檔案的名稱可能會略有不同。
  • 以上範例只是對組建過程的簡要總結。 特別推薦閱讀 makepkgABS 文章了解更多詳情。

升級包[編輯 | 編輯原始碼]

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

$ git pull	

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

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

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

將用户編輯為受信任用户時,可以設定「掛起」欄位,從而掛起目標用户。 當用户被掛起時,他們不能:

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

當編輯您自己的帳戶或其他作為受信任用户的帳戶時,可以設定非活動欄位。使用非活動帳戶有兩個原因:

  • 在其帳戶頁面上顯示某人被標記為非活動的日期
  • 根據他們對新提案的不活動生成當前活躍的受信任用户計數

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

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

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

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

[1][失效連結 2022-09-17 ⓘ] 提供基本的 Markdown 語法來格式化評論。

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

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

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

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

此外,如果您已經按照上述方法設立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#Troubleshooting

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

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

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

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

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

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

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

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

FAQ[編輯 | 編輯原始碼]

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

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

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

#給軟件包投票

受信用户(TU)是什麼?[編輯 | 編輯原始碼]

受信用户(TU,Trusted User)是選拔出的監督 AUR 和 community 倉庫的用户。他們維護着 community 的熱門軟件,並維持 AUR 運轉。

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

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

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

您很可能忘了點啥,參見 #Debugging the package build process[損壞的連結:無效的章節].

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

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

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

Consult the AUR submission guidelines#Rules of submission, then see creating packages.

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

There are several channels available to submit your package for review; see #Debugging the package build process[損壞的連結:無效的章節].

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

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

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

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

另見 Rules for Packages Entering the community Repo.

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

參閱 Makepkg#Improving compile times

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

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

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

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

有可能是 TU 認領了這個軟件包,並把它收入到 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 包的列表?[編輯 | 編輯原始碼]

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