6 使用指令行工具管理軟體 #
本章介紹了兩個用於管理軟體的指令行工具︰Zypper 與 RPM。有關在此內容中所使用辭彙的定義 (例如,儲存庫
、修補程序
或更新
),請參閱第 17.1 節 「術語定義」。
6.1 使用 Zypper #
Zypper 是用於安裝、更新和移除套件的指令行套件管理員。它還可管理儲存庫。這部分內容對於執行遠端軟體管理任務或透過外圍程序程序檔管理軟體非常有用。
6.1.1 一般使用情形 #
Zypper 的一般語法為︰
zypper[--global-options]
COMMAND[--command-options]
[arguments]
括號中的部分為非必需。如需一般選項和所有指令的清單,請參閱 zypper help
。若要取得特定指令的說明,請輸入 zypper help
指令。
- Zypper 指令
執行 Zypper 最簡單的方法就是輸入其名稱,後面跟著指令。例如,若要將所有需要的修補程式套用至系統,請使用︰
tux >
sudo
zypper patch- 全域選項
此外,您還可以選擇使用一或多個全域選項,只需在指令前面輸入它們即可︰
tux >
sudo
zypper --non-interactive patch在上述範例中,選項
--non-interactive
表示在不要求輸入任何內容的情況下執行指令 (自動套用預設回答)。- 特定於指令的選項
若要使用特定於特殊指令的選項,請緊接在指令後面輸入這些選項︰
tux >
sudo
zypper patch --auto-agree-with-licenses在上述範例中,
--auto-agree-with-licenses
用於將所有需要的修補程式套用至系統,您不需要確認任何授權條款,而會自動接受授權條款。- 引數
某些指令需要一或多個引數︰例如,使用
install
指令時,需要指定您想要安裝的一或多個套件︰tux >
sudo
zypper install mplayer某些選項還需要單個引數。以下指令會列出所有已知模式︰
tux >
zypper search -t pattern
您可以將上述所有指令組合使用。例如,以下指令將以詳細模式安裝 mc and vim 套件 (來自 factory
儲存庫)︰
tux >
sudo
zypper -v install --from factory mc vim
--from
選項可確保所有儲存庫均處於啟用狀態 (以解決相依性問題),並且始終從指定的儲存庫要求套件。
大部分 Zypper 指令都有一個 dry-run
選項,對指定的指令進行模擬。它可以用於測試。
tux >
sudo
zypper remove --dry-run MozillaFirefox
Zypper 支援 --userdata 字串
全域選項。您可以使用此選項指定一個將會寫入 Zypper 的記錄檔案和外掛程式 (例如 Btrfs 外掛程式) 的字串。它可以用來標示和識別記錄檔案中的異動。
tux >
sudo
zypper --userdata STRING patch
6.1.2 使用 Zypper 安裝和移除軟體 #
若要安裝或移除套件,請使用以下指令︰
tux >
sudo
zypper install PACKAGE_NAME sudo zypper remove PACKAGE_NAME
不要移除必要的系統套件,例如 glibc 、 zypper 、 kernel 。如果移除這些套件,系統可能會變得不穩定,甚至完全停止運作。
6.1.2.1 選取要安裝或移除的套件 #
可以使用 zypper install
和 zypper remove
指令,以多種方法來找到套件。
- 依確切的套件名稱
tux >
sudo
zypper install MozillaFirefox- 依確切的套件名稱和版本號碼
tux >
sudo
zypper install MozillaFirefox-52.2- 依儲存庫別名和套件名稱
tux >
sudo
zypper install mozilla:MozillaFirefoxmozilla
是要安裝套件所在之儲存庫的別名。- 依含萬用字元的套件名稱
您可以選取名稱以特定字串開頭或結尾的所有套件。使用萬用字元時請務必小心,特別是在移除套件時。以下指令將安裝名稱以「Moz」開頭的所有套件︰
tux >
sudo
zypper install 'Moz*'提示:移除所有-debuginfo
套件在給問題除錯時,您有時需要暫時安裝大量
-debuginfo
套件,以取得關於執行中程序的詳細資訊。在完成除錯工作階段後,如果您要清理環境,請執行以下指令︰tux >
sudo
zypper remove '*-debuginfo'- 依功能
例如,若要安裝不知道名稱的套件,這些功能就很有用。下面的指令將安裝套件 MozillaFirefox︰
tux >
sudo
zypper install firefox- 依功能、硬體架構或版本
可以結合功能指定硬體架構和版本︰
所需硬體架構的名稱需附加在功能的後面,兩者以句點分隔。例如,若要指定 AMD64/Intel 64 架構 (在 Zypper 中命名為
x86_64
),請使用︰tux >
sudo
zypper install 'firefox.x86_64'版本必須附加在字串的末尾,並且前面必須使用運算子︰
<
(小於)、<=
(小於等於)、=
(等於)、>=
(大於等於)、>
(大於)。tux >
sudo
zypper install 'firefox>=52.2'也可以同時指定硬體架構與版本︰
tux >
sudo
zypper install 'firefox.x86_64>=52.2'
- 依 RPM 檔案的路徑
您也可以指定套件的本地或遠端路徑︰
tux >
sudo
zypper install /tmp/install/MozillaFirefox.rpmtux >
sudo
zypper install http://download.example.com/MozillaFirefox.rpm
6.1.2.2 同時安裝並移除套件 #
若要同時安裝並移除套件,請使用 +/-
輔助按鍵。若要安裝
emacs
同時移除
vim
,請使用︰
tux >
sudo
zypper install emacs -vim
若要移除 emacs 同時安裝 vim ,請使用︰
tux >
sudo
zypper remove emacs +vim
為了防止將名稱以 -
開頭的套件解譯為指令選項,請一律將此類名稱用做第二個引數。如果行不通,則在前面加上 --
︰
tux >
sudo
zypper install -emacs +vim # Wrongtux >
sudo
zypper install vim -emacs # Correcttux >
sudo
zypper install -- -emacs +vim # Correcttux >
sudo
zypper remove emacs +vim # Correct
6.1.2.3 清理已移除套件的相依性 #
如果想讓系統在移除某套件後自動移除由於此操作而導致不再需要的所有套件,請使用 --clean-deps
選項︰
tux >
sudo
zypper rm PACKAGE_NAME --clean-deps
6.1.2.4 在程序檔中使用 Zypper #
依預設,Zypper 會在安裝或移除所選套件前或出現問題時要求您確認。使用 --non-interactive
選項可覆寫此行為。此選項必須放在實際指令 (install
、remove
和 patch
) 的前面,如下所示︰
tux >
sudo
zypper--non-interactive
install PACKAGE_NAME
此選項允許在程序檔與 cron 工作中使用 Zypper。
6.1.2.5 安裝或下載來源套件 #
若要安裝某個套件對應的來源套件,請使用︰
tux >
zypper source-install PACKAGE_NAME
以 root
身分執行時,來源套件的預設安裝位置為 /usr/src/packages/
;以使用者身分執行時,預設安裝位置為 ~/rpmbuild
。可以在本地 rpm
組態中變更這些值。
使用此指令還會安裝指定套件的建構相依性。如果不想執行此操作,請新增參數 -D
︰
tux >
sudo
zypper source-install -D PACKAGE_NAME
若想單獨安裝建構相依套件,請使用 -d
。
tux >
sudo
zypper source-install -d PACKAGE_NAME
當然,您必須在儲存庫清單中啟用含來源套件的儲存庫 (預設會新增,但不會啟用),此指令才有效。如需有關儲存庫管理的詳細資料,請參閱第 6.1.5 節 「使用 Zypper 管理儲存庫」。
儲存庫中所有可用來源套件的清單可透過以下指令獲得︰
tux >
zypper search -t srcpackage
您還可以將所有已安裝套件的來源套件下載到本地目錄。若要下載來源套件,請使用︰
tux >
zypper source-download
預設下載目錄為 /var/cache/zypper/source-download
。您可以使用 --directory
選項變更該目錄。若只想顯示遺失或多餘的套件而不進行任何下載或刪除操作,請使用 --status
選項。若要刪除多餘的來源套件,請使用 --delete
選項。若要停用刪除操作,請使用 --no-delete
選項。
6.1.2.6 從已停用的儲存庫安裝套件 #
通常,您只能安裝或重新整理來自啟用的儲存庫的套件。--plus-content 標記
選項可協助您指定要重新整理的、要在目前 Zypper 工作階段期間暫時啟用的,以及要在工作階段完成後停用的儲存庫。
例如,若要啟用可以提供其他 -debuginfo
或 -debugsource
套件的儲存庫,請使用 --plus-content debug
。可以多次指定此選項。
若要暫時啟用此類「除錯」儲存庫以安裝特定的 -debuginfo
套件,請依如下所示使用該選項︰
tux >
sudo
zypper --plus-content debug \ install "debuginfo(build-id)=eb844a5c20c70a59fc693cd1061f851fb7d046f4"
對於缺失的 debuginfo 套件,gdb
會報告 build-id
字串。
6.1.2.7 公用程式 #
若要驗證是否仍滿足所有相依條件並執行未滿足的相依條件,請使用︰
tux >
zypper verify
除了必須滿足的相依條件之外,一些套件還會「推薦」其他套件。這些推薦的套件只有在確實可用並可安裝時才會進行安裝。如果所推薦的套件在推薦方套件安裝之後 (透過新增其他套件或硬體) 才可用,請使用以下指令︰
tux >
sudo
zypper install-new-recommends
此指令在接入網路攝影機或 Wi-Fi 裝置後非常有用。它將安裝裝置的驅動程式及相關軟體 (如果有)。驅動程式及相關軟體只有在符合了某些硬體相依性條件後才可安裝。
6.1.3 使用 Zypper 更新軟體 #
Zypper 有三種方法更新軟體︰安裝修補程式、安裝新版本的套件或更新整個套裝作業系統。最後一種方法可藉由 zypper dist-upgrade
來實現。中介紹了如何升級 SUSE Linux Enterprise Server第 1 章 「升級路徑和方法」。
6.1.3.1 安裝全部所需的修補程式 #
若要安裝所有正式發佈且適用於您系統的修補程式,請執行︰
tux >
sudo
zypper patch
系統會檢查您電腦上設定的,來自儲存庫的所有修補程式是否與您的安裝相關。如果相關 (未分類為選擇性
或功能
),則立即安裝這些修補程式。請注意,正式的更新儲存庫僅在註冊 SUSE Linux Enterprise Server 安裝之後才可用。
如果要安裝的修補程式所包含的變更需要將系統重新開機才能生效,您事先會收到警告。
單純使用 zypper patch
指令不會套用來自協力廠商儲存庫的套件。若要同時更新協力廠商儲存庫,請使用 with-update
指令選項,如下所示︰
tux >
sudo
zypper patch --with update
若要額外安裝選擇性修補程式,請使用︰
tux >
sudo
zypper patch --with-optional
若要安裝與特定 Bugzilla 問題相關的所有修補程式,請使用︰
tux >
sudo
zypper patch --bugzilla=NUMBER
若要安裝與特定 CVE 資料庫項目相關的所有修補程式,請使用︰
tux >
sudo
zypper patch --cve=NUMBER
例外,若要安裝 CVE 編號為 CVE-2010-2713
的安全性修補程式,請執行︰
tux >
sudo
zypper patch --cve=CVE-2010-2713
若您只想安裝影響 Zypper 和套件管理本身的修補程式,請使用︰
tux >
sudo
zypper patch --updatestack-only
請記住,如果您使用 updatestack-only
指令選項,將會丟棄原本還會更新其他儲存庫的其他指令選項。
6.1.3.2 列出修補程式 #
為了讓您確定修補程式是否可用,Zypper 允許您檢視以下資訊︰
- 所需修補程式的數量
若要列出所需修補程式的數量 (適用於您系統但尚未安裝的修補程式),請使用
patch-check
︰tux >
zypper patch-check Loading repository data... Reading installed packages... 5 patches needed (1 security patch)可以結合
--updatestack-only
選項使用此指令,以便僅列出影響 Zypper 和套件管理本身的修補程式。- 所需修補程式的清單
若要列出全部所需的修補程式 (適用於您系統但尚未安裝的修補程式),請使用
list-patches
︰tux >
zypper list-patches Loading repository data... Reading installed packages... Repository | Name | Version | Category | Status | Summary ---------------+-------------+---------+----------+---------+--------- SLES12-Updates | SUSE-2014-8 | 1 | security | needed | openssl: Update for OpenSSL- 所有修補程式的清單
若要列出可用於 SUSE Linux Enterprise Server 的所有修補程式,而不論它們是否已安裝或是否適用於您的安裝,請使用
zypper patches
。
還會列出與特定問題相關的修補程式並加以安裝。若要列出特定的修補程式,請使用 zypper list-patches
指令及以下選項︰
- 依 Bugzilla 問題
若要列出與 Bugzilla 問題相關的全部所需修補程式,請使用
--bugzilla
選項。若要列出針對特定錯誤的修補程式,您也可以指定錯誤編號︰
--bugzilla=編號
。若要搜尋與多個 Bugzilla 問題相關的修補程式,請在錯誤號碼之間插入逗號,例如︰tux >
zypper list-patches --bugzilla=972197,956917- 依 CVE 號碼
若要列出與 CVE (通用弱點與揭露) 資料庫中某個項目相關的全部所需修補程式,請使用
--cve
選項。若要列出針對特定 CVE 資料庫項目的修補程式,您也可以指定 CVE 編號︰
--cve=編號
。若要搜尋與多個 CVE 資料庫項目相關的修補程式,請在 CVE 號碼之間插入逗號,例如︰tux >
zypper list-patches --bugzilla=CVE-2016-2315,CVE-2016-2324
若要列出所有修補程式而不論是否需要安裝它們,請額外使用 --all
選項。例如,若要列出指定有 CVE 號碼的所有修補程式,請使用︰
tux >
zypper list-patches --all --cve
Issue | No. | Patch | Category | Severity | Status
------+---------------+-------------------+-------------+-----------+----------
cve | CVE-2015-0287 | SUSE-SLE-Module.. | recommended | moderate | needed
cve | CVE-2014-3566 | SUSE-SLE-SERVER.. | recommended | moderate | not needed
[...]
6.1.3.3 安裝新的套件版本 #
如果儲存庫中只含有新套件,但未提供修補程式,則 zypper patch
不起任何作用。若要使用可用的較新版本更新所有安裝的套件 (同時維持系統完整性),請使用︰
tux >
sudo
zypper update
若要更新個別套件,請在更新或安裝指令中指定套件︰
tux >
sudo
zypper update PACKAGE_NAME sudo zypper install PACKAGE_NAME
所有可安裝的新套件的清單可透過以下指令獲得︰
tux >
zypper list-updates
請注意,此指令只會列出符合以下準則的套件︰
與已安裝套件具有相同的廠商,
提供套件的儲存庫相較於已安裝套件,擁有更高或相同的優先程度,
可安裝 (符合所有相依性條件)。
所有新可用套件 (無論是否可安裝) 的清單可透過以下指令獲得︰
tux >
sudo
zypper list-updates --all
若要找出新套件無法安裝的原因,請依上文所述使用 zypper install
或 zypper update
指令。
6.1.3.4 識別孤立的套件 #
每當您從 Zypper 中移除某個儲存庫或者升級系統時,某些套件可能會進入「孤立」狀態。這些孤立的套件不再屬於任何使用中的儲存庫。以下指令可以列出這些套件︰
tux >
sudo
zypper packages --orphaned
有了這份清單,您可以確定是否仍然需要某個套件,或者是否可以安全移除某個套件。
6.1.4 識別使用已刪除檔案的程序和服務 #
在修補、更新或移除套件時,系統上可能有一些執行中的程序仍在使用更新或移除過後已刪除的檔案。執行 zypper ps
可以列出使用已刪除檔案的程序。如果此類程序屬於某個已知的服務,則會列出服務名稱,方便您重新啟動該服務。zypper ps
預設會顯示一個表格︰
tux >
zypper ps
PID | PPID | UID | User | Command | Service | Files
------+------+-----+-------+--------------+--------------+-------------------
814 | 1 | 481 | avahi | avahi-daemon | avahi-daemon | /lib64/ld-2.19.s->
| | | | | | /lib64/libdl-2.1->
| | | | | | /lib64/libpthrea->
| | | | | | /lib64/libc-2.19->
[...]
PID︰程序的 ID |
PPID︰父程序的 ID |
UID︰執行程序之使用者的 ID |
Login︰執行程序之使用者的登入名稱 |
Command︰用於執行程序的指令 |
Service︰服務名稱 (僅當指令與系統服務關聯時才顯示) |
Files︰已刪除的檔案清單 |
可依如下所示控制 zypper ps
的輸出格式︰
zypper ps
-s
建立一份簡短表格,其中不會顯示已刪除的檔案。
tux >
zypper ps -s PID | PPID | UID | User | Command | Service ------+------+------+---------+--------------+-------------- 814 | 1 | 481 | avahi | avahi-daemon | avahi-daemon 817 | 1 | 0 | root | irqbalance | irqbalance 1567 | 1 | 0 | root | sshd | sshd 1761 | 1 | 0 | root | master | postfix 1764 | 1761 | 51 | postfix | pickup | postfix 1765 | 1761 | 51 | postfix | qmgr | postfix 2031 | 2027 | 1000 | tux | bash |zypper ps
-ss
僅顯示與系統服務關聯的程序。
PID | PPID | UID | User | Command | Service ------+------+------+---------+--------------+-------------- 814 | 1 | 481 | avahi | avahi-daemon | avahi-daemon 817 | 1 | 0 | root | irqbalance | irqbalance 1567 | 1 | 0 | root | sshd | sshd 1761 | 1 | 0 | root | master | postfix 1764 | 1761 | 51 | postfix | pickup | postfix 1765 | 1761 | 51 | postfix | qmgr | postfix
zypper ps
-sss
僅顯示使用已刪除檔案的系統服務。
avahi-daemon irqbalance postfix sshd
zypper ps
--print "systemctl status %s"
顯示用於取回可能需要重新啟動的服務之狀態的指令。
systemctl status avahi-daemon systemctl status irqbalance systemctl status postfix systemctl status sshd
如需服務處理的詳細資訊,請參閱第 13 章 「systemd
精靈」。
6.1.5 使用 Zypper 管理儲存庫 #
Zypper 的所有安裝或修補指令均依賴於一系列已知的儲存庫。若要列出系統可識別的所有儲存庫,請使用指令︰
tux >
zypper repos
結果類似於以下輸出︰
tux >
zypper repos
# | Alias | Name | Enabled | Refresh
--+--------------+---------------+---------+--------
1 | SLEHA-12-GEO | SLEHA-12-GEO | Yes | No
2 | SLEHA-12 | SLEHA-12 | Yes | No
3 | SLES12 | SLES12 | Yes | No
在各種指令中指定儲存庫時,可以使用 zypper repos
指令輸出的別名、URI 或儲存庫編號。儲存庫別名是儲存庫名稱的縮寫形式,用於儲存庫處理指令。請注意,修改儲存庫清單後,儲存庫的編號可能會發生變更。但別名永遠不會自行變更。
依預設,不會顯示儲存庫的詳細資料 (如 URI 或優先程度)。若要列出所有詳細資料,可以使用以下指令︰
tux >
zypper repos -d
6.1.5.1 新增儲存庫 #
若要新增儲存庫,請執行
tux >
sudo
zypper addrepo URI ALIAS
URI 可以是網際網路儲存庫、網路資源、目錄,也可以是 CD 或 DVD (如需詳細資料,請造訪 http://en.opensuse.org/openSUSE:Libzypp_URIs)。ALIAS 是儲存庫的唯一縮寫識別碼。您可以隨意選擇,前提是它必須是唯一的。如果指定了已使用的別名,Zypper 會發出警告。
6.1.5.2 重新整理儲存庫 #
zypper
可讓您從設定的儲存庫中擷取套件中的變更。若要擷取變更,請執行︰
tux >
sudo
zypper refresh
zypper
的預設行為
有些指令預設會自動執行 refresh
,因此您不需要明確執行該指令。
使用 refresh
指令時搭配 --plus-content
選項還可檢視已停用儲存庫中的變更︰
tux >
sudo
zypper --plus-content refresh
該選項雖然會擷取儲存庫中的變更,但會使已停用儲存庫的狀態保持不變,即仍為停用。
6.1.5.3 移除儲存庫 #
若要從清單中移除某個儲存庫,請將指令 zypper removerepo
與要刪除的儲存庫的別名或編號結合使用。例如,若要從範例 6.1 「Zypper — 已知儲存庫的清單」中移除儲存庫 SLEHA-12-GEO
,請使用下列其中一個指令︰
tux >
sudo
zypper removerepo 1tux >
sudo
zypper removerepo "SLEHA-12-GEO"
6.1.5.4 修改儲存庫 #
zypper modifyrepo
可以啟用或停用儲存庫。您也可以使用此指令變更儲存庫的內容 (如重新整理行為、名稱或優先程度)。以下指令將啟用名為 updates
的儲存庫,開啟自動重新整理功能,並將優先程度設為 20︰
tux >
sudo
zypper modifyrepo -er -p 20 'updates'
修改儲存庫並不局限於單個儲存庫,您也可以對群組執行該操作︰
-a ︰所有儲存庫 |
-l ︰本地儲存庫 |
-t ︰遠端儲存庫 |
-m 類型 ︰某種類型的儲存庫 (其中類型可以是以下其中一種︰http 、https 、ftp 、cd 、dvd 、dir 、file 、cifs 、smb 、nfs 、hd 、iso ) |
若要重新命名儲存庫別名,請使用 renamerepo
指令。以下範例會將別名 Mozilla Firefox
變更為 firefox
︰
tux >
sudo
zypper renamerepo 'Mozilla Firefox' firefox
6.1.6 使用 Zypper 查詢儲存庫和套件 #
Zypper 提供多種方法來查詢儲存庫或套件。若要獲得所有可用產品、模式、套件或修補程式的清單,請使用以下指令︰
tux >
zypper productstux >
zypper patternstux >
zypper packagestux >
zypper patches
若要在所有儲存庫中查詢某些套件,請使用 search
。若要獲得有關特定套件的資訊,請使用 info
指令。
6.1.6.1 搜尋軟體 #
zypper search
指令可以對套件名稱或 (視情況) 對套件摘要及描述進行搜尋。以 /
括住的字串會解譯為規則運算式。依預設,搜尋不區分大小寫。
- 執行簡單搜尋以尋找包含
fire
的套件名稱 tux >
zypper search "fire"- 執行簡單搜尋以尋找確切的套件
MozillaFirefox
tux >
zypper search --match-exact "MozillaFirefox"- 同時在套件描述和摘要中搜尋
tux >
zypper search -d fire- 僅顯示尚未安裝的套件
tux >
zypper search -u fire- 顯示包含字串
fir
且該字串後面不是e
的套件 tux >
zypper se "/fir[^e]/"
6.1.6.2 搜尋特定功能 #
若要搜尋提供特殊功能的套件,請使用指令 what-provides
。例如,如果您想瞭解哪個套件提供 Perl 模組 SVN::Core
,請使用以下指令︰
tux >
zypper what-provides 'perl(SVN::Core)'
what-provides 套件名稱
與 rpm -q --whatprovides
套件名稱類似,不過,RPM 只能查詢 RPM 資料庫 (即所有已安裝套件的資料庫)。另外,Zypper 會告知您任何儲存庫功能的提供者,而不是只有已安裝的儲存庫。
6.1.6.3 顯示套件資訊 #
若要查詢單個套件,請在 info
指令中使用準確的套件名稱做為引數。這會顯示有關某個套件的詳細資訊。如果套件名稱與儲存庫中的所有套件名稱都不相符,該指令會輸出非套件相符項目的詳細資訊。如果您 (透過使用 -t
選項) 要求特定類型,但該類型不存在,該指令會輸出其他可用的相符項,但不提供詳細資訊。
如果您指定來源套件,該指令會顯示基於該來源套件建立的二進位套件。如果指定二進位套件,該指令會輸出用來建立該二進位套件的來源套件。
如果還想顯示套件所需/推薦的項目,請使用選項 --requires
和 --recommends
︰
tux >
zypper info --requires MozillaFirefox
6.1.7 顯示生命週期資訊 #
SUSE 產品的支援週期一般為 10 年。通常,您可以使用 SUSE 的延伸支援產品將標準生命週期延長 3 年。根據您的產品,在 https://www.suse.com/lifecycle 中找到具體的支援生命週期。
若要檢查您的產品和所支援套件的生命週期,請依下面的方式使用 zypper lifecycle
指令︰
root #
zypper lifecycle
Product end of support Codestream: SUSE Linux Enterprise Server 15 2028-04-23 SUSE Linux Enterprise Server 15 n/a* Module end of support Basesystem Module 2021-07-31 No packages with end of support different from product. *) See https://www.suse.com/lifecycle for latest information
6.1.8 設定 Zypper #
Zypper 現隨附一個組態檔案,透過該檔案可永久變更 Zypper 的行為 (整個系統範圍或僅針對特定使用者)。對於系統範圍的變更,請編輯 /etc/zypp/zypper.conf
。對於特定使用者的變更,請編輯 ~/.zypper.conf
。如果 ~/.zypper.conf
尚不存在,您可以使用 /etc/zypp/zypper.conf
做為樣板︰將其複製到 ~/.zypper.conf
並根據喜好進行調整。如需有關可用選項的說明,請參閱檔案中的備註。
6.1.9 疑難排解 #
如果您在存取所設定儲存庫中的套件時遇到問題 (例如,儘管您知道某個套件在某個儲存庫中,但 Zypper 找不到該套件),重新整理儲存庫或許可以解決問題︰
tux >
sudo
zypper refresh
如果不起作用,請嘗試
tux >
sudo
zypper refresh -fdb
此指令會強制執行全面的重新整理和資料庫重建,包括強制下載原始中繼資料。
6.1.10 Btrfs 檔案系統上的 Zypper 復原功能 #
如果根分割區上使用的是 Btrfs 檔案系統,且系統中安裝了 snapper
,當 Zypper 提交對檔案系統所做的變更以建立相應的檔案系統快照時,會自動呼叫 snapper
。這些快照可用於回復 Zypper 進行的任何變更。如需相關資訊,請參閱第 7 章 「使用 Snapper 進行系統復原和快照管理」。
6.1.11 更多資訊 #
如需透過指令行管理軟體的詳細資訊,請輸入 zypper help
、zypper help
指令,或參閱 zypper(8)
手冊頁。如需詳盡的指令參考、最重要指令的彙總表
,以及有關如何在程序檔和應用程式中使用 Zypper 的資訊,請參閱 http://en.opensuse.org/SDB:Zypper_usage。最新 SUSE Linux Enterprise Server 版本的軟體變更清單可在 http://en.opensuse.org/openSUSE:Zypper versions 中找到。
6.2 RPM──套件管理員 #
RPM (RPM 套件管理員) 用於管理軟體套件。主要指令為 rpm
及 rpmbuild
。使用者、系統管理員和套件建立者可以在功能強大的 RPM 資料庫中查詢已安裝軟體的詳細資訊。
rpm
有五種模式︰安裝、解除安裝 (或更新) 軟體套件、重建 RPM 資料庫、查詢 RPM 庫或個別的 RPM 歸檔、對套件執行完整性檢查,以及簽署套件。rpmbuild
可用於建立初始來源的可安裝套件。
可安裝的 RPM 歸檔以特殊二進位格式包裝封裝。這些歸檔由要安裝的程式檔和 rpm
在安裝期間用來設定軟體套件或儲存在 RPM 資料庫中供記錄之用的特定中繼資訊所組成。RPM 歸檔的副檔名通常為 .rpm
。
對於多個套件,軟體開發所需的元件 (程式庫、標題、包含檔案等) 已置於獨立的套件中。只有在您想要自行編譯軟體 (例如,最新的 GNOME 套件) 時,才需要這些開發套件。根據副檔名 -devel
即可識別出這些套件,例如 alsa-devel
和 gimp-devel
套件。
6.2.1 確認套件驗證性 #
RPM 套件具有 GPG 簽名。若要驗證 RPM 套件的簽名,請使用 rpm --checksig
PACKAGE-1.2.3.rpm 指令來確定該套件是來自 SUSE 還是另一個可信機構。特別建議在從網際網路更新套件時使用此指令。
修復作業系統中的問題時,您可能需要將問題暫時修復 (PTF) 安裝到線上系統中。SUSE 提供的套件已使用特殊 PTF 金鑰簽署。但是,與 SUSE Linux Enterprise 11 相比,在 SUSE Linux Enterprise 12 系統上,預設不會輸入此金鑰。若要手動輸入該金鑰,請使用以下指令︰
tux >
sudo
rpm --import \ /usr/share/doc/packages/suse-build-key/suse_ptf_key.asc
輸入該金鑰後,您可以在系統上安裝 PTF 套件。
6.2.2 管理套件︰安裝、更新和解除安裝 #
一般而言,安裝 RPM 歸檔很簡單,只需執行︰rpm -i
PACKAGE.rpm。使用此指令可安裝套件,但是必須滿足其相依性條件,而且不能與其他套件衝突。如果 rpm
要求要安裝的套件必須符合相依性要求,會顯示錯誤訊息。RPM 資料庫會在背景確定未產生衝突,亦即特定檔案僅可屬於一個套件。藉由選擇不同選項,您可以強迫 rpm
忽略這些預設,但只有進階使用者才可以這樣做。否則,會危及系統完整性,還可能危害更新系統的能力。
選項 -U
或 --upgrade
以及 -F
或 --freshen
可用於更新套件 (例如,rpm -F
PACKAGE.rpm)。此指令會移除舊版的檔案,並立刻安裝新檔案。兩個版本之間的差別是︰-U
會安裝先前系統中沒有的套件,而 -F
僅更新先前安裝的套件。在更新時,rpm
會使用下列策略小心地更新組態檔︰
如果系統管理員未變更組態檔,
rpm
會安裝新版本的相應檔案。系統管理員不需要做任何動作。如果更新前系統管理員曾變更組態檔案,則
rpm
會以副檔名.rpmorig
或.rpmsave
(備份檔案) 儲存變更的檔案,並安裝新套件中的版本。僅當原先安裝的檔案和較新的版本不同時,才執行此操作。在這種情況下,請比較備份檔案 (.rpmorig
或.rpmsave
) 與新安裝的檔案,然後再對新檔案做一次變更。之後,請刪除所有.rpmorig
和.rpmsave
檔案,以免日後的更新出現問題。如果組態檔已存在,且如果在
.spec
檔案中指定了noreplace
標籤,便會出現.rpmnew
檔案。
在更新之後,應該在比較完 .rpmsave
和 .rpmnew
之後將它們移除,才不會妨礙未來的更新。如果 RPM 資料庫之前無法辨識檔案,會指定 .rpmorig
副檔名。
否則,會使用 .rpmsave
。換言之,.rpmorig
是在將外來格式更新為 RPM 後產生的。.rpmsave
是在將舊版 RPM 更新為新版 RPM 後產生的。.rpmnew
不會透露任何關於系統管理員是否曾對組態檔案做過任何變更的資訊。可在 /var/adm/rpmconfigcheck
找到這些檔案的清單。部分組態檔 (如 /etc/httpd/httpd.conf
) 不會覆寫以允許後續操作。
-U
參數的作用並不完全等同於使用 -e
選項進行解除安裝,以及使用 -i
選項進行安裝,它還有其他作用。如果可能,請使用 -U
。
若要移除套件,請輸入 rpm -e
PACKAGE。此指令只在不存在未解決的相依性問題時才會刪除套件。只要其他應用程式還需要它,理論上無法刪除 Tcl/Tk。即使是這種情況下,RPM 還是可從資料庫呼叫以得到協助。如果由於某種原因無法進行這樣的刪除操作 (即使不存在其他相依性問題),或許可以使用選項 --rebuilddb
來重建 RPM 資料庫。
6.2.3 增量 RPM 套件 #
增量 RPM 套件包含舊版與新版 RPM 套件之間的差異。將增量 RPM 套用到舊版 RPM 上會產生一個全新的 RPM。但是您不需要取得舊版的 RPM,因為增量 RPM 也可以和安裝的 RPM 配合使用。增量 RPM 套件的大小比修補程式 RPM 還小,這一特點有利於透過網際網路傳送更新套件。缺點是使用增量 RPM 的更新作業會比一般或修補程式 RPM 消耗更多的 CPU 週期。
makedeltarpm
和 applydelta
二進位檔案屬於增量 RPM 套裝軟體 (deltarpm
套件) 的一部分,可協助您建立並套用增量 RPM 套件。您可以使用下列指令建立名稱為 new.delta.rpm
的增量 RPM。下列指令假設 old.rpm
和 new.rpm
都已存在︰
tux >
sudo
makedeltarpm old.rpm new.rpm new.delta.rpm
如果已經安裝舊套件,使用 applydeltarpm
即可從檔案系統重新建構新 RPM︰
tux >
sudo
applydeltarpm new.delta.rpm new.rpm
若不要存取檔案系統,而要從舊 RPM 產生新 RPM,請使用 -r
選項︰
tux >
sudo
applydeltarpm -r old.rpm new.delta.rpm new.rpm
如需技術詳細資訊,請參閱 /usr/share/doc/packages/deltarpm/README
。
6.2.4 RPM 查詢 #
rpm
指令在使用 -q
選項時會啟動查詢,以便檢查 RPM 歸檔 (藉由新增選項 -p
),並查詢所安裝套件的 RPM 資料庫。有多個切換參數可用於指定所需的資訊類型。請參閱表格 6.1 「最重要的 RPM 查詢選項」。
|
套件資訊 |
|
檔案清單 |
|
查詢包含 FILE 檔案的套件 (完整的路徑必須以 FILE 指定) |
|
含有狀態資訊的檔案清單 (隱含 |
|
只列出文件檔案 (隱含 |
|
只列出組態檔案 (隱含 |
|
含有完整詳細資訊的檔案清單 (與 |
|
列出另一個套件可以使用 |
|
套件所需的功能 |
|
安裝程序檔 (預先安裝、後續安裝、解除安裝) |
例如,rpm -q -i wget
指令可顯示如 範例 6.2 「rpm -q -i wget
」 中所示的資訊。
Name : wget Version : 1.14 Release : 17.1 Architecture: x86_64 Install Date: Mon 30 Jan 2017 14:01:29 CET Group : Productivity/Networking/Web/Utilities Size : 2046483 License : GPL-3.0+ Signature : RSA/SHA256, Thu 08 Dec 2016 07:48:44 CET, Key ID 70af9e8139db7c82 Source RPM : wget-1.14-17.1.src.rpm Build Date : Thu 08 Dec 2016 07:48:34 CET Build Host : sheep09 Relocations : (not relocatable) Packager : https://www.suse.com/ Vendor : SUSE LLC <https://www.suse.com/> URL : http://www.gnu.org/software/wget/ Summary : A Tool for Mirroring FTP and HTTP Servers Description : Wget enables you to retrieve WWW documents or FTP files from a server. This can be done in script files or via the command line. Distribution: SUSE Linux Enterprise 12
只有在您指令完整檔案名稱及完整路徑時,選項 -f
才會有作用。盡可能提供很多檔案名稱。例如︰
tux >
rpm -q -f /bin/rpm /usr/bin/wget
rpm-4.11.2-15.1.x86_64
wget-1.14-17.1.x86_64
如果只知道檔案名稱的一部分,可使用範例 6.3 「搜尋套件的程序檔」中所示的外圍程序檔。執行時,可將部份檔案名稱當作參數傳給程序檔。
#! /bin/sh for i in $(rpm -q -a -l | grep $1); do echo "\"$i\" is in package:" rpm -q -f $i echo "" done
rpm -q --changelog
PACKAGE 指令會顯示有關特定套件的詳細變更資訊清單,並依日期排序。
藉由安裝的 RPM 資料庫,可執行驗證檢查。這些檢查可以使用 -V
或 --verify
來啟動。使用此選項,rpm
可顯示從安裝開始,套件中所有變更過的檔案。rpm
使用八個字元的符號來提供下列變更的提示︰
|
MD5 檢查總數 |
|
檔案大小 |
|
符號連結 |
|
修改時間 |
|
主要和次要的裝置編號 |
|
擁有者 |
|
群組 |
|
模式 (許可權和檔案類型) |
如果是組態檔,會印出字母 c
。例如,若 /etc/wgetrc
(wget
套件) 有變更︰
tux >
rpm -V wget
S.5....T c /etc/wgetrc
RPM 資料庫的檔案放在 /var/lib/rpm
。如果分割區 /usr
的大小為 1 GB,此資料庫將佔用 30 MB 左右的空間,尤其是在完整更新之後。如果資料庫遠大於預期,使用選項 --rebuilddb
來重建資料庫很有用。在執行之前,請備份舊的資料庫。cron
程序檔 cron.daily
會對資料庫做每日備份 (以 gzip 封裝),並將備份儲存在 /var/adm/backup/rpmdb
中。副本數量由 /etc/sysconfig/backup
中的變數 MAX_RPMDB_BACKUPS
(預設值︰5
) 控制。單一備份的大小大約是 1 GB 的 /usr
備份成 1 MB。
6.2.5 安裝與編譯來源套件 #
所有來源套件均帶有副檔名 .src.rpm
(來源 RPM)。
來源套件可從安裝媒體複製到硬碟,並用 YaST 解壓縮。但是,在套件管理員中,它們不會被標示為已安裝 ([i]
)。這是因為來源套件沒有輸入 RPM 資料庫中。只有已安裝的作業系統軟體會列在 RPM 資料庫中。您在「安裝」來源套件時,僅會將原始程式碼新增到系統中。
在 /usr/src/packages
中必須可以找到 rpm
和 rpmbuild
的下列目錄 (除非您在如 /etc/rpmrc
的檔案中指定自訂設定)︰
SOURCES
用於原始來源 (
.tar.bz2
或.tar.gz
檔案等) 和配送特定調整 (大部份是.diff
或.patch
檔案)SPECS
用於
.spec
檔案,和中繼 Makefile 相似,可控制 build 程序BUILD
所有來源均在此目錄中解壓縮、修補和編譯
RPMS
儲存完整二進位套件的地方
SRPMS
此處為來源 RPM
當您使用 YaST 安裝來源套件時,所有需要的元件都會安裝在 /usr/src/packages
中︰SOURCES
中的來源和調整以及 SPECS
中的相關 .spec
文件。
請不要以系統元件 (glibc
、rpm
等) 做試驗,因為這樣會危害系統的穩定性。
以下範例使用 wget.src.rpm
套件。安裝來源套件之後,會獲得類似下列清單中所列的檔案︰
/usr/src/packages/SOURCES/wget-1.11.4.tar.bz2 /usr/src/packages/SOURCES/wgetrc.patch /usr/src/packages/SPECS/wget.spec
rpmbuild
-bX
/usr/src/packages/SPECS/wget.spec
可開始編譯。X 代表建立程序各種階段的萬用字元 (請參閱 --help
的輸出或 RPM 文件以取得詳細資訊)。以下僅為簡略的說明︰
-bp
在
/usr/src/packages/BUILD
中準備來源︰解壓縮和修補。-bc
執行與
-bp
相同動作,但是會額外編譯。-bi
執行與
-bp
相同的動作,但是會額外安裝建立的軟體。警告︰如果套件不支援 BuildRoot 功能,您可能會覆寫組態檔。-bb
執行與
-bi
相同的動作,但是會額外建立二進位套件。如果編譯成功,二進位應該在/usr/src/packages/RPMS
。-ba
執行與
-bb
相同的動作,但是會額外建立來源 RPM。如果編譯成功,二進位應該在/usr/src/packages/SRPMS
。--short-circuit
略過部分步驟。
現在可使用 rpm
-i
(最好使用 rpm
-U
) 來安裝所建立的二進位 RPM。使用 rpm
來安裝會讓它出現在 RPM 資料庫中。
請記住,從 SUSE Linux Enterprise Server 12 開始,已棄用規格檔案中的 BuildRoot
指令。如果您仍然需要此功能,請使用 --buildroot
選項做為因應措施。如需更詳細的背景,請造訪 https://www.suse.com/support/kb/doc?id=7017104 並檢視其中的支援資料庫。
6.2.6 以 build 編譯 RPM 套件 #
許多套件中都包含不想要的檔案,它們會在 build 程序中增到執行系統中,因為導致危險產生。若要避免此狀況,可以使用 build
,它會建立要在其中建置套件的定義環境。若要建立此 chroot 環境,必須提供 build
程序檔與完整的套件樹狀結構。此樹狀結構可在硬碟上、透過 NFS 或從 DVD 取得。使用 build --rpms
DIRECTORY 設定位置。與 rpm
不同,build
指令在來源目錄中尋找 .spec
檔。若要以掛接在系統的 /media/dvd
之下的 DVD 建立 wget
(如上面的範例),請以 root
身分執行下列指令︰
root #
cd /usr/src/packages/SOURCES/root #
mv ../SPECS/wget.spec .root #
build --rpms /media/dvd/suse/ wget.spec
之後,系統便會在 /var/tmp/build-root
中建立一個最小的環境。套件將於此環境中建立。完成時,結果套件位於 /var/tmp/build-root/usr/src/packages/RPMS
中。
build
程序檔提供其他多個選項。例如,讓程序檔偏好使用您自己的 RPM、省略建置環境的啟始化,或將 rpm
指令限制在上述某個階段。可使用 build
--help
以及參閱 build
man 頁面來存取其他資訊。
6.2.7 RPM 歸檔和 RPM 資料庫工具 #
Midnight Commander (mc
) 可顯示 RPM 歸檔的內容,並複製部分內容。它將歸檔以虛擬檔案系統呈現,提供 Midnight Commander 的所有常見功能表選項。使用 F3 可顯示 HEADER
。使用游標和 Enter 可檢視歸檔結構。使用 F5 可複製歸檔元件。
具有完整功能的套件管理員是以 YaST 模組的方式提供。如需詳細資料,請參閱第 17 章 「安裝或移除軟體」。