跳至內容

为避免本站因各种原因无法访问,建议用户安装 arch-wiki-docs-zh-cnCNRepo 或者 arch-wiki-docs-zh-twCNRepo 离线文档包备用,也可尝试使用经由Cloudflare CDN的替代版本aw.lilydjwg.me

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 包的列表?

[編輯 | 編輯原始碼]

另請參閱

[編輯 | 編輯原始碼]