Arch 用戶軟件倉庫 (AUR)
Arch 用戶軟件倉庫(Arch User Repository,AUR)是為用戶而建、由用戶主導的 Arch Linux 軟件倉庫。AUR 中的軟件包以軟件包生成腳本(PKGBUILD)的形式提供,用戶自己通過 makepkg 生成包,再由 pacman 安裝。創建 AUR 的初衷是方便用戶維護和分享新軟件包,並由官方定期從中挑選軟件包進入 extra 倉庫。本文介紹用戶訪問和使用 AUR 的方法。
許多官方倉庫軟件包都來自 AUR。通過 AUR,大家相互分享新的軟件包生成腳本(PKGBUILD 和其他相關文件)。用戶還可以為軟件包投票。如果一個軟件包投票足夠多、沒有許可證問題、打包質量好,那麼它就很有希望被收錄進官方 community 倉庫(以後就可以直接通過 pacman 或 ABS 安裝了)。
PKGBUILD
完全是非官方的,未經徹底審查。使用這些文件的風險由您自行承擔。入門[編輯 | 編輯原始碼]
用戶可以從 AUR 網站下載 PKGBUILD。makepkg 使用該文件生成軟件包,最後由 pacman 安裝。
- 確保已經安裝了 base-devel包。
- 瀏覽 #常見問題一節,以獲得對最常見問題的解答。
- 在從 AUR 構建軟件包之前,您可能希望調整
/etc/makepkg.conf
以優化系統的構建過程。通過調整MAKEFLAGS
變量、使用多核進行壓縮或使用不同的壓縮算法,可以在多核處理器的系統上顯著縮短包構建時間。用戶還可以通過CFLAGS
變量啟用特定於硬件的編譯器優化。詳情參見 makepkg。
如果您設置了AUR SSH 身份驗證,也可以通過 SSH 連接到 AUR:運行 ssh aur@aur.archlinux.org help
以獲得可用指令的列表。
安裝與更新軟件包[編輯 | 編輯原始碼]
從 AUR 安裝軟件包並不困難。基本步驟如下:
- 從 AUR 下載包含
PKGBUILD
和其他安裝文件(比如 systemd 和補丁,通常不是實際代碼)的 tar 包。 - 用命令
tar -xvf packagename.tar.gz
解包到一個僅用於編譯 AUR 的空閒文件夾。 - 驗證 PKGBUILD 和其它相關文件,確保其中不含有惡意代碼。
- 在保存文件的目錄下運行
makepkg
。這將下載代碼,編譯並打包。 - 運行
pacman -U package_file
將軟件包安裝到您的系統上。
準備[編輯 | 編輯原始碼]
首先,確保安裝了 base-devel包,其中包括 make包 和其他編譯工具:
然後,選擇一個合適的構建目錄。該目錄僅用作生成軟件包或從源碼構建時的工作目錄,因此任何空白目錄都可以。下面的示例中使用 ~/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.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 --packagelist
來獲取生成的軟件包文件名列表。升級包[編輯 | 編輯原始碼]
在包含包的 PKGBUILD
的目錄中,您必須首先使用命令更新文件:
$ git pull
然後按照之前的構建和安裝說明進行操作。
更新包[編輯 | 編輯原始碼]
Pacman 不支持 AUR,因此更新您安裝的所有包是您的職責,而不是 pacman 的。如果官方倉庫中的包更新了,您需要重新構建依賴於那些庫的 AUR 包。
賬戶狀態[編輯 | 編輯原始碼]
掛起[編輯 | 編輯原始碼]
將用戶編輯為軟件包維護者時,可以設置「掛起」字段,從而掛起目標用戶。當用戶被掛起時,他們不能:
- 登錄 https://aur.archlinux.org
- 接收通知
- 與git界面交互
非活動[編輯 | 編輯原始碼]
當編輯您自己的賬戶或其他作為軟件包維護者的賬戶時,可以設置非活動字段。使用非活動賬戶有兩個原因:
- 在其賬戶頁面上顯示某人被標記為非活動的日期
- 根據他們對新提案的不活動生成當前活躍的軟件包維護者計數
反饋[編輯 | 編輯原始碼]
在軟件包上添加評論[編輯 | 編輯原始碼]
AUR Web Interface 有一個評論工具,允許用戶就改進提出建議和反饋給 PKGBUILD
貢獻者。
PKGBUILD
粘貼到評論部分:它們很快就會過時,最終會不必要地占用大量空間。而是將這些文件通過電子郵件發送給維護者,甚至使用 pastebin。給軟件包投票[編輯 | 編輯原始碼]
所有的 Arch 用戶都可以通過 AUR Web 界面為軟件包投票。大多數軟件包都有機會被 TU 收錄進 community 倉庫。投票數是 community 倉庫軟件包選拔的重要依據之一。
註冊AUR 網站賬戶,在瀏覽軟件包時會看到投票選項。註冊後,還可以通過 aurvoteAUR、aurvote-gitAUR 或者 aur-auto-vote-gitAUR 投票。
此外,如果您已經按照上述方法設置了 AUR SSH 身份認證,可以使用 ssh 密鑰直接通過命令行投票。不再需要保存或者輸入 AUR 密碼。
$ ssh aur@aur.archlinux.org vote package_name
將軟件包標記為過期[編輯 | 編輯原始碼]
首先,點擊軟件包頁面的「Flag Out-of-date」(中文版為「標記為過期」,並說明過期的原因,最好包含新版本的發布說明或 tarball。
可以通過郵件通知維護人員。如果兩周後還是沒有得到答覆,可以發出遺棄請求,也就是讓一個 Trusted User 不再維護這個軟件包。注意請確保軟件包需要維護人更新,而他/她沒有任何回應的情況下再這麼操作。
調試包構建過程[編輯 | 編輯原始碼]
- 在構建任何東西之前,通過更新確保您的構建環境是最新的。
- 確保您已安裝 base-devel包多軟件包。
- 使用
-s
選項和makepkg
在開始構建過程之前檢查並安裝所需的所有依賴項。 - 試試默認的 makepkg 配置。
- 有關常見問題,請參閱 Makepkg#問題處理。
如果您在構建包時遇到問題,請先閱讀其 PKGBUILD
及其 AUR 頁面上的評論。
可能每個人的 PKGBUILD
都損壞了。如果您無法自行解決,請將其報告給維護者(例如,通過在 AUR 頁面的評論中發布您遇到的錯誤)。您也可以在 AUR 問題、討論和 PKGBUILD 請求論壇尋求幫助。
畢竟,原因可能並非微不足道。自定義 CFLAGS
、LDFLAGS
和 MAKEFLAGS
可能會導致失敗。為避免由您的特定系統配置引起的問題,請在 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 submission 和 creating packages.
我想提交一個 PKGBUILD,希望別人幫忙檢查錯誤。[編輯 | 編輯原始碼]
您可以通過多種渠道提交您的材料供審核;請看 #調試包構建過程。
PKGBUILD(AUR 軟件包)怎樣才能被收錄到 extra 軟件倉庫?[編輯 | 編輯原始碼]
一般至少需要 10 票,並且要有軟件包維護者願意維護,否則即便有上千票也不會收錄。當然,如果某個軟件包維護者願意維護一個軟件包的話,投票數往往不是決定因素。
一些流行的軟件包未被收錄的原因一般是:
- Arch Linux 的軟件倉庫中已經有了別的版本。
- 沒有再發布的授權許可。
- 那個軟件包的功能只和 AUR 相關((例如,是個 AUR helper))
如何加速編譯?[編輯 | 編輯原始碼]
參見 Makepkg#Improving build times。
foo 和 foo-git 的區別是什麼?[編輯 | 編輯原始碼]
很多AUR軟件包都包含穩定版本和開發版本。開發版本一般都會有像 -cvs
、-svn
、-git
、-hg
、-bzr
或者 -darcs
這樣的後綴(見 VCS package guidelines#Package naming)。
開發版本並不是為日常使用而設計的,不過可能包含新功能或者 bug 修復。因為要從上游獲取最新的源代碼,所以當運行 makepkg
時版本號可能會發生變化。而且會跳過對源代碼的完整性效驗。
同時請參閱 System maintenance#Use proven software packages。
為啥某個軟件包從 AUR 消失了?[編輯 | 編輯原始碼]
可能是有軟件包維護者認領了這個軟件包,並把它收入到 community 倉庫中了。
軟件包可能因為不滿足提交軟件包的規則或是其它原因而被刪除,您可以在 aur-requests archives 找到對應刪除記錄的歸檔。
我要怎麼找出從 AUR 裡消失的軟件包?[編輯 | 編輯原始碼]
最簡單的辦法是檢查軟件包 AUR 頁面的 HTTP 狀態:
$ comm -23 <(pacman -Qqm | sort) <(curl https://aur.archlinux.org/packages.gz | gzip -cd | sort)
想知道 AUR 裡都有啥 ?[編輯 | 編輯原始碼]
- https://aur.archlinux.org/packages.gz
- 使用來自 python3-aurAUR 的
aurpkglist
。
如何得到包含所有 AUR 包的列表?[編輯 | 編輯原始碼]
- https://aur.archlinux.org/packages.gz
- 使用 python3-aurAUR 的
aurpkglist
- 新 AUR 元數據存檔