Difference between revisions of "Pacman (正體中文)"

From ArchWiki
Jump to: navigation, search
(疑難排解)
Line 337: Line 337:
 
為何有這種情況發生:pacman 偵測到檔案衝突,根據設計,它不會幫您蓋過舊有檔案。這是其中一項設計功能,而非失誤。  
 
為何有這種情況發生:pacman 偵測到檔案衝突,根據設計,它不會幫您蓋過舊有檔案。這是其中一項設計功能,而非失誤。  
  
通常這種問題都很好解決。比較安全的方式是,首先檢查是否有其他軟體包擁有這份檔案 ({{ic|pacman -Qo /path/to/file}})。若有其他軟體包擁有這份檔案,[[Reporting Bug Guidelines|寄一份錯誤報告]]。沒有的話,將「存在檔案系統」的這份檔案重新命名,並重新下達升級指令。若一切正常,檔案就會被移除。
+
通常這種問題都很好解決。比較安全的方式是,首先檢查是否有其他軟體包擁有這份檔案 ({{ic|pacman -Qo '''檔案路徑'''}})。若有其他軟體包擁有這份檔案,[[Reporting Bug Guidelines|寄一份錯誤報告]]。沒有的話,將「存在檔案系統」的這份檔案重新命名,並重新下達升級指令。若一切正常,檔案就會被移除。
  
 
若您使用手動的方式安裝程式,而非 pacman 或其它前端程式的話,先移除這個程式和所有相關檔案,再使用 pacman 重新安裝。
 
若您使用手動的方式安裝程式,而非 pacman 或其它前端程式的話,先移除這個程式和所有相關檔案,再使用 pacman 重新安裝。
Line 368: Line 368:
 
# 掛載您的根檔案系統。
 
# 掛載您的根檔案系統。
 
# 更新 Pacman 資料庫並透過 {{ic|pacman -Syyu}} 升級。
 
# 更新 Pacman 資料庫並透過 {{ic|pacman -Syyu}} 升級。
# 透過 {{ic|pacman -r 根目錄路徑 -S 軟體包}} 重新安裝損毀的軟體包。}}
+
# 透過 {{ic|pacman -r '''根目錄路徑''' -S '''軟體包'''}} 重新安裝損毀的軟體包。}}
  
 
{{FAQ
 
{{FAQ

Revision as of 13:14, 22 December 2013

翻譯狀態: 本文章是 pacman 的翻譯版本。最近一次的翻譯時間:2013-12-22。點擊本連結查看英文頁面之後的變更。

Pacman 軟體包管理員是 Arch Linux 的主要特色工具,結合了二進位軟體包格式和容易使用的建置系統。輕鬆管理軟體是 Pacman 的目標,無論這些軟體包是來自官方 Arch 軟體庫還是由使用者自建。

Pacman 會和主要伺服器同步軟體包清單,來保持系統處於最新狀態。在主從式架構之下,使用者只要用簡單的指令就可以下載並安裝軟體包,並補足所有相依的軟體包。

Pacman 以 C 語言撰寫,使用 .pkg.tar.xz 軟體包格式。

提示: 官方的 pacman 已提供了不少好用工具 (如 makepkg, pactree, vercmp 以及更多):執行 pacman -Ql pacman | grep bin 可查看完整清單。

設定

Pacman 的設定檔為 /etc/pacman.conf。使用者可以修改設定檔讓程式符合需求。該設定檔的進一步資訊可以在 man pacman.conf 找到。

一般選項

一般選項的定義落在 [options] 區塊。閱讀 man 文件或查看預設 pacman.conf 以了解可調整的地方。

跳過特定軟體包的升級

若要取消特定軟體包的升級,可如下指定:

IgnorePkg=linux

多種軟體包的取消升級,可用空白分隔各軟體包名稱,或是加入若干 IgnorePkg 行。

跳過特定軟體群組的升級

取消軟體群組升級的作法跟單一軟體包相同:

IgnoreGroup=gnome

禁止特定檔案安裝至系統

若要永遠禁止特定目錄的安裝,將它們列在 NoExtract 後面。例如以下禁止 systemd 新元件的安裝:

NoExtract=usr/lib/systemd/system/*

軟體庫

這一部分定義了要使用哪些軟體庫,如 /etc/pacman.conf 內所述。我們可以直接在檔案內宣告軟體庫的位置,或是從另一個檔案讀取(如 /etc/pacman.d/mirrorlist),這樣就只需要維護一項清單。鏡像站的設定請參閱這裡

/etc/pacman.conf
#[testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

[core]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

[extra]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

#[community-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

[community]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist

# If you want to run 32 bit applications on your x86_64 system,
# enable the multilib repositories as required here.

#[multilib-testing]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

#[multilib]
#SigLevel = PackageRequired
#Include = /etc/pacman.d/mirrorlist

# An example of a custom package repository.  See the pacman manpage for
# tips on creating your own repositories.
#[custom]
#SigLevel = Optional TrustAll
#Server = file:///home/custompkgs
警告: 使用 testing 軟體庫的人請留意!該庫的軟體處於密集開發的狀態,隨意更新可能有讓部分軟體無法運作的風險。我們鼓勵使用 testing 軟體庫的人訂閱 arch-dev-public 郵件論壇來了解目前開發的資訊。

軟體包的安全性

Pacman 4 支援軟體包簽章,為軟體包的安全性多添加一層保障。預設選項 SigLevel = Required DatabaseOptional 啟用對所有軟體包的簽章認証:軟體庫設定值的 SigLevel 行 (如上面所示) 設定可蓋過預設選項。更多相關資訊 (簽署軟體包、認證簽章) 請參閱 pacman-key

使用方式

以下將用一些簡單範例來說明 pacman 可執行的操作。man pacman 有更多的範例可供參考。若需要一份簡單的 Pacman 介紹則參閱 pacman - An Introduction

安裝軟體包

安裝特定軟體包

安裝一或多個軟體包 (包含相依軟體):

# pacman -S 軟體包名稱1 軟體包名稱2 ...

有時候不同的軟體庫下會存放同一種軟體包,只是版本不同而已 (如 [extra] 和 [testing])。此時必須在軟體包名稱前面定義軟體庫名:

# pacman -S extra/軟體包名稱

安裝軟體群組

Pacman 可以同時安裝歸屬於同一群組下的軟體包,如下面範例指令:

# pacman -S gnome

Pacman 將提示您選擇 gnome 群組下要安裝那些軟體包。

某些軟體群組包含了數量眾多的軟體包,只有某一小部分的軟體包是您(不)要安裝的。您不需將所有需要的軟體包代碼一一輸入,用以下的語法可以快速選取某一範圍的軟體包,例如:

Enter a selection (default=all): 1-10 15

將會安裝從 1 到 10,以及 15 號軟體包,或者:

Enter a selection (default=all): ^5-8 ^2

除了 5 到 8、以及 2 號軟體包以外,其他軟體包將會被安裝。

執行以下指令查看哪些軟體包被歸類在 gnome 群組:

# pacman -Sg gnome

或者,到 https://www.archlinux.org/groups/ 網站查看有什麼軟體群組可用。

註記: 當指定安裝一項軟體包時,就算該軟體包已被安裝過,也還是會重新安裝一次。可以利用 --needed 選項略過已安裝且為最新版本的軟體包。
警告: 在系統尚未升級過的狀況下安裝軟體包時,千萬不要重新整理軟體包清單 (即 pacman -Sy 軟體包名稱);這可能會導致相依性出現問題。請參閱#不支援部分升級https://bbs.archlinux.org/viewtopic.php?id=89328。

移除軟體包

移除單一軟體包,但不移除與其一同安裝的相依軟體包:

# pacman -R 軟體包名稱

移除單一軟體包,以及與其相依且不再被其他軟體需要的軟體包:

# pacman -Rs 軟體包名稱

移除單一軟體包,以及與其相依的軟體包;也一同移除其他受影響的軟體包:

警告: 這項操作具連帶性,進行之前必須確認不會刪掉您仍然需要的軟體包。
# pacman -Rsc 軟體包名稱

移除單一軟體包,但不移除依賴該軟體包的其他軟體包:

# pacman -Rdd 軟體包名稱

Pacman 在移除特定應用程式時,會儲存其重要設定檔,加上副檔名 .pacsave。使用 -n 選項避免這些備份檔案被建立:

# pacman -Rn 軟體包名稱
註記: Pacman 不會移除應用程式自己建立的設定檔 (例如家目錄下的「隱藏檔案」)。

升級軟體包

Pacman 只需一個指令即可更新系統所有軟體包。根據系統的軟體包版本狀態,這項操作會花上一段時間。本指令會同步資料庫更新系統的軟體包 (除了不在預定軟體庫內的「本機」軟體包):

# pacman -Syu
警告: 並不是每當更新可用時就得馬上更新。使用者必須瞭解,基於 Arch 的「無縫更新」特性,每一次大更新都可能會導向無法預期的結果。打個比方而言,在您準備一場重要的演說前一刻更新系統是相當不智的行為。最好在閒暇時刻進行更新,並準備應付更新可能引發的任何問題。

Pacman 是相當強大的軟體包管理工具,但它並不是對付各式疑難雜症的萬靈丹。若這對您造成困擾,請回頭看看 Arch 的設計哲學是怎麼說的。使用者必須有警覺心,並負起維護自己系統的重責大任。在執行系統更新時,要做好 Arch 使用者的基本功:閱讀 Pacman 輸出的所有資訊並動動腦筋。當新軟體包的版本要更新一個被使用者修改過的設定檔時,為了避免蓋掉使用者自己的設定,會將新的預設設定檔改為 .pacnew 檔案。Pacman 會提醒使用者融合新舊兩檔。這些設定檔案需要使用者手動介入,而且最好在每次軟體包更新 / 移除之後就馬上處理。更多資訊請參閱 Pacnew and Pacsave Files

提示: Pacman 的輸出訊息會記錄在 /var/log/pacman.log

升級系統之前,建議到 Arch Linux 首頁檢查最新消息 (或是訂閱 RSS feedarch-announce 郵件論壇,或是追蹤 @archlinux Arch 的推特)。當出現 Pacman 無法自行處理、使用者必須介入的狀況時 (雖然這種情況很少見),我們會發送新的公告貼文。

要是您碰到的問題無法藉由以上的指示解決,記得到論壇搜尋看看,說不定也有其他人碰到跟您相同的問題,並提出解決辦法。

查詢軟體包資料庫

Pacman 使用 -Q 旗標查詢本機的軟體包資料庫;可參閱:

$ pacman -Q --help

並使用 -S 旗標查詢(軟體庫的)同步資料庫;可參閱:

$ pacman -S --help

Pacman 可以用來搜尋資料庫內記錄的軟體包,以軟體包名稱、描述來搜尋:

$ pacman -Ss 字串1 字串2 ...

搜尋已安裝的軟體包:

$ pacman -Qs 字串1 字串2 ...

顯示給定軟體包的詳細資料:

$ pacman -Si 軟體包名稱

系統內安裝軟體包的詳細資料:

$ pacman -Qi 軟體包名稱

傳入兩個 -i 旗標,會同時顯示備份檔案清單與它們的修改狀態:

$ pacman -Qii 軟體包名稱

獲取軟體包所安裝的檔案清單:

$ pacman -Ql 軟體包名稱

尚未安裝的軟體包則使用 pkgfile

您也可以向資料庫查詢系統內某個檔案是屬於哪一項軟體包:

$ pacman -Qo 檔案路徑

根據相依性,列出所有不再需要的軟體包 (孤兒):

$ pacman -Qdt

列出軟體包的相依性樹狀圖:

$ pactree 軟體包名稱

使用 pkgtools 下的 whoneeds ,列出需要某個已安裝軟體包的所有軟體包:

$ whoneeds 軟體包名稱

其他指令

一行升級系統並安裝其他軟體包:

# pacman -Syu 軟體包名稱1 軟體包名稱2 ...

下載軟體包但不要安裝:

# pacman -Sw 軟體包名稱

安裝不是來自遠端軟體庫的「本機」軟體包 (如從 AUR 建構的軟體包):

# pacman -U /path/to/package/package_name-version.pkg.tar.xz
提示: 若要保存一份本機軟體包的副本到 Pacman 的快取,使用:
# pacman -U file://path/to/package/package_name-version.pkg.tar.xz

安裝非 Pacman 設定檔所指定軟體庫下的「遠端」軟體包:

# pacman -U http://www.example.com/repo/example.pkg.tar.xz

清理目前尚未安裝的軟體包快取 (/var/cache/pacman/pkg):

警告: 這項操作將移除快取資料夾下所有軟體包的舊有版本,只留下目前已安裝的軟體包版本。只有在安裝的軟體包都穩定、不需要進行降級的情況下,再進行這項操作。萬一未來更新時出現任何問題,擁有的這些舊有版本就可以派上用場。
# pacman -Sc

清理整個軟體包快取:

警告: 這將會清掉整個軟體包快取。這不是一個好動作;這樣會失去直接從快取資料夾降級軟體包的機會。使用者會被迫使用毀損軟體包的替代來源,例如 Arch Rollback Machine
# pacman -Scc
提示: 除了使用 -Sc-Scc 這兩個選項以外,也可以考慮使用 pacman 下的 paccache。此工具提供更多樣的控制,像是要刪除什麼軟體包快取、或刪除多少軟體包快取。執行 paccache -h 可獲得更多指示。

不支援部分升級

Arch Linux 採用無縫更新,函式庫若有新的版本就會馬上推進軟體庫。開發人員與受信任的使用者會將庫內所有與函式庫相關的軟體包都重新建構過。若系統內有本機安裝的軟體包 (像 AUR 軟體包) 碰到 soname bump 時,使用者就必須重新建構它們。

此時部分升級將不被支援。不要使用 pacman -Sy [軟體包] 或其他相似指令如 pacman -Sypacman -S [軟體包]。在安裝軟體包記得先將系統升級 -- 特別是當 Pacman 重整同步軟體庫之後。基於相同的原因,使用 IgnorePkgIgnoreGroup 時也請多留意。

若在部分升級的情況下,有函式庫因為找不到其他與其連結的函式庫而發生問題的話,不要試著用軟連結「修復」問題。函式庫在未向後相容的情況下會收到soname bump。只要 Pacman 還能正常運作,一個簡單的 pacman -Syu,加上與鏡像站適當地同步就可以解決此問題。

基本注意事項

警告: 使用 --force 開關時請小心,不正當的使用將導致重大問題。強烈建議只有在 Arch 新聞指定的情況下才使用這個選項。

疑難排解

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

Template:FAQ

另請參閱