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

From ArchWiki
Jump to: navigation, search
Line 1: Line 1:
 +
{{Lowercase title}}
 
[[Category:正體中文]]
 
[[Category:正體中文]]
 +
[[Category:Package management (正體中文)]]
 
[[ar:Pacman]]
 
[[ar:Pacman]]
 
[[cs:Pacman]]
 
[[cs:Pacman]]
Line 23: Line 25:
 
[[uk:Pacman]]
 
[[uk:Pacman]]
 
[[zh-CN:Pacman]]
 
[[zh-CN:Pacman]]
{{DISPLAYTITLE:pacman (正體中文)}}
 
 
{{Translateme|仍有部分章節尚未翻譯}}
 
{{Translateme|仍有部分章節尚未翻譯}}
{{Article summary start|摘要}}
+
{{Related articles start}}
{{Article summary text|Pacman 是 Arch Linux 的[[Wikipedia:Package management system|軟體包管理員]]。軟體包管理員可以用來安裝、升級、移除軟體。本文章將說明 Pacman 的基本操作與一些疑難排解。}}
+
{{Related|Downgrading Packages}}
{{Article summary heading|Overview}}
+
{{Related|Improve Pacman Performance}}
{{Article summary text|{{:Category:Package management}}}}
+
{{Related|Pacman GUI Frontends}}
{{Article summary heading|Related}}
+
{{Related|Pacman Rosetta}}
{{Article summary wiki|Downgrading Packages}}
+
{{Related|Pacman Tips}}
{{Article summary wiki|Improve Pacman Performance}}
+
{{Related|Pacman package signing}}
{{Article summary wiki|Pacman GUI Frontends}}
+
{{Related|FAQ#Package Management}}
{{Article summary wiki|Pacman Rosetta}}
+
{{Related|pacman-key}}
{{Article summary wiki|Pacman Tips}}
+
{{Related|Pacnew and Pacsave Files}}
{{Article summary wiki|Pacman package signing}}
+
{{Related|List of Applications/Utilities#Package management}}
{{Article summary wiki|FAQ#Package Management}}
+
{{Related|Arch Build System}}
{{Article summary wiki|pacman-key}}
+
{{Related|Official Repositories}}
{{Article summary wiki|Pacnew and Pacsave Files}}
+
{{Related|Arch User Repository}}
{{Article summary heading|Resources}}
+
{{Related articles end}}
{{Article summary link|libalpm(3) Manual Page|https://www.archlinux.org/pacman/libalpm.3.html}}
+
{{Article summary link|pacman(8) Manual Page|https://www.archlinux.org/pacman/pacman.8.html}}
+
{{Article summary link|pacman.conf(5) Manual Page|https://www.archlinux.org/pacman/pacman.conf.5.html}}
+
{{Article summary link|repo-add(8) Manual Page|https://www.archlinux.org/pacman/repo-add.8.html}}
+
{{Article summary end}}
+
  
 
'''[https://www.archlinux.org/pacman/ Pacman]''' [[Wikipedia:Package management system|軟體包管理員]]是 Arch Linux 的主要特色工具,結合了二進位軟體包格式和容易使用的[[Arch Build System|建置系統]]。輕鬆管理軟體是 Pacman 的目標,無論這些軟體包是來自[[Official Repositories|官方 Arch 軟體庫]]還是由使用者自建。
 
'''[https://www.archlinux.org/pacman/ Pacman]''' [[Wikipedia:Package management system|軟體包管理員]]是 Arch Linux 的主要特色工具,結合了二進位軟體包格式和容易使用的[[Arch Build System|建置系統]]。輕鬆管理軟體是 Pacman 的目標,無論這些軟體包是來自[[Official Repositories|官方 Arch 軟體庫]]還是由使用者自建。
  
Pacman 會和主要伺服器同步軟體包清單,來保持系統處於最新狀態。在伺服端 / 客戶端的架構之下,使用者只要用簡單的指令就可以下載並安裝軟體包,並補足所有相依的軟體包。
+
Pacman 會和主要伺服器同步軟體包清單,來保持系統處於最新狀態。在主從式架構之下,使用者只要用簡單的指令就可以下載並安裝軟體包,並補足所有相依的軟體包。
  
 
Pacman 以 C 語言撰寫,使用 {{ic|.pkg.tar.xz}} 軟體包格式。
 
Pacman 以 C 語言撰寫,使用 {{ic|.pkg.tar.xz}} 軟體包格式。
  
{{提示|官方的 {{Pkg|pacman}} 已提供了不少好用工具 (如'''makepkg''', '''pactree''', '''vercmp''')
+
{{提示|官方的 {{Pkg|pacman}} 已提供了不少好用工具 (如 '''makepkg''', '''pactree''', '''vercmp''' 以及更多):執行 {{ic|pacman -Ql pacman <nowiki>|</nowiki> grep bin}} 可查看完整清單。}}
執行 {{ic|pacman -Ql pacman <nowiki>|</nowiki> grep bin}} 可查看完整清單。}}
+
  
 
== 設定 ==
 
== 設定 ==
  
Pacman 的設定檔為 {{ic|/etc/pacman.conf}}。使用者可以修改設定檔讓 pacman 符合需求。該設定檔的進一步資訊可以在 [https://www.archlinux.org/pacman/pacman.conf.5.html man pacman.conf] 找到。
+
Pacman 的設定檔為 {{ic|/etc/pacman.conf}}。使用者可以修改設定檔讓程式符合需求。該設定檔的進一步資訊可以在 [https://www.archlinux.org/pacman/pacman.conf.5.html man pacman.conf] 找到。
  
 
=== 一般選項 ===
 
=== 一般選項 ===
Line 79: Line 74:
 
==== 禁止特定檔案安裝至系統 ====
 
==== 禁止特定檔案安裝至系統 ====
  
若要永遠禁止特定目錄的安裝,將它們列在 {{Ic|NoExtract}} 後面。例如以下禁止 [[systemd]] 安裝新元件:
+
若要永遠禁止特定目錄的安裝,將它們列在 {{Ic|NoExtract}} 後面。例如以下禁止 [[systemd]] 新元件的安裝:
  
 
  NoExtract=usr/lib/systemd/system/*
 
  NoExtract=usr/lib/systemd/system/*
Line 125: Line 120:
 
#Server = file:///home/custompkgs}}
 
#Server = file:///home/custompkgs}}
  
{{警告|使用 [testing] 軟體庫的人請留意!該庫的軟體處於密集開發的狀態,隨意更新可能有讓部分軟體無法運作的風險。我們鼓勵使用 [testing] 軟體庫的人訂閱 [https://mailman.archlinux.org/mailman/listinfo/arch-dev-public arch-dev-public 郵件論壇]來了解目前開發的資訊。}}
+
{{警告|使用 ''testing'' 軟體庫的人請留意!該庫的軟體處於密集開發的狀態,隨意更新可能有讓部分軟體無法運作的風險。我們鼓勵使用 ''testing'' 軟體庫的人訂閱 [https://mailman.archlinux.org/mailman/listinfo/arch-dev-public arch-dev-public 郵件論壇]來了解目前開發的資訊。}}
  
 
=== 軟體包的安全性 ===
 
=== 軟體包的安全性 ===
Line 141: Line 136:
 
安裝一或多個軟體包 (包含相依軟體):
 
安裝一或多個軟體包 (包含相依軟體):
  
  # pacman -S ''軟體包名稱1'' ''軟體包名稱2'' ...
+
  # pacman -S '''軟體包名稱1''' '''軟體包名稱2''' ...
  
 
有時候不同的軟體庫下會存放同一種軟體包,只是版本不同而已 (如 [extra] 和 [testing])。此時必須在軟體包名稱前面定義軟體庫名:
 
有時候不同的軟體庫下會存放同一種軟體包,只是版本不同而已 (如 [extra] 和 [testing])。此時必須在軟體包名稱前面定義軟體庫名:
  
  # pacman -S extra/''軟體包名稱''
+
  # pacman -S extra/'''軟體包名稱'''
  
 
==== 安裝軟體群組 ====
 
==== 安裝軟體群組 ====
Line 229: Line 224:
 
Pacman 可以用來搜尋資料庫內記錄的軟體包,以軟體包名稱、描述來搜尋:
 
Pacman 可以用來搜尋資料庫內記錄的軟體包,以軟體包名稱、描述來搜尋:
  
  $ pacman -Ss ''字串1'' ''字串2'' ...
+
  $ pacman -Ss '''字串1''' '''字串2''' ...
  
 
搜尋已安裝的軟體包:
 
搜尋已安裝的軟體包:
  
  $ pacman -Qs ''字串1'' ''字串2'' ...
+
  $ pacman -Qs '''字串1''' '''字串2''' ...
  
 
顯示給定軟體包的詳細資料:
 
顯示給定軟體包的詳細資料:
  
  $ pacman -Si ''軟體包名稱''
+
  $ pacman -Si '''軟體包名稱'''
  
 
系統內安裝軟體包的詳細資料:
 
系統內安裝軟體包的詳細資料:
  
  $ pacman -Qi ''軟體包名稱''
+
  $ pacman -Qi '''軟體包名稱'''
  
 
傳入兩個 {{ic|-i}} 旗標,會同時顯示備份檔案清單與它們的修改狀態:
 
傳入兩個 {{ic|-i}} 旗標,會同時顯示備份檔案清單與它們的修改狀態:
  
  $ pacman -Qii ''軟體包名稱''
+
  $ pacman -Qii '''軟體包名稱'''
  
 
獲取軟體包所安裝的檔案清單:
 
獲取軟體包所安裝的檔案清單:
  
  $ pacman -Ql ''軟體包名稱''
+
  $ pacman -Ql '''軟體包名稱'''
  
 
尚未安裝的軟體包則使用 [[pkgfile]]。
 
尚未安裝的軟體包則使用 [[pkgfile]]。
Line 255: Line 250:
 
您也可以向資料庫查詢系統內某個檔案是屬於哪一項軟體包:
 
您也可以向資料庫查詢系統內某個檔案是屬於哪一項軟體包:
  
  $ pacman -Qo ''檔案路徑''
+
  $ pacman -Qo '''檔案路徑'''
  
 
根據相依性,列出所有不再需要的軟體包 (孤兒):
 
根據相依性,列出所有不再需要的軟體包 (孤兒):
Line 263: Line 258:
 
列出軟體包的相依性樹狀圖:
 
列出軟體包的相依性樹狀圖:
  
  $ pactree ''軟體包名稱''
+
  $ pactree '''軟體包名稱'''
  
 
使用 [[pkgtools]] 下的 {{ic|whoneeds}} ,列出需要某個''已安裝''軟體包的所有軟體包:
 
使用 [[pkgtools]] 下的 {{ic|whoneeds}} ,列出需要某個''已安裝''軟體包的所有軟體包:
  
  $ whoneeds ''軟體包名稱''
+
  $ whoneeds '''軟體包名稱'''
  
 
=== 其他指令 ===
 
=== 其他指令 ===
Line 273: Line 268:
 
一行升級系統並安裝其他軟體包:
 
一行升級系統並安裝其他軟體包:
  
  # pacman -Syu ''軟體包名稱1'' ''軟體包名稱2'' ...
+
  # pacman -Syu '''軟體包名稱1''' '''軟體包名稱2''' ...
  
 
下載軟體包但不要安裝:
 
下載軟體包但不要安裝:
  
  # pacman -Sw ''軟體包名稱''
+
  # pacman -Sw '''軟體包名稱'''
  
 
安裝不是來自遠端軟體庫的「本機」軟體包 (如從 [[Arch User Repository|AUR]] 建構的軟體包):
 
安裝不是來自遠端軟體庫的「本機」軟體包 (如從 [[Arch User Repository|AUR]] 建構的軟體包):
Line 313: Line 308:
 
若在部分升級的情況下,有函式庫因為找不到其他與其連結的函式庫而發生問題的話,'''不要試著用軟連結「修復」問題'''。函式庫在'''未向後相容'''的情況下會收到[[Wikipedia:soname|soname]] bump。只要 Pacman 還能正常運作,一個簡單的 {{ic|pacman -Syu}},加上與鏡像站適當地同步就可以解決此問題。
 
若在部分升級的情況下,有函式庫因為找不到其他與其連結的函式庫而發生問題的話,'''不要試著用軟連結「修復」問題'''。函式庫在'''未向後相容'''的情況下會收到[[Wikipedia:soname|soname]] bump。只要 Pacman 還能正常運作,一個簡單的 {{ic|pacman -Syu}},加上與鏡像站適當地同步就可以解決此問題。
  
== 疑難排解 ==
+
=== 基本注意事項 ===
 +
{{警告|使用 {{ic|--force}} 開關時請小心,不正當的使用將導致重大問題。強烈建議'''只有'''在 Arch 新聞指定的情況下才使用這個選項。}}
  
 +
== 疑難排解 ==
 
{{FAQ
 
{{FAQ
|question=An update to package XYZ broke my system!
+
|question=升級某個軟體包後,我的系統故障了!
|answer=Arch Linux is a rolling-release cutting-edge distribution. Package updates are available as soon as they are deemed stable enough for general use. However, updates sometimes require user intervention: configuration files may need to be updated, optional dependencies may change, etc.
+
|answer=Arch Linux 屬於無縫發行的尖端發行版本。當軟體包的更新被認定在一般使用上有足夠的穩定度時就會立即釋出。但是,有時候更新需要使用者的介入,比如說設定檔案需要更新、選用相依性改變等等。
  
The most important tip to remember is to not "blindly" update Arch systems. Always read the list of packages to be updated. Note whether "critical" packages are going to be updated ({{Pkg|linux}}, {{Pkg|xorg-server}}, and so on). If so, it is usually a good idea to check for any news at https://www.archlinux.org/ and scan recent forum posts to see if people are experiencing problems as a result of an update.
+
最重要的一點提示就是,不要「盲目」升級 Arch 系統。永遠記得先閱讀準備更新的軟體包清單。注意是否有「重要」的軟體包更新 (諸如 {{Pkg|linux}}, {{Pkg|xorg-server}} )。如果是的話,檢查 https://www.archlinux.org/ 上是否有最新新聞,並爬一下最近的論壇貼文,看看是否有人在本次更新碰到任何問題。
  
If a package update is expected/known to cause problems, packagers will ensure that pacman displays an appropriate message when the package is updated. If experiencing trouble after an update, double-check pacman's output by looking at the log ({{ic|/var/log/pacman.log}}).
+
若軟體包更新預期/已知會產生問題,打包人員會確認更新軟體包時 Pacman 會顯示適當訊息。若更新後碰到任何問題,到日誌檔 ({{ic|/var/log/pacman.log}}) 檢查 Pacman 的輸出訊息。
  
At this point, '''only after ensuring there is no information available through pacman, there is no relative news on https://www.archlinux.org/, and there are no forum posts regarding the update''', consider seeking help on the forum, over [[IRC Channel|IRC]], or [[Downgrading Packages|downgrading the offending package]].}}
+
到這個時候,'''只有在確認 Pacman 沒有顯示任何可用訊息、https://www.archlinux.org/ 上沒有相關新聞,論壇上也沒有和該次更新相關的貼文時''',再考慮到論壇、[[IRC Channel|IRC]] 上求助,或是將[[Downgrading Packages|衝突的軟體包降級]]}}
  
 
{{FAQ
 
{{FAQ
|question=I know an update to package ABC was released, but pacman says my system is up to date!
+
|question=我知道某個軟體包升級已經釋出,但 Pacman 說我的系統已經是最新的!
|answer=Pacman mirrors are not synced immediately. It may take over 24 hours before an update is available to you. The only options are be patient or use another mirror. [https://www.archlinux.org/mirrors/status/ MirrorStatus] can help you identify an up-to-date mirror.}}
+
|answer=Pacman 鏡像站並非立即同步。大約要 24 小時過後您才會收到更新。唯一能做的就是耐心等候,或者使用其他鏡像站。[https://www.archlinux.org/mirrors/status/ MirrorStatus] 可以幫助您找出處於最新狀態的鏡像站。}}
  
 
{{FAQ
 
{{FAQ
|question=I get an error when updating: "file exists in filesystem"!
+
|question=更新時發生錯誤:「file exists in filesystem」!
|answer=ASIDE: ''Taken from https://bbs.archlinux.org/viewtopic.php?id=56373 by Misfit138.''
+
|answer=ASIDE: '''取自 https://bbs.archlinux.org/viewtopic.php?id=56373,作者 Misfit138。'''
  
 
  error: could not prepare transaction
 
  error: could not prepare transaction
Line 346: Line 343:
 
Every installed package provides {{ic|/var/lib/pacman/local/$package-$version/files}} file that contains metadata about this package. If this file gets corrupted - is empty or missing - it results in "file exists in filesystem" errors when trying to update the package. Such an error usually concerns only one package and instead of manually renaming and later removing all the files that belong to the package in question, you can run {{ic|pacman -S --force $package}} to force pacman to overwrite these files.
 
Every installed package provides {{ic|/var/lib/pacman/local/$package-$version/files}} file that contains metadata about this package. If this file gets corrupted - is empty or missing - it results in "file exists in filesystem" errors when trying to update the package. Such an error usually concerns only one package and instead of manually renaming and later removing all the files that belong to the package in question, you can run {{ic|pacman -S --force $package}} to force pacman to overwrite these files.
  
Do '''not''' run {{ic|pacman -Syu --force}}.}}
+
'''不要'''執行 {{ic|pacman -Syu --force}}}}
  
 
{{FAQ
 
{{FAQ
|question=I get an error when installing a package: "not found in sync db"
+
|question=安裝軟體包時發生錯誤:「not found in sync db」
|answer=Firstly, ensure the package actually exists (and watch out for typos!). If certain the package exists, your package list may be out-of-date or your repositories may be incorrectly configured. Try running {{ic|pacman -Syy}} to force a refresh of all package lists.}}
+
|answer=請先確認軟體包確實存在 (並檢查拼字正確)。若該軟體包確實存在,代表您的軟體包清單可能過期,或是您的軟體倉庫設定不正確。試著用 {{ic|pacman -Syyu}} 重整所有軟體包清單後更新。}}
  
 
{{FAQ
 
{{FAQ
|question=I get an error when installing a package: "target not found"
+
|question=安裝軟體包時發生錯誤:「target not found」
|answer=Firstly, ensure the package actually exists (and watch out for typos!). If certain the package exists, your package list may be out-of-date or your repositories may be incorrectly configured. Try running {{ic|pacman -Syy}} to force a refresh of all package lists.<br/>
+
|answer=請先確認軟體包確實存在 (並檢查拼字正確)。若該軟體包確實存在,代表您的軟體包清單可能過期,或是您的軟體倉庫設定不正確。試著用 {{ic|pacman -Syyu}} 重整所有軟體包清單後更新。<br>這也有可能是該軟體包所屬之軟體倉庫在您的系統上未被啟用,比如說軟體包在 ''multilib'' 倉庫,但您的 ''pacman.conf''沒有啟用 ''multilib''。}}
It could also be that the repository containing the package is not enabled on your system, e.g. the package could be in the multilib repository, but multilib is not enabled on your system.}}
+
  
 
{{FAQ
 
{{FAQ
|question=Pacman is repeatedly upgrading the same package!
+
|question=Pacman 一直重複更新同樣的軟體包!
|answer=This is due to duplicate entries in {{ic|/var/lib/pacman/local/}}, such as two {{ic|linux}} instances. {{ic|pacman -Qi}} outputs the correct version, but {{ic|pacman -Qu}} recognizes the old version and therefore will attempt to upgrade.
+
|answer=這是因為 {{ic|/var/lib/pacman/local/}} 出現了重複的項目,例如兩個 {{ic|linux}} 項目。{{ic|pacman -Qi}} 輸出了正確版本,但 {{ic|pacman -Qu}} 偵測到舊有版本而嘗試更新。
  
Solution: delete the offending entry in {{ic|/var/lib/pacman/local/}}.
+
解決方式:在 {{ic|/var/lib/pacman/local/}} 刪除衝突的項目。
  
{{Note|Pacman version 3.4 should display an error in case of duplicate entries, which should make this note obsolete.}}}}
+
{{註記|Pacman 版本 3.4 應會顯示對應重複項目的錯誤,這則記事已經過期。}}}}
  
 
{{FAQ
 
{{FAQ
|question=Pacman crashes during an upgrade!
+
|question=Pacman 在更新的時候崩潰了!
|answer=In the case that pacman crashes with a "database write" error whilst removing packages, and reinstalling or upgrading packages fails:
+
|answer=在 Pacman 在移除軟體包時出現「資料庫寫入」錯誤而崩潰,重新安裝或升級軟體包也失敗的狀況下:
  
# Boot using the Arch install media.
+
# 使用 Arch 安裝媒體開機。
# Mount your root filesystem.
+
# 掛載您的根檔案系統。
# Update the pacman database via {{ic|pacman -Syy}}.
+
# 更新 Pacman 資料庫並透過 {{ic|pacman -Syyu}} 升級。
# Reinstall the broken package via {{ic|pacman -r /path/to/root -S package}}.}}
+
# 透過 {{ic|pacman -r 根目錄路徑 -S 軟體包}} 重新安裝損毀的軟體包。}}
  
 
{{FAQ
 
{{FAQ
|question=I installed software using "make install"; these files do not belong to any package!
+
|question=我使用「make install」安裝軟體;這些檔案並不屬於任何軟體包!
 
|answer=If receiving a "conflicting files" error, note that pacman will overwrite manually-installed software if supplied with the {{ic|--force}} switch ({{ic|pacman -S --force}}). See [[Pacman Tips#Identify files not owned by any package]] for a script that searches the file system for ''disowned'' files.
 
|answer=If receiving a "conflicting files" error, note that pacman will overwrite manually-installed software if supplied with the {{ic|--force}} switch ({{ic|pacman -S --force}}). See [[Pacman Tips#Identify files not owned by any package]] for a script that searches the file system for ''disowned'' files.
{{Warning|Take care when using the {{ic|--force}} switch because it can cause major problems if used improperly.}}}}
+
{{Warning|Take care when using the {{ic|--force}} switch because it can cause major problems if used improperly. It is recommended to only use this option when it is requested in the Arch news.}}}}
  
 
{{FAQ
 
{{FAQ
|question=I need a package with a specific file. How do I know what provides it?
+
|question=我需要一個特定檔案。要怎麼知道是哪個軟體包提供它呢?
|answer=Install [[pkgfile]] which uses a separate database with all files and their associated packages.}}
+
|answer=安裝 [[pkgfile]]。這個程式使用一個分離資料庫,記錄著所有檔案和它們相關聯的軟體包。}}
  
 
{{FAQ
 
{{FAQ
|question=Pacman is completely broken! How do I reinstall it?
+
|question=Pacman 整個壞掉了!我要如何將它重新安裝?
 
|answer=In the case that pacman is broken beyond repair, manually download the necessary packages ({{Pkg|openssl}}, {{Pkg|libarchive}}, and {{Pkg|pacman}}) and extract them to root. The pacman binary will be restored along with its default configuration file. Afterwards, reinstall these packages with pacman to maintain package database integrity. Additional information and an example (outdated) script that automates the process is available in [https://bbs.archlinux.org/viewtopic.php?id=95007 this] forum post.}}
 
|answer=In the case that pacman is broken beyond repair, manually download the necessary packages ({{Pkg|openssl}}, {{Pkg|libarchive}}, and {{Pkg|pacman}}) and extract them to root. The pacman binary will be restored along with its default configuration file. Afterwards, reinstall these packages with pacman to maintain package database integrity. Additional information and an example (outdated) script that automates the process is available in [https://bbs.archlinux.org/viewtopic.php?id=95007 this] forum post.}}
  
Line 391: Line 387:
 
|answer=Most likely your initramfs got broken during a kernel update (improper use of pacman's {{ic|--force}} option can be a cause). You have two options:
 
|answer=Most likely your initramfs got broken during a kernel update (improper use of pacman's {{ic|--force}} option can be a cause). You have two options:
  
'''1.''' Try the ''Fallback'' entry.
+
'''1.''' 試試 ''Fallback'' 項目。
  
: {{Tip|In case you removed this entry for whatever reason, you can always press the {{ic|Tab}} key when the bootloader menu shows up (for Syslinux) or {{ic|e}} (for GRUB), rename it {{ic|initramfs-linux-fallback.img}} and press {{ic|Enter}} or {{ic|b}} (depending on your bootloader) to boot with the new parameters.}}
+
: {{提示|In case you removed this entry for whatever reason, you can always press the {{ic|Tab}} key when the bootloader menu shows up (for Syslinux) or {{ic|e}} (for GRUB), rename it {{ic|initramfs-linux-fallback.img}} and press {{ic|Enter}} or {{ic|b}} (depending on your bootloader) to boot with the new parameters.}}
  
 
: Once the system starts, run this command (for the stock {{Pkg|linux}} kernel) either from the console or from a terminal to rebuild the initramfs image:
 
: Once the system starts, run this command (for the stock {{Pkg|linux}} kernel) either from the console or from a terminal to rebuild the initramfs image:
Line 401: Line 397:
 
'''2.''' If that does not work, from a 2012 Arch release (CD/DVD or USB stick), run:
 
'''2.''' If that does not work, from a 2012 Arch release (CD/DVD or USB stick), run:
  
: {{Note|If you do not have a 2012 release or if you only have some other "live" Linux distribution laying around, you can [[chroot]] using the old fashion way. Obviously, there will be more typing than simply running the {{ic|arch-chroot}} script.}}
+
: {{註記|If you do not have a 2012 release or if you only have some other "live" Linux distribution laying around, you can [[chroot]] using the old fashion way. Obviously, there will be more typing than simply running the {{ic|arch-chroot}} script.}}
  
 
: {{bc|<nowiki>
 
: {{bc|<nowiki>
Line 416: Line 412:
  
 
{{FAQ
 
{{FAQ
|question=Signature from "User <email@gmail.com>" is unknown trust, installation failed
+
|question=來自「User <email@gmail.com>」的簽章為未知信任,安裝失敗
|answer=Follow [[pacman-key#Resetting all the keys]]. Or you can try to manually upgrade {{Pkg|archlinux-keyring}} package first, i.e. {{ic|pacman -S archlinux-keyring}}. }}
+
|answer=遵照 [[pacman-key#Resetting all the keys|pacman-key#重設所有鑰匙]]。或者您可以先嘗試手動更新 {{Pkg|archlinux-keyring}} 軟體包,即 {{ic|pacman -S archlinux-keyring}}}}
  
 
{{FAQ
 
{{FAQ
|question=I keep getting
+
|question=我一直得到
 
:error: PackageName: signature from "User <email@archlinux.org>" is invalid
 
:error: PackageName: signature from "User <email@archlinux.org>" is invalid
 
:error: failed to commit transaction (invalid or corrupted package (PGP signature))
 
:error: failed to commit transaction (invalid or corrupted package (PGP signature))
 
:Errors occured, no packages were upgraded.  
 
:Errors occured, no packages were upgraded.  
|answer=It happens when the system clock is wrong. Set the [[time]] and run: {{bc|# hwclock -w}} before to try to install/upgrade a package again.}}
+
|answer=當系統時鐘錯誤時會出現這些錯誤。設定好[[time|時間]]並執行:{{bc|# hwclock -w}},再嘗試安裝/升級軟體包。}}
  
 
{{FAQ
 
{{FAQ
|question=I keep getting a "failed to commit transaction (invalid or corrupted package)" error
+
|question=我一直得到「failed to commit transaction (invalid or corrupted package)」錯誤
|answer=Look for {{ic|*.part}} files (partially downloaded packages) in {{ic|/var/cache/pacman/pkg}} and remove them (often caused by usage of custom {{ic|XferCommand}} in {{ic|pacman.conf}}).}}
+
|answer=檢查 {{ic|/var/cache/pacman/pkg}} 下的 {{ic|*.part}} 檔 (部分下載軟體包) 並移除它們 (通常肇因為使用 {{ic|pacman.conf}} 的自訂 {{ic|XferCommand}})}}
  
 
{{FAQ
 
{{FAQ
|question=I get an error every time I use pacman saying 'warning: current locale is invalid; using default "C" locale'. What do I do?
+
|question=每次我使用 Pacman 時,都會出現錯誤:「warning: current locale is invalid; using default "C" locale」。我要怎麼做?
|answer=As the error message says, your locale is not correctly configured. See [[Locale]].}}
+
|answer=如該錯誤訊息所示,您的語系並未正確設定。請參閱[[Locale|語系]]}}
  
 
{{FAQ
 
{{FAQ
|question=How can I get Pacman to honor my proxy settings?
+
|question=我要如何讓 Pacman 遵守我的代理伺服設定?
|answer=Make sure that the relevant environment variables ({{ic|$http_proxy}}, {{ic|$ftp_proxy}} etc.) are set up. If you use Pacman with [[sudo]], you need to configure sudo to [[sudo#Environment variables (Outdated?)|pass these environment variables to Pacman]].
+
|answer=確認相關的環境變數 ({{ic|$http_proxy}}, {{ic|$ftp_proxy}} ) 都已設定完成。若使用 [[sudo]] 執行 Pacman,您需要設定讓 sudo [[sudo#Environment variables|傳送這些環境變數給 Pacman]]
 
}}
 
}}
  
== 另請參閱 ==
+
{{FAQ
 +
|question=我要如何重新安裝所有軟體包,同時保留它們彼此之間的相依關係?
 +
|answer=重新安裝所有原地軟體包:{{ic|pacman -S $(pacman -Qnq)}} ({{ic|-S}} 選項預設保留安裝緣由)。 <br> 接著您必須重新安裝所有外部軟體包,用 {{ic|pacman -Qmq}} 來列出它們。
 +
}}
  
* [[Common Applications/Utilities#Package management]]
+
== 另請參閱 ==
 +
* [https://www.archlinux.org/pacman/libalpm.3.html libalpm(3) 手冊頁面]
 +
* [https://www.archlinux.org/pacman/pacman.8.html pacman(8) 手冊頁面]
 +
* [https://www.archlinux.org/pacman/pacman.conf.5.html pacman.conf(5) 手冊頁面]
 +
* [https://www.archlinux.org/pacman/repo-add.8.html repo-add(8) 手冊頁面]

Revision as of 14:55, 21 December 2013

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: 仍有部分章節尚未翻譯 (Discuss in Talk:Pacman (正體中文)#)

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

另請參閱