管理指南
本指南介紹系統管理任務,例如維護、監控和自訂初始安裝的系統。
- 前言
- I 一般任務
- II 將 Linux 系統開機
- III 系統
- IV 服務
- V 疑難排解
- A 範例網路
- B GNU licenses
- 4.1 文字模式下的 YaST 主視窗
- 4.2 軟體安裝模組
- 5.1 YaST 線上更新
- 5.2 YaST 線上更新組態
- 7.1 開機載入程式:快照
- 10.1 vncviewer
- 10.2 Remmina 的主視窗
- 10.3 遠端桌面優先設定
- 10.4 快速啟動
- 10.5 正在檢視遠端工作階段的 Remmina
- 10.6 讀取設定檔的路徑
- 10.7 遠端管理
- 10.8 VNC 工作階段設定
- 10.9 加入永久 VNC 工作階段
- 13.1 安全開機支援
- 13.2 UEFI:安全開機程序
- 14.1 GRUB 2 開機編輯器
- 14.2 開機代碼選項
- 14.3 代碼選項
- 14.4 開機載入程式選項
- 14.5 核心參數
- 15.1 服務管理員
- 17.1 YaST systemd 日誌
- 19.1 TCP/IP 的簡化層模型
- 19.2 TCP/IP 乙太網路封包
- 19.3 組態網路設定
- 19.4
wicked
架構 - 26.1 GNOME 網路連接對話方塊
- 26.2 NetworkManager 中的
firewalld
區域 - 29.1 YaST 服務管理員
- 30.1 NTP 組態視窗
- 30.2 新增時間伺服器
- 31.1 DNS 伺服器安裝:轉遞者設定
- 31.2 DNS 伺服器安裝:DNS 區域
- 31.3 DNS 伺服器安裝:完成精靈
- 31.4 DNS 伺服器:記錄
- 31.5 DNS 伺服器:區域編輯器 (基本)
- 31.6 DNS 伺服器:區域編輯器 (NS 記錄)
- 31.7 DNS 伺服器:區域編輯器 (MX 記錄)
- 31.8 DNS 伺服器:區域編輯器 (SOA)
- 31.9 為主要區域新增記錄
- 31.10 新增反向區域
- 31.11 新增反向記錄
- 32.1 DHCP 伺服器:介面卡選項
- 32.2 DHCP 伺服器:全域設定
- 32.3 DHCP 伺服器:動態 DHCP
- 32.4 DHCP 伺服器:啟動
- 32.5 DHCP 伺服器:主機管理
- 32.6 DHCP 伺服器:Chroot Jail 和宣告
- 32.7 DHCP 伺服器:選取宣告類型
- 32.8 DHCP 伺服器:設定子網路
- 32.9 DHCP 伺服器:TSIG 組態
- 32.10 DHCP 伺服器:動態 DNS 的介面組態
- 32.11 DHCP 伺服器:網路介面和防火牆
- 34.1 HTTP 伺服器精靈:預設主機
- 34.2 HTTP 伺服器精靈:摘要
- 34.3 HTTP 伺服器組態:監聽連接埠和位址
- 34.4 HTTP 伺服器組態:伺服器模組
- 35.1 FTP 伺服器組態 — 啟動
- 39.1 SCA 工具產生的 HTML 報告
- 39.2 SCA 裝置產生的 HTML 報告
- 1.1 登入外圍程序的 Bash 組態檔案
- 1.2 非登入外圍程序的 Bash 組態檔案
- 1.3 用於 Bash 的特殊檔案
- 1.4 標準目錄樹狀結構綜覽
- 1.5 有用的環境變數
- 6.1 基本 RPM 查詢選項
- 6.2 RPM 驗證選項
- 15.1 服務管理指令
- 15.2 用於啟用和停用服務的指令
- 15.3 System V 執行層級和
systemd
目標單位 - 19.1 私人 IP 位址網域
- 19.2 /etc/host.conf 的參數
- 19.3 透過 /etc/nsswitch.conf 可用的資料庫
- 19.4 NSS「資料庫」的組態選項
- 19.5 結合與組合的功能比較
- 21.1 從 fontconfig 規則產生 PFL
- 21.2 從變更了順序的 fontconfig 規則產生 PFL 的結果
- 21.3 從 fontconfig 規則產生 PFL 的結果
- 25.1
ulimit
:為使用者設定資源 - 37.1 用於管理 sfcbd 的指令
- 38.1 man 頁面 - 類別和描述
- 39.1 TAR 歸檔中的功能和檔案名稱對照
- 40.1 記錄檔
- 40.2
/proc
檔案系統的系統資訊 - 40.3
/sys
檔案系統的系統資訊
- 1.1 用於列印文字的外圍程序程序檔
- 6.1 Zypper — 已知儲存庫的清單
- 6.2
rpm -q -i wget
- 6.3 搜尋套件的程序檔
- 7.1 時間軸組態範例
- 14.1 grub2-mkconfig 用法
- 14.2 grub2-mkrescue 用法
- 14.3 grub2-script-check 用法
- 14.4 grub2-once 用法
- 15.1 列出作用中的服務
- 15.2 列出失敗的服務
- 15.3 列出屬於某個服務的所有程序
- 18.1
java
指令的替代項系統 - 19.1 撰寫 IP 位址
- 19.2 將 IP 位址連結到網路遮罩
- 19.3 範例 IPv6 位址
- 19.4 指定字首長度的 IPv6 位址
- 19.5 通用網路介面和一些靜態路由
- 19.6
/var/run/netconfig/resolv.conf
- 19.7
/etc/hosts
- 19.8
/etc/networks
- 19.9
/etc/host.conf
- 19.10
/etc/nsswitch.conf
- 19.11 指令 ping 的輸出
- 19.12 網路組合的負載平衡組態
- 19.13 DHCP 網路組合裝置的組態
- 20.1 來自
lpd
的錯誤訊息 - 20.2 來自 CUPS 網路伺服器的廣播
- 21.1 指定呈現演算法
- 21.2 別名和系列名稱取代
- 21.3 別名和系列名稱取代
- 21.4 別名和系列名稱取代
- 24.1 範例
udev
規則 - 25.1 /etc/crontab 中的項目
- 25.2 /etc/crontab:移除時戳檔案
- 25.3
ulimit
:~/.bashrc
中的設定 - 31.1 named.conf 中的轉遞選項
- 31.2 基本的 /etc/named.conf
- 31.3 停用記錄的項目
- 31.4 example.com 的區域項目
- 31.5 example.net 的區域項目
- 31.6 /var/lib/named/example.com.zone 檔案
- 31.7 反向尋找
- 32.1 組態檔案 /etc/dhcpd.conf
- 32.2 組態檔案中的新增內容
- 34.1 基於名稱的
VirtualHost
項目的基本範例 - 34.2 基於名稱的
VirtualHost
指令 - 34.3 基於 IP 的
VirtualHost
指令 - 34.4 基本
VirtualHost
組態 - 34.5 VirtualHost CGI 組態
- 36.1 使用
squidclient
提交的要求 - 36.2 定義 ACL 規則
- 39.1 以
root
身分登入時的hostinfo
輸出
版權所有 © 2006-2022 SUSE LLC 和貢獻者。版權所有。
根據 GNU 自由文件授權 (GNU Free Documentation License) 1.2 版或 1.3 版 (自由選擇),使用者可以複製、散佈與/或修改本文件;「恆常章節」為此著作權聲明與授權。「GNU Free Documentation License」一節中包含 1.2 版授權的一份副本。
如需 SUSE 商標,請參閱 https://www.suse.com/company/legal/。所有其他協力廠商的商標所有權分屬其各自的公司。®、™ 等商標符號表示 SUSE 及其關係企業的商標。星號 (*) 表示協力廠商的商標。
本手冊中所有資訊在編輯時,都已全力注意各項細節。但這不保證百分之百的正確性。因此,SUSE LLC 及其關係企業、作者或譯者都不需對任何錯誤或造成的結果負責。
前言 #
1 可用文件 #
- 線上文件
https://documentation.suse.com/#sles 上提供了此產品的相關線上文件。您可瀏覽或下載各種格式的文件。
https://documentation.suse.com/ 上提供了其他產品的相關線上文件。
注意:最新更新文件的英文版通常會提供最新的文件更新。
- 版本說明
如需版本說明,請參閱 https://www.suse.com/releasenotes/。
- 在您的系統中
若要以離線方式使用,請參閱所安裝系統中
/usr/share/doc
下的文件。許多指令的手冊頁中也對相應指令進行了詳細描述。若要檢視手冊頁,請執行man
後接特定的指令名稱。如果系統上未安裝man
指令,請使用sudo zypper install man
予以安裝。
2 改進文件 #
歡迎您提供針對本文件的回饋及改進建議!我們提供了多種回饋管道:
- 服務要求和支援
有關適用於產品的服務與支援選項,請參閱 https://www.suse.com/support/。
若要開啟服務要求,需要在 SUSE Customer Center 中擁有一個訂閱。請移至 https://scc.suse.com/support/requests 並登入,然後按一下 。
- 錯誤報告
在 https://bugzilla.suse.com/ 中報告文件問題。若要簡化此程序,可以使用本文件 HTML 版本中的標題旁邊的 連結。如此會在 Bugzilla 中預先選取正確的產品和類別,並新增目前章節的連結。然後,您便可以立即開始輸入錯誤報告。需要一個 Bugzilla 帳戶。
- 協助改進
若要協助我們改進本文件,請使用本文件 HTML 版本中的標題旁邊的
連結。這些連結會將您移至 GitHub 上的原始碼,在其中您可以開啟提取要求。需要一個 GitHub 帳戶。如需本文件使用的文件環境的詳細資訊,請參閱儲存庫的讀我檔案。
- 郵件
或者,您也可以向以下電子郵件地址報告錯誤以及傳送有關本文件的回饋:<doc-team@suse.com>。請務必包含文件標題、產品版本以及文件發行日期。請參考相關的章節編號和標題 (或包含 URL),並提供問題的簡要說明。
3 文件慣例 #
本文件中使用以下注意事項與排版慣例:
/etc/passwd
:目錄名稱與檔案名稱PLACEHOLDER:以實際的值來取代 PLACEHOLDER
PATH
:環境變數 PATHls
、--help
:指令、選項和參數user
:使用者或群組套件名稱 :套件的名稱
Alt、Alt–F1:供人按下的按鍵或案件組合;顯示的按鍵與鍵盤上一樣為大寫
AMD/Intel 本段內容僅與 AMD64/Intel 64 架構相關。箭頭標示了文字區塊的開頭與結尾。
IBM Z, POWER 本段內容僅與
IBM Z
和POWER
架構相關。箭頭標示了文字區塊的開頭與結尾。Dancing Penguins (「Penguins」一章,↑另一本手冊):這是對另一本手冊中某一章的參考。
必須具有
root
權限才能執行的指令。通常,您也可以在這些指令前加上sudo
指令,以非特權使用者身分來執行它們。root #
command
tux >
sudo
command
沒有權限的使用者也可以執行的指令。
tux >
command
注意事項
警告:警告通知繼續操作之前必須瞭解的重要資訊。提醒您注意安全問題、可能的資料遺失、硬體損毀或者實際危險。
重要:重要通知繼續操作之前應該瞭解的重要資訊。
注意:注意通知其他資訊,例如各軟體版本之間的區別。
提示:提示通知有用的資訊,例如一條準則或實用的建議。
4 支援 #
下面提供了 SUSE Linux Enterprise Server 的支援聲明和有關技術預覽的一般資訊。如需產品生命週期的詳細資料,請參閱Book “升級指南”, Chapter 2 “生命週期和支援”。
如果您有權獲享支援,可在第 39 章 「收集系統資訊以供支援所用」中尋找有關如何收集支援票證所需資訊的詳細資料。
4.1 SUSE Linux Enterprise Server 支援聲明 #
若要獲得支援,您需要一個適當的 SUSE 訂閱。若要檢視為您提供的特定支援服務,請移至 https://www.suse.com/support/ 並選取您的產品。
支援層級的定義如下:
- L1
問題判斷,該技術支援層級旨在提供相容性資訊、使用支援、持續維護、資訊收集,以及使用可用文件進行基本疑難排解。
- L2
問題隔離,該技術支援層級旨在分析資料、重現客戶問題、隔離問題區域,並針對層級 1 不能解決的問題提供解決方法,或做為層級 3 的準備層級。
- L3
問題解決,該技術支援層級旨在借助工程方法解決層級 2 支援所確認的產品缺陷。
對於簽約的客戶與合作夥伴,SUSE Linux Enterprise Server 將為除以下套件外的其他所有套件提供 L3 支援:
技術預覽。
音效、圖形、字型和作品。
需要額外客戶合約的套件。
Workstation Extension 模組隨附的某些套件僅可享受 L2 支援。
名稱以 -devel 結尾的套件 (包含標題檔案和類似的開發人員資源) 只能與其主套件一起接受支援。
SUSE 僅支援使用原始套件,即,未發生變更且未重新編譯的套件。
4.2 技術預覽 #
技術預覽是 SUSE 提供的旨在讓使用者大略體驗未來創新的各種套件、堆疊或功能。隨附這些預覽只是為了提供方便,讓您有機會在自己的環境中測試新的技術。非常希望您能提供回饋!如果您測試了技術預覽,請聯絡 SUSE 代表,將您的體驗和使用案例告知他們。您的回饋對於我們的未來開發非常有幫助。
但是,技術預覽存在以下限制:
技術預覽仍處於開發階段。因此,它們的功能可能不完整、不穩定,或者在其他方面不適合實際生產用途。
技術預覽不受支援。
技術預覽可能僅適用於特定的硬體架構。
技術預覽的詳細資料和功能可能隨時會發生變化。因此,可能無法升級至技術預覽的後續版本,而需要進行全新安裝。
我們隨時可能會捨棄技術預覽。例如,如果 SUSE 發現某個預覽不符合客戶或市場需求,或者不能證明它符合企業標準,則可能會捨棄該預覽。SUSE 不承諾未來將提供此類技術的受支援版本。
如需產品隨附的技術預覽綜覽,請參閱 https://www.suse.com/releasenotes/ 上的版本說明。
第 I 部分 一般任務 #
- 1 Bash 和 Bash 程序檔
當今時代,許多人都在使用裝有 GNOME 之類圖形使用者介面 (GUI) 的電腦。儘管 GUI 可提供許多功能,但執行自動化任務時,這些功能會受到限制。外圍程序是 GUI 的有效補充,本章概述了外圍程序 (以 Bash 外圍程序為例) 的一些方面。
- 2
sudo
基本知識 執行某些指令需要 root 特權。但是,出於安全及避免出錯考量,我們不建議您以
root
身分登入。更安全的做法是先以一般使用者身分登入,再使用sudo
以提升的特權來執行指令。- 3 YaST
YaST 是一個 SUSE Linux Enterprise Server 工具,它提供了圖形介面可在其中完成所有基本的安裝和系統設定任務。無論您是要更新套件、設定印表機、修改防火牆設定、設定 FTP 伺服器還是分割硬碟,都可以使用 YaST 來完成。YaST 使用 Ruby 編寫,提供了一個可延伸的架構,讓您能夠透過模組新增新的功能。
- 4 文字模式下的 YaST
基於 ncurses 的虛擬圖形 YaST 介面主要用於協助系統管理員管理不含 X 伺服器的系統。與傳統的 GUI 相比,該介面具有多項優勢。您可以使用鍵盤在 ncurses 介面中導覽,並且幾乎所有介面元素都有對應的鍵盤捷徑。ncurses 介面的資源佔用較小,即使是在採用低設定的硬體上也能快速執行。您可以透過 SSH 連接執行基於 ncurses 的 YaST 版本,以便管理遠端系統。請注意,若要執行 YaST,終端機模擬器的大小不能小於 80x25 個字元。
- 5 YaST 線上更新
SUSE 為您的產品提供持續的軟體安全性更新。依預設,更新 Applet 可以讓您的系統保持最新狀態。如需有關更新 Applet 的詳細資訊,請參閱Book “部署指南 ”, Chapter 21 “安裝或移除軟體”, Section 21.5 “GNOME Package Updater”。本章介紹了用於更新軟體套件的替代工具:YaST 線上更新。
- 6 使用指令行工具管理軟體
本章介紹了兩個用於管理軟體的指令行工具:Zypper 與 RPM。有關在此內容中所使用辭彙的定義 (例如,
儲存庫
、修補程序
或更新
),請參閱Book “部署指南 ”, Chapter 21 “安裝或移除軟體”, Section 21.1 “詞彙定義”。- 7 使用 Snapper 進行系統復原和快照管理
Snapper 可用於建立和管理檔案系統快照。檔案系統快照可用於保留檔案系統在某個時間點的狀態副本。Snapper 的標準設定旨在允許復原系統變更。但是,您也可以使用它來建立使用者資料的磁碟備份。Snapper 基於 Btrfs 檔案系統或者採用 XFS (或 Ext4) 檔案系統的簡易佈建 LVM 磁碟區實現此功能。
- 8 使用 KLP 的即時核心修補
本文件介紹核心即時修補 (KLP) 技術的基本原理,並提供 SLE Live Patching 服務的使用指導方針。
- 9 交易更新
交易更新在 SUSE Linux Enterprise Server 中以技術預覽形式提供,當根檔案系統為唯讀時,可使用技術更新來更新 SLES。交易更新具有原子性 (僅當所有更新都成功時,才會套用所有更新),且支援復原。它不影響正在執行的系統,因為只有在將系統重新開機後,才會啟用變更。由於重新開機是中斷性操作,管理員必須判定重新開機的開銷是否高於中斷正在執行服務的開銷。如果重新開機的開銷過高,則不要使用交易更新。
交易更新由
transactional-update
程序檔每天執行。該程序檔將檢查可用的更新。如果存在任何更新,則它會在背景中建立根檔案系統的新快照,然後從發行通道擷取更新。完全更新新快照後,該快照將被標示為作用中快照,並在下一次將系統重新開機後,成為新的預設根檔案系統。當transactional-update
設定為自動執行 (預設行為) 時,該程序檔還會將系統重新開機。更新執行時間以及重新開機維護時間均為可設定組態。只能更新屬於根檔案系統快照的套件。如果套件中包含不屬於該快照的檔案,更新可能會失敗或中斷系統。
無法更新需要接受授權的 RPM。
- 10 使用 VNC 的遠端圖形工作階段
您可以利用虛擬網路計算 (VNC) 透過圖形桌面存取遠端電腦,並執行遠端圖形應用程式。VNC 獨立於平台,可讓您從任何作業系統存取遠端機器。本章介紹如何使用桌面用戶端 vncviewer 和 Remmina 連接至 VNC 伺服器,以及如何操作 VNC 伺服器。
SUSE Linux Enterprise Server 支援兩種不同類型的 VNC 工作階段:一次性工作階段,只要用戶端 VNC 連接不中斷,該工作階段將一直處於「作用中」;永久工作階段,此工作階段將一直處於「作用中」,除非明確將其終止。
VNC 伺服器可在不同連接埠上同時提供兩種工作階段,但開啟的工作階段不能從一種類型轉換為另一種類型。
- 11 使用 RSync 複製檔案
當今時代,使用者通常都會有數部電腦:家用機器和辦公機器、筆記型電腦、智慧型電話或平板電腦。因而,在多個裝置之間保持檔案和文件同步的任務就變得越發重要。
1 Bash 和 Bash 程序檔 #
當今時代,許多人都在使用裝有 GNOME 之類圖形使用者介面 (GUI) 的電腦。儘管 GUI 可提供許多功能,但執行自動化任務時,這些功能會受到限制。外圍程序是 GUI 的有效補充,本章概述了外圍程序 (以 Bash 外圍程序為例) 的一些方面。
1.1 什麼是「外圍程序」? #
一般而言,Linux 外圍程序就是 Bash (Bourne again Shell)。本章中提及的「外圍程序」指的是 Bash。可用的外圍程序不止 Bash (還有 ash、csh、ksh、zsh 等等),每個外圍程序都具有不同的功能和特性。如需有關其他外圍程序的詳細資訊,請在 YaST 中搜尋外圍程序。
1.1.1 Bash 組態檔案 #
外圍程序可啟用為:
互動式登入外圍程序: 使用
--login
選項啟用 Bash 以登入機器,或使用 SSH 登入遠端機器時會採用這種方式。「一般」互動式外圍程序: 啟動 xterm、konsole、gnome-terminal 或類似的指令行介面 (CLI) 工具時通常會呼叫此外圍程序。
非互動式外圍程序: 當在指令行呼叫外圍程序程序檔時,就會呼叫此外圍程序。
系統會讀取不同的組態檔案,視所使用的外圍程序類型而定。下面的表格顯示了登入與非登入外圍程序組態檔案。
檔案 |
描述 |
---|---|
|
請勿修改此檔案,否則當下次更新時,您的修改可能會被破壞! |
|
擴充 |
|
包含特定程式的泛系統組態檔案 |
|
在此處插入登入外圍程序的使用者特定組態 |
請注意,登入外圍程序還會獲取表格 1.2 「非登入外圍程序的 Bash 組態檔案」中所列的組態檔案。
|
請勿修改此檔案,否則當下次更新時,您的修改可能會被破壞! |
|
使用此檔案只能插入 Bash 的泛系統修改 |
|
在此處插入使用者特定的組態 |
此外,Bash 還使用其他檔案:
檔案 |
描述 |
---|---|
|
包含您輸入的所有指令清單 |
|
登出時執行 |
|
使用者為常用指令定義的別名。如需定義別名的詳細資料,請參閱 |
非登入外圍程序#
下面兩個特殊外圍程序會阻擋使用者登入系統:/bin/false
和 /sbin/nologin
。當使用者嘗試登入系統時,這兩個外圍程序都將失敗且不會顯示訊息。這是一種針對系統使用者而特意設計的安全措施,雖然新版 Linux 作業系統已提供更有效的工具 (例如 PAM 和 AppArmor) 來控制系統存取。
SUSE Linux Enterprise Server 上的預設行為是將 /bin/bash
指定給人類使用者,將 /bin/false
或 /sbin/nologin
指定給系統使用者。由於歷史原因,nobody
使用者擁有 /bin/bash
,且曾是系統使用者預設的最低特權使用者。但是,如果有多個系統使用者使用 nobody
,則將失去因使用 nobody 所獲得的任何安全性。應可將它變更為 /sbin/nologin
;最快的測試方法是進行此變更,然後看看是否中斷了任何服務或應用程式。
使用以下指令列出 /etc/passwd
中已指定給所有使用者 (系統使用者和人類使用者) 的外圍程序。輸出視您系統上的服務和使用者而有所不同:
tux >
sort -t: -k 7 /etc/passwd | awk -F: '{print $1"\t" $7}' | column -t
tux /bin/bash
nobody /bin/bash
root /bin/bash
avahi /bin/false
chrony /bin/false
dhcpd /bin/false
dnsmasq /bin/false
ftpsecure /bin/false
lightdm /bin/false
mysql /bin/false
postfix /bin/false
rtkit /bin/false
sshd /bin/false
tftp /bin/false
unbound /bin/false
bin /sbin/nologin
daemon /sbin/nologin
ftp /sbin/nologin
lp /sbin/nologin
mail /sbin/nologin
man /sbin/nologin
nscd /sbin/nologin
polkitd /sbin/nologin
pulse /sbin/nologin
qemu /sbin/nologin
radvd /sbin/nologin
rpc /sbin/nologin
statd /sbin/nologin
svn /sbin/nologin
systemd-coredump /sbin/nologin
systemd-network /sbin/nologin
systemd-timesync /sbin/nologin
usbmux /sbin/nologin
vnc /sbin/nologin
wwwrun /sbin/nologin
messagebus /usr/bin/false
scard /usr/sbin/nologin
1.1.2 目錄結構 #
下表概述了 Linux 系統中最重要的較高層級目錄。下列清單中提供了關於目錄與重要子目錄的更多詳細資訊。
目錄 |
內容 |
---|---|
|
根目錄 — 目錄樹狀結構的起點。 |
|
基本的二進位檔案,例如系統管理員與一般使用者都需要使用的指令。通常還包含 Bash 等外圍程序。 |
|
開機載入程式的靜態檔案。 |
|
存取主機特定裝置所需的檔案。 |
|
主機特定系統的組態檔案。 |
|
存放系統中所有擁有帳戶之使用者的主目錄。但是, |
|
基本的共用程式庫與核心模組。 |
|
抽取式媒體的定點。 |
|
用於暫時掛接檔案系統的定點。 |
|
附加應用程式軟體套件。 |
|
超級使用者 |
|
基本的系統二進位檔案。 |
|
系統所提供之服務的資料。 |
|
暫存檔案。 |
|
包含唯讀資料的次要階層。 |
|
可變資料,例如記錄檔案。 |
|
僅當系統中同時安裝了 Microsoft Windows* 與 Linux 才可以使用。包含 Windows 資料。 |
以下清單提供了更多詳細資訊,以及目錄中包含的檔案與子目錄的一些範例:
/bin
包含
root
及其他使用者可能會使用的基本外圍程序指令。這些指令包括ls
、mkdir
、cp
、mv
、rm
以及rmdir
。/bin
還包含 SUSE Linux Enterprise Server 中的預設外圍程序 Bash。/boot
包含開機所需的資料,例如開機載入程式、核心及核心開始執行使用者模式程式之前所使用的其他資料。
/dev
存放代表硬體元件的裝置檔案。
/etc
包含控制 X Window System 等程式的操作的本地組態檔案。
/etc/init.d
子目錄包含可在開機期間執行的 LSB init 程序檔。/home/USERNAME
存放系統中每個擁有帳戶之使用者的個人資料。只有檔案擁有者或系統管理員才能修改位於此處的檔案。依預設,您的電子郵件目錄與個人桌面組態以隱藏檔案與目錄的形式存放於此,例如
.gconf/
和.config
。注意:網路環境中的主目錄如果您是在網路環境中工作,您的主目錄可能會對應至檔案系統中
/home
以外的目錄。/lib
包含啟動系統及執行根檔案系統中指令所需的基本共用程式庫。在 Windows 中,對應的共用程式庫為 DLL 檔案。
/media
包含 CD-ROM、隨身碟及數位相機 (若使用 USB) 等抽取式媒體的掛接點。
/media
通常存放系統硬碟之外的任何類型磁碟機。抽取式媒體插入或連接到系統並進行掛接後,您就可以從此處存取該媒體。/mnt
此目錄提供了暫時掛接之檔案系統的定點。
root
可在此處掛接檔案系統。/opt
為安裝協力廠商軟體而保留。這裡有選擇性軟體與大型附加程式套件。
/root
root
使用者的主目錄。此處存放root
的個人資料。/run
systemd
和各個元件使用的 tmpfs 目錄。/var/run
是/run
的符號連結。/sbin
如
s
所指示,此目錄存放適用於超級使用者的公用程式。/sbin
不僅包含/bin
中的二進位檔案,還包含啟動、還原及復原系統所必需的二進位檔案。/srv
存放系統所提供之服務的資料,例如 FTP 與 HTTP。
/tmp
需要檔案暫時儲存區的程式會使用此目錄。
重要:開機時清理/tmp
無法保證在系統重新開機後,先前儲存於
/tmp
中的資料仍然存在。這視情況而定,例如,取決於/etc/tmpfiles.d/tmp.conf
中的設定。/usr
/usr
與使用者無關,是 UNIX 系統資源 (UNIX system resource) 的縮寫。/usr
中的資料是靜態的唯讀資料,可依照檔案系統階層標準
(Filesystem Hierarchy Standard,FHS) 在不同的主機之間共用。此目錄包含所有應用程式 (包括 GNOME 之類的圖形桌面),並且會在檔案系統中建立次要階層。/usr
存放了多個子目錄,例如/usr/bin
、/usr/sbin
、/usr/local
以及/usr/share/doc
。/usr/bin
包含一般情況下可存取的程式。
/usr/sbin
包含為系統管理員保留的程式,例如修復功能。
/usr/local
在此目錄中,系統管理員可安裝獨立於套裝作業系統的本地延伸。
/usr/share/doc
存放系統的各種文件檔案與版本說明。在
manual
子目錄中,可找到此手冊的線上版本。如果安裝了多種語言,此目錄可能會包含不同語言的手冊版本。在
packages
內,可找到系統上安裝之軟體套件所包含的文件。對於每個套件,都會建立一個子目錄/usr/share/doc/packages/PACKAGENAME
,通常用其儲存該套件的讀我檔案,有時儲存範例、組態檔案或其他程序檔。如果系統中安裝了 HOWTO,
/usr/share/doc
還會包含howto
子目錄,其中有許多與 Linux 軟體設定及操作相關之任務的其他文件。/var
/usr
存放的是靜態唯讀資料,而/var
存放的是系統操作時寫入的資料,因此為可變資料,例如記錄檔案或多工緩衝處理資料。如需/var/log/
中包含之最重要記錄檔的綜覽,請參閱表格 40.1 「記錄檔」。
1.2 撰寫外圍程序程序檔 #
使用外圍程序程序檔可以方便地完成各種任務:收集資料、搜尋文字中的單字或片語,以及執行其他有用的操作。以下範例顯示了一個列印文字的小型外圍程序程序檔:
在執行此程序檔之前,必須滿足幾項先決條件:
每個程序檔都應包含 Shebang 行 (如上面的範例所示)。如果缺少該行,您需要手動呼叫直譯器。
您可以將程序檔儲存於任何位置。但是,最好將其儲存於外圍程序可以找到的目錄中。外圍程序中的搜尋路徑由環境變數
PATH
決定。一般使用者通常沒有寫入/usr/bin
的權限。因此,建議將程序檔儲存在使用者目錄~/bin/
中。以上範例名為hello.sh
。程序檔需要執行權限。使用下列指令設定權限:
tux >
chmod +x ~/bin/hello.sh
如果滿足了上述所有先決條件,便可以按以下方式執行程序檔:
做為絕對路徑: 執行程序檔時可以使用絕對路徑。在此例中為
~/bin/hello.sh
。任何位置: 如果
PATH
環境變數包含程序檔所在的目錄,您可以使用hello.sh
來執行程序檔。
1.3 重新導向指令事件 #
每條指令可以使用三個通道用於輸入或輸出:
標準輸出: 這是預設的輸出通道。指令進行列印時會使用標準輸出通道。
標準輸入: 如果指令需要使用者或其他指令的輸入,將會使用此通道。
標準錯誤: 指令使用此通道報告錯誤。
要重新指向這些通道,可以使用以下幾種方式:
指令 > 檔案
將指令輸出儲存為檔案,現有的檔案將會刪除。例如,
ls
指令將輸出寫入到檔案listing.txt
中:tux >
ls > listing.txt指令 >> 檔案
將指令輸出附加至檔案。例如,
ls
指令將輸出附加至檔案listing.txt
中:tux >
ls >> listing.txt指令 < 檔案
讀取檔案,將其做為指定指令的輸入。例如,
read
指令會將檔案內容讀取至變數中:tux >
read a < foo指令1 | 指令2
將左邊指令的輸出重新指向為右邊指令的輸入。例如,
cat
指令會輸出/proc/cpuinfo
檔案的內容。再由grep
使用此輸出內容單獨過濾出包含cpu
的行:tux >
cat /proc/cpuinfo | grep cpu
每個通道都有一個檔案描述子:0 (零) 代表標準輸入,1 代表標準輸出,2 代表標準錯誤。您可以將此檔案描述子插入到 <
或 >
字元的前面。例如,下行將搜尋以 foo
開始的檔案,但透過將檔案重新指向至 /dev/null
隱藏了錯誤:
tux >
find / -name "foo*" 2>/dev/null
1.4 使用別名 #
別名為一或多條指令的簡短定義。別名的語法為:
alias NAME=DEFINITION
例如,下行定義了一個別名 lt
,它會輸出一份較長的清單 (選項 -l
),將其依修改時間排序 (-t
),並依排好序的倒序列印 (-r
):
tux >
alias lt='ls -ltr'
要檢視所有的別名定義,請使用 alias
。若要移除別名,請使用 unalias
和對應的別名名稱。
1.5 在 Bash 中使用變數 #
外圍程序變數可以是全域變數或本地變數。您可以在所有外圍程序中存取全域變數或環境變數。與此相反,本地變數僅顯示於目前的外圍程序中。
要檢視所有環境變數,請使用 printenv
指令。如需瞭解變數的值,則將變數名稱做為引數插入:
tux >
printenv PATH
無論是全域變數還是本地變數,都可以使用 echo
進行檢視:
tux >
echo $PATH
要設定本地變數,請使用變數名稱,後面跟上等號,再跟上值:
tux >
PROJECT="SLED"
請不要在等號兩邊插入空格,否則將會出錯。要設定環境變數,請使用 export
:
tux >
export NAME="tux"
若要移除變數,請使用 unset
:
tux >
unset NAME
下表包含了部分可在外圍程序程序檔中使用的常用環境變數:
|
目前使用者的主目錄 |
|
目前的主機名稱 |
|
工具當地化以後,會使用此環境變數指定的語言。也可將英語設定為 |
|
外圍程序的搜尋路徑,即以冒號分隔的目錄清單 |
|
指定在每條指令前列印的一般提示 |
|
指定執行多行指令時列印的輔助提示 |
|
目前的工作目錄 |
|
目前的使用者 |
1.5.1 使用引數變數 #
例如,如果您有程序檔 foo.sh
,可以按以下格式執行該程序檔:
tux >
foo.sh "Tux Penguin" 2000
若要存取傳送至程序檔的所有引數,需要使用位置參數。$1
代表第一個引數的位置參數,$2
代表第二個引數的位置參數,依此類推。最多可以使用九個參數。要獲取程序檔名稱,請使用 $0
。
下面的程序檔 foo.sh
可列印從 1 到 4 的所有引數:
#!/bin/sh echo \"$1\" \"$2\" \"$3\" \"$4\"
如果您使用以上引數執行此程序檔,所得結果為:
"Tux Penguin" "2000" "" ""
1.5.2 使用變數替代項 #
變數替代項會從左側或右側將模式套用至變數內容。以下清單包含了可用的語法格式:
${VAR#pattern}
從左側移除最短的相符項:
tux >
file=/home/tux/book/book.tar.bz2tux >
echo ${file#*/} home/tux/book/book.tar.bz2${VAR##pattern}
從左側移除最長的相符項:
tux >
file=/home/tux/book/book.tar.bz2tux >
echo ${file##*/} book.tar.bz2${VAR%pattern}
從右側移除最短的相符項:
tux >
file=/home/tux/book/book.tar.bz2tux >
echo ${file%.*} /home/tux/book/book.tar${VAR%%pattern}
從右側移除最長的相符項:
tux >
file=/home/tux/book/book.tar.bz2tux >
echo ${file%%.*} /home/tux/book/book${VAR/pattern_1/pattern_2}
以 PATTERN_2 取代 PATTERN_1 中 VAR 的內容:
tux >
file=/home/tux/book/book.tar.bz2tux >
echo ${file/tux/wilber} /home/wilber/book/book.tar.bz2
1.6 分組和組合指令 #
外圍程序允許您組合及分組指令,以便按條件執行。每條指令都會傳回決定操作成功與否的離開碼。如果為 0 (零),則說明指令成功,任何其他離開碼都代表特定於指令的錯誤。
以下清單顯示了可對指令分組的方式:
指令1 ; 指令2
以順序執行指令。不檢查離開碼。下行透過
cat
顯示檔案內容,然後透過ls
列印其檔案內容,而不管其離開碼為何:tux >
cat filelist.txt ; ls -l filelist.txt指令1 && 指令2
如果左邊的指令成功,即會執行右邊的指令 (邏輯「與」)。下行顯示檔案內容,並且僅在前面的指令成功時才會列印其檔案內容 (將其與此清單中的上一個項目進行比較):
tux >
cat filelist.txt && ls -l filelist.txt指令1 || 指令2
如果左邊的指令失敗,即會執行右邊的指令 (邏輯「或」)。下行將只會在於
/home/tux/foo
中建立目錄失敗時,才會在/home/wilber/bar
中建立目錄:tux >
mkdir /home/tux/foo || mkdir /home/wilber/barfuncname(){ ... }
建立外圍程序函數。可以使用位置參數存取其引數。下行定義了可列印較短訊息的函數
hello
:tux >
hello() { echo "Hello $1"; }可以按以下格式呼叫此函數:
tux >
hello Tux將會列印:
Hello Tux
1.7 使用通用流程建構元 #
為了控制程序檔的流程,外圍程序包含 while
、if
、for
及 case
建構元。
1.7.1 if 控制指令 #
If
指令用於檢查運算式。例如,以下程式碼將測試目前的使用者是否為 Tux:
if test $USER = "tux"; then echo "Hello Tux." else echo "You are not Tux." fi
測試運算式可以很複雜,也可以很簡單。下面的運算式會檢查檔案 foo.txt
是否存在:
if test -e /tmp/foo.txt ; then echo "Found foo.txt" fi
測試運算式也可以縮寫到方括弧中:
if [ -e /tmp/foo.txt ] ; then echo "Found foo.txt" fi
如需更多有用的運算式,請參閱 https://bash.cyberciti.biz/guide/If..else..fi。
1.7.2 使用 for
指令建立迴路 #
for
迴路可讓您對一組項目執行指令。例如,以下程式碼會列印目前目錄中關於 PNG 檔案的部分資訊:
for i in *.png; do ls -l $i done
1.8 更多資訊 #
man 頁面 man bash
中提供了關於 Bash 的重要資訊。以下清單中提供了更多關於此主題的資訊:
http://tldp.org/LDP/Bash-Beginners-Guide/html/index.html — Bash 初級使用者指南
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html — BASH 程式設計 - 方法介紹
http://tldp.org/LDP/abs/html/index.html — Bash 程序檔進階指南
http://www.grymoire.com/Unix/Sh.html — Sh - Bourne 外圍程序
2 sudo
基本知識 #
執行某些指令需要 root 特權。但是,出於安全及避免出錯考量,我們不建議您以 root
身分登入。更安全的做法是先以一般使用者身分登入,再使用 sudo
以提升的特權來執行指令。
在 SUSE Linux Enterprise Server 上,sudo
設定為與 su
的運作方式類似。但是,sudo
提供了一種靈活機制,可讓使用者使用其他任何使用者的特權執行指令。此舉可以將具有特定權限的角色指定給某些使用者和群組。例如,可以允許 users
群組的成員以 wilber
使用者的特權執行指令。您可以透過禁止任何指令選項,來進一步限制對指令的存取。su 始終要求必須提供 root
密碼才能使用 PAM 進行驗證,但 sudo
可以設定為使用您自己的身分證明進行驗證。這表示使用者無需共用 root
密碼,因而提高了安全性。
2.1 sudo
基本用法 #
以下章節將會介紹 sudo
的基本用法。
2.1.1 執行單個指令 #
做為一般使用者,您可以在指令前加上 sudo
來以 root
身分執行任何指令。系統會提示您提供 root 密碼。如果驗證成功,便會以 root
身分執行指令:
tux >
id -un
1 tuxtux >
sudo
id -un
root's password:2 roottux >
id -un
tux3tux >
sudo
id -un
4 root
| |
輸入期間不會顯示密碼 (無論是純文字還是遮罩字元均不顯示)。 | |
只有以 | |
提升的權限會持續一段時間,因此您不必再次提供 |
使用 sudo
時,I/O 重新導向不起作用:
tux >
sudo
echo s > /proc/sysrq-trigger bash: /proc/sysrq-trigger: Permission deniedtux >
sudo
cat < /proc/1/maps bash: /proc/1/maps: Permission denied
在上面的範例中,只有 echo
和 cat
指令才以提升的特權執行。重新導向將由使用者的外圍程序以使用者特權執行。若要以提升的特權執行重新導向,請如第 2.1.2 節 「啟動外圍程序」中所述啟動外圍程序,或使用 dd
公用程式:
echo s | sudo dd of=/proc/sysrq-trigger sudo dd if=/proc/1/maps | cat
2.1.2 啟動外圍程序 #
使用 sudo
來以提升的特權執行指令的做法並不總是可行。雖然可以使用 sudo bash
指令,但還是建議您使用以下其中一種內建機制來啟動外圍程序:
sudo -s (<指令>)
啟動由
SHELL
環境變數所指定的外圍程序或目標使用者的預設外圍程序。如果指定了某個指令,該指令將被傳送到外圍程序(使用-c
選項)。否則,外圍程序將以互動式模式執行。tux:~ >
sudo -s root's password:root:/home/tux #
exittux:~ >
sudo -i (<指令>)
與
-s
類似,但會做為登入外圍程序啟動外圍程序。這表示系統會處理該外圍程式的啟動檔案 (.profile
等),並將目前的工作目錄設定為目標使用者的主目錄。tux:~ >
sudo -i root's password:root:~ #
exittux:~ >
2.2 設定 sudo
#
sudo
提供了各種可設定的選項。
如果您不小心將自己鎖定在 sudo
之外,則可以使用 su -
和 root
密碼來啟動 root 外圍程序。若要修復該錯誤,請執行 visudo
。
2.2.1 編輯組態檔案 #
sudo
的主要規則組態檔案為 /etc/sudoers
。如果該檔案的格式錯誤,您可能便無法進入系統,因此強烈建議您使用 visudo
來進行編輯。visudo 可以防止發生編輯衝突,並會在儲存修改內容之前檢查語法錯誤。
您可以透過設定 EDITOR
環境變數來使用 vi 以外的另一種編輯器,例如:
sudo EDITOR=/usr/bin/nano visudo
請注意,/etc/sudoers
檔案是由系統套件提供的,直接在該檔案中進行修改可能會中斷更新。因此,建議將自訂組態存入 /etc/sudoers.d/
目錄下的檔案中。使用以下指令建立或編輯檔案:
sudo visudo -f /etc/sudoers.d/NAME
以下指令使用另一種編輯器 (在本例中為 nano
) 開啟檔案:
sudo EDITOR=/usr/bin/nano visudo -f /etc/sudoers.d/NAME
/etc/sudoers.d
中忽略的檔案
/etc/sudoers
中的 #includedir
指令會忽略以 ~
(波狀符號) 字元結尾或包含 .
(點) 字元的檔案。
如需 visudo
指令的詳細資訊,請執行 man 8 visudo
。
2.2.2 sudoers 組態的基本語法 #
sudoers 組態檔案包含兩種類型的選項:字串和旗標。其中,字串可以包含任何值,旗標可以開啟或關閉。sudoers 組態檔案最重要的語法建構為:
# Everything on a line after # is ignored 1 Defaults !insults # Disable the insults flag 2 Defaults env_keep += "DISPLAY HOME" # Add DISPLAY and HOME to env_keep tux ALL = NOPASSWD: /usr/bin/frobnicate, PASSWD: /usr/bin/journalctl 3
存在兩個例外: | |
移除 | |
-
targetpw
此旗標控制呼叫使用者是否需要輸入密碼。如果要求輸入目標使用者 (例如
root
) 的密碼則為開啟,如果要求輸入其自己的密碼則為關閉。Defaults targetpw # Turn targetpw flag ON
-
rootpw
如果設定,
sudo
將提示輸入root
密碼。預設值為 OFF。Defaults !rootpw # Turn rootpw flag OFF
-
env_reset
如果設定,
sudo
會建構一個包含TERM
、PATH
、HOME
、MAIL
、SHELL
、LOGNAME
、USER
、USERNAME
和SUDO_*
的精簡環境。此外,會從呼叫環境輸入env_keep
中列出的變數。預設為開啟。Defaults env_reset # Turn env_reset flag ON
-
env_keep
當
env_reset
旗標為開啟時要保留的一系列環境變數。# Set env_keep to contain EDITOR and PROMPT Defaults env_keep = "EDITOR PROMPT" Defaults env_keep += "JRE_HOME" # Add JRE_HOME Defaults env_keep -= "JRE_HOME" # Remove JRE_HOME
-
env_delete
當
env_reset
旗標為關閉時要移除的一系列環境變數。# Set env_delete to contain EDITOR and PROMPT Defaults env_delete = "EDITOR PROMPT" Defaults env_delete += "JRE_HOME" # Add JRE_HOME Defaults env_delete -= "JRE_HOME" # Remove JRE_HOME
Defaults
記號還可用於建立使用者、主機和指令三者之集合的別名。除此之外,還可以將某選項僅套用到一組特定的使用者。
如需 /etc/sudoers
組態檔案的詳細資訊,請諮詢 man 5 sudoers
。
2.2.3 基本 sudoers 規則 #
每個規則都遵循以下規劃 ([]
表示可選部分):
#Who Where As whom Tag What User_List Host_List = [(User_List)] [NOPASSWD:|PASSWD:] Cmnd_List
User_List
一或多個 (用逗號分隔) 識別碼:使用者名稱、以
%GROUPNAME
格式表示的群組,或是以#UID
格式表示的使用者 ID。可以使用!
字首來否定。Host_List
一或多個 (用逗號分隔) 識別碼:完全合格的主機名稱或 IP 位址。可以使用
!
字首來否定。Host_List
的常用選項為ALL
。NOPASSWD:|PASSWD:
如果使用者在
NOPASSWD:
之後執行的指令與Cmd_List
相符,系統不會提示使用者輸入密碼。PASSWD
是預設選項。僅當PASSWD
和NOPASSWD
位於同一行時,才需要指定此選項:tux ALL = PASSWD: /usr/bin/foo, NOPASSWD: /usr/bin/bar
Cmnd_List
一或多個 (用逗號分隔) 指定元:可執行檔的路徑,後跟允許使用的可選引數。
/usr/bin/foo # Anything allowed /usr/bin/foo bar # Only "/usr/bin/foo bar" allowed /usr/bin/foo "" # No arguments allowed
ALL
可以用作 User_List
、Host_List
和 Cmnd_List
。
允許 tux
在無需輸入密碼的情況下以 root 身分執行所有指令的規則:
tux ALL = NOPASSWD: ALL
允許 tux
執行 systemctl restart apache2
的規則:
tux ALL = /usr/bin/systemctl restart apache2
允許 tux
在不帶任何引數的情況下以 admin
身分執行 wall
的規則:
tux ALL = (admin) /usr/bin/wall ""
不要使用不帶 Defaults targetpw
的 ALL ALL = ALL
等規則。否則,任何人都能夠以 root
身分執行指令。
2.3 sudo
使用案例 #
雖然預設組態可適用於標準使用情境,但您仍可依據特定需求自訂預設組態。
2.3.1 在無需提供 root
密碼的情況下使用 sudo
#
依設計,wheel
群組的成員可以用 root 身分執行所有帶有 sudo
的指令。下面的程序介紹如何將使用者帳戶新增至 wheel
群組。
將您的使用者帳戶新增至
wheel
群組。如果您的使用者帳戶還不是
wheel
群組的成員,請使用sudo usermod -a -G wheel USERNAME
指令新增。登出然後重新登入即可啟用變更。執行groups USERNAME
指令以驗證變更是否成功。使用使用者帳戶的普通密碼進行驗證。
使用
visudo
指令建立檔案/etc/sudoers.d/userpw
(請參閱第 2.2.1 節 「編輯組態檔案」) 並新增以下內容:Defaults !targetpw
選取新的預設規則。
依據是否希望使用者重新輸入其密碼,在
/etc/sudoers
中取消備註相應的行,並將預設規則設定為備註。## Uncomment to allow members of group wheel to execute any command # %wheel ALL=(ALL) ALL ## Same thing without a password # %wheel ALL=(ALL) NOPASSWD: ALL
對預設規則設定更多限制.
移除
/etc/sudoers
中的 allow-everything 規則或設定為備註:ALL ALL=(ALL) ALL # WARNING! Only use this together with 'Defaults targetpw'!
警告:sudoers 中可造成嚴重後果的規則請勿跳過此步驟。否則任何使用者都能以
root
身分執行任何指令!測試組態.
以
wheel
成員身分和非成員身分執行sudo
。tux:~ >
groups users wheeltux:~ >
sudo id -un tux's password: rootwilber:~ >
groups userswilber:~ >
sudo id -un wilber is not in the sudoers file. This incident will be reported.
2.3.2 對 X.Org 應用程式使用 sudo
#
使用 sudo
啟動圖形應用程式通常會導致以下錯誤:
tux >
sudo
xterm xterm: Xt error: Can't open display: %s xterm: DISPLAY is not set
一種簡單的解決方式是使用 xhost 來暫時允許 root 使用者存取本地使用者的 X 工作階段。可使用以下指令完成此動作:
xhost si:localuser:root
以下指令可移除授予的存取權:
xhost -si:localuser:root
以 root 特權執行圖形應用程式存在安全隱患。建議僅在例外的情況下,才啟用對圖形應用程式的 root 存取權。另外,建議在關閉圖形應用程式後,立即撤銷授予的 root 存取權。
2.4 更多資訊 #
sudo --help
指令提供可用指令行選項的簡要綜覽,而 man sudoers
指令則會提供有關 sudoers 及其組態設定的詳細資訊。
3 YaST #
YaST 是一個 SUSE Linux Enterprise Server 工具,它提供了圖形介面可在其中完成所有基本的安裝和系統設定任務。無論您是要更新套件、設定印表機、修改防火牆設定、設定 FTP 伺服器還是分割硬碟,都可以使用 YaST 來完成。YaST 使用 Ruby 編寫,提供了一個可延伸的架構,讓您能夠透過模組新增新的功能。
專案官方網站 (https://yast.opensuse.org/) 上提供了有關 YaST 的更多資訊。
3.1 YaST 主題 #
如需使用特定 YaST 模組和功能的詳細資訊,請參閱文件的各個章節。
- 管理指南
- 部署指南
第 25 章: 「使用 YaST 變更語言和國家/地區設定」
第 20.3 節: 「設定印表機」
第 20.2 節: 「設定音效卡」
第 22 章: 「安裝模組、延伸和協力廠商附加產品」
第 21.4 節: 「管理軟體儲存庫和服務」
第 21 章: 「安裝或移除軟體」
第 24 章: 「使用 YaST 管理使用者」
第 20 章: 「使用 YaST 設定硬體元件」
第 20.1 節: 「設定系統鍵盤配置」
- 安全和強化指南
Chapter 34: “Building and managing profiles with YaST”
Section 25.4: “Setting up a VPN server or client using YaST”
Chapter 18: “Configuring security settings with YaST”
3.2 YaST 介面綜覽 #
YaST 有兩個圖形介面:一個用於 KDE 和 GNOME 等圖形桌面環境,另一個基於 ncurses 的虛擬圖形介面用於不含 X 伺服器的系統 (請參閱第 4 章 「文字模式下的 YaST」)。
在圖形版 YaST 中,YaST 中的所有模組按類別分組,您可以使用導覽側邊欄快速存取所需類別中的模組。使用頂部的搜尋欄位可依名稱尋找模組。若要尋找特定的模組,請在搜尋欄位中輸入其名稱,然後,便會顯示與您所輸入字串相符的模組。
3.3 有用的按鍵組合 #
圖形版 YaST 支援鍵盤捷徑
- Print Screen
擷取並儲存螢幕畫面。但在某些桌面環境中,可能無法正常工作。
- Shift–F4
啟用和停用為視障使用者最佳化的配色方式。
- Shift–F7
啟用/停用除記錄錯訊息功能。
- Shift–F8
開啟檔案對話方塊,以將記錄檔案儲存至使用者定義的位置。
- Ctrl–Shift–Alt–D
傳送一個除錯事件。YaST 模組可透過執行特殊除錯動作來做出回應。結果取決於具體的 YaST 模組。
- Ctrl–Shift–Alt–M
啟動和停止巨集錄製。
- Ctrl–Shift–Alt–P
重播巨集。
- Ctrl–Shift–Alt–S
顯示樣式表編輯器。
- Ctrl–Shift–Alt–T
將工具集樹傾印至記錄檔案。
- Ctrl–Shift–Alt–X
開啟終端機視窗 (xterm)。當透過 VNC 安裝時很實用。
- Ctrl–Shift–Alt–Y
顯示工具集樹瀏覽器。
4 文字模式下的 YaST #
基於 ncurses 的虛擬圖形 YaST 介面主要用於協助系統管理員管理不含 X 伺服器的系統。與傳統的 GUI 相比,該介面具有多項優勢。您可以使用鍵盤在 ncurses 介面中導覽,並且幾乎所有介面元素都有對應的鍵盤捷徑。ncurses 介面的資源佔用較小,即使是在採用低設定的硬體上也能快速執行。您可以透過 SSH 連接執行基於 ncurses 的 YaST 版本,以便管理遠端系統。請注意,若要執行 YaST,終端機模擬器的大小不能小於 80x25 個字元。
若要啟動基於 ncurses 的 YaST 版本,請開啟終端機並執行 sudo yast2
指令。使用 Tab 鍵或方向鍵在功能表項目、欄位和按鈕等介面元素之間導覽。您可以使用相應的功能鍵或鍵盤捷徑存取 YaST 中的所有功能表項目和按鈕。例如,您可以按 F9 鍵來取消目前操作,使用 F10 鍵可接受變更。在基於 ncurses 的 YaST 介面中,每個功能表項目和按鈕的標籤中都有一個反白的字母。此字母是指定給介面元素的鍵盤捷徑的一部分。例如, 按鈕中反白字母 Q
。這表示您可以按 Alt–Alt+Q 來啟動該按鈕。
如果 YaST 對話方塊遭毀損或破壞 (例如在調整視窗大小時),請按 Ctrl–L 重新整理並還原其內容。
4.2 進階按鍵組合 #
基於 ncurses 的 YaST 版本提供有數個進階按鍵組合。
- Shift–F1
列出進階快速鍵。
- Shift–F4
變更色彩綱要。
- Ctrl–
結束應用程式。
- Ctrl–L
重新整理螢幕。
- Ctrl–DF1
列出進階快速鍵。
- Ctrl–DShift– D
以螢幕擷取畫面的形式將對話方塊傾印到記錄檔案。
- Ctrl–DShift–Y
開啟 YDialogSpy 以查看工具樹階層。
4.3 按鍵組合的限制 #
如果您的視窗管理員使用了全部的 Alt 組合,則 YaST 中的 Alt 組合可能無效。像是 Alt 或 Shift 等鍵也可能事先已由終端機的設定所佔用。
- 使用 Alt 而不是 Esc
您可以使用 Esc 來取代 Alt,而不使用 Alt。例如,Esc–H 可取代 Alt–H。(先按 Esc,然後按 H 鍵。)
- 使用 Ctrl–F 和 Ctrl–B 執行向後和向前導覽
如果 Alt 和 Shift 按鍵組合已被視窗管理員或終端機佔用,可改用 Ctrl–F (向前) 和 Ctrl–B (向後) 按鍵組合。
- 功能鍵的限制
功能鍵 (F1 ... F12) 也用於執行多種功能。有些功能鍵可能已被終端機佔用,而不能用於 YaST。但在純文字主控台上應可永遠使用 Alt 按鍵組合和功能鍵。
4.4 YaST 指令行選項 #
除了文字模式介面以外,YaST 還提供了一個指令行介面。若要獲取 YaST 指令行選項清單,請使用以下指令:
tux >
sudo
yast -h
4.4.1 從指令行安裝套件 #
如果您知道套件名稱,且該套件是由您的某個作用中安裝儲存庫所提供,則您可以使用指令行選項 -i
安裝該套件:
tux >
sudo
yast -i package_name
或
tux >
sudo
yast --install -i package_name
package_name 可以是安裝時經過相依關係檢查的單個簡短套件名稱 (例如 gvim),也可以是安裝時未經過相依關係檢查的 RPM 套件的完整路徑。
雖然 YaST 提供了透過指令行管理軟體的基本功能,但對於更進階的套件管理任務,請考慮使用 Zypper。在第 6.1 節 「使用 Zypper」中尋找有關使用 Zypper 的詳細資訊。
4.4.2 使用個別模組 #
為了節省時間,您可以使用以下指令啟動個別 YaST 模組:
tux >
sudo
yast module_name
使用 yast -l
或 yast --list
可檢視系統上所有可用模組的清單。
4.4.3 YaST 模組的指令行參數 #
為使用程序檔中的 YaST 功能,YaST 提供了可支援個別模組的指令行。但並非所有模組都具有指令行支援。若要顯示模組的可用選項,請使用以下指令:
tux >
sudo
yast module_name help
如果某個模組未提供指令行支援,則會以文字模式啟動該模組,並顯示以下訊息:
This YaST module does not support the command line interface.
下列各節介紹具有指令行支援的所有 YaST 模組,並簡要說明了其所有指令和可用選項。
4.4.3.1 常用 YaST 模組指令 #
所有 YaST 模組皆支援以下指令:
- help
列出所有模組的支援指令及其描述:
tux >
sudo
yast lan help- longhelp
與
help
作用相同,但新增了所有指令選項及其描述的詳細清單:tux >
sudo
yast lan longhelp- xmlhelp
與
longhelp
作用相同,但輸出採用 XML 文字結構並重新導向至某個檔案:tux >
sudo
yast lan xmlhelp xmlfile=/tmp/yast_lan.xml- interactive
進入互動式模式。這樣,您就可以直接執行該模組的指令,而無需在指令前加上
sudo yast
字首。使用exit
可以離開互動式模式。
4.4.3.2 yast add-on #
從指定的路徑新增新的附加產品:
tux >
sudo
yast add-on http://server.name/directory/Lang-AddOn-CD1/
可以使用以下通訊協定來指定來源路徑:http:// ftp:// nfs:// disk:// cd:// 或 dvd://。
4.4.3.3 yast audit-laf #
顯示和設定 Linux Audit Framework。如需更多詳細資料,請參閱Book “Security and Hardening Guide”。yast audit-laf
接受以下指令:
- set
設定選項:
tux >
sudo
yast audit-laf set log_file=/tmp/audit.log若要顯示完整的選項清單,請執行
yast audit-laf set help
。- show
顯示選項的設定:
tux >
sudo
yast audit-laf show diskspace space_left: 75 space_left_action: SYSLOG admin_space_left: 50 admin_space_left_action: SUSPEND action_mail_acct: root disk_full_action: SUSPEND disk_error_action: SUSPEND若要顯示完整的選項清單,請執行
yast audit-laf show help
。
4.4.3.4 yast dhcp-server #
管理 DHCP 伺服器以及進行其設定。yast dhcp-server
接受以下指令:
- disable
停用 DHCP 伺服器服務。
- enable
啟用 DHCP 伺服器服務。
- host
進行個別主機的設定。
- interface
指定要監聽的網路介面:
tux >
sudo
yast dhcp-server interface current Selected Interfaces: eth0 Other Interfaces: bond0, pbu, eth1若要顯示完整的選項清單,請執行
yast dhcp-server interface help
。- options
管理全域 DHCP 選項。若要顯示完整的選項清單,請執行
yast dhcp-server options help
。- status
列印 DHCP 服務的狀態。
- subnet
管理 DHCP 子網路選項。若要顯示完整的選項清單,請執行
yast dhcp-server subnet help
。
4.4.3.5 yast dns-server #
管理 DNS 伺服器組態。yast dns-server
接受以下指令:
- acls
顯示存取控制清單設定:
tux >
sudo
yast dns-server acls show ACLs: ----- Name Type Value ---------------------------- any Predefined localips Predefined localnets Predefined none Predefined- dnsrecord
設定區域資源記錄:
tux >
sudo
yast dnsrecord add zone=example.org query=office.example.org type=NS value=ns3若要顯示完整的選項清單,請執行
yast dns-server dnsrecord help
。- forwarders
設定 DNS 轉遞者:
tux >
sudo
yast dns-server forwarders add ip=10.0.0.100tux >
sudo
yast dns-server forwarders show [...] Forwarder IP ------------ 10.0.0.100若要顯示完整的選項清單,請執行
yast dns-server forwarders help
。- host
立即處理「A」及其相關的「PTR」記錄:
tux >
sudo
yast dns-server host show zone=example.org若要顯示完整的選項清單,請執行
yast dns-server host help
。- logging
進行記錄設定:
tux >
sudo
yast dns-server logging set updates=no transfers=yes若要顯示完整的選項清單,請執行
yast dns-server logging help
。- mailserver
設定區域郵件伺服器:
tux >
sudo
yast dns-server mailserver add zone=example.org mx=mx1 priority=100若要顯示完整的選項清單,請執行
yast dns-server mailserver help
。- nameserver
設定區域名稱伺服器:
tux >
sudo
yast dns-server nameserver add zone=example.com ns=ns1若要顯示完整的選項清單,請執行
yast dns-server nameserver help
。- soa
設定起始授權 (SOA) 記錄:
tux >
sudo
yast dns-server soa set zone=example.org serial=2006081623 ttl=2D3H20S若要顯示完整的選項清單,請執行
yast dns-server soa help
。- startup
管理 DNS 伺服器服務:
tux >
sudo
yast dns-server startup atboot若要顯示完整的選項清單,請執行
yast dns-server startup help
。- transport
設定區域傳輸規則。若要顯示完整的選項清單,請執行
yast dns-server transport help
。- zones
管理 DNS 區域:
tux >
sudo
yast dns-server zones add name=example.org zonetype=master若要顯示完整的選項清單,請執行
yast dns-server zones help
。
4.4.3.6 yast disk #
列印所有磁碟或分割區的相關資訊。唯一受支援的指令是 list
,後跟以下任一選項:
- disks
列出系統中設定的所有磁碟:
tux >
sudo
yast disk list disks Device | Size | FS Type | Mount Point | Label | Model ---------+------------+---------+-------------+-------+------------- /dev/sda | 119.24 GiB | | | | SSD 840 /dev/sdb | 60.84 GiB | | | | WD1003FBYX-0- partitions
列出系統中的所有分割區:
tux >
sudo
yast disk list partitions Device | Size | FS Type | Mount Point | Label | Model ---------------+------------+---------+-------------+-------+------ /dev/sda1 | 1.00 GiB | Ext2 | /boot | | /dev/sdb1 | 1.00 GiB | Swap | swap | | /dev/sdc1 | 698.64 GiB | XFS | /mnt/extra | | /dev/vg00/home | 580.50 GiB | Ext3 | /home | | /dev/vg00/root | 100.00 GiB | Ext3 | / | | [...]
4.4.3.7 yast ftp-server #
進行 FTP 伺服器設定。yast ftp-server
接受以下選項:
- SSL、TLS
透過 SSL 和 TLS 控制安全連接。SSL 選項僅對
vsftpd
有效。tux >
sudo
yast ftp-server SSL enabletux >
sudo
yast ftp-server TLS disable- access
設定存取權限:
tux >
sudo
yast ftp-server access authen_only若要顯示完整的選項清單,請執行
yast ftp-server access help
。- anon_access
設定匿名使用者的存取權限:
tux >
sudo
yast ftp-server anon_access can_upload若要顯示完整的選項清單,請執行
yast ftp-server anon_access help
。- anon_dir
指定匿名使用者的目錄。伺服器上必須已存在該目錄:
tux >
sudo
yast ftp-server anon_dir set_anon_dir=/srv/ftp若要顯示完整的選項清單,請執行
yast ftp-server anon_dir help
。- chroot
控制 change root 環境 (chroot):
tux >
sudo
yast ftp-server chroot enabletux >
sudo
yast ftp-server chroot disable- idle-time
設定最大閒置時間 (分鐘),經過該時間後 FTP 伺服器會終止目前的連接:
tux >
sudo
yast ftp-server idle-time set_idle_time=15- logging
確定是否將記錄訊息儲存到記錄檔案中:
tux >
sudo
yast ftp-server logging enabletux >
sudo
yast ftp-server logging disable- max_clients
指定同時連接的最大用戶端數量:
tux >
sudo
yast ftp-server max_clients set_max_clients=1500- max_clients_ip
指定透過 IP 同時連接的最大用戶端數量:
tux >
sudo
yast ftp-server max_clients_ip set_max_clients=20- max_rate_anon
指定匿名用戶端允許使用的最大資料傳輸速度 (KB/s):
tux >
sudo
yast ftp-server max_rate_anon set_max_rate=10000- max_rate_authen
指定已進行本地驗證的使用者允許使用的最大資料傳輸速度 (KB/s):
tux >
sudo
yast ftp-server max_rate_authen set_max_rate=10000- port_range
指定被動連接回覆的連接埠範圍:
tux >
sudo
yast ftp-server port_range set_min_port=20000 set_max_port=30000若要顯示完整的選項清單,請執行
yast ftp-server port_range help
。- show
顯示 FTP 伺服器設定。
- startup
控制 FTP 啟動方法:
tux >
sudo
yast ftp-server startup atboot若要顯示完整的選項清單,請執行
yast ftp-server startup help
。- umask
指定
authenticated:anonymous
使用者的檔案權限遮罩:tux >
sudo
yast ftp-server umask set_umask=177:077- welcome_message
指定當使用者連接到 FTP 伺服器時顯示的文字:
tux >
sudo
yast ftp-server welcome_message set_message="hello everybody"
4.4.3.8 yast http-server #
設定 HTTP 伺服器 (Apache2)。yast http-server
接受以下指令:
- configure
進行 HTTP 伺服器主機設定:
tux >
sudo
yast http-server configure host=main servername=www.example.com \ serveradmin=admin@example.com若要顯示完整的選項清單,請執行
yast http-server configure help
。
- hosts
設定虛擬主機:
tux >
sudo
yast http-server hosts create servername=www.example.com \ serveradmin=admin@example.com documentroot=/var/www若要顯示完整的選項清單,請執行
yast http-server hosts help
。
- listen
指定 HTTP 伺服器應監聽的連接埠和網路位址:
tux >
sudo
yast http-server listen add=81tux >
sudo
yast http-server listen list Listen Statements: ================== :80 :81tux >
sudo
yast http-server delete=80若要顯示完整的選項清單,請執行
yast http-server listen help
。
- mode
啟用或停用精靈模式:
tux >
sudo
yast http-server mode wizard=on
- modules
控制 Apache2 伺服器模組:
tux >
sudo
yast http-server modules enable=php5,rewritetux >
sudo
yast http-server modules disable=ssltux >
sudo
http-server modules list [...] Enabled rewrite Disabled ssl Enabled php5 [...]
4.4.3.9 yast kdump #
進行 kdump
設定。如需 kdump
的詳細資訊,請參閱Book “System Analysis and Tuning Guide”, Chapter 18 “Kexec and Kdump”, Section 18.7 “Basic Kdump configuration”。yast kdump
接受以下指令:
- copykernel
將核心複製到傾印目錄。
- customkernel
指定自訂核心名稱的 kernel_string 部分。命名方案為
/boot/vmlinu[zx]-kernel_string[.gz]
。tux >
sudo
yast kdump customkernel kernel=kdump若要顯示完整的選項清單,請執行
yast kdump customkernel help
。- dumpformat
指定傾印核心影像的 (壓縮) 格式。可用格式有「none」、「ELF」、「compressed」或「lzo」:
tux >
sudo
yast kdump dumpformat dump_format=ELF- dumplevel
指定傾印層級,範圍從 0 到 31:
tux >
sudo
yast kdump dumplevel dump_level=24- dumptarget
指定用於儲存傾印影像的目的地:
tux >
sudo
kdump dumptarget taget=ssh server=name_server port=22 \ dir=/var/log/dump user=user_name若要顯示完整的選項清單,請執行
yast kdump dumptarget help
。- immediatereboot
控制系統是否應在將核心 (core) 儲存到 kdump 核心 (kernel) 中後立即重新開機:
tux >
sudo
yast kdump immediatereboot enabletux >
sudo
yast kdump immediatereboot disable- keepolddumps
指定保留舊傾印影像的數量。可指定保留零個到全部保留:
tux >
sudo
yast kdump keepolddumps no=5- kernelcommandline
指定需要傳遞到 kdump 核心的指令行:
tux >
sudo
yast kdump kernelcommandline command="ro root=LABEL=/"- kernelcommandlineappend
指定需要附加到預設指令行字串的指令行:
tux >
sudo
yast kdump kernelcommandlineappend command="ro root=LABEL=/"- notificationcc
指定用於傳送通知郵件副本的電子郵件地址:
tux >
sudo
yast kdump notificationcc email="user1@example.com user2@example.com"- notificationto
指定用於傳送通知郵件的電子郵件地址:
tux >
sudo
yast kdump notificationto email="user1@example.com user2@example.com"- show
顯示
kdump
設定:tux >
sudo
yast kdump show Kdump is disabled Dump Level: 31 Dump Format: compressed Dump Target Settings target: file file directory: /var/crash Kdump immediate reboots: Enabled Numbers of old dumps: 5- smtppass
指定含有用於傳送通知郵件的明文 SMTP 密碼的檔案:
tux >
sudo
yast kdump smtppass pass=/path/to/file- smtpserver
指定用於傳送通知郵件的 SMTP 伺服器主機名稱:
tux >
sudo
yast kdump smtpserver server=smtp.server.com- smtpuser
指定用於傳送通知郵件的 SMTP 使用者名稱:
tux >
sudo
yast kdump smtpuser user=smtp_user- startup
啟用或停用啟動選項:
tux >
sudo
yast kdump startup enable alloc_mem=128,256tux >
sudo
yast kdump startup disable
4.4.3.10 yast keyboard #
設定虛擬主控台的系統鍵盤。它不會影響圖形桌面環境 (例如 GNOME 或 KDE) 中的鍵盤設定。yast keyboard
接受以下指令:
- list
列出所有可用的鍵盤配置。
- set
啟用新的鍵盤配置設定:
tux >
sudo
yast keyboard set layout=czech- summary
顯示目前的鍵盤組態。
4.4.3.11 yast lan #
設定網路卡。yast lan
接受以下指令:
- add
設定新網路卡:
tux >
sudo
yast lan add name=vlan50 ethdevice=eth0 bootproto=dhcp若要顯示完整的選項清單,請執行
yast lan add help
。- delete
刪除某個現有網路卡:
tux >
sudo
yast lan delete id=0- edit
變更某個現有網路卡的組態:
tux >
sudo
yast lan edit id=0 bootproto=dhcp- list
顯示網路卡組態摘要:
tux >
sudo
yast lan list id name, bootproto 0 Ethernet Card 0, NONE 1 Network Bridge, DHCP
4.4.3.12 yast language #
設定系統語言。yast language
接受以下指令:
- list
列出所有可用的語言。
- set
指定系統的主要語言和次要語言:
tux >
sudo
yast language set lang=cs_CZ languages=en_US,es_ES no_packages
4.4.3.13 yast mail #
顯示郵件系統的組態:
tux >
sudo
yast mail summary
4.4.3.14 yast nfs #
控制 NFS 用戶端。yast nfs
接受以下指令:
- add
新增新的 NFS 掛接:
tux >
sudo
yast nfs add spec=remote_host:/path/to/nfs/share file=/local/mount/point若要顯示完整的選項清單,請執行
yast nfs add help
。- delete
刪除現有的 NFS 掛接:
tux >
sudo
yast nfs delete spec=remote_host:/path/to/nfs/share file=/local/mount/point若要顯示完整的選項清單,請執行
yast nfs delete help
。- edit
變更現有的 NFS 掛接:
tux >
sudo
yast nfs edit spec=remote_host:/path/to/nfs/share \ file=/local/mount/point type=nfs4若要顯示完整的選項清單,請執行
yast nfs edit help
。- list
列出現有的 NFS 掛接:
tux >
sudo
yast nfs list Server Remote File System Mount Point Options ---------------------------------------------------------------- nfs.example.com /mnt /nfs/mnt nfs nfs.example.com /home/tux/nfs_share /nfs/tux nfs
4.4.3.15 yast nfs-server #
設定 NFS 伺服器。yast nfs-server
接受以下指令:
- add
將目錄新增至輸出:
tux >
sudo
yast nfs-server add mountpoint=/nfs/export hosts=*.allowed_hosts.com若要顯示完整的選項清單,請執行
yast nfs-server add help
。- delete
從 NFS 輸出中刪除目錄:
tux >
sudo
yast nfs-server delete mountpoint=/nfs/export- set
指定 NFS 伺服器的其他參數:
tux >
sudo
yast nfs-server set enablev4=yes security=yes若要顯示完整的選項清單,請執行
yast nfs-server set help
。- start
啟動 NFS 伺服器服務:
tux >
sudo
yast nfs-server start- stop
停止 NFS 伺服器服務:
tux >
sudo
yast nfs-server stop- summary
顯示 NFS 伺服器組態摘要:
tux >
sudo
yast nfs-server summary NFS server is enabled NFS Exports * /mnt * /home NFSv4 support is enabled. The NFSv4 domain for idmapping is localdomain. NFS Security using GSS is enabled.
4.4.3.16 yast nis #
設定 NIS 用戶端。yast nis
接受以下指令:
- configure
變更 NIS 用戶端的全域設定:
tux >
sudo
yast nis configure server=nis.example.com broadcast=yes若要顯示完整的選項清單,請執行
yast nis configure help
。- disable
停用 NIS 用戶端:
tux >
sudo
yast nis disable- enable
允許您的機器做為 NIS 用戶端:
tux >
sudo
yast nis enable server=nis.example.com broadcast=yes automounter=yes若要顯示完整的選項清單,請執行
yast nis enable help
。- find
顯示給定網域的可用 NIS 伺服器:
tux >
sudo
yast nis find domain=nisdomain.com- summary
顯示 NIS 用戶端的組態摘要。
4.4.3.17 yast nis-server #
設定 NIS 伺服器。yast nis-server
接受以下指令:
- master
設定 NIS 主伺服器:
tux >
sudo
yast nis-server master domain=nisdomain.com yppasswd=yes若要顯示完整的選項清單,請執行
yast nis-server master help
。- slave
設定 NIS 從屬伺服器:
tux >
sudo
yast nis-server slave domain=nisdomain.com master_ip=10.100.51.65若要顯示完整的選項清單,請執行
yast nis-server slave help
。- stop
停止 NIS 伺服器:
tux >
sudo
yast nis-server stop- summary
顯示 NIS 伺服器組態摘要:
tux >
sudo
yast nis-server summary
4.4.3.18 yast proxy #
進行代理設定。yast proxy
接受以下指令:
- authentication
指定代理的驗證選項:
tux >
sudo
yast proxy authentication username=tux password=secret若要顯示完整的選項清單,請執行
yast proxy authentication help
。- enable、disable
啟用或停用代理設定。
- set
變更目前的代理設定:
tux >
sudo
yast proxy set https=proxy.example.com若要顯示完整的選項清單,請執行
yast proxy set help
。- summary
顯示代理設定。
4.4.3.19 yast rdp #
控制遠端桌面設定。yast rdp
接受以下指令:
- allow
允許從遠端存取伺服器的桌面:
tux >
sudo
yast rdp allow set=yes- list
顯示遠端桌面組態摘要。
4.4.3.20 yast samba-client #
進行 Samba 用戶端設定。yast samba-client
接受以下指令:
- configure
變更 Samba 的全域設定:
tux >
sudo
yast samba-client configure workgroup=FAMILY- isdomainmember
檢查機器是否為網域成員:
tux >
sudo
yast samba-client isdomainmember domain=SMB_DOMAIN- joindomain
讓機器成為網域成員:
tux >
sudo
yast samba-client joindomain domain=SMB_DOMAIN user=username password=pwd- winbind
啟用或停用 Winbind 服務 (
winbindd
精靈):tux >
sudo
yast samba-client winbind enabletux >
sudo
yast samba-client winbind disable
4.4.3.21 yast samba-server #
進行 Samba 伺服器設定。yast samba-server
接受以下指令:
- backend
指定儲存使用者資訊的後端:
tux >
sudo
yast samba-server backend smbpasswd若要顯示完整的選項清單,請執行
yast samba-server backend help
。- configure
進行 Samba 伺服器的全域設定:
tux >
sudo
yast samba-server configure workgroup=FAMILY description='Home server'若要顯示完整的選項清單,請執行
yast samba-server configure help
。- list
顯示可用共用清單:
tux >
sudo
yast samba-server list Status Type Name ============================== Disabled Disk profiles Enabled Disk print$ Enabled Disk homes Disabled Disk groups Enabled Disk movies Enabled Printer printers- role
指定 Samba 伺服器的角色:
tux >
sudo
yast samba-server role standalone若要顯示完整的選項清單,請執行
yast samba-server role help
。- service
啟用或停用 Samba 服務 (
smb
和nmb
):tux >
sudo
yast samba-server service enabletux >
sudo
yast samba-server service disable- share
操作單個 Samba 共用:
tux >
sudo
yast samba-server share name=movies browseable=yes guest_ok=yes若要顯示完整的選項清單,請執行
yast samba-server share help
。
4.4.3.22 yast security #
控制主機的安全性層級。yast security
接受以下指令:
- level
指定主機的安全性層級:
tux >
sudo
yast security level server若要顯示完整的選項清單,請執行
yast security level help
。- set
設定特定選項的值:
tux >
sudo
yast security set passwd=sha512 crack=yes若要顯示完整的選項清單,請執行
yast security set help
。- summary
顯示目前安全性組態的摘要:
sudo
yast security summary
4.4.3.23 yast sound #
進行音效卡設定。yast sound
接受以下指令:
- add
設定新音效卡。不使用任何參數時,該指令會新增偵測到的第一個音效卡。
tux >
sudo
yast sound add card=0 volume=75若要顯示完整的選項清單,請執行
yast sound add help
。- channels
列出音效卡的可用音量聲道:
tux >
sudo
yast sound channels card=0 Master 75 PCM 100- modules
列出所有可用的音效核心模組:
tux >
sudo
yast sound modules snd-atiixp ATI IXP AC97 controller (snd-atiixp) snd-atiixp-modem ATI IXP MC97 controller (snd-atiixp-modem) snd-virtuoso Asus Virtuoso driver (snd-virtuoso) [...]- playtest
在音效卡上播放測試音效:
tux >
sudo
yast sound playtest card=0- remove
移除設定的音效卡:
tux >
sudo
yast sound remove card=0tux >
sudo
yast sound remove all- set
為音效卡指定新值:
tux >
sudo
yast sound set card=0 volume=80- show
顯示有關音效卡的詳細資訊:
tux >
sudo
yast sound show card=0 Parameters of card 'ThinkPad X240' (using module snd-hda-intel): align_buffer_size Force buffer and period sizes to be multiple of 128 bytes. bdl_pos_adj BDL position adjustment offset. beep_mode Select HDA Beep registration mode (0=off, 1=on) (default=1). Default Value: 0 enable_msi Enable Message Signaled Interrupt (MSI) [...]- summary
列印系統上所有音效卡的組態摘要:
tux >
sudo
yast sound summary- volume
指定音效卡的音量層級:
sudo
yast sound volume card=0 play
4.4.3.24 yast sysconfig #
控制 /etc/sysconfig
下檔案中的變數。yast sysconfig
接受以下指令:
- clear
為變數設定空值:
tux >
sudo
yast sysconfig clear=POSTFIX_LISTEN提示:多個檔案中的變數如果變數在多個檔案中可用,請使用 VARIABLE_NAME$FILE_NAME 語法:
tux >
sudo
yast sysconfig clear=CONFIG_TYPE$/etc/sysconfig/mail- details
顯示有關變數的詳細資訊:
tux >
sudo
yast sysconfig details variable=POSTFIX_LISTEN Description: Value: File: /etc/sysconfig/postfix Possible Values: Any value Default Value: Configuration Script: postfix Description: Comma separated list of IP's NOTE: If not set, LISTEN on all interfaces- list
顯示已修改變數的摘要。使用
all
可列出所有變數及相應的值:tux >
sudo
yast sysconfig list all AOU_AUTO_AGREE_WITH_LICENSES="false" AOU_ENABLE_CRONJOB="true" AOU_INCLUDE_RECOMMENDS="false" [...]- set
為變數設定值:
tux >
sudo
yast sysconfig set DISPLAYMANAGER=gdm提示:多個檔案中的變數如果變數在多個檔案中可用,請使用 VARIABLE_NAME$FILE_NAME 語法:
tux >
sudo
yast sysconfig set CONFIG_TYPE$/etc/sysconfig/mail=advanced
4.4.3.25 yast tftp-server #
設定 TFTP 伺服器。yast tftp-server
接受以下指令:
- directory
指定 TFTP 伺服器的目錄:
tux >
sudo
yast tftp-server directory path=/srv/tftptux >
sudo
yast tftp-server directory list Directory Path: /srv/tftp- status
控制 TFTP 伺服器服務的狀態:
tux >
sudo
yast tftp-server status disabletux >
sudo
yast tftp-server status show Service Status: falsetux >
sudo
yast tftp-server status enable
4.4.3.26 yast timezone #
設定時區。yast timezone
接受以下指令:
- list
依地區分組列出所有可用的時區:
tux >
sudo
yast timezone list Region: Africa Africa/Abidjan (Abidjan) Africa/Accra (Accra) Africa/Addis_Ababa (Addis Ababa) [...]- set
為時區組態指定新值:
tux >
sudo
yast timezone set timezone=Europe/Prague hwclock=local- summary
顯示時區組態摘要:
tux >
sudo
yast timezone summary Current Time Zone: Europe/Prague Hardware Clock Set To: Local time Current Time and Date: Mon 12. March 2018, 11:36:21 CET
4.4.3.27 yast users #
管理使用者帳戶。yast users
接受以下指令:
- add
新增新的使用者:
tux >
sudo
yast users add username=user1 password=secret home=/home/user1若要顯示完整的選項清單,請執行
yast users add help
。- delete
刪除現有使用者帳戶:
tux >
sudo
yast users delete username=user1 delete_home若要顯示完整的選項清單,請執行
yast users delete help
。- edit
變更現有使用者帳戶:
tux >
sudo
yast users edit username=user1 password=new_secret若要顯示完整的選項清單,請執行
yast users edit help
。- list
列出依使用者類型過濾的現有使用者:
tux >
sudo
yast users list system若要顯示完整的選項清單,請執行
yast users list help
。- show
顯示有關某個使用者的詳細資料:
tux >
sudo
yast users show username=wwwrun Full Name: WWW daemon apache List of Groups: www Default Group: wwwrun Home Directory: /var/lib/wwwrun Login Shell: /sbin/nologin Login Name: wwwrun UID: 456若要顯示完整的選項清單,請執行
yast users show help
。
5 YaST 線上更新 #
SUSE 為您的產品提供持續的軟體安全性更新。依預設,更新 Applet 可以讓您的系統保持最新狀態。如需有關更新 Applet 的詳細資訊,請參閱Book “部署指南 ”, Chapter 21 “安裝或移除軟體”, Section 21.5 “GNOME Package Updater”。本章介紹了用於更新軟體套件的替代工具:YaST 線上更新。
可從更新軟體儲存庫中取得適用於 SUSE® Linux Enterprise Server 的最新修補程式。如果在安裝期間已註冊了產品,則表明已設定更新儲存庫。如果您尚未註冊 SUSE Linux Enterprise Server,可在 YaST 中啟動 。或者,您可以從信任的來源手動新增更新儲存庫。若要新增或移除儲存庫,請透過 YaST 中的「 › 」啟動儲存庫管理員。Book “部署指南 ”, Chapter 21 “安裝或移除軟體”, Section 21.4 “管理軟體儲存庫和服務” 中提供了有關儲存庫管理員的詳細資訊。
如果您無法存取更新目錄,原因可能是訂閱已過期。SUSE Linux Enterprise Server 通常提供一年或三年的訂閱,您可以在這個時間段內存取更新目錄。訂閱期結束後,對更新目錄的存取將被拒絕。
如果存取更新目錄時遭到拒絕,系統將顯示一則警告訊息,提示您造訪 SUSE Customer Center 以查看您的訂閱。SUSE Customer Center 的網址為 https://scc.suse.com//。
SUSE 提供了具有不同關聯層級的更新:
- 安全性更新
修復嚴重的安全性問題,必須予以安裝。
- 推薦更新
修復可能會破壞電腦的問題。
- 選擇性更新
修復與安全性無關的問題或提供增強功能。
5.1 線上更新對話方塊 #
若要開啟 YaST yast2 online_update
指令進行啟動。
「
」視窗包含四個區段。
左側的「SUSE Linux Enterprise Server 可用的修補程式。修補程式根據安全性關聯程度 (安全性
、建議
和選擇性
) 進行排序。您可以從 中選取以下其中一個選項,以變更 區段的檢視窗:
- (預設檢視窗)
適用於系統上安裝的套件,但尚未安裝的修補程式。
適用於系統上未安裝之套件的修補程式,或已滿足其執行要求的修補程式 (相關套件已從其他來源進行更新)。
SUSE Linux Enterprise Server 的所有可用修補程式。
Shift–F1。「安全性
」和「建議
」狀態的修補程式所要求的動作已自動預設。這些動作包括「 」、「 」和「 」。
如果從更新儲存庫以外的其他儲存庫安裝最新的套件,則可以使用此安裝來滿足此套件之修補程式的需求。在此情況下,會有一個核取標記顯示在修補程式摘要的前面。僅當您將修補程式標示為已安裝時,該修補程式才會顯示在清單中。事實上這並沒有安裝修補程式 (因為套件已經是最新的),而是將修補程式標示為已安裝。
在
區段中選取一個項目,可在對話方塊的左下角看到簡短的 。右上方的區段列出了所選修補程式中包含的套件 (一個修補程式可以包含多個套件)。按一下右上方區段中的項目,可檢視修補程式中包含的各套件的詳細資料。5.2 安裝修補程式 #
在 YaST 的「連接更新」對話方塊中,您可以一次性安裝所有可用的修補程式,也可以手動選取所需的修補程式。您還可以回復已套用至系統的修補程式。
依預設,目前您系統可用的所有新修補程式 (選擇性
修補程式除外) 均已標示為可供安裝。按一下 或 後,這些修補程式將自動套用。如果一或多個修補程式需要將系統重新開機,則在開始安裝修補程式之前,系統會發出相關通知。此時,您可以選擇繼續安裝所選修補程式、跳過需要重新開機之所有修補程式的安裝並安裝剩餘的修補程式,或者返回修補程式手動選擇畫面。
啟動 YaST,然後選取「
› 」。若要自動套用目前您系統可用的所有新修補程式 (
選擇性
修補程式除外),請按一下 或 。首先修改要套用的修補程式選擇:
使用介面提供的相應過濾器和檢視窗。如需詳細資訊,請參閱第 5.1 節 「線上更新對話方塊」。
根據您的需求和意愿選取或取消選取修補程式,方法是在修補程式上按一下滑鼠右鍵,然後從內容功能表中選擇相應的動作。
重要:始終套用安全性更新除非很有必要,否則請不要取消選取任何
安全性
相關的修補程式。因為這些修補程式負責修復嚴重的安全性問題,可防止您的系統被入侵。大部分的修補程式都會包含多套件的更新。若要變更對單一套件執行的動作,請在套件檢視中的某個套件上按一下滑鼠右鍵,然後選擇一項動作。
若要確認您的選擇並套用所選修補程式,請按一下「
」或「 」繼續。
安裝完成後,請按一下「
」離開 YaST「 」。您的系統現在已是最新狀態。
5.3 自動線上更新 #
您可以使用 YaST 設定每日、每週或每月的自動更新。安裝 yast2-online-update-configuration
套件。
依預設更新將下載為增量 RPM。由於透過增量 RPM 重建 RPM 套件需要佔用大量記憶體和處理器資源,出於效能考量,某些設定或硬體組態可能要求您停用增量 RPM。
某些修補程式 (例如核心更新或需要授權合約的套件) 需要使用者互動,而這可能會讓自動更新程序停止下來。您可以設定跳過需要使用者互動的修補程式。
使用 YaST
模組中的 索引標籤,可以查看可用的及已安裝的修補程式,包括錯誤報告和 CVE 公告的參考。安裝後,啟動 YaST 並選取yast2-online-update-configuration 未安裝,系統會提示您進行安裝。
› 。選擇 › 。若您也可以在指令行中使用
yast2 online_update_configuration
指令啟動模組。選擇更新間隔:「
」、「 」或「 」。有時,修補程式可能需要引起管理員的注意,例如,在重新啟動關鍵服務時。而此修補程式可能是適用於 Docker 開放原始碼引擎的更新,執行此更新需要重新啟動所有容器。在安裝修補程式之前,系統會向使用者告知此操作的後果,並要求他們確認是否要安裝此修補程式。此類修補程式稱為「互動式修補程式」。
自動安裝修補程式時,系統會假設您已確認要安裝互動式修補程式。如果您希望在安裝之前先檢查這些修補程式,請選取
。在這種情況下,自動修補期間會跳過互動式修補程式。請確定週期性地執行手動線上更新,以檢查是否有互動式修補程式等待安裝。若要自動接受所有授權合約,請啟用
。若要自動安裝已更新套件推薦的所有套件,請啟用「
」。若要停用增量 RPM (出於效能方面的考慮),請取消核取
。若要根據類別 (例如安全性或推薦) 過濾修補程式,請核取
,並新增清單中的相應修補程式類別。系統將會只安裝所選類別的修補程式,合理的實務是僅啟用自動 更新,並手動查看所有其他更新。修補通常比較可靠,但您可能還想測試非安全性修補程式,並在遇到任何問題時進行復原。提供的修補程式用於套件管理以及 YaST 功能和模組。
修補程式提供重要的更新和錯誤修復。
修補程式提供選擇性的錯誤修復和增強功能。
表示新套件。
相當於其他修補程式。
不可用。
按一下
確認您的組態。
自動線上更新隨後不會自動重新啟動系統。如果套件更新需要重新開機系統才能生效,則您需要手動重新開機。
6 使用指令行工具管理軟體 #
本章介紹了兩個用於管理軟體的指令行工具:Zypper 與 RPM。有關在此內容中所使用辭彙的定義 (例如,儲存庫
、修補程序
或更新
),請參閱Book “部署指南 ”, Chapter 21 “安裝或移除軟體”, Section 21.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 和 vim 套件 (來自 factory
儲存庫):
tux >
sudo
zypper -v install --from factory mc vim
--from
選項可在要求指定儲存庫中的套件時讓所有儲存庫都處於啟用狀態 (以解決任何相依性問題)。--repo
是 --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 子指令 #
Zypper 子指令是儲存在 zypper_execdir (/usr/lib/zypper/commands
) 中的可執行檔。如果在 zypper_execdir 中找不到某個子指令,Zypper 會自動在 $PATH 的其餘部分中搜尋該子指令。您可以編寫自己的本地延伸,並將其儲存在使用者空間中。
不支援在 Zypper 外圍程序中執行子指令以及使用全域 Zypper 選項。
列出可用的子指令:
tux >
zypper help subcommand
[...]
Available zypper subcommands in '/usr/lib/zypper/commands'
appstream-cache
lifecycle
migration
search-packages
Zypper subcommands available from elsewhere on your $PATH
<none>
查看子指令的說明螢幕:
tux >
zypper help appstream-cache
6.1.3 使用 Zypper 安裝和移除軟體 #
若要安裝或移除套件,請使用以下指令:
tux >
sudo
zypper install PACKAGE_NAMEtux >
sudo
zypper remove PACKAGE_NAME
不要移除必要的系統套件,例如 glibc 、 zypper 、 kernel 。如果移除這些套件,系統可能會變得不穩定,甚至完全停止運作。
6.1.3.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>=74.2'也可以同時指定硬體架構與版本:
tux >
sudo
zypper install 'firefox.x86_64>=74.2'
- 依 RPM 檔案的路徑
您也可以指定套件的本地或遠端路徑:
tux >
sudo
zypper install /tmp/install/MozillaFirefox.rpmtux >
sudo
zypper install http://download.example.com/MozillaFirefox.rpm
6.1.3.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.3.3 清理已移除套件的相依性 #
如果想讓系統在移除某套件後自動移除由於此操作而導致不再需要的所有套件,請使用 --clean-deps
選項:
tux >
sudo
zypper rm --clean-deps PACKAGE_NAME
6.1.3.4 在程序檔中使用 Zypper #
依預設,Zypper 會在安裝或移除所選套件前或出現問題時要求您確認。使用 --non-interactive
選項可覆寫此行為。此選項必須放在實際指令 (install
、remove
和 patch
) 的前面,如下所示:
tux >
sudo
zypper--non-interactive
install PACKAGE_NAME
此選項允許在程序檔與 cron 工作中使用 Zypper。
6.1.3.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.6 節 「使用 Zypper 管理儲存庫」。
儲存庫中所有可用來源套件的清單可透過以下指令獲得:
tux >
zypper search -t srcpackage
您還可以將所有已安裝套件的來源套件下載到本地目錄。若要下載來源套件,請使用:
tux >
zypper source-download
預設下載目錄為 /var/cache/zypper/source-download
。您可以使用 --directory
選項變更該目錄。若只想顯示遺失或多餘的套件而不進行任何下載或刪除操作,請使用 --status
選項。若要刪除多餘的來源套件,請使用 --delete
選項。若要停用刪除操作,請使用 --no-delete
選項。
6.1.3.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
字串。
仍會設定 SUSE Linux Enterprise Server 安裝媒體中的儲存庫,但成功安裝後會停用這些儲存庫。您可以使用 --plus-content
選項從安裝媒體而不是線上儲存庫安裝套件。在呼叫 zypper
之前,請確保該媒體可用,例如,將 DVD 插入電腦的磁碟機中。
6.1.3.7 公用程式 #
若要驗證是否仍滿足所有相依條件並執行未滿足的相依條件,請使用:
tux >
zypper verify
除了必須滿足的相依條件之外,一些套件還會「推薦」其他套件。這些推薦的套件只有在確實可用並可安裝時才會進行安裝。如果所推薦的套件在推薦方套件安裝之後 (透過新增其他套件或硬體) 才可用,請使用以下指令:
tux >
sudo
zypper install-new-recommends
此指令在接入網路攝影機或 Wi-Fi 裝置後非常有用。它將安裝裝置的驅動程式及相關軟體 (如果有)。驅動程式及相關軟體只有在符合了某些硬體相依性條件後才可安裝。
6.1.4 使用 Zypper 更新軟體 #
Zypper 有三種方法更新軟體:安裝修補程式、安裝新版本的套件或更新整個套裝作業系統。最後一種方法可藉由 zypper dist-upgrade
來實現。中介紹了如何升級 SUSE Linux Enterprise ServerBook “升級指南”, Chapter 1 “升級路徑和方法”。
6.1.4.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.4.2 列出修補程式 #
為了讓您確定修補程式是否可用,Zypper 允許您檢視以下資訊:
- 所需修補程式的數量
若要列出所需修補程式的數量 (適用於您系統但尚未安裝的修補程式),請使用
patch-check
:tux >
zypper patch-check Loading repository data... Reading installed packages... 5 patches needed (1 security patch)可以結合
--updatestack-only
選項使用此指令,以便僅列出影響 Zypper 和套件管理本身的修補程式。- 所需修補程式的清單
若要列出全部所需的修補程式 (適用於您系統但尚未安裝的修補程式),請使用
zypper list-patches
。- 所有修補程式的清單
若要列出可用於 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-2019-0287 | SUSE-SLE-Module.. | recommended | moderate | needed
cve | CVE-2019-3566 | SUSE-SLE-SERVER.. | recommended | moderate | not needed
[...]
6.1.4.3 安裝新的套件版本 #
如果儲存庫中只含有新套件,但未提供修補程式,則 zypper patch
不起任何作用。若要使用可用的較新版本更新所有安裝的套件 (同時維持系統完整性),請使用:
tux >
sudo
zypper update
若要更新個別套件,請在更新或安裝指令中指定套件:
tux >
sudo
zypper update PACKAGE_NAMEtux >
sudo
zypper install PACKAGE_NAME
所有可安裝的新套件的清單可透過以下指令獲得:
tux >
zypper list-updates
請注意,此指令只會列出符合以下準則的套件:
與已安裝套件具有相同的廠商,
提供套件的儲存庫相較於已安裝套件,擁有更高或相同的優先程度,
可安裝 (符合所有相依性條件)。
所有新可用套件 (無論是否可安裝) 的清單可透過以下指令獲得:
tux >
sudo
zypper list-updates --all
若要找出新套件無法安裝的原因,請依上文所述使用 zypper install
或 zypper update
指令。
6.1.4.4 識別孤立的套件 #
每當您從 Zypper 中移除某個儲存庫或者升級系統時,某些套件可能會進入「孤立」狀態。這些孤立的套件不再屬於任何使用中的儲存庫。以下指令可以列出這些套件:
tux >
sudo
zypper packages --orphaned
有了這份清單,您可以確定是否仍然需要某個套件,或者是否可以安全移除某個套件。
6.1.5 識別使用已刪除檔案的程序和服務 #
在修補、更新或移除套件時,系統上可能有一些執行中的程序仍在使用更新或移除過後已刪除的檔案。執行 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 |
登入:執行程序的使用者的登入名稱 |
指令:用於執行程序的指令 |
服務:服務名稱 (僅當指令與系統服務關聯時) |
檔案:已刪除檔案的清單 |
可依如下所示控制 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
如需服務處理的詳細資訊,請參閱第 15 章 「systemd
精靈」。
6.1.6 使用 Zypper 管理儲存庫 #
Zypper 的所有安裝或修補指令均依賴於一系列已知的儲存庫。若要列出系統可識別的所有儲存庫,請使用指令:
tux >
zypper repos
結果類似於以下輸出:
tux >
zypper repos
# | Alias | Name | Enabled | Refresh
--+--------------+---------------+---------+--------
1 | SLEHA-15-GEO | SLEHA-15-GEO | Yes | No
2 | SLEHA-15 | SLEHA-15 | Yes | No
3 | SLES15 | SLES15 | Yes | No
在各種指令中指定儲存庫時,可以使用 zypper repos
指令輸出的別名、URI 或儲存庫編號。儲存庫別名是儲存庫名稱的縮寫形式,用於儲存庫處理指令。請注意,修改儲存庫清單後,儲存庫的編號可能會發生變更。但別名永遠不會自行變更。
依預設,不會顯示儲存庫的詳細資料 (如 URI 或優先程度)。若要列出所有詳細資料,可以使用以下指令:
tux >
zypper repos -d
6.1.6.1 新增儲存庫 #
若要新增儲存庫,請執行
tux >
sudo
zypper addrepo URI ALIAS
URI 可以是網際網路儲存庫、網路資源、目錄,也可以是 CD 或 DVD (如需詳細資料,請造訪 https://en.opensuse.org/openSUSE:Libzypp_URIs)。ALIAS 是儲存庫的唯一縮寫識別碼。您可以隨意選擇,前提是它必須是唯一的。如果指定了已使用的別名,Zypper 會發出警告。
6.1.6.2 重新整理儲存庫 #
zypper
可讓您從設定的儲存庫中擷取套件中的變更。若要擷取變更,請執行:
tux >
sudo
zypper refresh
zypper
的預設行為
有些指令預設會自動執行 refresh
,因此您不需要明確執行該指令。
使用 refresh
指令時搭配 --plus-content
選項還可檢視已停用儲存庫中的變更:
tux >
sudo
zypper --plus-content refresh
該選項雖然會擷取儲存庫中的變更,但會使已停用儲存庫的狀態保持不變,即仍為停用。
6.1.6.3 移除儲存庫 #
若要從清單中移除某個儲存庫,請將指令 zypper removerepo
與要刪除的儲存庫的別名或編號結合使用。例如,若要從範例 6.1 「Zypper — 已知儲存庫的清單」中移除儲存庫 SLEHA-12-GEO
,請使用下列其中一個指令:
tux >
sudo
zypper removerepo 1tux >
sudo
zypper removerepo "SLEHA-12-GEO"
6.1.6.4 修改儲存庫 #
zypper modifyrepo
可以啟用或停用儲存庫。您也可以使用此指令變更儲存庫的內容 (如重新整理行為、名稱或優先程度)。以下指令將啟用名為 updates
的儲存庫,開啟自動重新整理功能,並將優先程度設為 20:
tux >
sudo
zypper modifyrepo -er -p 20 'updates'
修改儲存庫並不局限於單個儲存庫,您也可以對群組執行該操作:
-a :所有儲存庫 |
-l :本地儲存庫 |
-t :遠端儲存庫 |
-m TYPE :特定類型的儲存庫 (其中 TYPE 可以是以下之一: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.7 使用 Zypper 查詢儲存庫和套件 #
Zypper 提供多種方法來查詢儲存庫或套件。若要獲得所有可用產品、模式、套件或修補程式的清單,請使用以下指令:
tux >
zypper productstux >
zypper patternstux >
zypper packagestux >
zypper patches
若要在所有儲存庫中查詢某些套件,請使用 search
。若要獲得有關特定套件的資訊,請使用 info
指令。
6.1.7.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.7.2 在所有 SLE 模組中搜尋套件 #
若要搜尋目前已啟用的 SLE 模組內部和外部的套件,請使用 search-packages
子指令。此指令會聯絡 SUSE Customer Center,並在所有模組中搜尋相符的套件,例如:
tux >
zypper search-packages package1 package2
zypper search-packages
提供以下選項:
搜尋與您的搜尋字串完全相符的套件:
-x
、--match-exact
按模組對結果進行分組 (預設:按套件分組):
-g、
--group-by-module
顯示有關套件的更多詳細資訊:
-d
、--details
以 XML 格式輸出搜尋結果:
--xmlout
6.1.7.3 搜尋特定功能 #
若要搜尋提供特殊功能的套件,請使用指令 what-provides
。例如,如果您想瞭解哪個套件提供 Perl 模組 SVN::Core
,請使用以下指令:
tux >
zypper what-provides 'perl(SVN::Core)'
what-provides 套件名稱
與 rpm -q --whatprovides
套件名稱類似,不過,RPM 只能查詢 RPM 資料庫 (即所有已安裝套件的資料庫)。另外,Zypper 會告知您任何儲存庫功能的提供者,而不是只有已安裝的儲存庫。
6.1.7.4 顯示套件資訊 #
若要查詢單個套件,請在 info
指令中使用準確的套件名稱做為引數。這會顯示有關某個套件的詳細資訊。如果套件名稱與儲存庫中的所有套件名稱都不相符,該指令會輸出非套件相符項目的詳細資訊。如果您 (透過使用 -t
選項) 要求特定類型,但該類型不存在,該指令會輸出其他可用的相符項,但不提供詳細資訊。
如果您指定來源套件,該指令會顯示基於該來源套件建立的二進位套件。如果指定二進位套件,該指令會輸出用來建立該二進位套件的來源套件。
如果還想顯示套件所需/推薦的項目,請使用選項 --requires
和 --recommends
:
tux >
zypper info --requires MozillaFirefox
6.1.8 顯示生命週期資訊 #
SUSE 產品的支援週期一般為 10 年。通常,您可以使用 SUSE 的延伸支援產品將標準生命週期延長三年。根據您的產品,在 https://www.suse.com/lifecycle 中找到具體的支援生命週期。
若要檢查您的產品和所支援套件的生命週期,請依下面的方式使用 zypper lifecycle
指令:
root #
zypper lifecycle
Product end of support Codestream: SUSE Linux Enterprise Server 15 2028-07-31 Product: SUSE Linux Enterprise Server 15 SP3 n/a* Module end of support Basesystem Module n/a* Desktop Applications Module n/a* Server Applications Module n/a* Package end of support if different from product: autofs Now, installed 5.1.3-7.3.1, update available 5.1.3-7.6.1
6.1.9 設定 Zypper #
Zypper 現隨附一個組態檔案,透過該檔案可永久變更 Zypper 的行為 (整個系統範圍或僅針對特定使用者)。對於泛系統變更,請編輯 /etc/zypp/zypper.conf
。對於特定使用者的變更,請編輯 ~/.zypper.conf
。如果 ~/.zypper.conf
尚不存在,您可以使用 /etc/zypp/zypper.conf
做為範本:將其複製到 ~/.zypper.conf
並根據喜好進行調整。如需有關可用選項的說明,請參閱檔案中的備註。
6.1.10 疑難排解 #
如果您在存取所設定儲存庫中的套件時遇到問題 (例如,儘管您知道某個套件在某個儲存庫中,但 Zypper 找不到該套件),重新整理儲存庫或許可以解決問題:
tux >
sudo
zypper refresh
如果不起作用,請嘗試
tux >
sudo
zypper refresh -fdb
此指令會強制執行全面的重新整理和資料庫重建,包括強制下載原始中繼資料。
6.1.11 Btrfs 檔案系統上的 Zypper 復原功能 #
如果根分割區上使用的是 Btrfs 檔案系統,且系統中安裝了 snapper
,當 Zypper 提交對檔案系統所做的變更以建立相應的檔案系統快照時,會自動呼叫 snapper
。這些快照可用於回復 Zypper 進行的任何變更。如需詳細資訊,請參閱第 7 章 「使用 Snapper 進行系統復原和快照管理」。
6.1.12 更多資訊 #
如需透過指令行管理軟體的詳細資訊,請輸入 zypper help
、zypper help
指令,或參閱 zypper(8)
手冊頁。如需詳盡的指令參考、最重要指令的彙總表
,以及有關如何在程序檔和應用程式中使用 Zypper 的資訊,請參閱 https://en.opensuse.org/SDB:Zypper_usage。最新 SUSE Linux Enterprise Server 版本的軟體變更清單可在 https://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 15
只有在您指令完整檔案名稱及完整路徑時,選項 -f
才會有作用。盡可能提供很多檔案名稱。例如:
tux >
rpm -q -f /bin/rpm /usr/bin/wget
rpm-4.14.1-lp151.13.10.x86_64
wget-1.19.5-lp151.4.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.19.5.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 資料庫中。
請記住,規格檔案中的 BuildRoot
指令已棄用。如果您仍然需要此功能,請使用 --buildroot
選項做為因應措施。
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 模組的方式提供。如需詳細資料,請參閱Book “部署指南 ”, Chapter 21 “安裝或移除軟體”。
7 使用 Snapper 進行系統復原和快照管理 #
Snapper 可用於建立和管理檔案系統快照。檔案系統快照可用於保留檔案系統在某個時間點的狀態副本。Snapper 的標準設定旨在允許復原系統變更。但是,您也可以使用它來建立使用者資料的磁碟備份。Snapper 基於 Btrfs 檔案系統或者採用 XFS (或 Ext4) 檔案系統的簡易佈建 LVM 磁碟區實現此功能。
Snapper 具有指令行介面和 YaST 介面。Snapper 可讓您在以下類型的檔案系統上建立和管理檔案系統快照:
Btrfs:適用於 Linux 的「寫入時複製」檔案系統,原生支援子磁碟區的檔案系統快照。(子磁碟區是實體分割區中可獨立掛接的檔案系統。)
您也可以從
Btrfs
快照開機。如需詳細資訊,請參閱 第 7.3 節 「透過從快照開機來執行系統復原」。使用 XFS 或 Ext4 格式化的簡易佈建 LVM 磁碟區。
您可以使用 Snapper 執行以下任務:
復原
zypper
和 YaST 所做的系統變更。如需詳細資料,請參閱第 7.2 節 「使用 Snapper 復原變更」。從之前的快照還原檔案。如需詳細資料,請參閱第 7.2.2 節 「使用 Snapper 還原檔案」。
透過從快照開機來復原系統。如需詳細資料,請參閱第 7.3 節 「透過從快照開機來執行系統復原」。
於正在執行的系統中手動建立和管理快照。如需詳細資料,請參閱第 7.6 節 「以手動方式建立和管理快照」。
7.1 預設設定 #
SUSE Linux Enterprise Server 上的 Snapper 設定為系統變更的復原工具。依預設,SUSE Linux Enterprise Server
的根分割區 (/) 使用 Btrfs
格式化。如果根分割區 (/
) 足夠大 (大約超過 16 GB),則會自動啟用快照建立功能。依預設,在除 /
以外的分割區上會停用快照。
如果您在安裝期間停用了 Snapper,以後隨時都可啟用它。若要進行此操作,請執行以下指令以建立根檔案系統的預設 Snapper 組態:
tux >
sudo
snapper -c root create-config /
之後,依第 7.1.4.1 節 「停用/啟用快照」所述啟用不同的快照類型。
請注意,若要在 Btrfs 根檔案系統上使用快照,需依照安裝程式的建議設定包含子磁碟區的檔案系統,並且分割區大小至少為 16 GB。
建立快照時,快照和原件都會指向檔案系統中的同一區塊。因此,快照最初並不佔用額外的磁碟空間。如果原始檔案系統中的資料經過修改,則會複製變更後的資料區塊,同時保留快照的舊資料區塊。因此,快照便會佔用與已修改資料相同的空間。這樣,經過一段時間之後,快照配置的空間不斷增大。因而,從包含快照的 Btrfs
檔案系統刪除檔案可能無法釋放磁碟空間!
快照始終位於建立快照所在的同一分割區或子磁碟區上。而無法儲存到其他分割區或子磁碟區上。
因此,包含快照的分割區需大於不包含快照的分割區。確切的大小很大程度上取決於保留的快照數量以及資料修改量。依照以往經驗,應為分割區配置兩倍於一般情況下使用的空間。為了防止磁碟上的空間耗盡,系統會自動清理舊快照。如需詳細資訊,請參閱第 7.1.4.4 節 「控制快照歸檔」。
7.1.1 預設設定 #
- 大於 16 GB 的磁碟
組態檔案:
/etc/snapper/configs/root
USE_SNAPPER=yes
TIMELINE_CREATE=no
- 小於 16 GB 的磁碟
組態檔案:未建立
USE_SNAPPER=no
TIMELINE_CREATE=yes
7.1.2 快照類型 #
儘管快照本身在技術方面並無區別,但我們根據觸發它們的事件將其分成三類:
- 時間軸快照
每小時建立一個快照。系統會自動刪除舊快照。依預設,系統會保留過去十天、十個月或十年的第一個快照。時間軸快照預設已停用。
- 安裝快照
每當使用 YaST 或 Zypper 安裝一個或多個套件時,均會建立一對快照:安裝開始前建立一個 (「前」),安裝結束後建立另一個 (「後」)。如果重要系統元件 (如核心) 已經安裝,則快照對會標示為重要 (
important=yes
)。系統會自動刪除舊快照。依預設,系統會保留最近十個重要快照以及最近十個「一般」快照 (包括管理快照)。預設系統會啟用安裝快照。- 管理快照
每當您使用 YaST 管理系統時,均會建立一對快照:啟動 YaST 模組時建立一個 (「前」),關閉模組時建立另一個 (「後」)。系統會自動刪除舊快照。依預設,系統會保留最近十個重要快照以及最近十個「一般」快照 (包括安裝快照)。預設系統會啟用管理快照。
7.1.3 從快照中排除的目錄 #
出於不同原因,需要將一些目錄從快照中排除。下列清單顯示排除的所有目錄:
/boot/grub2/i386-pc
、/boot/grub2/x86_64-efi
、/boot/grub2/powerpc-ieee1275
、/boot/grub2/s390x-emu
不支援對開機載入程式組態進行復原。上面列出的目錄是架構專屬目錄。前兩個目錄位於 AMD64/Intel 64 機器上,後兩個目錄分別位於 IBM POWER 和 IBM Z 上。
/home
如果
/home
不在獨立的分割區上,系統會將其排除以避免在復原時發生資料遺失。/opt
協力廠商產品通常會安裝到
/opt
。系統會將該目錄排除以避免在復原時解除安裝這些應用程式。/srv
包含 Web 和 FTP 伺服器的資料。系統會將該目錄排除以避免在復原時發生資料遺失。
/tmp
包含暫存檔案和快取的所有目錄均會從快照中排除。
/usr/local
在手動安裝軟體時會用到此目錄。系統會將該目錄排除,以免在復原時解除安裝這些安裝的軟體。
/var
此目錄包含許多變數檔案 (包括記錄、暫時快取、
/var/opt
中的協力廠商產品),是虛擬機器影像和資料庫的預設位置。因此,建立此子磁碟區是為了從快照中排除所有這些變數資料,且已停用「寫入時複製」。
7.1.4 自訂設定 #
SUSE Linux Enterprise Server 隨附一個合理的預設設定,該設定適合大多數使用案例。不過,您可以根據自己的需求對建立自動快照以及快照保留的方方面面進行設定。
7.1.4.1 停用/啟用快照 #
三種快照類型 (時間軸、安裝、管理) 均可獨立啟用或停用。
- 停用/啟用時間軸快照
啟用:
snapper -c root set-config "TIMELINE_CREATE=yes"
停用:
snapper -c root set-config "TIMELINE_CREATE=no"
預設會啟用時間軸快照,根分割區除外。
- 停用/啟用安裝快照
啟用:: 安裝套件
snapper-zypp-plugin
停用:: 解除安裝套件
snapper-zypp-plugin
預設系統會啟用安裝快照。
- 停用/啟用管理快照
啟用:: 在
/etc/sysconfig/yast2
中將USE_SNAPPER
設定為yes
。停用:: 在
/etc/sysconfig/yast2
中將USE_SNAPPER
設定為no
。預設系統會啟用管理快照。
7.1.4.2 控制安裝快照 #
使用 YaST 或 Zypper 安裝套件時所建立的快照對由 snapper-zypp-plugin
處理。何時建立快照由 XML 組態檔案 /etc/snapper/zypp-plugin.conf
定義。依預設,該檔案如下所示:
1 <?xml version="1.0" encoding="utf-8"?> 2 <snapper-zypp-plugin-conf> 3 <solvables> 4 <solvable match="w"1 important="true"2>kernel-*3</solvable> 5 <solvable match="w" important="true">dracut</solvable> 6 <solvable match="w" important="true">glibc</solvable> 7 <solvable match="w" important="true">systemd*</solvable> 8 <solvable match="w" important="true">udev</solvable> 9 <solvable match="w">*</solvable>4 10 </solvables> 11 </snapper-zypp-plugin-conf>
match 屬性定義模式是 Unix 外圍程序樣式的萬用字元 ( | |
如果符合指定模式且對應的套件標示為 important (例如核心套件),則快照也會標示為 important。 | |
用於比對套件名稱的模式。根據 | |
此行無條件符合所有套件。 |
使用此組態時,只要安裝套件即會建立快照對 (第 9 行)。如果標示為 important 的核心、dracut、glibc、systemd 或 udev 套件已安裝,快照對也會標示為 important (第 4 行至第 8 行)。系統會評估所有規則。
要停用規則,請使用 XML 備註將其刪除或停用。若想避免系統在每次安裝套件時都建立快照對,可將第 9 行設為備註:
1 <?xml version="1.0" encoding="utf-8"?> 2 <snapper-zypp-plugin-conf> 3 <solvables> 4 <solvable match="w" important="true">kernel-*</solvable> 5 <solvable match="w" important="true">dracut</solvable> 6 <solvable match="w" important="true">glibc</solvable> 7 <solvable match="w" important="true">systemd*</solvable> 8 <solvable match="w" important="true">udev</solvable> 9 <!-- <solvable match="w">*</solvable> --> 10 </solvables> 11 </snapper-zypp-plugin-conf>
7.1.4.3 建立和掛接新子磁碟區 #
系統支援在 /
階層下建立新的子磁碟區,並永久掛接該磁碟區。此類子磁碟區將從快照中排除。切勿在現有快照中建立此類子磁碟區,因為在復原之後,您將無法再刪除快照。
SUSE Linux Enterprise Server 上設定了 /@/
子磁碟區,該子磁碟區用做永久子磁碟區 (例如 /opt
、/srv
、/home
等) 的獨立根分割區。您建立和永久掛接的任何新子磁碟區都需要在這個初始根檔案系統中建立。
若要這樣做,請執行以下指令。在此範例中,從 /dev/sda2
建立了一個新子磁碟區 /usr/important
。
tux >
sudo
mount /dev/sda2 -o subvol=@ /mnttux >
sudo
btrfs subvolume create /mnt/usr/importanttux >
sudo
umount /mnt
/etc/fstab
中的相應項目需類似於:
/dev/sda2 /usr/important btrfs subvol=@/usr/important 0 0
子磁碟區可能包含經常變更的檔案,例如虛擬化磁碟影像、資料庫檔案或記錄檔案。如果是這樣,可考慮對此磁碟區停用寫入時複製功能,以免複製磁碟區塊。在 /etc/fstab
中使用 nodatacow
掛接選項可實現此目的:
/dev/sda2 /usr/important btrfs nodatacow,subvol=@/usr/important 0 0
或者,若要為單個檔案或目錄停用寫入時複製功能,請使用指令 chattr +C 路徑
。
7.1.4.4 控制快照歸檔 #
快照會佔用磁碟空間。為了防止磁碟用盡而導致系統中斷,會自動刪除舊快照。預設會保留最多 10 個重要的安裝快照與管理快照,以及最多 10 個普通的安裝快照與管理快照。如果這些快照佔用的空間超過根檔案系統大小的 50%,則會刪除其他快照。永遠會至少保留 4 個重要快照和 2 個普通快照。
如需如何變更這些值的指示,請參閱第 7.5.1 節 「管理現有組態」。
7.1.4.5 在簡易佈建的 LVM 磁碟區上使用快照 #
除了在 Btrfs
檔案系統上建立快照之外,Snapper 還支援在使用 XFS、Ext4 或 Ext3 格式化的簡易佈建 LVM 磁碟區上建立快照 (但不支援在一般 LVM 磁碟區上建立快照)。如需 LVM 磁碟區的詳細資訊以及設定指示,請參閱Book “部署指南 ”, Chapter 10 “。
”, Section 10.2 “LVM 組態”
若要在簡易佈建的 LVM 磁碟區上使用 Snapper,需要為其建立 Snapper 組態。在 LVM 上,需要使用 --fstype=lvm(檔案系統)
指定檔案系統。檔案系統 的有效值有 ext3
、etx4
或 xfs
。範例:
tux >
sudo
snapper -c lvm create-config --fstype="lvm(xfs)" /thin_lvm
您可以依第 7.5.1 節 「管理現有組態」 中所述根據需求調整此組態。
7.2 使用 Snapper 復原變更 #
SUSE Linux Enterprise Server 上的 Snapper 已預先設定為充當復原 zypper
和 YaST 所做變更的工具。要充當復原工具,Snapper 設定為在每次執行 zypper
和 YaST 的前後建立一對快照。此外,Snapper 還可讓您還原遭意外刪除或修改的系統檔案。出於此目的需要啟用根分割區的時間軸快照 — 如需詳細資訊,請參閱第 7.1.4.1 節 「停用/啟用快照」。
預設會為根分割區及其子磁碟區設定上述的自動快照。為了讓這些快照可供其他分割區 (例如 /home
) 使用,您可以建立自訂組態。
使用快照還原資料時,您必須知道 Snapper 可以處理兩種完全不同的案例。
- 復原變更
當如下文所述復原變更時,系統會比較兩個快照,並復原這兩個快照之間的變更。使用此方法還允許明確選取要還原的檔案。
- 復原
當如第 7.3 節 「透過從快照開機來執行系統復原」中所述執行復原時,系統會重設回建立快照當時的狀態。
復原變更時,還可以將快照與目前系統進行比較。根據此類比較還原全部檔案時,其效果等同於執行復原。但是,還是建議使用第 7.3 節 「透過從快照開機來執行系統復原」中所述的方法復原,因為它的速度更快並且可讓您在執行復原之前複查系統。
在建立快照時,沒有任何一種機制可確保資料的一致性。如果在建立快照的同時寫入某個檔案 (如資料庫),將導致檔案損毀或寫入不完整。還原此類檔案將會導致問題。此外,有些系統檔案 (例如 /etc/mtab
) 是絕對不能還原的。因此,強烈建議您始終仔細檢閱已變更檔案及其差異的清單。請只還原真正屬於您要執行回復的檔案。
7.2.1 復原 YaST 和 Zypper 變更 #
如果您在安裝期間使用 Btrfs
設定根分割區,系統將會自動安裝 Snapper (已預先設定為用於復原 YaST 或 Zypper 所做的變更)。每當您啟動 YaST 模組或 Zypper 交易時,都會建立兩個快照:擷取啟動模組之前檔案系統狀態的「前快照」,以及完成模組之後的「後快照」。
您可以使用 YaST Snapper 模組或 snapper
指令行工具,透過從「前快照」還原檔案來復原 YaST/Zypper 所做的變更。比較兩個快照時,這些工具還可讓您查看哪些檔案已經過變更。此外,您還可以顯示某檔案的兩個版本之間的差異 (diff)。
從 YaST 的「
」區段或透過輸入yast2 snapper
啟動「 」模組。請確定「
」設為「 」。除非您手動新增了自己的 Snapper 組態,否則應始終如此設定。從清單中選擇一對前快照和後快照。YaST 與 Zypper 快照對都屬於「
」類型。在「 」欄中,YaST 快照標示為zypp(y2base)
,Zypper 快照標示為zypp(zypper)
。按一下「
」以開啟兩個快照之間不同的檔案清單。檢閱檔案清單。若要顯示檔案的前版本與後版本之間的「差異」,請從清單中選取它。
要還原一個或多個檔案,請勾選相應的核取方塊來選取相關的檔案或目錄。按一下「
」,然後按一下「 」確認該動作。要還原單個檔案,請按一下其名稱以啟動差異比對檢視。按一下「
」,然後按一下「 」確認您的選擇。
執行
snapper list -t pre-post
取得 YaST 和 Zypper 快照的清單。在 欄中,YaST 快照標示為yast MODULE_NAME
;Zypper 快照標示為zypp (zypper)
。tux >
sudo
snapper list -t pre-post Pre # | Post # | Pre Date | Post Date | Description ------+--------+-------------------------------+-------------------------------+-------------- 311 | 312 | Tue 06 May 2018 14:05:46 CEST | Tue 06 May 2018 14:05:52 CEST | zypp(y2base) 340 | 341 | Wed 07 May 2018 16:15:10 CEST | Wed 07 May 2018 16:15:16 CEST | zypp(zypper) 342 | 343 | Wed 07 May 2018 16:20:38 CEST | Wed 07 May 2018 16:20:42 CEST | zypp(y2base) 344 | 345 | Wed 07 May 2018 16:21:23 CEST | Wed 07 May 2018 16:21:24 CEST | zypp(zypper) 346 | 347 | Wed 07 May 2018 16:41:06 CEST | Wed 07 May 2018 16:41:10 CEST | zypp(y2base) 348 | 349 | Wed 07 May 2018 16:44:50 CEST | Wed 07 May 2018 16:44:53 CEST | zypp(y2base) 350 | 351 | Wed 07 May 2018 16:46:27 CEST | Wed 07 May 2018 16:46:38 CEST | zypp(y2base)使用下列指令取得快照對的已變更檔案清單:
snapper status
前..後。含有內容變更的檔案以 標示,新增的檔案以 標示,刪除的檔案以 標示。tux >
sudo
snapper status 350..351 +..... /usr/share/doc/packages/mikachan-fonts +..... /usr/share/doc/packages/mikachan-fonts/COPYING +..... /usr/share/doc/packages/mikachan-fonts/dl.html c..... /usr/share/fonts/truetype/fonts.dir c..... /usr/share/fonts/truetype/fonts.scale +..... /usr/share/fonts/truetype/みかちゃん-p.ttf +..... /usr/share/fonts/truetype/みかちゃん-pb.ttf +..... /usr/share/fonts/truetype/みかちゃん-ps.ttf +..... /usr/share/fonts/truetype/みかちゃん.ttf c..... /var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-x86_64.cache-4 c..... /var/lib/rpm/Basenames c..... /var/lib/rpm/Dirnames c..... /var/lib/rpm/Group c..... /var/lib/rpm/Installtid c..... /var/lib/rpm/Name c..... /var/lib/rpm/Packages c..... /var/lib/rpm/Providename c..... /var/lib/rpm/Requirename c..... /var/lib/rpm/Sha1header c..... /var/lib/rpm/Sigmd5若要顯示特定檔案的差異,請執行
snapper diff
前..後 檔案名稱。如果不指定檔案名稱,將會顯示所有檔案的差異。tux >
sudo
snapper diff 350..351 /usr/share/fonts/truetype/fonts.scale --- /.snapshots/350/snapshot/usr/share/fonts/truetype/fonts.scale 2014-04-23 15:58:57.000000000 +0200 +++ /.snapshots/351/snapshot/usr/share/fonts/truetype/fonts.scale 2014-05-07 16:46:31.000000000 +0200 @@ -1,4 +1,4 @@ -1174 +1486 ds=y:ai=0.2:luximr.ttf -b&h-luxi mono-bold-i-normal--0-0-0-0-c-0-iso10646-1 ds=y:ai=0.2:luximr.ttf -b&h-luxi mono-bold-i-normal--0-0-0-0-c-0-iso8859-1 [...]若要還原一或多個檔案,請執行
snapper -v undochange
前..後 檔案名稱。如果不指定檔案名稱,將會還原所有已變更的檔案。tux >
sudo
snapper -v undochange 350..351 create:0 modify:13 delete:7 undoing change... deleting /usr/share/doc/packages/mikachan-fonts deleting /usr/share/doc/packages/mikachan-fonts/COPYING deleting /usr/share/doc/packages/mikachan-fonts/dl.html deleting /usr/share/fonts/truetype/みかちゃん-p.ttf deleting /usr/share/fonts/truetype/みかちゃん-pb.ttf deleting /usr/share/fonts/truetype/みかちゃん-ps.ttf deleting /usr/share/fonts/truetype/みかちゃん.ttf modifying /usr/share/fonts/truetype/fonts.dir modifying /usr/share/fonts/truetype/fonts.scale modifying /var/cache/fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-x86_64.cache-4 modifying /var/lib/rpm/Basenames modifying /var/lib/rpm/Dirnames modifying /var/lib/rpm/Group modifying /var/lib/rpm/Installtid modifying /var/lib/rpm/Name modifying /var/lib/rpm/Packages modifying /var/lib/rpm/Providename modifying /var/lib/rpm/Requirename modifying /var/lib/rpm/Sha1header modifying /var/lib/rpm/Sigmd5 undoing change done
不建議透過使用 Snapper 回復變更的方式回復使用者新增。因為快照中排除了某些目錄,屬於這些使用者的檔案將保留在檔案系統中。如果使用已刪除使用者的使用者 ID 建立使用者,則此使用者將繼承這些檔案。因此,強烈建議您使用 YaST「
」工具來移除使用者。7.2.2 使用 Snapper 還原檔案 #
除了安裝與管理快照之外,Snapper 還會建立時間軸快照。您可以使用這些備份快照來還原不小心刪除的檔案或還原舊版檔案。利用 Snapper 的差異比對功能,您還可以瞭解在特定時間點執行了哪些修改。
還原檔案功能對於預設不會建立快照的子磁碟區或分割區上的資料尤其有用。例如,要從主目錄還原檔案,可以為自動建立時間軸快照的 /home
建立單獨的 Snapper 組態。如需指示,請參閱第 7.5 節 「建立並修改 Snapper 組態」。
從根檔案系統 (由 Snapper 的根組態定義) 建立的快照可用於執行系統復原。建議您使用從快照開機然後執行復原的方式執行此復原。如需詳細資料,請參閱第 7.3 節 「透過從快照開機來執行系統復原」。
也可使用從根檔案系統快照還原所有檔案的方式執行復原 (如下文所述)。但我們不建議採用這種方法。您可以還原單個檔案 (如 /etc
目錄中的組態檔案),但不能從快照還原整份檔案清單中的檔案。
此限制僅影響從根檔案系統建立的快照!
從 YaST 的
區段或透過輸入yast2 snapper
啟動 模組。選擇要從中選擇快照的「
」。選取要從中還原檔案的時間軸快照,並選擇「
」。時間軸快照屬於「 」類型,以「 」描述。按一下檔案名稱,從文字方塊中選取一個檔案。隨即顯示快照版本與目前系統之間的差異。勾選該核取方塊以選取要還原的檔案。對所有您要還原的檔案執行此操作。
按一下「
」,然後按一下「 」確認該動作。
執行以下指令獲取特定組態之時間軸快照的清單:
tux >
sudo
snapper -c CONFIG list -t single | grep timelineCONFIG 需要以現有的 Snapper 組態取代。使用
snapper list-configs
顯示清單。執行以下指令獲取指定快照之已變更檔案的清單:
tux >
sudo
snapper -c CONFIG status SNAPSHOT_ID..0以您要從中還原檔案之快照的 ID 取代 SNAPSHOT_ID。
(選擇性)透過執行以下指令,列出目前檔案版本與快照中之檔案的差異
tux >
sudo
snapper -c CONFIG diff SNAPSHOT_ID..0 FILE NAME如果您未指定 <檔案名稱>,則會顯示所有檔案的差異。
要還原一或多個檔案,請執行
tux >
sudo
snapper -c CONFIG -v undochange SNAPSHOT_ID..0 FILENAME1 FILENAME2如果未指定檔案名稱,將會還原所有已變更的檔案。
7.3 透過從快照開機來執行系統復原 #
SUSE Linux Enterprise Server 上包含的 GRUB 2 版本能夠從 Btrfs 快照開機。除 Snapper 的復原功能外,它還可復原設定有誤的系統。只有針對預設 Snapper 組態 (root
) 建立的快照才可開機。
從 SUSE Linux Enterprise Server 15 SP3 開始,僅當根分割區的預設子磁碟區組態未變更時,才支援系統復原。
將快照開機時,該快照中包含之檔案系統的部分會以唯讀模式掛接,而從快照中排除的所有其他檔案系統以及該檔案系統的排除部分會以讀寫模式掛接並且可修改。
使用快照還原資料時,您必須知道 Snapper 可以處理兩種完全不同的案例。
- 復原變更
如第 7.2 節 「使用 Snapper 復原變更」中所述復原變更時,系統會比較兩個快照並回復這兩個快照之間的變更。使用此方法還可以將選取的檔案明確排除在還原之外。
- 復原
如下文所述執行復原時,系統會重設回建立快照當時的狀態。
若要從可開機快照執行復原,必須符合以下要求。執行預設安裝時,系統會進行相應設定。
根檔案系統必須是 Btrfs。不支援從 LVM 磁碟區快照開機。
根檔案系統必須位於單一裝置、單一分割區以及單一子磁碟區上。如
/srv
之類從快照中排除的目錄 (如需完整的清單,請參閱第 7.1.3 節 「從快照中排除的目錄」) 可以位於單獨的分割區上。系統必須能透過已安裝的開機載入程式開機。
要從可開機的快照執行復原,請按如下步驟執行:
將系統開機。在開機功能表中,選擇「
」並選取您要開機的快照。系統會按日期列出快照清單,最近的快照最先列出。登入系統。仔細檢查是否一切都如預期般運作。請注意,您無法對快照中包含的任何目錄執行寫入。但無論您接下來執行什麼操作,您寫入到其他目錄的資料都不會遺失。
根據您是否要執行復原操作,選擇下一步動作:
如果您不想對目前狀態的系統執行復原,請重新開機進入目前的系統狀態。然後,您便可選擇另一個快照,或是啟動救援系統。
若要進行復原,請執行
tux >
sudo
snapper rollback並在之後重新開機。在開機螢幕上,選擇預設開機項目以重新開機到已恢復的系統。系統即會建立復原前檔案系統狀態的快照。一個全新的讀寫快照即會取代根的預設子磁碟區。如需詳細資料,請參閱第 7.3.1 節 「復原後的快照」。
透過
-d
選項新增快照的描述非常實用。例如:New file system root since rollback on DATE TIME
如果安裝期間未停用快照,將在初始系統安裝結束時建立初始可開機快照。您隨時可以透過將此快照開機,返回到該狀態。安裝後
可依描述識別該快照。
開始對 Service Pack 或新的主要版本進行系統升級時,也會建立可開機快照 (前提是快照未停用)。
7.3.1 復原後的快照 #
在執行復原之前,將會建立一個執行中檔案系統的快照。快照描述會參考復原中所還原快照的 ID。
對於透過復原建立的快照,其 Cleanup
屬性的值會設為 number
。因此,復原快照會在達到設定的快照數後自動刪除。如需詳細資訊,請參閱第 7.7 節 「快照的自動清理」。如果快照包含重要資料,請在系統移除快照之前從快照中擷取資料。
7.3.1.1 復原快照範例 #
例如,在全新安裝之後,系統上存在以下可用的快照:
root #
snapper
--iso list Type | # | | Cleanup | Description | Userdata -------+---+ ... +---------+-----------------------+-------------- single | 0 | | | current | single | 1 | | | first root filesystem | single | 2 | | number | after installation | important=yes
執行 sudo snapper rollback
之後,將會建立快照 3
,它包含執行復原前系統的狀態。快照 4
是新的預設 Btrfs 子磁碟區,因此是重新開機之後的系統。
root #
snapper
--iso list Type | # | | Cleanup | Description | Userdata -------+---+ ... +---------+-----------------------+-------------- single | 0 | | | current | single | 1 | | number | first root filesystem | single | 2 | | number | after installation | important=yes single | 3 | | number | rollback backup of #1 | important=yes single | 4 | | | |
7.3.2 存取和識別快照開機項目 #
若要從快照開機,請重新開機並選擇↓ 和 ↑ 導覽,然後按 Enter 啟動所選的快照。從開機功能表啟動快照不會立即重新開機,而是開啟所選快照的開機載入程式。
。此時會開啟一個螢幕,其中列出了所有可開機的快照。最近的快照列在最前面,最舊的快照列在最後面。使用開機載入程式中的每個快照項目遵循一種可方便您識別快照的命名規劃:
[*]1OS2 (KERNEL3,DATE4TTIME5,DESCRIPTION6)
如果快照標示為 | |
作業系統標籤。 | |
採用 | |
採用 | |
此欄位包含快照的描述。對於手動建立的快照,這是使用選項 |
可以用自訂字串來取代快照描述欄位中的預設字串。例如,如果自動建立的描述不能充分描述快照,或者使用者提供的描述太長,則這種做法會很有用。若要為快照編號設定自訂字串字串,請使用以下指令:
tux >
sudo
snapper modify --userdata "bootloader=STRING" NUMBER
描述的長度不應超過 25 個字元 - 超過此大小的內容無法在開機畫面上正常顯示。
7.3.3 限制 #
無法進行完整系統復原,即將整個系統還原到與建立快照時完全相同的狀態。
7.3.3.1 從快照中排除的目錄 #
根檔案系統快照並不包含所有目錄。如需詳細資料和原因,請參閱第 7.1.3 節 「從快照中排除的目錄」。因此,這些目錄中的資料不會還原,也就形成以下限制。
- 執行復原後,附加產品和協力廠商軟體可能會無法使用
如果從快照中排除的子磁碟區 (如
/opt
) 中的應用程式還有其他部分資料安裝在該快照中包含的子磁碟區中,則應用程式及附加產品的安裝資料在復原後可能無法使用。重新安裝應用程式或附加產品可解決此問題。- 檔案存取問題
如果應用程式在快照以及目前系統之間變更了檔案權限和/或擁有權,則復原後該應用程式可能無法存取這些檔案。請在復原之後重設受影響檔案的權限和/或擁有權。
- 不相容的資料格式
如果服務或應用程式在快照和目前系統之間建立了新的資料格式,則復原之後該應用程式可能無法讀取受影響的資料檔案。
- 混合了代碼和資料的子磁碟區
/srv
等子磁碟區可能同時包含代碼和資料。復原可能導致代碼不起作用。例如,降級 PHP 版本可能導致該 Web 伺服器之 PHP 程序檔損毀。- 使用者資料
如果復原從系統移除了使用者,但這些使用者所擁有的資料存在於快照排除的目錄中,則這些資料不會予以移除。如果使用相同使用者 ID 建立使用者,則此使用者將繼承這些檔案。使用
find
等工具尋找並移除孤立的檔案。
7.3.3.2 不復原開機載入程式資料 #
無法復原開機載入程式,因為開機載入程式的所有「階段」必須組合在一起共同作用。而執行 /boot
復原則無法保證這一要求。
7.4 在使用者主目錄中啟用 Snapper #
您可以為使用者的 /home
目錄啟用快照,以便為以下多個使用案例提供支援:
個人使用者可以管理自己的快照和復原。
系統使用者,例如要追蹤組態檔案、文件等資料副本的資料庫、系統和網路管理員。
Samba 與主目錄和 Btrfs 後端進行共用。
每個使用者的目錄都是 /home
的 Btrfs 子磁碟區。您可以手動設定快照 (請參閱第 7.4.3 節 「以手動方式啟用主目錄中的快照」),但更便捷的方式是使用 pam_snapper
。pam_snapper
套件用於安裝 pam_snapper.so
模組和輔助程式程序檔,這些模組和程序檔可自動建立使用者和設定 Snapper。
pam_snapper
提供與 useradd
指令、插入式驗證模組 (PAM) 及 Snapper 的整合。依預設,它會在使用者登入和登出時建立快照;當某些使用者在很長一段時間內都處於登入狀態時,它還會建立基於時間的快照。您可以使用標準 Snapper 指令和組態檔案來變更預設值。
7.4.1 安裝 pam_snapper 和建立使用者 #
最簡單的方法是使用格式化為 Btrfs 的新 /home
目錄,並在沒有現有使用者的情況下開始。安裝 pam_snapper
:
root #
zypper in pam_snapper
將下面一行新增至 /etc/pam.d/common-session
中:
session optional pam_snapper.so
使用 /usr/lib/pam_snapper/pam_snapper_useradd.sh
程序檔建立新使用者和主目錄。該程序檔預設會進行試執行。請編輯程序檔,以將 DRYRUN=1
變更為 DRYRUN=0
。現在,您便可以建立新使用者:
root #
/usr/lib/pam_snapper/pam_snapper_useradd.sh \
username group passwd=password
Create subvolume '/home/username'
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
使用者首次登入時,/etc/skel
中的檔案將會複製到使用者主目錄。列出您的 Snapper 組態,以驗證是否已建立使用者的組態:
root #
snapper list --all
Config: home_username, subvolume: /home/username
Type | # | Pre # | Date | User | Cleanup | Description | Userdata
-------+---+-------+------+------+---------+-------------+---------
single | 0 | | | root | | current |
一段時間之後,此輸出中將會填入快照清單,使用者可以使用標準 Snapper 指令對其進行管理。
7.4.2 移除使用者 #
使用 /usr/lib/pam_snapper/pam_snapper_userdel.sh
程序檔移除使用者。該程序檔預設會進行試執行,請編輯程序檔,以將 DRYRUN=1
變更為 DRYRUN=0
。此操作將移除使用者、使用者的主子磁碟區、Snapper 組態,並會刪除所有快照。
root #
/usr/lib/pam_snapper/pam_snapper_userdel.sh username
7.4.3 以手動方式啟用主目錄中的快照 #
使用 Snapper 手動設定使用者主目錄的步驟如下。/home
必須已格式化為 Btrfs,並且目前尚未建立使用者。
root #
btrfs subvol create /home/usernameroot #
snapper -c home_username create-config /home/usernameroot #
sed -i -e "s/ALLOW_USERS=\"\"/ALLOW_USERS=\"username\"/g" \ /etc/snapper/configs/home_usernameroot #
yast users add username=username home=/home/username password=passwordroot #
chown username.group /home/usernameroot #
chmod 755 /home/username/.snapshots
7.5 建立並修改 Snapper 組態 #
每個分割區或 Btrfs
子磁碟區都有一個專用的組態檔案用於定義 Snapper 的行為方式。這些組態檔案位於 /etc/snapper/configs/
下。
如果根檔案系統足夠大 (大約有 12 GB),安裝時將自動對根檔案系統 /
啟用快照。相應的預設組態命名為 root
。該組態可建立和管理 YaST 及 Zypper 快照。如需預設值清單,請參閱第 7.5.1.1 節 「組態資料」。
如第 7.1 節 「預設設定」中所述,若要啟用快照,根檔案系統中需要有額外的可用空間。所需空間取決於所安裝的套件數量以及快照中包括的磁碟區變更量,另外還取決於快照頻率和歸檔的快照數。
若要在安裝期間自動啟用快照,需要符合最小根檔案系統大小。目前,此大小約為 12 GB。將來,依據基礎系統的架構和大小的不同,此值可能會發生變化。它取決於安裝媒體內 /control.xml
檔案中以下標記的值:
<root_base_size> <btrfs_increase_percentage>
該值透過下面的公式計算得出:ROOT_BASE_SIZE * (1 + BTRFS_INCREASE_PERCENTAGE/100)
請記住,此值是最小大小。請考慮分給根檔案系統更多空間。一般而言,兩倍於未啟用快照時所需的大小即可。
您可以為其他格式為 Btrfs
的分割區或 Btrfs
分割區上的現有子磁碟區建立您自己的組態。在下面的範例中,我們將設定 Snapper 組態以用於備份掛接於 /srv/www
且採用 Btrfs
格式之獨立分割區上的 Web 伺服器資料。
建立組態後,您可以使用 snapper
自身或 YaST 模組從這些快照中還原檔案。在 YaST 中,您需要選取「 」,同時還需要使用全域參數 -c
指定 snapper
的組態 (例如 snapper -c myconfig list
)。
若要建立新的 Snapper 組態,請執行 snapper create-config
:
tux >
sudo
snapper -c www-data1 create-config /srv/www2
此指令將會使用 /etc/snapper/config-templates/default
中的合理預設值建立一個新的組態檔案 /etc/snapper/configs/www-data
。如需如何調整這些預設值的指示,請參閱第 7.5.1 節 「管理現有組態」。
新組態的預設值取自 /etc/snapper/config-templates/default
。若要使用您自己的一組預設值,請在同一目錄中建立此檔案的副本,然後根據您的需求進行調整。若要使用該副本,請使用 create-config 指令指定 -t
選項:
tux >
sudo
snapper -c www-data create-config -t MY_DEFAULTS /srv/www
7.5.1 管理現有組態 #
snapper
指令有多個子指令,可用於管理現有組態。您可以列出、顯示、刪除及修改它們:
- 列出組態
使用
snapper list-configs
子指令可獲取所有現有組態:tux >
sudo
snapper list-configs Config | Subvolume -------+---------- root | / usr | /usr local | /local- 顯示組態
使用子指令
snapper -c CONFIG
get-config 可顯示指定的組態。請將 CONFIG 取代為snapper list-configs
顯示的組態名稱之一。如需組態選項的詳細資訊,請參閱第 7.5.1.1 節 「組態資料」。若要顯示預設組態,請執行:
tux >
sudo
snapper -c root get-config- 修改組態
使用子指令
snapper -c CONFIG set-config OPTION=VALUE
可修改指定組態中的選項。請將 CONFIG 取代為snapper list-configs
顯示的組態名稱之一。OPTION 及 VALUE 的可能的值列於第 7.5.1.1 節 「組態資料」中。- 刪除組態
使用子指令
snapper -c CONFIG
delete-config 可刪除組態。請將 CONFIG 取代為snapper list-configs
顯示的組態名稱之一。
7.5.1.1 組態資料 #
每個組態都包含可以從指令行修改的選項清單。以下清單提供每個選項的詳細資料。若要變更某個值,請執行 snapper -c 組態 set-config "索引鍵=值"
。
ALLOW_GROUPS
、ALLOW_USERS
授予一般使用者快照的使用權限。如需詳細資訊,請參閱第 7.5.1.2 節 「以普通使用者身分使用 Snapper」。
預設值為
""
。BACKGROUND_COMPARISON
定義建立前後快照後是否應在背景中對它們進行比較。
預設值為
"yes"
。EMPTY_*
為包含相同「前」快照和「後」快照的快照對定義清理演算法。如需詳細資料,請參閱第 7.7.3 節 「清理無差異的快照對」。
FSTYPE
分割區的檔案系統類型。請勿進行變更。
預設值為
"btrfs"
。NUMBER_*
為安裝快照與管理快照定義清理演算法。如需詳細資料,請參閱第 7.7.1 節 「清理編號快照」。
QGROUP
/SPACE_LIMIT
將配額支援新增至清理演算法。如需詳細資料,請參閱第 7.7.5 節 「新增磁碟配額支援」。
SUBVOLUME
要建立快照之分割區或子磁碟區的掛裝點。請勿進行變更。
預設值為
"/"
.SYNC_ACL
如果一般使用者要使用 Snapper (請參閱第 7.5.1.2 節 「以普通使用者身分使用 Snapper」),他們必須能存取
.snapshot
目錄,並且能讀取其中的檔案。如果 SYNC_ACL 設定為yes
,Snapper 會使用 ACL 自動允許 ALLOW_USERS 或 ALLOW_GROUPS 項目中的使用者和群組存取該目錄及其中的檔案。預設值為
"no"
。TIMELINE_CREATE
如果設定為
yes
,則會每小時建立一個快照。有效值:yes
和no
.預設值為
"no"
。TIMELINE_CLEANUP
/TIMELINE_LIMIT_*
為時間軸快照定義清理演算法。如需詳細資料,請參閱第 7.7.2 節 「清理時間軸快照」。
7.5.1.2 以普通使用者身分使用 Snapper #
依預設,Snapper 只能由 root
使用者使用。但是,在下列情況中,某些群組或使用者需要能夠建立快照或透過回復至快照來復原變更:
想要建立
/srv/www
快照的網站管理員想要建立其主目錄快照的使用者
若要實現這些目的,您可以建立用於為使用者和/或群組授予權限的 Snapper 組態。相應的 .snapshots
目錄必須可由指定的使用者讀取和存取。實現這一目的最簡單的方法是將 SYNC_ACL 選項設定為 yes
。
請注意,此程序中的所有步驟都必須由 root
使用者執行。
如果 Snapper 組態尚不存在,請為使用者可在其上使用 Snapper 的分割區或子磁碟區建立一個 Snapper 組態。如需指示,請參閱第 7.5 節 「建立並修改 Snapper 組態」。範例:
tux >
sudo
snapper --config web_data create /srv/www組態檔案將在
/etc/snapper/configs/CONFIG
下建立,其中 CONFIG 是您在上一步中使用-c/--config
指定的值 (如/etc/snapper/configs/web_data
)。依據個人需要來加以調整。如需詳細資訊,請參閱 第 7.5.1 節 「管理現有組態」。設定
ALLOW_USERS
和/或ALLOW_GROUPS
的值,以分別向使用者和/或群組授予權限。多個項目需要用 Space 加以分隔。例如,若要向使用者www_admin
授予權限,請執行:tux >
sudo
snapper -c web_data set-config "ALLOW_USERS=www_admin" SYNC_ACL="yes"現在,指定的使用者和/或群組便可以使用給定的 Snapper 組態。您可以使用
list
指令進行測試,例如:www_admin:~ >
snapper -c web_data list
7.6 以手動方式建立和管理快照 #
Snapper 的功能並不僅限於依照組態自動建立和管理快照;您還可以使用指令行工具或 YaST 模組手動建立快照對 (「前快照與後快照」) 或單一快照。
所有 Snapper 操作都會對現有組態進行 (如需詳細資料,請參閱第 7.5 節 「建立並修改 Snapper 組態」)。您只能為存在組態的分割區或磁碟區建立快照。預設會使用系統組態 (根
)。若要為自己的組態建立或管理快照,則需要明確選擇您的組態。使用 YaST 中的「 」下拉式方塊,或在指令行上指定 -c
選項 (snapper -c MYCONFIG
COMMAND
)。
7.6.1 快照中繼資料 #
每個快照都包含快照本身和一些中繼資料。建立快照時,您還需要指定中繼資料。修改快照即表示變更其中繼資料 — 您無法修改其內容。使用 snapper list
顯示現有快照及其中繼資料:
snapper --config home list
列出組態
home
的快照。若要列出預設組態 (root) 的快照,請使用snapper -c root list
或snapper list
。snapper list -a
列出所有現有組態的快照。
snapper list -t pre-post
列出預設 (
root
) 組態的所有「前」快照與「後」快照對。snapper list -t single
列出預設 (
root
) 組態的所有single
類型快照。
下列中繼資料適用於每個快照:
類型:快照類型,請參閱第 7.6.1.1 節 「快照類型」 以取得詳細資料。此資料無法變更。
編號:快照的唯一編號。此資料無法變更。
前快照編號:指定相應前快照的編號。僅適用於類型為後的快照。此資料無法變更。
描述:快照的描述。
使用者資料:延伸描述,您可在其中以逗號分隔之「鍵=值」清單的形式指定自訂資料:
reason=testing, project=foo
。此欄位還用於將快照標示為重要 (important=yes
) 並列出建立該快照的使用者 (user=tux)。清理演算法:快照的清理演算法,請參閱第 7.7 節 「快照的自動清理」 以取得詳細資料。
7.6.1.1 快照類型 #
Snapper 知道三種不同類型的快照:前、後與單一。實際上,它們並無差異,但是 Snapper 會以不同的方式處理它們。
前
修改前檔案系統的快照。每個
前
快照對應於一個後
快照。例如,用於自動建立 YaST/Zypper 快照。後
修改後檔案系統的快照。每個
後
快照對應於一個前
快照。例如,用於自動建立 YaST/Zypper 快照。單一
獨立快照。例如,用於每小時自動建立快照。這是建立快照時的預設類型。
7.6.1.2 清理演算法 #
Snapper 提供了三種用於清理舊快照的演算法。這些演算法在日常的 cron
工作中執行。可以定義要在 Snapper 組態中保留的不同類型的快照數量 (如需詳細資料,請參閱第 7.5.1 節 「管理現有組態」)。
- 數量
當達到特定的快照計數時刪除舊快照。
- 時間軸
刪除經過特定期限的舊快照,但會保留若干每小時、每日、每月和每年快照。
- 空-前-後
刪除無差異的前/後快照對。
7.6.2 建立快照 #
若要建立快照,請執行 snapper create
,或者在 YaST 模組 中按一下 。下列範例說明如何從指令行建立快照。本文件未明確介紹 Snapper 的 YaST 介面,其所提供的功能相同。
您應始終指定有意義的描述,以便日後能夠識別其用途。還可以透過 --userdata
選項指定其他資訊。
snapper create --from 17 --description "with package2"
從現有的快照 (由
snapper list
傳回的快照編號指定) 建立獨立快照 (單一類型)。(這適用於 Snapper 0.8.4 和更新版本。)snappercreate --description "2014 年第 2 週的快照"
為預設 (
根
) 組態建立獨立快照 (類型為單一) 並提供描述。因為未指定清理演算法,所以一律不自動刪除快照。snapper --config home create --description "在 ~tux 中清理"
為名為
home
的自訂組態建立獨立快照 (類型為單一) 並提供描述。因為未指定清理演算法,所以一律不自動刪除快照。snapper --config home create --description "每日資料備份" --cleanup-algorithm timeline
>為名為
home
的自訂組態建立獨立快照 (類型為單一) 並提供描述。當快照符合特定於組態中時間軸清理演算法的準則時,將會自動刪除該快照。snapper create --type pre--print-number--description "在 Apache 組態清理之前"--userdata "important=yes"
建立類型為
前
的快照並列印快照編號。需要第一個指令才能建立用於儲存「前」和「後」狀態的快照對。快照會標示為重要。snapper create --type post--pre-number 30--description "在 Apache 組態清理之前"--userdata "important=yes"
建立類型為
後
並與前
快照編號30
配對的快照。需要第二個指令才能建立用於儲存「前」和「後」狀態的快照對。快照會標示為重要。snapper create --command COMMAND--description "在指令前後"
在執行指令前後自動建立快照對。僅當在指令行上使用 snapper 時,此選項才可用。
7.6.3 修改快照中繼資料 #
Snapper 可讓您修改快照的描述、清理演算法和使用者資料,所有其他中繼資料則無法變更。下列範例說明如何從指令行修改快照。透過 YaST 介面可便於採用這兩種建立方法。
若要透過指令行修改快照,您需要知道其編號。使用 snapper list
可以顯示所有快照及其編號。
YaST
模組已列出所有快照。從清單中選擇一個快照,然後按一下「 」。snapper modify --cleanup-algorithm "時間軸"
10修改預設 (
根
) 組態之快照 10 的中繼資料。清理演算法設為時間軸
。snapper --config home modify --description "每日備份" -cleanup-algorithm "時間軸"120
修改名為
home
的自訂組態之快照 120 的中繼資料。將會設定新的描述並取消設定清理演算法。
7.6.4 刪除快照 #
若要使用 YaST
模組刪除快照,請從清單中選擇快照,然後按一下「 」。
若要使用指令行工具刪除快照,需要知道其編號。請透過執行 snapper list
來取得該編號。若要刪除快照,請執行 snapper delete
編號。
不允許刪除目前的預設子磁碟區快照。
使用 Snapper 刪除快照時,在背景中執行的 Btrfs 程序將會回收已釋放的空間。因此,可用空間的可見度與可用性將會延遲。如果您希望在刪除快照後立即可以使用釋放的空間,請結合選項 --sync
使用 delete 指令。
刪除前
快照時,您應一律刪除其對應的後
快照 (反之亦然)。
snapper delete 65
刪除預設 (
根
) 組態的快照 65。snapper -c home delete 89 90
刪除名為
home
之自訂組態的快照 89 和 90。snapper delete --sync 23
刪除預設 (
根
) 組態的快照 23,並使釋放的空間立即可用。
有時,雖然 Btrfs 快照存在,但卻缺少包含 Snapper 中繼資料的 XML 檔案。這種情況表示快照對 Snapper 不可見,需要手動刪除該快照:
btrfs subvolume delete /.snapshots/SNAPSHOTNUMBER/snapshot rm -rf /.snapshots/SNAPSHOTNUMBER
如果您要刪除快照以釋放硬碟上的空間,請確定先刪除舊快照。快照越舊,它佔用的磁碟空間就越多。
也可以透過 cron 日常工作自動刪除快照。如需詳細資訊,請參閱第 7.6.1.2 節 「清理演算法」。
7.7 快照的自動清理 #
快照會佔用磁碟空間,一段時間後,快照可能會佔用大量的磁碟空間。為了防止磁碟上的空間耗盡,Snapper 提供了演算法用於自動刪除舊快照。這些演算法依據時間軸快照和編號快照 (管理快照與安裝快照對) 而異。您可以指定要為每種類型保留的快照數量。
除此之外,您可以指定一個快照空間配額,用於定義快照可佔用的最大磁碟空間量。系統還可以自動刪除無相異的「前」快照與「後」快照對。
清理演算法一律系繫結到單一 Snapper 組態,因此您需要為每個組態指定演算法。若要防止自動刪除特定的快照,請參閱 可以保護快照以避免刪除嗎? 。
預設設定 (root
) 設定為清理編號快照以及空的「前」快照與「後」快照對。已啟用配額支援 - 快照佔用的空間不可超過根分割區可用磁碟空間的 50%。時間軸快照預設為停用,因此,時間軸清理演算法亦已停用。
7.7.1 清理編號快照 #
Snapper 組態的以下參數控制編號快照 (管理快照與安裝快照對) 的清理。
NUMBER_CLEANUP
啟用或停用安裝快照與管理快照對的清理。如果已啟用,則在快照總數超過
NUMBER_LIMIT
和/或NUMBER_LIMIT_IMPORTANT
指定的數字,以及NUMBER_MIN_AGE
指定的時限時,會刪除快照對。有效值:yes
(啟用)、no
(停用)。預設值為
"yes"
。用於變更或設定值的範例指令:
tux >
sudo
snapper -c CONFIG set-config "NUMBER_CLEANUP=no"NUMBER_LIMIT
/NUMBER_LIMIT_IMPORTANT
定義要保留多少個普通和/或重要安裝快照與管理快照對。如果
NUMBER_CLEANUP
設定為"no"
,則忽略此參數。NUMBER_LIMIT
的預設值為"2-10"
,NUMBER_LIMIT_IMPORTANT
的預設值為"4-10"
。該清理演算法會刪除超出指定最大值的快照,而不考慮快照和檔案系統空間。該演算法還會刪除超出最小值的快照,直至達到快照和檔案系統數量限制。用於變更或設定值的範例指令:
tux >
sudo
snapper -c CONFIG set-config "NUMBER_LIMIT=10"重要:範圍值與常數值的比較如果已啟用配額支援 (請參閱第 7.7.5 節 「新增磁碟配額支援」),則需要將限制指定為最小值-最大值範圍,例如
2-10
。如果已停用配額支援,則需要提供常數值,例如10
,否則清理將會失敗並出現錯誤。NUMBER_MIN_AGE
定義快照在可供自動刪除之前的最短保留期限 (秒)。期限小於此處指定值的快照不會刪除,不論存在多少個這樣的快照。
預設值為
"1800"
。用於變更或設定值的範例指令:
tux >
sudo
snapper -c CONFIG set-config "NUMBER_MIN_AGE=864000"
NUMBER_LIMIT
、NUMBER_LIMIT_IMPORTANT
和 NUMBER_MIN_AGE
始終會予以評估。只有在滿足全部條件時,才會刪除快照。
如果您希望總是保留 NUMBER_LIMIT*
所定義數量的快照而不考慮其期限,請將 NUMBER_MIN_AGE
設定為 0
。
下面的範例顯示了保留最近 10 個重要和 10 個普通快照 (不論保留期限) 的組態:
NUMBER_CLEANUP=yes NUMBER_LIMIT_IMPORTANT=10 NUMBER_LIMIT=10 NUMBER_MIN_AGE=0
不過,如果您不想保留超過特定期限的快照,請將 NUMBER_LIMIT*
設定為 0
,並使用 NUMBER_MIN_AGE
提供期限。
下面的範例顯示了只保留十天以內的快照的組態:
NUMBER_CLEANUP=yes NUMBER_LIMIT_IMPORTANT=0 NUMBER_LIMIT=0 NUMBER_MIN_AGE=864000
7.7.2 清理時間軸快照 #
Snapper 組態的以下參數控制時間軸快照的清理。
TIMELINE_CLEANUP
啟用或停用時間軸快照的清理。如果已啟用,則在快照總數超過
TIMELINE_LIMIT_*
指定的數量以及TIMELINE_MIN_AGE
指定的期限時,會刪除快照。有效值:yes
和no
.預設值為
"yes"
。用於變更或設定值的範例指令:
tux >
sudo
snapper -c CONFIG set-config "TIMELINE_CLEANUP=yes"TIMELINE_LIMIT_DAILY
、TIMELINE_LIMIT_HOURLY
、TIMELINE_LIMIT_MONTHLY
、TIMELINE_LIMIT_WEEKLY
、TIMELINE_LIMIT_YEARLY
要以小時、天、月、週和年保留的快照數量。
每個項目的預設值為
"10"
,但TIMELINE_LIMIT_WEEKLY
除外 (預設為"0"
)。TIMELINE_MIN_AGE
定義快照在可供自動刪除之前的最短保留期限 (秒)。
預設值為
"1800"
。
TIMELINE_CLEANUP="yes" TIMELINE_CREATE="yes" TIMELINE_LIMIT_DAILY="7" TIMELINE_LIMIT_HOURLY="24" TIMELINE_LIMIT_MONTHLY="12" TIMELINE_LIMIT_WEEKLY="4" TIMELINE_LIMIT_YEARLY="2" TIMELINE_MIN_AGE="1800"
此組態範例啟用了會自動清理的每小時快照。系統始終會同時評估 TIMELINE_MIN_AGE
和 TIMELINE_LIMIT_*
。在此範例中,快照在可供刪除之前的最短期限設定為 30 分鐘 (1800 秒)。因為我們建立了每小時快照,所以這可確保僅保留最新的快照。如果將 TIMELINE_LIMIT_DAILY
設為非零值,這表示同時會保留當天的第一個快照。
每小時:已建立的最後 24 個快照。
每日:保留最近 7 天內建立的第一個每日快照。
每月:保留最近 12 個月內當月最後一天建立的第一個快照。
每週:保留最近 4 週內當週最後一天建立的第一個快照。
每年:保留最近 2 年內當年最後一天建立的第一個快照。
7.7.3 清理無差異的快照對 #
如第 7.1.2 節 「快照類型」中所述,每當您執行 YaST 模組或執行 Zypper 時,會在啟動時建立一個「前」快照,在結束時建立一個「後」快照。如果您做出任何變更,則「前」快照與「後」快照沒有差異。在 Snapper 組態中設定以下參數可自動刪除此類「空白」快照對:
EMPTY_PRE_POST_CLEANUP
如果設定為
yes
,將會刪除前後快照相同的快照對。預設值為
"yes"
。EMPTY_PRE_POST_MIN_AGE
定義前後快照相同的快照對在自動刪除之前必須保留的最短期限 (以秒為單位)。
預設值為
"1800"
。
7.7.4 清理手動建立的快照 #
Snapper 未針對手動建立的快照提供自訂清理演算法。但是,您可以向手動建立的快照指定 number 或 timeline 清理演算法。如果您這麼做,該快照會加入所指定演算法的「清理佇列」。可以在建立快照時,或者透過修改現有快照來指定清理演算法:
snapper create --description "Test" --cleanup-algorithm number
為預設 (root) 組態建立獨立快照 (單一類型) 並指定
number
清理演算法。snapper modify --cleanup-algorithm "時間軸" 25
使用數字 25 修改快照,並指定清理演算法
timeline
。
7.7.5 新增磁碟配額支援 #
除了上述 number 和/或 timeline 清理演算法之外,Snapper 還支援配額。您可以定義允許快照佔用的可用空間百分比。此百分比值一律套用至相應 Snapper 組態中定義的 Btrfs 子磁碟區。
Btrfs 配額將套用於子磁碟區,而非使用者。除了使用 Btrfs 配額之外,還可以將磁碟空間配額套用於使用者和群組 (例如,使用 quota
指令)。
如果在安裝期間啟用了 Snapper,則會自動啟用配額支援。如果在安裝後的某個時間手動啟用 Snapper,則可以透過執行 snapper setup-quota
來啟用配額支援。這需要提供有效的組態 (如需詳細資訊,請參閱第 7.5 節 「建立並修改 Snapper 組態」)。
配額支援由 Snapper 組態的以下參數控制。
QGROUP
Snapper 使用的 Btrfs 配額群組。如果未設定,請執行
snapper setup-quota
。如果已設定,則僅當您熟悉man 8 btrfs-qgroup
時方可對其進行變更。此值是使用snapper setup-quota
設定的,請勿變更。SPACE_LIMIT
允許快照使用的空間限制,以 1 (100%) 的分數表示。有效值範圍為 0 到 1 (0.1 = 10%,0.2 = 20%...)。
需遵循以下限制和指導方針:
只能在已啟用現有 number 和/或 timeline 清理演算法的前提下才能啟用配額。如果未啟用任何清理演算法,則無法套用配額限制。
啟用配額支援後,Snapper 會視需要執行兩輪清理。第一輪清理套用針對編號快照和時間軸快照指定的規則。僅當完成這一輪清理後超出配額時,才會在第二輪清理中套用配額特定的規則。
即使已啟用配額支援,Snapper 也永遠會保留
NUMBER_LIMIT*
和TIMELINE_LIMIT*
值指定的快照數量,而不論是否超出了配額。因此,建議為NUMBER_LIMIT*
和TIMELINE_LIMIT*
指定範圍值 (MIN-MAX
),以確定可以套用配額。例如,如果設定了
NUMBER_LIMIT=5-20
,Snapper 將執行第一輪清理,並將普通的編號快照數量減至 20 個。如果這 20 個快照超出配額,Snapper 將在第二輪清理中刪除最舊的快照,直到符合配額限制。永遠會保留最少五個快照,不論這些快照佔用了多少空間。
7.8 顯示快照使用的獨佔磁碟空間 #
快照會共用資料以有效利用儲存空間,因此,使用 du
和 df
等一般指令無法準確測量已用的磁碟空間。想要在啟用了配額的 Btrfs 上釋放磁碟空間,需要知道每個快照使用的獨佔磁碟空間量,而不是共用的空間量。Snapper 0.6 和更新版本會在 Used Space
欄中報告每個快照使用的磁碟空間:
root #
snapper--iso list
# | Type | Pre # | Date | User | Used Space | Cleanup | Description | Userdata
----+--------+-------+---------------------+------+------------+---------+-----------------------+--------------
0 | single | | | root | | | current |
1* | single | | 2019-07-22 13:08:38 | root | 16.00 KiB | | first root filesystem |
2 | single | | 2019-07-22 14:21:05 | root | 14.23 MiB | number | after installation | important=yes
3 | pre | | 2019-07-22 14:26:03 | root | 144.00 KiB | number | zypp(zypper) | important=no
4 | post | 3 | 2019-07-22 14:26:04 | root | 112.00 KiB | number | | important=no
5 | pre | | 2019-07-23 08:19:36 | root | 128.00 KiB | number | zypp(zypper) | important=no
6 | post | 5 | 2019-07-23 08:19:43 | root | 80.00 KiB | number | | important=no
7 | pre | | 2019-07-23 08:20:50 | root | 256.00 KiB | number | yast sw_single |
8 | pre | | 2019-07-23 08:23:22 | root | 112.00 KiB | number | zypp(ruby.ruby2.5) | important=no
9 | post | 8 | 2019-07-23 08:23:35 | root | 64.00 KiB | number | | important=no
10 | post | 7 | 2019-07-23 08:24:05 | root | 16.00 KiB | number | |
btrfs
指令提供快照已使用空間的另一種檢視:
root #
btrfs qgroup show -p /
qgroupid rfer excl parent
-------- ---- ---- ------
0/5 16.00KiB 16.00KiB ---
[...]
0/272 3.09GiB 14.23MiB 1/0
0/273 3.11GiB 144.00KiB 1/0
0/274 3.11GiB 112.00KiB 1/0
0/275 3.11GiB 128.00KiB 1/0
0/276 3.11GiB 80.00KiB 1/0
0/277 3.11GiB 256.00KiB 1/0
0/278 3.11GiB 112.00KiB 1/0
0/279 3.12GiB 64.00KiB 1/0
0/280 3.12GiB 16.00KiB 1/0
1/0 3.33GiB 222.95MiB ---
qgroupid
欄顯示每個子磁碟區的識別號碼,並指定 qgroup 層級/ID 組合。
rfer
欄顯示子磁碟區中參考的資料總量。
excl
欄顯示每個子磁碟區中的獨佔資料。
parent
欄顯示子磁碟區的父 qgroup。
最後一個項目 1/0
顯示父 qgroup 的總計。在上面的範例中,如果移除所有子磁碟區,將釋放 222.95 MiB 空間。執行以下指令查看與每個子磁碟區關聯的快照:
root #
btrfs subvolume list -st /
ID gen top level path
-- --- --------- ----
267 298 266 @/.snapshots/1/snapshot
272 159 266 @/.snapshots/2/snapshot
273 170 266 @/.snapshots/3/snapshot
274 171 266 @/.snapshots/4/snapshot
275 287 266 @/.snapshots/5/snapshot
276 288 266 @/.snapshots/6/snapshot
277 292 266 @/.snapshots/7/snapshot
278 296 266 @/.snapshots/8/snapshot
279 297 266 @/.snapshots/9/snapshot
280 298 266 @/.snapshots/10/snapshot
將一個 Service Pack 升級至另一個 Service Pack 會導致快照佔用系統子磁碟區上的大量磁碟空間。對於不再需要的快照,建議您手動將其刪除。如需詳細資料,請參閱第 7.6.4 節 「刪除快照」。
7.9 常見問答集 #
- 問:
為何 Snapper 從不顯示
/var/log
、/tmp
和其他目錄中的變更? 對於我們確定要從快照中排除的某些目錄,請參閱第 7.1.3 節 「從快照中排除的目錄」獲取清單及排除原因。為了將某路徑從快照中排除,我們為該路徑建立了子磁碟區。
- 問: 能否從開機載入程式將快照開機?
能,請參閱第 7.3 節 「透過從快照開機來執行系統復原」獲取詳細資訊。
- 問: 可以保護快照以避免刪除嗎?
目前,Snapper 無法防止手動刪除快照。但是,您可以防止清理演算法自動刪除快照。除非您使用 第 7.6.2 節 「建立快照」--cleanup-algorithm
指定清理演算法,否則不會為手動建立的快照 (請參閱
) 指定清理演算法。總是為自動建立的快照指定number
或timeline
演算法。若要從一或多個快照中移除此類指定,請執行以下步驟:列出所有可用的快照:
tux >
sudo
snapper list -a記住您要防止刪除的快照數。
執行以下指令,並用您記住的數字取代數字預留位置:
tux >
sudo
snapper modify --cleanup-algorithm "" #1 #2 #n再次執行
snapper list -a
來檢查結果。在Cleanup
欄中,與修改的快照相對應的項目現在應該為空白。
- 問: 何處可以取得有關 Snapper 的詳細資訊?
請造訪 Snapper 首頁,網址為 http://snapper.io/。
8 使用 KLP 的即時核心修補 #
本文件介紹核心即時修補 (KLP) 技術的基本原理,並提供 SLE Live Patching 服務的使用指導方針。
KLP 讓您無需重新開機便可套用 Linux 核心的最新安全性更新。如此可最大程度地提高系統運作時間和可用性,這對於任務關鍵性系統而言尤為重要。
本文件中提供的資訊與 AMD64/Intel 64、POWER 和 IBM Z 架構相關。Xen 監管程式支援 KLP。
8.1 核心即時修補的優勢 #
KLP 提供了多項優勢。
對於需獲得或維護特定合規認證的組織而言,確保大量伺服器自動保持最新狀態至關重要。KLP 可在協助實現合規的同時,減少對費用高昂的維護期間的需求。
簽訂了服務等級合約的公司必須保證其系統可用性和運作時間達到特定的等級。即時修補可在不產生停機時間的情況下修補系統。
由於 KLP 是標準系統更新機制的一部分,因此無需專門培訓或引入複雜的維護常式。
8.2 核心即時修補綜覽 #
透過內含已修改代碼的套件提供核心即時修補程式,此類套件與主核心套件不同。即時修補程式具有累積性,因此最新的修補程式包含核心套件先前修補程式的所有修復。每個核心即時套件都與為其發佈的確切核心修正版關聯。每新增一個修復,即時修補程式套件版本號碼都會相應增加。
即時修補程式僅包含關鍵修復,不會取代常規的核心更新,後者需要系統重新開機。可以將即時修補程式視為在執行適當的核心更新和重新開機前用於暫時保護核心的措施。
下圖闡述了即時修補程式與核心更新之間的總體關係。使用 klp -v patches
指令可以檢視目前作用中即時修補程式所解決的 CVE 清單和缺陷報告。
您可以安裝多個版本的核心套件及其即時修補程式。這些套件不會衝突。您可以為執行中核心安裝更新的核心套件及即時修補程式。在此情況下,您可能會收到將系統重新開機的提示。訂閱了 SLE Live Patching 的使用者有權獲享技術支援,只要執行中核心存在即時修補程式更新 (請參閱第 8.5.1 節 「檢查即時修補程式的過期日期」)。
啟用 KLP 後,每個核心更新都會隨附即時修補程式套件。此即時修補程式不包含任何修復,而是做為相應核心未來即時修補程式的種子。這些空種子修補程式稱為初始修補程式
。
8.2.1 核心即時修補範圍 #
SLE Live Patching 的修補範圍包括 SUSE 通用弱點評分系統 (CVSS;SUSE CVSS 基於 CVSS v3.0 系統開發) 7 級以上系統穩定或資料損毀相關的弱點和錯誤修復。但從技術上而言,為屬於指定類別的所有修復都建立即時修補程式可能並不現實。因此,SUSE 保留在因技術原因而無法建立核心即時修補程式的情況下跳過相應修復的權利。目前超過 95% 的合格修復都是以即時修補程式的形式發行的。如需 CVSS (SUSE CVSS 評分基礎) 的詳細資訊,請參閱 Common Vulnerability Scoring System SIG。
8.2.2 核心即時修補限制 #
KLP 涉及取代功能和妥善處理互相依存的功能集的取代。透過將舊代碼呼叫重新導向至不同記憶體位置的更新代碼來完成此操作。資料結構的變更使情況變得更加複雜,因為資料會保持原狀,無法延伸或重新解譯。儘管使用某些技術可以間接變更資料結構,但有些修復無法轉換為即時修補程式。在此情況下,只能透過系統重新啟動來套用修復。
8.3 使用 YaST 啟用核心即時修補 #
若要在您的系統上啟用 KLP,您需要擁有作用中 SLES 和 SLE Live Patching 訂閱。請造訪 SUSE Customer Center 以檢查您的訂閱的狀態,並獲取 SLE Live Patching 訂閱的註冊代碼。
若要在您的系統上啟用核心即時修補,請執行以下步驟:
執行
yast2 registration
指令並按一下 。在可用延伸清單中選取
,然後按 。確認授權條款並按
。輸入您的 SLE Live Patching 註冊代碼並按一下
。檢查
和所選的 。系統應該會自動選擇安裝Live Patching
和SLE Live Patching Lifecycle Data
模式,以及一些其他套件以滿足相依關係。按一下
完成安裝。這樣將會在您的系統上安裝基礎核心即時修補元件、初始即時修補程式,以及所需的相依項。
8.4 從指令行啟用核心即時修補 #
若要啟用核心即時修補,您需要擁有作用中 SLES 和 SLE Live Patching 訂閱。請造訪 SUSE Customer Center 以檢查您的訂閱的狀態,並獲取 SLES Live Patching 訂閱的註冊代碼。
執行
sudo SUSEConnect --list-extensions
。請記住 SLES Live Patching 的確切啟用指令。範例指令輸出 (縮略版):$ SUSEConnect --list-extensions ... SUSE Linux Enterprise Live Patching 15 SP3 x86_64 Activate with: SUSEConnect -p sle-module-live-patching/15.3/x86_64 \ -r ADDITIONAL REGCODE
使用獲得的指令後接
-r LIVE_PATCHING_REGISTRATION_CODE
以啟用 SLES Live Patching,例如:SUSEConnect -p sle-module-live-patching/15.3/x86_64 \ -r LIVE_PATCHING_REGISTRATION_CODE
使用
zypper install -t pattern lp_sles
指令安裝所需的套件和相依項。
至此,系統已完成即時修補。
幕後作業的程序如下:當套件安裝系統偵測到某個安裝的核心可以即時修補,並且軟體通道中存在相應的即時修補程式時,系統會選擇安裝該即時修補程式。然後核心會在套件安裝過程中接收到即時修補程式修復。在產品安裝完成前,就會對核心進行即時修補。
8.5 執行核心即時修補 #
在常規的系統更新過程中安裝核心即時修補程式。但您應瞭解以下幾點事項。
如果已為執行中核心安裝 kernel-livepatch-* 套件,系統會對核心進行即時修補。您可以使用
zypper se --details kernel-livepatch-*
指令來檢查您的系統上安裝了哪些核心即時修補程式套件。如果安裝了 kernel-default 套件,更新管理員會提示您將系統重新開機。為避免此訊息顯示,您可以將核心更新從修補操作中濾除。可以透過使用 Zypper 新增套件鎖定來實現此目的。SUSE Manager 還可讓您過濾通道內容 (請參閱使用 SUSE Manager 進行即時修補)。
您可以使用
klp status
指令檢查修補狀態。若要檢查安裝的修補程式,請執行klp -v patches
指令。請記住,雖然系統上可能會安裝多個核心套件,但任何時間只有一個套件在執行。同樣,雖然系統上可能會安裝多個即時修補程式套件,但只有一個即時修補程式會載入到核心中。
initrd
中會包含作用中即時修補程式。這表示如果發生了未預期的重新開機,系統啟動時會套用即時修補程式修復,因此不需要再次執行修補。
8.5.1 檢查即時修補程式的過期日期 #
請確認
lifecycle-data-sle-module-live-patching 已安裝,然後執行 zypper lifecycle
指令。在輸出的 Package end of support if different from product
區段中應該可以看到即時修補程式的過期日期。
每個即時修補程式自基礎核心套件發行起一年內都會收到更新。您可以使用維護的核心、修補程式更新和生命週期頁面,依據執行中核心版本來檢查過期日期,而無需安裝產品延伸。
8.6 核心即時修補問題疑難排解 #
8.6.1 手動降級修補程式 #
如果您發現最新的即時修補程式有問題,可以將目前安裝的即時修補程式降級回之前的版本。我們建議在系統開始顯現出問題前執行修補程式降級。請注意,在系統記錄中追蹤核心警告或核心錯誤的系統可能不適合使用修補程式降級程序。如果您不確定系統是否符合修補程式降級的要求,請聯絡 SUSE 技術支援部門以獲得協助。
使用
klp -v patches
指令確定執行中即時修補程式。以RPM:
開頭的行中顯示的就是目前的執行中修補程式。例如:RPM: kernel-livepatch-5_3_18-24_29-default-2-2.1.x86_64
上例中的
5_3_18-24_29-default
指的就是執行中核心版本。使用
zypper search -s kernel-livepatch-RUNNING_KERNEL_VERSION-default
指令搜尋修補程式的先前版本。該指令會傳回可用套件版本清單。請注意,每個新即時修補程式套件發行版本的版本號碼會加 1。請務必選擇版本號碼低於目前版本號碼的發行版本。使用
zypper in --oldpackage kernel-livepatch-RUNNING_KERNEL_VERSION-default=DESIRED_VERSION
指令安裝所需的版本。
9 交易更新 #
交易更新在 SUSE Linux Enterprise Server 中以技術預覽形式提供,當根檔案系統為唯讀時,可使用技術更新來更新 SLES。交易更新具有原子性 (僅當所有更新都成功時,才會套用所有更新),且支援復原。它不影響正在執行的系統,因為只有在將系統重新開機後,才會啟用變更。由於重新開機是中斷性操作,管理員必須判定重新開機的開銷是否高於中斷正在執行服務的開銷。如果重新開機的開銷過高,則不要使用交易更新。
交易更新由 transactional-update
程序檔每天執行。該程序檔將檢查可用的更新。如果存在任何更新,則它會在背景中建立根檔案系統的新快照,然後從發行通道擷取更新。完全更新新快照後,該快照將被標示為作用中快照,並在下一次將系統重新開機後,成為新的預設根檔案系統。當 transactional-update
設定為自動執行 (預設行為) 時,該程序檔還會將系統重新開機。更新執行時間以及重新開機維護時間均為可設定組態。
只能更新屬於根檔案系統快照的套件。如果套件中包含不屬於該快照的檔案,更新可能會失敗或中斷系統。
無法更新需要接受授權的 RPM。
9.1 技術預覽的限制 #
技術預覽的功能存在某些限制。transactional-update
對於以下套件不起作用:
依預設, nginx 預設 index.html 頁面可能不可用
tomcat-webapps 和 tomcat-admin-webapps
phpMyAdmin
sca-appliance-*
mpi-selector
emacs 可正常工作 (Emacs 遊戲除外)
bind 和 bind-chrootenv
docbook*
sblim-sfcb*
texlive*
iso_ent
openjade
opensp
pcp
plymouth
postgresql-server-10
pulseaudio-gdm-hooks
smartmontools
系統安裝程式的更新程式元件不適用於唯讀檔案系統,因為此類檔案系統不支援交易更新。
其他注意事項:
一般情況下,最好在更新系統之後儘早將機器重新開機。
每次只能套用一項更新。在套用一項更新之後直至套用下一項更新之前,請務必重新開機。
在交易更新之後直至將機器重新開機,都不應執行
update-alternatives
。在交易更新之後直至重新開機,都不要建立新的系統使用者或系統群組。允許建立一般使用者和群組 (UID > 1000,GID > 1000)。
YaST 尚不能識別交易更新。如果 YaST 模組需要安裝額外的套件,此操作將無法正常執行。而只是修改
/etc
中組態檔案的一般系統操作可正常進行。對於 php7-fastcgi,必須手動建立指向
/usr/bin/php-cgi
的符號連結/srv/www/cgi-bin/php
。ntp是要從較舊 SLES 版本移轉的 Legacy 模組的一部分。它在新的 SUSE Linux Enterprise Server 安裝中不再受支援,且已取代為 chrony。如果您繼續使用 ntp,需要進行全新安裝才能正常使用交易更新。
sblim-sfcb:整個 sblim 共生體系與交易更新不相容。
btrfs-defrag
(來自 btrfsmaintenance 套件) 不適用於唯讀根檔案系統。對於
btrfs-balance
,/etc/sysconfig/btrfsmaintenance
中的變數BTRFS_BALANCE_MOUNTPOINTS
必須從/
變更為/.snapshots
。對於
btrfs-scrub
,/etc/sysconfig/btrfsmaintenance
中的變數BTRFS_SCRUB_MOUNTPOINTS
必須從/
變更為/.snapshots
。
9.2 啟用 transactional-update #
必須在系統安裝期間啟用 Transactional Server 模組,然後選取 Transactional Server 系統角色。不支援稍後再於正在執行的系統中從 Transactional Server 模組安裝任何套件,此操作可能會使系統中斷。
請注意,不支援變更根分割區的子磁碟區配置,或者將根分割區的子目錄或子磁碟區置於其各自的分割區中 (/home
、/var
、/srv
和 /opt
除外),此類操作很可能會使系統中斷。
9.3 管理自動更新 #
自動更新由每天執行一次的 systemd.timer
控制。此操作會套用所有更新,並告知 rebootmgrd
應將機器重新開機。您可以調整更新的執行時間,具體請參閱「systemd.timer(5)」。若要調整維護時間 (即 rebootmgrd
將系統重新開機的時間),請參閱「rebootmgrd(8)」。
您可以使用以下指令停用自動交易更新:
root #
systemctl --now disable transactional-update.timer
9.4 transactional-update
指令 #
transactional-update
指令會啟用更新的原子性安裝或移除,即僅當所有更新都可以成功安裝時,才會套用這些更新。在套用更新之前,transactional-update
會建立系統的快照,您可以還原此快照。重新開機後,所有變更才會生效。
--continue
可使用
--continue
選項對現有快照進行多次變更,而無需重新開機。預設的
transactional-update
行為是從目前根檔案系統建立新快照。如果您忘記執行某個操作,例如,忘記安裝某個新套件,必須重新開機以套用先前的變更,然後再次執行transactional-update
以安裝忘記安裝的套件,並再次重新開機。不能在未進行重新開機的情況下多次執行transactional-update
指令來向快照新增更多變更,因為這樣做只會建立多個獨立的快照,這些快照並不會包含先前快照中的變更。您可使用
--continue
選項在不重新開機的情況下,進行任意次數的變更。每次會建立一個獨立的快照,且每個快照都包含您在先前快照中進行的所有變更以及新的變更。視需要重複此程序任意次數,當最終快照包含所需的全部變更時,再將系統重新開機,然後最終快照便會成為新的根檔案系統。--continue
選項的另一個有用功能是,可讓您選取任一現有快照做為新快照的基礎快照。以下範例展示如何執行transactional-update
在基於快照 13 的某個快照中安裝新套件,然後再次執行該指令來安裝另一個套件:root #
transactional-update pkg install package_1
root #
transactional-update --continue 13 pkg install package_2
--continue [num]
選項會呼叫snapper create --from
,請參閱第 7.6.2 節 「建立快照」。cleanup
如果目前根檔案系統與作用中的根檔案系統為同一個 (在重新開機之後,
transactional-update
建立包含更新的新快照之前),將為沒有清理演算法的所有舊快照設定一個清理演算法。如此可確保 Snapper 會刪除舊快照。(請參閱「snapper(8)」中有關清理演算法的章節。)此操作還會移除/var/lib/overlay
中所有未參考的 (因此也未使用)/etc
覆蓋目錄:root #
transactional-update cleanup
pkg in/install
使用
zypper install
指令從可用通道安裝個別套件。此指令還可用於安裝程式暫時修復 (PTF) RPM 檔案。root #
transactional-update pkg install package_name
或
root #
transactional-update pkg install rpm1 rpm2
pkg rm/remove
使用
zypper remove
指令從作用中快照移除個別套件。此指令還可用於移除 PTF RPM 檔案。root #
transactional-update pkg remove package_name
pkg up/update
使用
zypper update
指令更新作用中快照中的個別套件。只能更新屬於基礎檔案系統快照一部份的套件。root #
transactional-update pkg remove package_name
up/update
如果有新的可用更新,將會建立一個新快照,並使用
zypper up/update
更新該快照。root #
transactional-update up
dup
如果有新的可用更新,將會建立一個新快照,並使用
zypper dup –no-allow-vendor-change
更新該快照。然後,該快照將會啟用,並在重新開機後成為新的根檔案系統。root #
transactional-update dup
patch
如果有新的可用更新,將會建立一個新快照,並使用
zypper patch
更新該快照。root #
transactional-update patch
rollback
此選項會設定預設子磁碟區。在使用讀取/寫入檔案系統的系統上可呼叫
snapper rollback
。在唯讀檔案系統上,如果未提供任何引數,目前系統將設定為新的預設根檔案系統。如果您指定了編號,則該快照將用做預設的根檔案系統。在唯讀檔案系統上,不會建立任何額外快照。root #
transactional-update rollback snapshot_number
grub.cfg
此選項會建立新的 GRUB2 組態。有時需要調整開機組態,例如,新增額外的核心參數。編輯 /etc/default/grub,執行
transactional-update grub.cfg
,然後重新開機以啟用變更。您必須立即重新開機,否則,下一次執行 transactional-update 時會使用預設值覆寫新的 GRUB2 組態。root #
transactional-update grub.cfg
reboot
此參數在完成動作後會觸發重新開機。
root #
transactional-update dup reboot
--help
此時會輸出包含選項和子指令的說明螢幕。
root #
transactional-update --help
9.5 疑難排解 #
如果升級失敗,請執行 supportconfig
來收集記錄資料。將產生的檔案 (包括 /var/log/transactional-update.log
) 提供給 SUSE 支援人員。
10 使用 VNC 的遠端圖形工作階段 #
您可以利用虛擬網路計算 (VNC) 透過圖形桌面存取遠端電腦,並執行遠端圖形應用程式。VNC 獨立於平台,可讓您從任何作業系統存取遠端機器。本章介紹如何使用桌面用戶端 vncviewer 和 Remmina 連接至 VNC 伺服器,以及如何操作 VNC 伺服器。
SUSE Linux Enterprise Server 支援兩種不同類型的 VNC 工作階段:一次性工作階段,只要用戶端 VNC 連接不中斷,該工作階段將一直處於「作用中」;永久工作階段,此工作階段將一直處於「作用中」,除非明確將其終止。
VNC 伺服器可在不同連接埠上同時提供兩種工作階段,但開啟的工作階段不能從一種類型轉換為另一種類型。
10.1 vncviewer
用戶端 #
若要連接到伺服器提供的 VNC 服務,需要使用一個用戶端。SUSE Linux Enterprise Server 中的預設用戶端是 tigervnc
套件提供的 vncviewer
。
10.1.1 使用 vncviewer CLI 進行連接 #
若要啟動 VNC 查看器並發起與伺服器的工作階段,請使用以下指令:
tux >
vncviewer jupiter.example.com:1
您也可以指定含兩個冒號的連接埠號碼,而不指定 VNC 顯示埠號碼:
tux >
vncviewer jupiter.example.com::5901
您在 VNC 用戶端中指定的實際顯示號碼或連接埠號碼必須與在目標機器上透過 vncserver
指令選取的顯示號碼或連接埠號碼相同。如需更多資訊,請參閱第 10.4 節 「設定永久 VNC 伺服器工作階段」。
10.1.2 使用 vncviewer GUI 進行連接 #
執行 vncviewer
且不指定 --listen
或要連接到的主機會顯示一個視窗,要求您輸入連接詳細資料。按第 10.1.1 節 「使用 vncviewer CLI 進行連接」中所述在 欄位中輸入主機,然後按一下 。
10.1.3 未加密連接通知 #
VNC 協定支援不同類型的加密連接,請不要將這些連接與密碼驗證相混淆。如果某個連接未使用 TLS,VNC 檢視器的視窗標題中可能會出現 「(連接未加密!)」 文字。
10.2 Remmina:遠端桌面用戶端 #
Remmina 是功能豐富的新式遠端桌面用戶端。它支援多種存取方法,例如 VNC、SSH、RDP 和 Spice。
10.2.1 安裝 #
若要使用 Remmina,請檢查系統上是否安裝了 remmina 套件,若未安裝,請加以安裝。記得還要安裝適用於 Remmina 的 VNC 外掛程式:
root #
zypper in remmina remmina-plugin-vnc
10.2.2 主視窗 #
透過輸入 remmina
指令執行 Remmina。
該應用程式主視窗顯示儲存的遠端工作階段清單。在這裡,您可以新增和儲存新遠端工作階段、快速啟動新工作階段而不儲存、啟動先前儲存的工作階段,或設定 Remmina 的全域優先設定。
10.2.3 新增遠端工作階段 #
若要新增和儲存新遠端工作階段,請按一下主視窗左上方的 。 視窗即會開啟。
在用於指定剛才新增的遠端工作階段設定檔的欄位中填寫資訊。最重要的技術包括:
- 名稱
設定檔的名稱,將列於主視窗中。
- 通訊協定
連接到遠端工作階段時要使用的通訊協定,例如 VNC。
- 伺服器
遠端伺服器的 IP 或 DNS 位址和顯示號碼。
- 使用者名稱、密碼
將用於進行遠端驗證的身分證明。保留為空白表示不進行驗證。
- 色彩深度、品質
根據連接速度和品質選取最佳選項。
選取
索引標籤可輸入更具體的設定。如果用戶端與遠端伺服器之間的通訊不加密,請啟用
,否則連接會失敗。選取
索引標籤可顯示進階 SSH 通道和驗證選項。請按
加以確認。新的設定檔將列在主視窗中。10.2.4 啟動遠端工作階段 #
您可以啟動先前儲存的工作階段,也可以快速啟動一個遠端工作階段而不儲存連接詳細資料。
10.2.4.1 快速啟動遠端工作階段 #
若要快速啟動遠端工作階段而不新增和儲存連接詳細資料,請使用主視窗頂部的下拉式方塊和文字方塊。
從下拉式方塊中選取通訊協定 (例如「VNC」),然後輸入 VNC 伺服器 DNS 或 IP 位址,後跟一個冒號和顯示號碼,然後按 Enter 確認。
10.2.4.2 開啟儲存的遠端工作階段 #
若要開啟特定的遠端工作階段,請從工作階段清單中連按兩下該工作階段。
10.2.4.3 遠端工作階段視窗 #
遠端工作階段會在新視窗的索引標籤中開啟。每個索引標籤代管一個工作階段。視窗左側的工具列可協助您管理視窗/工作階段,例如切換全螢幕模式、調整視窗大小以適應工作階段的顯示大小、將特定按鍵動作傳送到工作階段、擷取工作階段的螢幕畫面,或設定影像品質。
10.2.5 編輯、複製和刪除儲存的工作階段 #
若要編輯儲存的某個遠端工作階段,請在 Remmina 主視窗中以滑鼠右鍵按一下該工作階段的名稱,然後選取 。如需相關欄位的描述,請參閱第 10.2.3 節 「新增遠端工作階段」。
若要複製儲存的某個遠端工作階段,請在 Remmina 主視窗中以滑鼠右鍵按一下該工作階段的名稱,然後選取 。在 視窗中,變更設定檔的名稱,(選擇性) 調整相關選項,然後按一下 確認。
若要刪除儲存的某個遠端工作階段,請在 Remmina 主視窗中以滑鼠右鍵按一下該工作階段的名稱,然後選取 。在下一個對話方塊中,按一下 確認。
10.2.6 從指令行執行遠端工作階段 #
如果您需要從指令行或使用批次檔案開啟遠端工作階段,而不先開啟應用程式主視窗,請使用以下語法:
tux >
remmina -c profile_name.remmina
Remmina 的設定檔儲存在您主目錄下的 .local/share/remmina/
目錄中。若要確定哪個設定檔屬於您要開啟的工作階段,請執行 Remmina,在主視窗中按一下工作階段名稱,然後在視窗底部的狀態行中查看設定檔的路徑。
如果 Remmina 未在執行,您可以將設定檔重新命名為更合理的檔案名稱,例如 sle15.remmina
。您甚至可以將設定檔複製到自訂目錄,並從該目錄中使用 remmina -c
指令來執行它。
10.3 在 VNC 伺服器上設定一次性工作階段 #
一次性工作階段由遠端用戶端啟動。它會在伺服器上啟動圖形登入畫面。這樣,您就可以選擇啟動工作階段的使用者,如果登入管理員支援,還可以選擇桌面環境。終止此類 VNC 工作階段的用戶端連接時,在該工作階段內啟動的所有應用程式也會隨之終止。一次性 VNC 工作階段無法共用,不過在同一台主機上可以同時啟動多個工作階段。
啟動
› › 。核取
。如果您打算在網頁瀏覽器視窗中存取 VNC 工作階段,請啟用
。若需要,還可核取
(例如,當網路介面設定為位於外部區域中時)。如果您有多個網路介面,請透過 設定在特定介面開啟防火牆埠的限制。以
確認您的設定值。如果有些需要的套件尚未提供,您需要批准安裝缺失套件。
提示:重新啟動顯示管理員YaST 對顯示管理員設定進行了變更。您需要登出目前的圖形工作階段並重新啟動顯示管理員,以使變更生效。
10.3.1 可用的組態 #
SUSE Linux Enterprise Server 上的預設組態以 16 位元色彩深度、1024x768 像素解析度顯示工作階段。使用「一般」的 VNC 檢視器 (相當於 VNC 顯示埠 1
) 時,可在連接埠 5901
上檢視工作階段,而使用網頁瀏覽器時,則可在連接埠 5801
上檢視工作階段。
其他組態可在不同的連接埠上使用,請參閱第 10.3.3 節 「設定一次性 VNC 工作階段」。
在一次性工作階段中,VNC 顯示埠號碼和 X 顯示埠號碼是獨立的。VNC 顯示埠號碼需要手動指定給伺服器支援的每個組態 (在上例中為 :1)。每次以其中一種組態啟動 VNC 工作階段時,工作階段會自動獲得可用的 X 顯示埠號碼。
依預設,VNC 用戶端與伺服器會嘗試透過安裝後產生的自行簽署 SSL 證書安全通訊。您可以使用預設的證書,也可以用自己的證書取代它。使用自行簽署的證書時,需要在首次連接之前,於 VNC 檢視器與網頁瀏覽器中確認證書的簽名。
10.3.2 啟動一次性 VNC 工作階段 #
若要連接一次性 VNC 工作階段,必須安裝 VNC 檢視器,另請參閱第 10.1 節 「vncviewer
用戶端」。或者,可在支援 JavaScript 的網頁瀏覽器中輸入以下 URL 來檢視 VNC 工作階段:http://jupiter.example.com:5801
10.3.3 設定一次性 VNC 工作階段 #
如果您不需要或不想修改預設組態,可以跳過本小節。
一次性 VNC 工作階段透過 systemd
通訊端 xvnc.socket
啟動。該通訊端預設提供六個組態區塊:三個用於 VNC 檢視器 (vnc1
到 vnc3
),另外三個用於 JavaScript 用戶端 (vnchttpd1
到 vnchttpd3
)。預設只有 vnc1
及 vnchttpd1
處於作用中狀態。
若要在開機時啟動 VNC 伺服器通訊端,請執行以下指令:
tux >
sudo
systemctl enable xvnc.socket
若要立即啟動通訊端,請執行:
tux >
sudo
systemctl start xvnc.socket
可透過 server_args
選項設定 Xvnc
伺服器。如需選項清單,請參閱 Xvnc --help
。
新增自訂組態時,請確定它們沒有使用同一台主機上的其他組態、服務或現有的永久 VNC 工作階段已在使用的連接埠。
輸入以下指令啟用組態變更:
tux >
sudo
systemctl reload xvnc.socket
依照程序 10.1 「啟用一次性 VNC 工作階段」 中所述啟用遠端管理時,會在防火牆中開啟連接埠 5801
及 5901
。如果提供 VNC 工作階段的網路介面受防火牆保護,則您在為 VNC 工作階段啟用其他連接埠時,需要手動開啟相應的連接埠。如需指示,請參閱Book “Security and Hardening Guide”, Chapter 24 “Masquerading and firewalls”。
10.4 設定永久 VNC 伺服器工作階段 #
從多個用戶端可以同時存取一個永久工作階段。此特性非常適合用於在一個用戶端具有完整存取權,而所有其他用戶端具有僅檢視存取權的場合進行演示操作。另一個使用案例是:訓練員可能需要在其中存取學員桌面的訓練工作階段。
若要連接至永久 VNC 工作階段,必須安裝 VNC 檢視器。如需更多詳細資料,請參閱第 10.1 節 「vncviewer
用戶端」。或者,可在支援 JavaScript 的網頁瀏覽器中輸入以下 URL 來檢視 VNC 工作階段:http://jupiter.example.com:5801
持續 VNC 工作階段分為以下兩類:
10.4.1 使用 vncserver
啟動的 VNC 工作階段 #
此類型的持續 VNC 工作階段在伺服器上啟動。不論用戶端的連接狀態為何,此工作階段以及在此工作階段中啟動的所有應用程式會一直執行,直至工作階段被終止。對永久工作階段的存取受到密碼保護,密碼可能為以下兩種類型:
授予完全存取權的一般密碼,或
授予非互動式 (僅檢視) 存取權限的選擇性僅檢視密碼。
一個工作階段可以同時擁有這兩種類型的多個用戶端連接。
開啟外圍程序,並確定您以應當擁有 VNC 工作階段的使用者身分登入。
如果提供 VNC 工作階段的網路介面受防火牆保護,則您需要在防火牆中手動開啟工作階段使用的連接埠。如果要啟動多個工作階段,可以開啟一系列連接埠。如需如何設定防火牆的詳細資料,請參閱Book “Security and Hardening Guide”, Chapter 24 “Masquerading and firewalls”。
vncserver
對顯示埠:1
使用連接埠5901
,對顯示埠:2
使用連接埠5902
,依此類推。對於永久工作階段,VNC 顯示埠和 X 顯示埠的號碼通常都是相同的。若要以 1024x768 像素的解析度及 16 位元的色彩深度啟動工作階段,請輸入以下指令:
vncserver -alwaysshared -geometry 1024x768 -depth 16
vncserver
指令在未指定顯示埠號碼的情況下,會挑選未使用的號碼,並列印它的選擇。有關更多選項的資訊,請參閱man 1 vncserver
。
首次執行 vncserver
時,它會要求您輸入擁有工作階段完整存取權限的密碼。如果需要,您也可以提供對工作階段具有僅檢視存取權限的密碼。
此處提供的密碼還可供同一個使用者用來啟動以後的工作階段。使用 vncpasswd
指令可以變更這些密碼。
請務必使用足夠長 (8 個或更多字元) 的嚴密密碼。請不要共用這些密碼。
若要終止工作階段,請從 VNC 檢視器關閉在 VNC 工作階段內部執行的桌面環境,就如同關閉一般本地 X 工作階段一樣。
如果您想要手動終止工作階段,請在 VNC 伺服器上開啟一個外圍程序,並務必以擁有您要終止之 VNC 工作階段的使用者身分登入。執行以下指令以終止在顯示埠 :1
上執行的工作階段:vncserver -kill :1
10.4.1.1 設定永久 VNC 工作階段 #
永久 VNC 工作階段可透過編輯 $HOME/.vnc/xstartup
來設定。依預設,此外圍程序程序檔會啟動它啟動時所處的同一個 GUI/視窗管理員。在 SUSE Linux Enterprise Server 中,此 GUI/視窗管理員為 GNOME 或 IceWM。如果想要使用您選擇的視窗管理員啟動工作階段,請設定變數 WINDOWMANAGER
:
WINDOWMANAGER=gnome vncserver -geometry 1024x768 WINDOWMANAGER=icewm vncserver -geometry 1024x768
永久 VNC 工作階段透過單個基於使用者的組態設定。由同一個使用者啟動的多個工作階段皆使用相同的啟動檔案和密碼檔案。
10.4.2 使用 vncmanager
啟動的 VNC 工作階段 #
啟動「
› › 」。啟用
。如果您打算在網頁瀏覽器視窗中存取 VNC 工作階段,請啟用
。若需要,還可核取
(例如,當網路介面設定為位於外部區域中時)。如果您有多個網路介面,請透過 設定在特定介面開啟防火牆埠的限制。以
確認您的設定值。如果有些需要的套件尚未提供,您需要批准安裝缺失套件。
提示:重新啟動顯示管理員YaST 對顯示管理員設定進行了變更。您需要登出目前的圖形工作階段並重新啟動顯示管理員,以使變更生效。
10.4.2.1 設定永久 VNC 工作階段 #
依程序 10.3 「啟用永久 VNC 工作階段」中所述啟用 VNC 工作階段管理後,便可以使用您喜歡的 VNC 檢視器 (例如 vncviewer
或 Remmina) 正常連接到遠端工作階段。此時將顯示登入畫面。當您登入後,桌面環境的系統匣中將出現「VNC」圖示。按一下該圖示可開啟 視窗。如果該圖示未出現,或者您的桌面環境不支援將圖示放在系統匣中,請手動執行 vncmanager-controller
。
有幾項設定會影響 VNC 工作階段的行為:
這相當於一次性工作階段。其他使用者將看不見此工作階段,它在您斷開連接後即會終止。如需相關資訊,請參閱第 10.3 節 「在 VNC 伺服器上設定一次性工作階段」。
其他使用者可以看見工作階段,它在您斷開連接後仍繼續執行。
您可以在此處指定持續工作階段的名稱,以便在重新連接時可以輕鬆識別它。
任何人不必提供使用者身分證明登入即可存取工作階段。
需要使用有效的使用者名稱和密碼登入後,才能存取工作階段。該選項會在
文字方塊中列出有效的使用者名稱。防止多個使用者同時加入該工作階段。
允許多個使用者同時加入持續工作階段。適合用於遠端展示或訓練工作階段。
按一下
加以確認。10.4.2.2 加入永久 VNC 工作階段 #
依第 10.4.2.1 節 「設定永久 VNC 工作階段」中所述設定持續 VNC 工作階段後,可透過 VNC 檢視器加入它。當 VNC 用戶端連接到伺服器後,系統將提示您選擇是要建立新工作階段,還是加入現有工作階段:
當您按一下現有工作階段的名稱後,系統可能要求您輸入登入身分證明,具體取決於持續工作階段設定。
10.5 在 VNC 伺服器上設定加密 #
如果 VNC 伺服器設定正確,則 VNC 伺服器與用戶端之間的所有通訊都會加密。驗證在工作階段開始時進行,實際的資料傳輸在驗證後開始。
無論是一次性還是持續 VNC 工作階段,都可透過 server_args
行中 /usr/bin/Xvnc
指令的 -securitytypes
參數設定安全性選項。-securitytypes
參數會選取驗證方法和加密。它的選項如下:
- None、TLSNone、X509None
沒有驗證。
- VncAuth、TLSVnc、X509Vnc
驗證使用自訂密碼。
- Plain、TLSPlain、X509Plain
驗證使用 PAM 來驗證使用者的密碼。
- None、vncAuth、plain
不加密。
- TLSNone、TLSVnc、TLSPlain
匿名 TLS 加密。所有內容都會加密,但不驗證遠端主機。因此,您可以防護被動攻擊者,但不能防禦中間人攻擊者。
- X509None、X509Vnc、X509Plain
使用證書進行 TLS 加密。如果使用自行簽署的證書,則在第一次連接時,系統將要求您驗證證書。在以後的連接中,僅當證書有變更時,系統才會向您發出警告。因此,在第一次連接時,您可以防禦中間人攻擊之外的所有其他攻擊 (類似於使用一般的 SSH)。如果使用由證書管理中心簽署且與機器名稱相符的證書,您的安全將得到全面保障 (類似於使用一般的 HTTPS)。
提示:證書和金鑰的路徑如果您使用基於 X509 的加密,需要透過
-X509Cert
和-X509Key
選項指定 X509 證書和金鑰的路徑。
如果您選取多種安全性類型 (以逗號分隔),將會使用用戶端與伺服器都支援且允許的第一種安全性。如此,您便可在伺服器上設定隨機加密。如果您需要支援不支援加密的 VNC 用戶端,此功能將相當實用。
在用戶端上,您也可以指定允許的安全性類型,以防在您連接到已知啟用了加密的伺服器時遭到降級攻擊 (雖然在該情況下,我們的 vncviewer 會發出「連接未加密!」訊息來警告您)。
11 使用 RSync 複製檔案 #
當今時代,使用者通常都會有數部電腦:家用機器和辦公機器、筆記型電腦、智慧型電話或平板電腦。因而,在多個裝置之間保持檔案和文件同步的任務就變得越發重要。
您在開始使用同步工具之前,應該先熟悉其特性和功能。請務必備份您的重要檔案。
11.1 概念綜覽 #
對於要透過慢速網路連接同步大量資料的情況,Rsync 提供了可靠的方法來僅傳輸檔案中的變更。此方法不僅適用於文字檔案,還適用於二進位檔案。為了偵測檔案之間的差異,Rsync 將檔案分為多個區塊,並計算它們的檢查總數。
偵測變更對運算能力有一定的要求。因此,請確定兩端的機器均具有足夠的資源,包括 RAM。
當需要定期傳輸大量僅包含微小變更的資料時,Rsync 特別實用。進行備份時就常常用到該工具。Rsync 也非常適合用來鏡像預備伺服器,此類伺服器將 Web 伺服器的完整目錄樹儲存到 DMZ 內的某部 Web 伺服器中。
Rsync 並不是同步工具,雖然它的名字看上去有些像。Rsync 工具一次只能在一個方向複製資料。它不會也不能反向複製資料。如果您需要既能同步來源又能同步目標的雙向工具,請使用 Csync。
11.2 基本語法 #
Rsync 是一個指令行工具,基本語法如下:
rsync [OPTION] SOURCE [SOURCE]... DEST
您可以在任何本地或遠端機器上使用 Rsync,前提是您擁有相應的存取權限和寫入權限。可以有多個 SOURCE 項目。SOURCE 和 DEST 預留位置可以是路徑和/或 URL。
下面介紹一些最常用的 Rsync 選項:
-v
輸出較詳細的文字
-a
歸檔模式;以遞迴方式複製檔案並保留時間戳記、使用者/群組擁有權、檔案權限和符號連結
-z
壓縮傳輸的資料
使用 Rsync 時,應特別注意結尾斜線。目錄後面的結尾斜線表示目錄的內容。沒有結尾斜線表示目錄自身。
11.3 在本地複製檔案和目錄 #
下面的描述假設目前的使用者擁有 /var/backup
目錄的寫入權限。若要將單個檔案從機器上的一個目錄複製到另一個路徑,請使用以下指令:
tux >
rsync
-avz backup.tar.xz /var/backup/
檔案 backup.tar.xz
會複製到 /var/backup/
,絕對路徑是 /var/backup/backup.tar.xz
。
請勿忘記在 /var/backup/
目錄後面加上結尾斜線!如果不插入斜線,檔案 backup.tar.xz
會複製到 /var/backup
(檔案) 中,而不是 /var/backup/
目錄中!
複製目錄與複製單個檔案相似。下面的範例將目錄 tux/
及其內容複製到 /var/backup/
目錄中:
tux >
rsync
-avz tux /var/backup/
在絕對路徑 /var/backup/tux/
中可找到副本。
11.4 從遠端複製檔案和目錄 #
兩部機器上都需要有 Rsync 工具。若要從遠端目錄複製檔案或將檔案複製到遠端目錄,需要提供 IP 位址或網域名稱。如果本地機器和遠端機器上目前的使用者名稱相同,則可以不指定使用者名稱。
若要使用相同的使用者 (在本地和遠端主機上) 將檔案 file.tar.xz
從本地主機複製到遠端主機 192.168.1.1
,請使用以下指令:
tux >
rsync
-avz file.tar.xz tux@192.168.1.1:
依據您的個人偏好,也可以使用下面的指令,它們的作用相同:
tux >
rsync
-avz file.tar.xz 192.168.1.1:~tux >
rsync
-avz file.tar.xz 192.168.1.1:/home/tux
在所有使用標準組態的情況下,系統會提示您輸入遠端使用者的密碼片語。此指令會將 file.tar.xz
複製到使用者 tux
的主目錄 (通常為 /home/tux
)。
從遠端複製目錄與在本地複製目錄相似。下面的範例將目錄 tux/
及其內容複製到 192.168.1.1
主機上的遠端目錄 /var/backup/
:
tux >
rsync
-avz tux 192.168.1.1:/var/backup/
假設您在主機 192.168.1.1
上擁有寫入權限,便可在絕對路徑 /var/backup/tux
中找到副本。
11.5 設定和使用 Rsync 伺服器 #
Rsync 可做為在預設連接埠 873 上監聽內送連接的精靈 (rsyncd
) 執行。此精靈可以接收「複製目標」。
下面的描述介紹如何在 jupiter
上建立具有備份目標的 Rsync 伺服器。此目標可用於儲存您的備份。若要建立 Rsync 伺服器,請執行以下操作:
在 jupiter 上,建立用於儲存您所有備份檔案的目錄。在此範例中,我們使用
/var/backup
:root #
mkdir
/var/backup指定擁有權。在此範例中,該目錄為
使用者
群組中的使用者tux
所擁有:root #
chown
tux.users /var/backup設定 rsyncd 精靈。
我們將組態檔案分割成一個主檔案,和一些用於存放您的備份目標的「模組」。如此,以後便可更輕鬆地新增其他目標。全域值可以儲存在
/etc/rsyncd.d/*.inc
檔案中,而模組放置在etc/rsyncd.d/*.conf
檔案中:建立目錄
/etc/rsyncd.d/
:root #
mkdir
/etc/rsyncd.d/在主組態檔案
/etc/rsyncd.conf
中,新增以下幾行:# rsyncd.conf main configuration file log file = /var/log/rsync.log pid file = /var/lock/rsync.lock &merge /etc/rsyncd.d 1 &include /etc/rsyncd.d 2
在檔案
/etc/rsyncd.d/backup.conf
中透過以下幾行建立您的模組 (您的備份目標):# backup.conf: backup module [backup] 1 uid = tux 2 gid = users 2 path = /var/backup 3 auth users = tux 4 secrets file = /etc/rsyncd.secrets 5 comment = Our backup target
建立包含以下內容的
/etc/rsyncd.secrets
檔案,並取代 PASSPHRASE:# user:passwd tux:PASSPHRASE
確認該檔案只有
root
使用者可讀取:root #
chmod
0600 /etc/rsyncd.secrets
透過以下指令啟動並啟用 rsyncd 精靈:
root #
systemctl
enable rsyncdroot #
systemctl
start rsyncd測試是否可存取 Rsync 伺服器:
tux >
rsync
jupiter::您應該會看到類似如下的回應:
backup Our backup target
若非如此,請檢查您的組態檔案、防火牆和網路設定。
上述步驟建立了 Rsync 伺服器,現在可以使用它來儲存備份。本範例也建立了監聽所有連接的記錄檔。這個檔案是儲存在 /var/log/rsyncd.log
。如果您要對傳輸進行除錯,此檔案非常實用。
若要列出備份目標的內容,請使用以下指令:
tux >
rsync -avz jupiter::backup
此指令會列出伺服器上 /var/backup
目錄中存在的所有檔案。這個要求也會記錄在 /var/log/rsyncd.log
記錄檔中。若要開始實際傳輸,請提供來源目錄。請使用 .
來代表目前的目錄。例如,下面的指令會將目前的目錄複製到 Rsync 備份伺服器:
tux >
rsync -avz . jupiter::backup
依預設,Rsync 不會在執行時刪除檔案和目錄。若要允許刪除,必須另外指定選項 --delete
。若要確保不會刪除較新的檔案,則可以改用 --update
選項。任何產生的衝突都必須手動解決。
11.6 更多資訊 #
- Csync
雙向檔案同步工具,請參閱 https://csync.org/。
- RSnapshot
建立增量備份,請參閱 https://rsnapshot.org。
- Unison
與 CSync 類似的檔案同步工具,但具有圖形介面,請參閱 https://www.seas.upenn.edu/~bcpierce/unison/。
- Rear
一個災難復原架構,請參閱《SUSE Linux Enterprise High Availability Extension 管理指南》中的「使用 Rear (Relax-and-Recover) 進行災難復原」一章。
第 II 部分 將 Linux 系統開機 #
- 12 開機過程簡介
Linux 系統開機涉及多個元件和任務。完成韌體和硬體啟始化程序 (取決於機器的架構) 之後,系統將透過開機載入程式 GRUB 2 啟動核心。在此之後,開機程序完全由作業系統控制,並由
systemd
負責處理。systemd
會提供一組「目標」,用於啟動與日常使用、維護或緊急情況相關的組態。- 13 UEFI (整合可延伸韌體介面)
UEFI (整合可延伸韌體介面) 是系統硬體隨附的韌體、系統的所有硬體元件與作業系統之間的介面。
- 14 開機載入程式 GRUB 2
本章介紹如何設定 SUSE® Linux Enterprise Server 中使用的開機載入程式 GRUB 2。GRUB 是傳統 GRUB 開機載入程式 (現在稱做「GRUB Legacy」) 的後繼產品。從 SUSE® Linux Enterprise Server 12 版本開始,就已使用 GRUB 2 做為預設的開機載入程式。產品中提供了一個 YaST 模組來進行最重要的設定。整個開機程序簡述於第 12 章 「開機過程簡介」。如需關於 UEFI 機器安全開機支援的詳細資料,請參閱第 13 章 「UEFI (整合可延伸韌體介面)」。
- 15
systemd
精靈 systemd
負責啟始化系統,它的程序 ID 為 1。systemd
由核心直接啟動,訊號 9 (通常會終止程序) 對它不起作用。所有其他程式或由systemd
直接啟動,或由它的其中一個子程序啟動。systemd
取代了 System V init 精靈,並且透過支援 init 程序檔與 System V init 完全相容。
12 開機過程簡介 #
Linux 系統開機涉及多個元件和任務。完成韌體和硬體啟始化程序 (取決於機器的架構) 之後,系統將透過開機載入程式 GRUB 2 啟動核心。在此之後,開機程序完全由作業系統控制,並由 systemd
負責處理。systemd
會提供一組「目標」,用於啟動與日常使用、維護或緊急情況相關的組態。
12.1 術語 #
本章使用的術語可能有不同的解釋。為了理解本章中術語的用法,請閱讀以下定義:
init
有兩個不同的程序通常會命名為 「init」:
掛接根檔案系統的
initramfs
程序從實際根檔案系統執行且用於啟動其他所有程序的作業系統程序
在這兩種情況下,
systemd
程式都會處理此任務。首先會從initramfs
執行此程序,以掛接根檔案系統。掛接成功後,從根檔案系統以初始程序的形式重新執行此程序。為了避免混淆這兩個systemd
程序,我們將第一個程序稱為 init on initramfs,將第二個程序稱為 systemd。-
initrd
/initramfs
initrd
(初始 RAM 磁碟) 是一個影像檔案,內含核心所載入的並且做為暫存根檔案系統從/dev/ram
掛接的根檔案系統影像。掛接此檔案系統需要使用檔案系統驅動程式。從核心 2.6.13 開始,
initramfs
(初始 RAM 檔案系統) 取代了 initrd,前者無需檔案系統驅動程式即可掛接。SUSE Linux Enterprise Server 只使用initramfs
。但是,由於initramfs
做為/boot/initrd
儲存,因此通常將其稱為 「initrd」。本章只使用名稱initramfs
。
12.2 Linux 開機過程 #
Linux 開機程序由數個階段組成,每個階段分別由不同的元件所代表:
12.2.1 啟始化和開機載入程式階段 #
在啟始化階段,將設定機器硬體並準備好裝置。此程序根據硬體架構的不同有很大的差別。
SUSE Linux Enterprise Server 在所有架構中使用開機載入程式 GRUB 2。根據架構和韌體,啟動 GRUB 2 開機載入程式的程序可能包括多個步驟。開機載入程式的用途是載入核心以及初始的 RAM 式檔案系統 (initramfs)。如需 GRUB 2 的詳細資訊,請參閱第 14 章 「開機載入程式 GRUB 2」。
12.2.1.1 Aarch64 與 AMD64/Intel 64 上的啟始化和開機載入程式階段 #
開啟電腦之後,BIOS 或 UEFI 會啟始化螢幕和鍵盤,並測試主記憶體。在此階段中,機器不會存取大量儲存媒體。接著,會從 CMOS 值載入目前日期、時間和最重要的周邊。辨識開機媒體及其幾何尺寸之後,系統控制權將會從 BIOS/UEFI 轉到開機載入程式。
在配備傳統 BIOS 的機器上,只能載入開機磁碟第一個實體 512 位元組資料磁區 (主開機記錄,MBR) 中的程式碼。只有極少量的 GRUB 2 程式碼能夠裝入 MBR。開機載入程式的唯一作用就是從 MBR 與第一個分割區 (MBR 分割區表) 之間的間隙處,或是從 BIOS 開機分割區 (GPT 分割區表) 載入包含檔案系統驅動程式的 GRUB 2 核心影像。此影像包含檔案系統驅動程式,因此能夠存取根檔案系統中的 /boot
。/boot
包含 GRUB 2 核心 (core) 的附加模組以及核心 (kernel) 和 initramfs 影像。取得此分割區的存取權之後,GRUB 2 會將核心和 initramfs 影像載入記憶體,並將控制權交接到核心。
從包含已加密分割區 /boot
的加密檔案系統將 BIOS 系統開機時,需要輸入解密密碼兩次。GRUB 2 使用第一次輸入的密碼來解密 /boot
,systemd
使用第二次輸入的密碼來載入加密的磁碟區。
在配備 UEFI 的機器上,開機程序比配備傳統 BIOS 的機器要簡單得多。韌體能夠讀取包含 GPT 分割區表的磁碟的 FAT 格式化系統分割區。此 EFI 系統分割區 (在執行中的系統上載入為 /boot/efi
) 可提供足夠的空間,用於代管由韌體直接載入和執行的完備 GRUB 2。
如果 BIOS/UEFI 支援網路開機,則也可以設定提供開機載入程式的開機伺服器。然後,可以透過 PXE 將系統開機。BIOS/UEFI 用做開機載入程式。它會從開機伺服器取得開機影像,然後啟動系統。這與本地硬碟完全無關。
12.2.1.2 IBM Z 上的啟始化和開機載入程式階段 #
在 IBM Z 上,必須透過名為 zipl
(z initial program load,z 初始程式載入) 的開機載入程式啟始化開機程序。雖然 zipl
支援讀取不同的檔案系統,但它不支援 SLE 預設檔案系統 (Btrfs) 或者從快照開機。因此,SUSE Linux Enterprise Server 使用兩階段的開機程序來確定開機時完全支援 Btrfs:
zipl
從/boot/zipl
分割區開機,該分割區可格式化為 Ext2、Ext3、Ext4 或 XFS 檔案系統。此分割區包含一個極簡的核心,以及一個載入記憶體中的 initramfs。initramfs 包含 Btrfs 驅動程式 (及其他元件) 和開機載入程式 GRUB 2。系統使用參數initgrub
(告知要啟動 GRUB 2) 來啟動核心。核心會掛接根檔案系統,以使
/boot
可存取。現在,將從 initramfs 啟動 GRUB 2。GRUB 2 從/boot/grub2/grub.cfg
讀取其組態,並從/boot
載入最終的核心和 initramfs。現在,將透過 Kexec 載入新核心。
12.2.2 核心階段 #
開機載入程式轉交系統控制權後,所有架構中的開機程序均是相同的。開機載入程式會將核心和初始的 RAM 式檔案系統 (initramfs
) 都載入記憶體中,而核心將接管控制權。
核心設定記憶體管理並偵測 CPU 類型及其功能之後,將啟始化硬體,並從記憶體中掛接使用 initramfs
載入的暫存根檔案系統。
12.2.2.1 initramfs
檔案 #
initramfs
(初始 RAM 檔案系統) 是一個小型 cpio 歸檔,可由核心載入 RAM 磁碟。該檔案位於 /boot/initrd
中。可以使用名為 dracut
的工具建立該檔案,如需詳細資料,請參閱 man 8 dracut
。
initramfs
提供了一個極簡的 Linux 環境,可用於在掛接實際根檔案系統之前執行程式。BIOS 或 UEFI 常式會將最精簡的 Linux 環境載入記憶體,該環境只需要有足夠的記憶體,除此之外,沒有特定硬體需求。initramfs
歸檔必須始終提供一個名為 init
的可執行檔,該檔案會執行根檔案系統上的 systemd
精靈,使開機程序得以繼續。
在根目錄檔案系統能夠掛接以及作業系統可以啟動之前,核心需要相應的驅動程式來存取根目錄檔案系統所在的設備。這些驅動程式可能包含特定類型硬碟的特殊驅動程式,或者甚至包含存取網路檔案系統的網路驅動程式。init
on initramfs
會載入根檔案系統所需的模組。當模組載入之後,udev
便會為 initramfs
提供所需的裝置。在後來的開機程序中,變更根檔案系統後,必須重新產生這些裝置。可以使用 systemd
單位 systemd-udev-trigger.service
來實現此目的。
12.2.2.1.1 重新產生 initramfs #
由於 initramfs
包含多個驅動程式,因此,每當其中某個驅動程式有新版本可用時,都需要更新 initramfs。在安裝包含驅動程式更新的套件時可以自動完成這種更新。YaST 或 zypper 透過顯示用於產生 initramfs
的指令輸出來告知此狀態。但在某些情況下,您需要手動重新產生 initramfs
:
- 由於更換硬體而需新增驅動程式
如果需要更換硬體 (例如硬碟),並且開機時此硬體需要核心中的不同驅動程式,則您必須更新
initramfs
檔案。開啟或建立
/etc/dracut.conf.d/10-驅動程式.conf
並新增以下行 (請注意前置空格):force_drivers+=" DRIVER1"
以驅動程式的模組名稱取代 DRIVER1。如果您需要新增多個驅動程式,請逐一列出並以空格分隔。
force_drivers+=" DRIVER1 DRIVER2"
- 將系統目錄移至 RAID 或 LVM
每次您要將執行中系統上的交換檔案或系統目錄 (例如
/usr
) 移至 RAID 或邏輯磁碟區時,都需要建立一個包含軟體 RAID 或 LVM 驅動程式支援的initramfs
。為此,請在
/etc/fstab
中建立相關的項目,並掛接新項目 (例如,使用mount -a
和/或swapon -a
)。- 將磁碟新增至包含根檔案系統的 LVM 群組或 Btrfs RAID
每當您要在包含根檔案系統的邏輯磁碟區群組或者 Btrfs RAID 中新增 (或移除) 磁碟時,都需要建立一個支援增大的磁碟區的
initramfs
。請遵循程序 12.1 「產生 initramfs」中的說明操作。- 變更核心變數
如果您在
sysctl
介面中透過編輯相關檔案 (/etc/sysctl.conf
或/etc/sysctl.d/*.conf
) 變更了核心變數的值,系統下次重新開機時,這項變更將會遺失。即使您在執行時使用sysctl --system
載入這些值,變更也不會儲存到 initramfs 檔案中。您需要依照程序 12.1 「產生 initramfs」中所述更新該檔案。
請注意,您需要以 root
使用者身分執行以下程序中的所有指令。
執行以下指令產生新的
initramfs
檔案dracut MY_INITRAMFS
請以所選檔案名稱取代 MY_INITRAMFS。新的
initramfs
將會建立為/boot/MY_INITRAMFS
。或者執行
dracut -f
。這會覆寫目前使用的現有檔案。(如果在上一步中執行了
dracut -f
,請跳過此步驟。)為上一步中所建立的initramfs
檔案建立連結:(cd /boot && ln -sf MY_INITRAMFS initrd)
在 IBM Z 架構中,另外還需執行
grub2-install
。
12.2.3 Init on initramfs 階段 #
由核心從 initramfs
掛接的暫存根檔案系統包含可執行檔案 systemd
(下文稱為 init
on initramfs
,另請參閱第 12.1 節 「術語」)。此程式執行掛接正確根檔案系統所需的全部動作。它為所需的檔案系統提供核心功能,並為使用 udev
的大量儲存控制器提供裝置驅動程式。
initramfs
上的 init
主要用途是為掛接以及存取實際根檔案系統做好準備。根據您的系統組態,initramfs
上的 init
負責下列任務。
- 載入核心模組
根據硬體組態,存取您電腦的硬體元件可能需要特殊的驅動程式 (最重要的元件是硬碟)。若要存取最後根目錄檔案系統,核心需載入適當的檔案系統驅動程式。
- 提供區塊特殊檔案
核心根據載入的模組產生裝置事件。
udev
會處理這些事件,並在/dev
內的 RAM 檔案系統中產生所需的特殊區塊檔案。如果沒有這些專用檔案,便無法存取檔案系統和其他裝置。- 管理 RAID 和 LVM 設定
如果您之前將系統設定為在 RAID 或 LVM 下存放根檔案系統,
initramfs
上的init
此時會設定 LVM 或 RAID,以便之後能夠存取根檔案系統。- 管理網路組態
如果您之前將系統設定為使用網路掛接的根檔案系統 (透過 NFS 掛接),那麼
init
此時必須確定是否已載入適當的網路驅動程式,並且這些驅動程式是否設定為允許存取根檔案系統。如果檔案系統位於 iSCSI 或 SAN 這樣的網路區塊裝置上,
initramfs
上的init
還會設定與儲存伺服器間的連線。如果主要目標不可用,SUSE Linux Enterprise Server 支援從次要 iSCSI 目標開機。如需有關開機 iSCSI 目標的組態的更多詳細資料,請參閱Book “儲存管理指南”, Chapter 15 “IP 網路上的大型儲存裝置:iSCSI”, Section 15.3.1 “使用 YaST 設定 iSCSI 啟動器”。
如果開機檔案系統無法在開機環境中掛接,則必須對該系統進行檢查與修復,然後才能繼續開機。對於 Ext3 與 Ext4 檔案系統,檔案系統檢查程式會自動啟動。如果是 XFS 和 Btrfs 檔案系統,則不會自動開始修復程序,而是向使用者顯示有關可用於修復檔案系統的選項的資訊。成功修復檔案系統後,結束開機環境將會使系統重新嘗試掛接根檔案系統。如果掛接成功,將繼續正常開機。
12.2.3.1 安裝過程中的 init on initramfs 階段 #
若於安裝過程的啟始開機階段呼叫 init
on initramfs
,它執行的任務會與上述任務有所不同。請注意,安裝系統也不會從 initramfs
啟動 systemd
— 這些任務由 linuxrc
執行。
- 尋找安裝媒體
當您啟動安裝程序時,機器會載入一個安裝核心以及一個包含 YaST 安裝程式的特殊
init
。YaST 安裝程式在 RAM 檔案系統中執行,它必須知道安裝媒體的位置,才能存取該媒體來安裝作業系統。- 啟動硬體辨識並載入適當的核心模組
如第 12.2.2.1 節 「
initramfs
檔案」中所述,開機程序從最少的一組驅動程式 (可在大多數硬體組態中使用) 開始。在 AArch64、POWER 和 AMD64/Intel 64 機器上,linuxrc
會啟動初始硬體掃描程序,以確定適合您硬體組態的驅動程式集。在 IBM Z 上,需要提供驅動程式及其參數的清單 (例如,透過 linuxrc 或 parmfile 提供)。這些驅動程式用來產生系統開機所需的自訂
initramfs
。如果開機不需要這些模組,但是 coldplug 需要這些模組,則可以使用systemd
載入這些模組;如需詳細資訊,請參閱第 15.6.4 節 「載入核心模組」。- 載入安裝系統
系統正確識別硬體後,會立即載入相應的驅動程式。
udev
程式會建立特殊的裝置檔案,linuxrc
將使用 YaST 安裝程式啟動安裝系統。- 啟動 YaST
最後,
linuxrc
啟動 YaST,後者則啟動套件安裝和系統組態。
12.2.4 systemd 階段 #
找到「實際的」根檔案系統後,對其進行錯誤檢查並加以掛接。若掛接成功,系統會清理 initramfs
,並執行根檔案系統上的 systemd
精靈。systemd
是 Linux 的系統和服務管理員。它是做為 PID 1 啟動的父程序,用做 init 系統來啟動和維護使用者空間服務。如需詳細資料,請參閱第 15 章 「systemd
精靈」。
13 UEFI (整合可延伸韌體介面) #
UEFI (整合可延伸韌體介面) 是系統硬體隨附的韌體、系統的所有硬體元件與作業系統之間的介面。
UEFI 在 PC 系統上的應用越來越廣泛,正逐漸取代傳統的 PC-BIOS。例如,UEFI 可正確支援 64 位元系統並提供安全開機 (「安全開機」,需要 2.3.1c 版或更高版本的韌體),這是它最重要的功能之一。最後,所有 x86 平台上藉由 UEFI 都將可以使用標準韌體。
UEFI 另外還提供下列優勢:
從具有 GUID 分割區表 (GPT) 的大型磁碟 (超過 2 TiB) 開機。
獨立於 CPU 的結構和驅動程式。
具有網路功能的彈性作業系統前環境。
CSM (相容性支援模組) 可支援透過類似於 PC-BIOS 模擬功能將舊版作業系統開機。
如需詳細資訊,請參閱 http://en.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface。下列各節並不是一般性的 UEFI 綜覽,只是有關如何在 SUSE Linux Enterprise Server 中實作某些功能的提示。
13.1 安全開機 #
在 UEFI 的領域里,保護開機程序即表示建立一條信任鏈。「平台」是此信任鏈的根;在 SUSE Linux Enterprise Server 環境中,可將主機板和板載韌體視為「平台」。換言之,它就是硬體廠商,信任鏈從硬體廠商流向元件廠商、作業系統廠商等。
信任透過公用金鑰加密來表示。硬體廠商將所謂的「平台金鑰 (PK)」放入韌體中,表示信任的根。與作業系統廠商及其他的信任關係透過使用「平台金鑰」簽署其金鑰加以記錄。
最後,要求任何程式碼必須由其中一個「信任」金鑰簽署後,韌體才將執行程式碼,以此構建安全性 — 可以是作業系統開始載入程式、位於某些 PCI Express 卡之快閃式記憶體內或磁碟上的一些驅動程式,也可以是韌體本身的更新。
若要使用安全開機,您需要以韌體信任的金鑰簽署您的作業系統載入程式,並且需要作業系統載入程式驗證其載入的核心是否可信。
金鑰交換金鑰 (KEK) 可新增至 UEFI 金鑰資料庫。這樣一來,您便可以使用其他證書,只要這些證書是以 PK 的私密部分簽署的即可。
13.1.1 在 SUSE Linux Enterprise Server 上實作 #
預設會安裝 Microsoft 的金鑰交換金鑰 (KEK)。
預設已在 UEFI/x86_64 安裝中啟用安全開機功能。可以在
對話方區塊的 索引標籤中找到 選項。該選項支援在韌體中啟用安全開機後開機,同時也支援在停用安全開機後開機。安全開機功能要求 GUID 分割區表 (GPT) 以主開機記錄 (MBR) 取代舊分割區。如果 YaST 在安裝期間偵測到 EFI 模式,它將會嘗試建立 GPT 分割區。UEFI 需要在 FAT 格式 EFI 系統分割區 (ESP) 上找到 EFI 程式。
若要支援 UEFI 安全開機,需要有開機載入程式,且韌體認可其數位簽名是可信金鑰。該金鑰需要先天為韌體所信任 (無需任何手動介入)。
實現此目的方法有兩種。一種方法是與硬體廠商協作,讓他們簽署一個 SUSE 金鑰,隨後 SUSE 會使用它來簽署開機載入程式。另一種方法是執行 Microsoft 的 Windows Logo Certification 程式認證開機載入程式,並讓 Microsoft 辨識 SUSE 簽署金鑰 (即,使用其 KEK 進行簽署)。目前,SUSE 透過 UEFI 簽署服務 (在此範例中為 Microsoft) 來簽署載入程式。
SUSE 在實作層使用預設安裝的 shim
載入程式。這是一個智慧型解決方案,它可避免法律問題並大大簡化了認證和簽署步驟。shim
載入程式的工作是載入開機載入程式 (例如 GRUB 2) 並對它進行驗證;此開機載入程式接著會僅載入 SUSE 金鑰簽署的核心。SUSE 從全新安裝的 SLE11 SP3 開始提供此功能,並啟用 UEFI 安全開機。
信任使用者的類型有兩種:
第一種是擁有金鑰的使用者。平台金鑰 (PK) 幾乎允許所有作業。金鑰交換金鑰 (KEK) 允許 PK 允許的所有作業,變更 PK 除外。
第二種是擁有實際存取機器權限的任何人。擁有實際存取機器權限的使用者可以將機器重新開機並設定 UEFI。
UEFI 提供兩種類型的變數來滿足那些使用者的需求:
第一類變數即「已驗證的變數」,它們可從開機程序 (即「開機服務環境」) 和執行中作業系統中更新。僅當簽署變數新值的金鑰是用於簽署變數舊值的相同金鑰時,才能進行更新。並且它們只能附加至或變更為序號更高的值。
第二種稱為「僅開機服務變數」。開機程序期間執行的所有程式碼都可以存取這些變數。在開機程序結束之後並在作業系統啟動之前,開機載入程式必須呼叫
ExitBootServices
呼叫。此後,這些變數無法再存取,且作業系統無法更改它們。
各種 UEFI 金鑰清單屬於第一種類型,因為此類型允許線上更新與新增金鑰、驅動程式和韌體指紋,以及將它們列入黑名單。第二類變數即「僅開機服務變數」。該類變數可協助您以安全且支援開放原始碼的方式實作安全開機,因此符合 GPLv3 要求。
SUSE 首先啟動 shim
,它是一個小而簡單的 EFI 開機載入程式,由 SUSE 和 Microsoft 簽署。
這允許 shim
載入並執行。
shim
隨後會繼續驗證它要載入的開機載入程式是否受信任。在預設情況下,shim
將會使用內嵌於其主體的獨立 SUSE 證書。此外,shim
將允許「註冊」額外的金鑰,並覆寫預設的 SUSE 金鑰。在下文中,我們稱它們為「機器擁有者金鑰」,或簡稱為 MOK。
接著,開機載入程式會在驗證核心後將其開機,核心繼而將對模組執行同樣的操作。
13.1.2 MOK (機器擁有者金鑰) #
若要取代特定核心、驅動程式或開機程序中的其他元件,必須使用機器擁有者金鑰 (MOK)。mokutil
工具可協助您管理 MOK。
您可以使用 mokutil
建立 MOK 註冊要求。該要求儲存在名為 MokNew
的 UEFI 執行時 (RT) 變數中。在下一次開機期間,shim
開機載入程式會偵測 MokNew
並載入 MokManager
,這將為您提供幾個選項。您可以使用 和 選項來將金鑰新增至 MokList。使用 選項可從 MokNew
變數複製金鑰。
通常會在 shim 無法載入 grub2
並退回到載入 MokManager 時執行從磁碟註冊金鑰。由於 MokNew
尚不存在,您可以選擇在 UEFI 分割區上尋找金鑰。
13.1.3 將自訂核心開機 #
下文以 https://en.opensuse.org/openSUSE:UEFI#Booting_a_custom_kernel 為基礎。
安全開機不會阻止您使用自我編譯的核心。您必須使用您自己的證書簽署該核心,並讓韌體或 MOK 知道該證書。
建立用於簽署的自訂 X.509 金鑰和證書:
openssl req -new -x509 -newkey rsa:2048 -keyout key.asc \ -out cert.pem -nodes -days 666 -subj "/CN=$USER/"
如需建立證書的詳細資訊,請參閱 https://en.opensuse.org/openSUSE:UEFI_Image_File_Sign_Tools#Create_Your_Own_Certificate。
將金鑰和證書封裝成 PKCS#12 結構:
tux >
openssl pkcs12 -export -inkey key.asc -in cert.pem \ -name kernel_cert -out cert.p12產生 NSS 資料庫以與
pesign
配合使用:tux >
certutil -d . -N將 PKCS#12 中包含的金鑰和證書輸入到 NSS 資料庫中:
tux >
pk12util -d . -i cert.p12使用
pesign
以新簽名「保護」核心:tux >
pesign -n . -c kernel_cert -i arch/x86/boot/bzImage \ -o vmlinuz.signed -s列出核心影像上的簽名:
tux >
pesign -n . -S -i vmlinuz.signed此時,您可以如一般方式在
/boot
中安裝核心。因為核心現在已有自訂簽名,所以需要將用於簽署的證書輸入到 UEFI 韌體或 MOK 中。將證書轉換為 DER 格式以便輸入到韌體或 MOK 中:
tux >
openssl x509 -in cert.pem -outform der -out cert.der將證書複製到 ESP 以方便存取:
tux >
sudo
cp cert.der /boot/efi/使用
mokutil
自動啟動 MOK 清單。將證書輸入到 MOK 中:
tux >
mokutil --root-pw --import cert.der--root-pw
選項可讓root
使用者直接使用。檢查準備就緒、即待註冊的證書清單:
tux >
mokutil --list-new將系統重新開機;
shim
應會啟動 MokManager。您需要輸入root
密碼以確認將證書輸入到 MOK 清單中。檢查是否已註冊新輸入的金鑰。
tux >
mokutil --list-enrolled
或者,如果要手動啟動 MOK,請按照下面的程序操作:
重新開機
在 GRUB 2 功能表中,按「
c
」鍵。類型:
chainloader $efibootdir/MokManager.efi boot
選取「
」。導覽到
cert.der
檔案並按 Enter。遵循指示註冊金鑰。一般情況下,應按「
0
」後再按「y
」進行確認。或者,韌體功能表可能提供將新金鑰新增至簽名資料庫的方法。
13.1.4 使用非內建驅動程式 #
在啟用安全開機的情況下進行安裝的過程中,不支援新增非現成驅動程式 (即,不是 SUSE Linux Enterprise Server 隨附的驅動程式)。預設不信任用於 SolidDriver/PLDP 的簽署金鑰。
您可以透過兩種不同的方式,在啟用安全開機的情況下在安裝期間安裝協力廠商驅動程式。在這兩種情況下,都要:
在安裝之前,透過韌體或系統管理工具將需要的金鑰新增至韌體資料庫。此選項取決於您具體所用的硬體。如需詳細資訊,請諮詢您的硬體廠商。
使用 https://drivers.suse.com/ 上或您的硬體廠商提供的可開機驅動程式 ISO,於第一次開機時在 MOK 清單中註冊需要的金鑰。
若要使用可開機驅動程式 ISO 在 MOK 清單中註冊驅動程式金鑰,請執行以下步驟:
將上述 ISO 影像燒錄到空白 CD/DVD 媒體中。
使用新的 CD/DVD 媒體開始安裝,並準備好標準的安裝媒體或網路安裝伺服器的 URL。
如果您要進行網路安裝,請使用
install=
選項在指令行上輸入網路安裝來源的 URL。如果您是從光學媒體安裝,安裝程式會先從驅動程式套件開機,然後要求插入產品的第一張安裝光碟。
安裝時將會使用包含已更新驅動程式的 initrd。
如需詳細資訊,請參閱 https://drivers.suse.com/doc/Usage/Secure_Boot_Certificate.html。
13.1.5 功能和限制 #
以安全開機模式開機時,將會套用以下功能:
安裝到 UEFI 預設的開機載入程式位置,這是為了保留或還原 EFI 開機項目而採用的機制。
透過 UEFI 重新開機。
如果沒有可回復到的傳統的 BIOS,Xen 監管程式將使用 UEFI 開機。
支援 UEFI IPv6 PXE 開機。
UEFI 支援視訊模式,核心可以從 UEFI 取回視訊模式,以使用相同的參數設定 KMS 模式。
UEFI 支援從 USB 裝置開機。
以安全開機模式開機時,必須遵守以下限制:
為了確保無法輕易規避安全開機,當在安全開機模式下執行時,系統會停用部分核心功能。
必須簽署開機載入程式、核心和核心模組。
將會停用 Kexec 和 Kdump。
將會停用休眠 (暫停磁碟上的作業)。
無法存取
/dev/kmem
和/dev/mem
,即使以 root 使用者身分也不行。無法存取 I/O 埠,即使以 root 使用者身分也不行。所有 X11 圖形驅動程式都必須使用核心驅動程式。
不允許透過 sysfs 存取 PCI BAR。
無法使用 ACPI 中的
custom_method
。無法使用適用於 asus-wmi 模組的 debugfs。
acpi_rsdp
參數對核心沒有任何影響。
13.2 更多資訊 #
https://www.uefi.org — UEFI 首頁,您可在其中找到最新的 UEFI 規格。
Olaf Kirch 和 Vojtěch Pavlík 發佈的部落格文章 (上述章節主要取自這些文章):
https://en.opensuse.org/openSUSE:UEFI — UEFI 與 openSUSE。
14 開機載入程式 GRUB 2 #
本章介紹如何設定 SUSE® Linux Enterprise Server 中使用的開機載入程式 GRUB 2。GRUB 是傳統 GRUB 開機載入程式 (現在稱做「GRUB Legacy」) 的後繼產品。從 SUSE® Linux Enterprise Server 12 版本開始,就已使用 GRUB 2 做為預設的開機載入程式。產品中提供了一個 YaST 模組來進行最重要的設定。整個開機程序簡述於第 12 章 「開機過程簡介」。如需關於 UEFI 機器安全開機支援的詳細資料,請參閱第 13 章 「UEFI (整合可延伸韌體介面)」。
14.1 GRUB Legacy 與 GRUB 2 之間的主要差異 #
組態儲存在不同的檔案中。
支援更多的檔案系統 (例如 Btrfs)。
可以直接讀取 LVM 或 RAID 裝置上儲存的檔案。
使用者介面可翻譯,並可以改變主題。
包含一套用於載入模組的機制,以支援諸如檔案系統等的其他功能。
自動搜尋及產生其他核心與作業系統 (例如 Windows) 的開機項目。
包含一個類似於 Bash 的精簡主控台。
14.2 組態檔案結構 #
GRUB 2 的組態以下列檔案為基礎:
/boot/grub2/grub.cfg
此檔案包含 GRUB 2 功能表項目的組態。它取代了 GRUB Legacy 中的
menu.lst
。不要編輯grub.cfg
— 它是由指令grub2-mkconfig -o /boot/grub2/grub.cfg
自動產生的。/boot/grub2/custom.cfg
這個可選用檔案在開機時由
grub.cfg
直接獲取,可用於將自訂項目新增至開機功能表。從 SUSE Linux Enterprise Server 12 SP2 開始,使用grub-once
時也將剖析這些項目。/etc/default/grub
此檔案控制 GRUB 2 的使用者設定,通常包含背景和主題等其他環境設定。
/etc/grub.d/
下的程序檔在執行
grub2-mkconfig -o /boot/grub2/grub.cfg
指令期間,系統會讀取此目錄中的程序檔。主要組態檔案/boot/grub/grub.cfg
中整合了這些程序檔的指示。/etc/sysconfig/bootloader
此組態檔案儲存一些基本設定,例如開機載入程式類型,以及是否要啟用 UEFI 安全開機支援。
/boot/grub2/x86_64-efi
、/boot/grub2/power-ieee1275
、/boot/grub2/s390x
這些組態檔案包含特定於架構的選項。
GRUB 2 可以透過多種方式控制。現有組態啟動項目,可以從圖形功能表選取 (開頭顯示畫面)。組態從基於其他組態檔案編譯的檔案 /boot/grub2/grub.cfg
載入 (參閱下文)。所有 GRUB 2 組態檔案都視為系統檔案,編輯這些組態檔案需要有 root
權限。
手動編輯 GRUB 2 組態檔案後,您需要執行 grub2-mkconfig -o /boot/grub2/grub.cfg
才能啟用變更。但使用 YaST 變更組態時就不需要如此,因為 YaST 會自動執行 此指令。
14.2.1 /boot/grub2/grub.cfg
檔案 #
帶有開機功能表的圖形開頭顯示畫面以 GRUB 2 組態檔案 /boot/grub2/grub.cfg
為基礎,它包含關於可以透過功能表開機之所有分割區或作業系統的資訊。
系統每次開機時,GRUB 2 會直接從檔案系統載入功能表檔案。因此,在變更組態檔案後不需要重新安裝 GRUB 2。安裝或移除核心後,系統會自動重建 grub.cfg
。
grub.cfg
是執行 grub2-mkconfig -o /boot/grub2/grub.cfg
指令時,從檔案 /etc/default/grub
及 /etc/grub.d/
目錄中的程序檔編譯的。因此,切勿手動編輯該檔案,而應該編輯相關的來源檔案,或者依照第 14.3 節 「使用 YaST 設定開機載入程式」中所述,使用 YaST 的 模組來修改組態。
14.2.2 /etc/default/grub
檔案 #
此檔案包含 GRUB 2 的更多一般選項,例如,顯示功能表的時間,或者要開機的預設作業系統。若要列出所有可用選項,請查看以下指令的輸出:
tux >
grep "export GRUB_DEFAULT" -A50 /usr/sbin/grub2-mkconfig | grep GRUB_
除了已定義的變數外,使用者還可以引入自己的變數,日後在 /etc/grub.d
目錄下的程序檔內使用。
編輯 /etc/default/grub
後,請使用 grub2-mkconfig -o /boot/grub2/grub.cfg
更新主要組態檔案。
此檔案中設定的所有選項都是會影響所有開機項目的一般選項。透過 GRUB_*_XEN_* 組態選項可以設定 Xen 核心或 Xen 監管程式的特定選項。如需詳細資訊,請參閱下文。
GRUB_DEFAULT
設定預設會啟動的開機功能表項目。它的值可以是數值、功能表項目的完整名稱,或者「saved」。
GRUB_DEFAULT=2
會啟動第三個 (從零開始計數) 開機功能表項目。GRUB_DEFAULT="2>0"
會啟動第三個頂層功能表項目的第一個子功能表項目。GRUB_DEFAULT="Example boot menu entry"
會啟動名為「Example boot menu entry」的功能表項目。GRUB_DEFAULT=saved
會將grub2-once
或grub2-set-default
指令指定的項目開機。grub2-reboot
只設定下一次重新開機的預設開機項目,而grub2-set-default
設定發生變更之前的預設開機項目。grub2-editenv list
列出下一個開機項目。GRUB_HIDDEN_TIMEOUT
等待使用者按某個鍵的指定秒數。在此期間,除非使用者按下某個鍵,否則不顯示功能表。如果使用者在指定的時間內未按任何鍵,控制權將移交給
GRUB_TIMEOUT
。GRUB_HIDDEN_TIMEOUT=0
首先會檢查是否按下了 Shift,如果是,則顯示開機功能表,否則會立即啟動預設的功能表項目。如果 GRUB 2 只識別了一個可開機作業系統,則預設行為就是如此。GRUB_HIDDEN_TIMEOUT_QUIET
如果指定
false
,那麼當啟動了GRUB_HIDDEN_TIMEOUT
功能時,系統會在一個空白螢幕上顯示倒數計時器。GRUB_TIMEOUT
在自動啟動預設開機項目之前,開機功能表顯示的時間期限,以秒為單位。如果按下某個鍵,則會取消逾時,GRUB 2 將等待您手動完成選擇。如果指定
GRUB_TIMEOUT=-1
,則在您手動選取開機項目之前,功能表會一直顯示。GRUB_CMDLINE_LINUX
此行中的項目將新增到正常和復原模式之開機項目的末尾。使用它可以將核心參數新增至開機項目。
GRUB_CMDLINE_LINUX_DEFAULT
與
GRUB_CMDLINE_LINUX
一樣,但只能在正常模式下附加項目。GRUB_CMDLINE_LINUX_RECOVERY
與
GRUB_CMDLINE_LINUX
一樣,但只能在復原模式下附加項目。GRUB_CMDLINE_LINUX_XEN_REPLACE
此項目將徹底取代所有 Xen 開機項目的
GRUB_CMDLINE_LINUX
參數。GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT
與
GRUB_CMDLINE_LINUX_XEN_REPLACE
一樣,但它只會取代GRUB_CMDLINE_LINUX_DEFAULT
的參數。GRUB_CMDLINE_XEN
此項目只為 Xen 客體核心指定核心參數 — 工作原理與
GRUB_CMDLINE_LINUX
相同。GRUB_CMDLINE_XEN_DEFAULT
與
GRUB_CMDLINE_XEN
一樣 — 工作原理與GRUB_CMDLINE_LINUX_DEFAULT
相同。GRUB_TERMINAL
啟用並指定輸入/輸出終端機裝置。可以是
console
(PC BIOS 和 EFI 主控台)、serial
(序列終端機)、ofconsole
(開放韌體主控台) 或預設值gfxterm
(圖形模式輸出)。用引號括住所需的多個選項可以啟用多個裝置,例如GRUB_TERMINAL="console serial"
。GRUB_GFXMODE
gfxterm
圖形終端機使用的解析度。請注意,您只能使用您的圖形卡 (VBE) 支援的模式。預設值為「auto」,即嘗試選取偏好的解析度。在 GRUB 2 指令行中輸入videoinfo
可顯示 GRUB 2 可使用的螢幕解析度。當 GRUB 2 開機功能表螢幕顯示時,輸入 c 可存取指令行。您還可以在解析度設定後面附加一個值來指定色彩深度,例如
GRUB_GFXMODE=1280x1024x24
。GRUB_BACKGROUND
設定
gfxterm
圖形終端機的背景影像。該影像必須是 GRUB 2 在開機時可讀的檔案,並且必須以.png
、.tga
、.jpg
或.jpeg
字尾結尾。必要時,系統會縮放該影像以適合螢幕大小。GRUB_DISABLE_OS_PROBER
如果將此選項設定為
true
,將會停用自動搜尋其他作業系統的功能。系統只會偵測/boot/
中的核心影像,以及/etc/grub.d/
中您自己的程序檔內的選項。SUSE_BTRFS_SNAPSHOT_BOOTING
如果將此選項設定為
true
,GRUB 2 可直接開機至 Snapper 快照。如需詳細資訊,請參閱 第 7.3 節 「透過從快照開機來執行系統復原」。
如需選項的完整清單,請參閱 GNU GRUB 手冊。
14.2.3 /etc/grub.d
中的程序檔 #
在執行 grub2-mkconfig -o /boot/grub2/grub.cfg
指令期間,系統會讀取此目錄中的程序檔。程序檔中的指令會整合到 /boot/grub2/grub.cfg
中。grub.cfg
中功能表項目的順序由此目錄中檔案的執行順序來決定。具有前置編號的檔案先執行,從最小的編號開始。00_header
在 10_linux
之前執行,而後者又在 40_custom
之前執行。如果存在採用字母名稱的檔案,這些檔案將在採用編號命名的檔案之後執行。在執行 grub2-mkconfig
期間,只有可執行檔才能在 grub.cfg
中產生輸出。依預設,/etc/grub.d
目錄中的所有檔案都是可執行檔。
grub.cfg
中
由於每次執行 grub2-mkconfig
時都會重新編譯 /boot/grub2/grub.cfg
,因此所有自訂內容都會遺失。如果要將您的行直接插入到 /boot/grub2/grub.cfg
中,並且希望在執行 grub2-mkconfig
之後它們不會遺失,請將這些行插入到下面兩行之間
### BEGIN /etc/grub.d/90_persistent ###
和
### END /etc/grub.d/90_persistent ###
90_persistent
程序檔可確保此類內容會保留下來。
下面列出了最重要的程序檔:
00_header
設定環境變數,例如系統檔案位置、顯示設定、主題和以前儲存的項目。它還可以輸入
/etc/default/grub
中儲存的優先設定。通常,您不需要變更此檔案。10_linux
識別根裝置上的 Linux 核心,並建立相關的功能表項目,其中包括關聯的復原模式選項 (如果已啟用)。主功能表頁面中只顯示最新核心,其他核心包含在子功能表中。
30_os-prober
此程序檔使用
os-prober
來搜尋 Linux 和其他作業系統,並將結果列於 GRUB 2 功能表中。其中有些區段用於識別其他特定作業系統,例如 Windows 或 macOS。40_custom
使用此檔案可以方便地在
grub.cfg
中包含自訂開機項目。切勿變更開頭的exec tail -n +3 $0
部分。
處理順序依據前置編號確定,編號最小的程序檔最先執行。如果多個程序檔的前置編號相同,則按整個名稱的字母順序來決定執行順序。
/boot/grub2/custom.cfg
如果您建立了 /boot/grub2/custom.cfg
並在其中填入了內容,則開機時系統會自動將其包含到 /boot/grub40/grub.cfg
中緊接在 40_custom 後面的位置。
14.2.4 BIOS 磁碟機與 Linux 裝置之間的映射 #
在 GRUB Legacy 中,device.map
組態檔案用於依據 BIOS 磁碟機代號衍生 Linux 裝置名稱。不一定總能猜對 BIOS 磁碟機與 Linux 裝置之間的映射。例如,如果在 BIOS 組態中交換了 IDE 和 SCSI 驅動器的開機順序,那麼 GRUB Legacy 就會使用錯誤的順序。
GRUB 2 在產生 grub.cfg
時使用裝置 ID 字串 (UUID) 或檔案系統標籤,因此避免了此問題。GRUB 2 公用程式會即時建立一個暫存裝置對應,這通常足以滿足需要,在單磁碟系統中更是如此。
但是,如果您需要覆寫 GRUB 2 的自動裝置對應機制,請建立自訂對應檔案 /boot/grub2/device.map
。下面的範例將變更映射,使 DISK 3
成為開機磁碟。請注意,GRUB 2 分割區編號以 1
開始,而不是像 GRUB Legacy 中那樣以 0
開始。
(hd1) /dev/disk-by-id/DISK3 ID (hd2) /dev/disk-by-id/DISK1 ID (hd3) /dev/disk-by-id/DISK2 ID
14.2.6 設定開機密碼 #
即使在作業系統開機之前,GRUB 2 也支援對檔案系統的存取。沒有 root 權限的使用者可以存取 Linux 系統中的檔案,而在系統開機後,他們將無權存取這些檔案。若要阻擋此類型的存取,或防止使用者啟動特定的功能表項目,請設定開機密碼。
如果設定了開機密碼,則每次開機時都需要輸入該密碼,這意味著系統不會自動開機。
使用
grub2-mkpasswd-pbkdf2
來加密密碼:tux >
sudo
grub2-mkpasswd-pbkdf2 Password: **** Reenter password: **** PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...將產生的字串連同
set superusers
指令一起貼到檔案/etc/grub.d/40_custom
中。set superusers="root" password_pbkdf2 root grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...
若要將變更輸入主要組態檔案中,請執行:
tux >
sudo
grub2-mkconfig -o /boot/grub2/grub.cfg
在重新開機後,當您嘗試啟動某個功能表項目時,系統會提示您輸入使用者名稱和密碼。輸入 root
以及您在執行 grub2-mkpasswd-pbkdf2
指令期間輸入的密碼。如果身分證明正確,系統將啟動選定的開機項目。
如需詳細資訊,請參閱 https://www.gnu.org/software/grub/manual/grub.html#Security。
14.3 使用 YaST 設定開機載入程式 #
在 SUSE Linux Enterprise Server 系統中,設定開機載入程式一般選項最簡單的方法是使用 YaST 模組。在 內,選取「 › 」。模組會顯示系統目前的開機載入程式組態,並允許您進行變更。
使用「
」索引標籤可以檢視和變更關於類型、位置和進階載入程式設定的設定。您可以選擇要在標準模式還是 EFI 模式下使用 GRUB 2。如果您使用的是 EFI 系統,則只能安裝 GRUB2-EFI,否則您的系統不再能夠開機。
若要重新安裝開機載入程式,請確定變更 YaST 中的一個設定,然後將其復原。例如,若要重新安裝 GRUB2-EFI,請先選取
,然後立即重新切換至 。否則,開機載入程式可能只會部分重新安裝。
若要使用此處未列出的開機載入程式,請選取「
」。請先詳細閱讀開機載入程式的說明文件,再選取這個選項。14.3.1 開機載入程式位置和開機代碼選項 #
開機載入程式的預設位置為主開機記錄 (MBR) 或 /
分割區的開機磁區,具體取決於分割區設定。若要修改開機載入程式的位置,請執行下列步驟:
選取「
」索引標籤,然後為「 」選擇以下其中一個選項:選取此選項將在包含
/boot
目錄的磁碟 MBR 中安裝開機載入程式。通常,這將是掛接到/
的磁碟,但如果/boot
掛接到其他磁碟上的獨立分割區中,則將會使用該磁碟的 MBR。這會在
/
分割區的開機磁區中安裝開機載入程式。這個選項可讓您手動指定開機載入程式的位置。
按一下「
」以套用變更。
索引標籤包含以下其他選項:
啟用包含
/boot
目錄的分割區。對於 POWER 系統,則會啟用 PReP 分割區。此選項用於具有舊 BIOS 的系統和/或舊式作業系統,因為它們可能無法從非使用中的分割區開機。您可以放心地啟用此選項。如果 MBR 包含自訂的「非 GRUB」代碼,此選項會以不受作業系統限制的泛型代碼取代該代碼。如果您停用此選項,系統可能變得無法開機。
啟動可支援受信任運算功能的 TrustedGRUB2(受信任的平台摸組 (Trusted Platform Module, TPM))。如需詳細資訊,請參閱 https://github.com/Sirrix-AG/TrustedGRUB2。
區段包含以下選項:
適用於傳統舊版 BIOS 開機。
適用於 UEFI 開機。
如果您已有一個正常運作的系統,這通常是最適合的選項。
大多數情況下,YaST 預設會使用適合的選項。
14.3.2 調整磁碟順序 #
如果您的電腦有多個硬碟,您可以指定磁碟的開機順序。如果從 MBR 開機,將在清單中的第一個磁碟中安裝 GRUB 2。預設在該磁碟中安裝 SUSE Linux Enterprise Server。清單的其餘部分是有關 GRUB 2 的裝置對應程式的提示 (請參閱第 14.2.4 節 「BIOS 磁碟機與 Linux 裝置之間的映射」)。
通常情況下,預設值幾乎對所有部署都有效。如果您錯誤地變更了磁碟的開機順序,系統下次重新開機時可能無法開機。例如,如果清單中的第一個磁碟不在 BIOS 開機序列中,並且清單中的其他磁碟有空白 MBR,系統將無法開機。
開啟「
」索引標籤。按一下
。如果列出超過一個磁碟,請選擇一個磁碟,然後按一下「
」或「 」重新排列顯示磁碟的順序。按兩次「
」儲存變更。
14.3.3 設定進階選項 #
可以透過
索引標籤來設定進階開機參數。14.3.3.1 索引標籤#
輸入新值或者用滑鼠按住相應的方向鍵,以變更「
」的值。如果選取該選項,開機載入程式將會搜尋其他系統 (例如 Windows) 或其他 Linux 安裝。
隱藏開機功能表並使用預設項目開機。
從「「預設開機區段」」清單中選取所需項目。請注意,開機項目名稱中的「>」符號用於分隔開機區段及其子區段。
使用一個附加的密碼保護開機載入程式和系統。如需手動設定的詳細資料,請參閱第 14.2.6 節 「設定開機密碼」。如果啟用此選項,則每次開機時都需要輸入該密碼,這意味著系統不會自動開機。但是,如果您更偏好 GRUB 1 的行為方式,請額外啟用 。使用此設定時,任何人都可以選取開機項目並將系統開機,僅在修改開機項目時,才需要提供 GRUB 2
root
使用者的密碼。
14.3.3.2 索引標籤#
在這裡指定選擇性的核心參數,以啟用/停用系統功能、新增驅動程式,等等。
SUSE 針對為防禦 CPU 旁路攻擊而部署的所有軟體緩和措施發行了一或多個核心開機指令行參數。其中一些參數可能會導致效能損失。請依據您的設定選擇以下其中一個選項,以在安全性和效能之間取得平衡:
啟用您的 CPU 型號所需的全部緩和措施,但不能防禦跨 CPU 線串的攻擊。此設定可能會在一定程度上影響效能,具體視您的工作負載而定。 :
提供整套可用的安全性緩和措施。啟用您的 CPU 型號所需的全部緩和措施。此外,它還會停用同步多重線串,以避免遭到跨多個 CPU 線串發起的旁路攻擊。此設定可能會進一步影響效能,具體視您的工作負載而定。 :
停用所有緩和措施。CPU 可能會遭到旁路攻擊,具體視 CPU 型號而定。此設定不會對效能造成任何影響。 :
不設定任何緩和措施層級。請使用核心指令行選項手動指定 CPU 緩和措施。 :
如果核取該選項,則開機功能表會顯示在圖形開頭顯示畫面中,而不是以文字模式顯示。依預設,系統會自動設定開機螢幕的解析度,但您可以透過
手動進行設定。可以使用 檔案選擇器指定圖形主題定義檔案。請僅在您想要套用自己的自訂主題時,才變更此設定。如果您的機器是透過序列控制台控制的,請啟用此選項並指定以何速度來使用哪一個 COM 埠。請參閱
info grub
或 http://www.gnu.org/software/grub/manual/grub.html#Serial-terminal
14.4 IBM Z 上終端機使用方式的差異 #
在 3215 和 3270 終端機上,游標的移動方式以及在 GRUB 2 中發出編輯指令的方式存在一些差異和限制。
14.4.1 限制 #
- 互動
互動性存在嚴重的限制。輸入時通常不能獲得直觀的回饋。若要查看游標所在的位置,請輸入底線 (_)。
注意:3270 與 3215 的對比與 3215 終端機相比,3270 終端機在顯示和重新整理螢幕方面要好得多。
- 游標移動方式
無法進行「傳統的」游標移動操作。Alt、Meta、Ctrl 和游標鍵不起作用。若要移動游標,請使用第 14.4.2 節 「按鍵組合」中列出的按鍵組合。
- 插入記號
插入記號 (^) 用做控制字元。若要輸入文字 ^ 後再輸入一個字母,請依序輸入 ^、^ 和字母。
- 輸入
將無法使用 Enter 鍵,請改用 ^–J。
14.4.2 按鍵組合 #
常用的替代按鍵: |
^–J |
確認 (「Enter」) |
^–L |
中止,返回前一「狀態」 | |
^–I |
Tab 鍵補齊 (在編輯模式與外圍程序模式下) | |
功能表模式下可用的按鍵: |
^–一個 |
到第一個項目 |
^–E |
到最後一個項目 | |
^–P |
到上一個項目 | |
^–N |
到下一個項目 | |
^–G |
向上一頁 | |
^–C |
向下一頁 | |
^–F |
將選定的項目開機或進入子功能表 (與 ^–J 的作用相同) | |
E |
編輯選定的項目 | |
C |
進入 GRUB-Shell | |
編輯模式下可用的按鍵: |
^–P |
向上移動一行 |
^–N |
向下移動一行 | |
^–B |
向左移動一格 | |
^–F |
向右移動一格 | |
^–一個 |
到行首 | |
^–E |
到行尾 | |
^–H |
退格 | |
^–D |
刪除 | |
^–K |
刪除到行尾 | |
^–Y |
恢復刪除 | |
^–O |
插入新行 | |
^–L |
重新整理螢幕 | |
^–X |
開機項目 | |
^–C |
進入 GRUB-Shell | |
指令行模式下可用的按鍵: |
^–P |
上一個指令 |
^–N |
歷程中的下一個指令 | |
^–一個 |
到行首 | |
^–E |
到行尾 | |
^–B |
向左移動一格 | |
^–F |
向右移動一格 | |
^–H |
退格 | |
^–D |
刪除 | |
^–K |
刪除到行尾 | |
^–U |
刪除行 | |
^–Y |
恢復刪除 |
14.5 實用的 GRUB 2 指令 #
grub2-mkconfig
依據
/etc/default/grub
以及/etc/grub.d/
中的程序檔產生新的/boot/grub2/grub.cfg
。grub2-mkconfig -o /boot/grub2/grub.cfg
提示:語法檢查執行不帶任何參數的
grub2-mkconfig
會將組態列印至 STDOUT 以供使用者檢查。在寫入/boot/grub2/grub.cfg
後使用grub2-script-check
可以檢查其語法。重要:grub2-mkconfig
無法修復 UEFI 安全開機表如果您使用的是 UEFI 安全開機,而您的系統無法再正常連接 GRUB 2,則您可能需要另外重新安裝 Shim 並重新產生 UEFI 開機表。為此請使用:
root #
shim-install --config-file=/boot/grub2/grub.cfggrub2-mkrescue
為安裝的 GRUB 2 組態建立一個可開機的救援影像。
grub2-mkrescue -o save_path/name.iso iso
grub2-script-check
檢查指定檔案中有無語法錯誤。
grub2-script-check /boot/grub2/grub.cfg
grub2-once
僅設定下次開機的預設開機項目。若要取得可用開機項目的清單,請使用
--list
選項。grub2-once number_of_the_boot_entry
提示:grub2-once
說明不使用任何選項呼叫該程式可以取得所有可能選項的完整清單。
14.6 更多資訊 #
如需關於 GRUB 2 更進一步的資訊,請參閱 https://www.gnu.org/software/grub/。另請參閱 grub
info 頁面。您也可以在「技術資訊搜尋」中搜尋關鍵字「GRUB 2」,取得關於特殊問題的資訊,網址是 https://www.suse.com/support。
15 systemd
精靈 #
systemd
負責啟始化系統,它的程序 ID 為 1。systemd
由核心直接啟動,訊號 9 (通常會終止程序) 對它不起作用。所有其他程式或由 systemd
直接啟動,或由它的其中一個子程序啟動。systemd
取代了 System V init 精靈,並且透過支援 init 程序檔與 System V init 完全相容。
systemd
的主要優點是透過平行化服務啟動,大大加快了開機速度。另外,systemd
僅在確實需要服務時才會啟動該服務。即不會在開機時無條件啟動精靈,而是在第一次需要時才會啟動。systemd
還支援核心控制群組 (cgroup)、建立快照和還原系統狀態。如需詳細資訊,請造訪 http://www.freedesktop.org/wiki/Software/systemd/。
15.1 systemd
概念 #
以下幾節介紹 systemd
背後的概念。
systemd
是適用於 Linux 的系統和工作階段管理員,它與 System V 及 LSB init 程序檔相容。systemd
的主要功能包括:
平行化能力
使用通訊端和 D-Bus 啟用來啟動服務
依需求啟動精靈
使用 Linux cgroup 追蹤程序
建立快照和還原系統狀態
維護掛接點和自動掛接點
實作事務相關型複雜的服務控制邏輯
15.1.1 單位檔案 #
單位組態檔案包含有關以下項目的資訊:服務、通訊端、裝置、掛接點、自動掛接點、交換檔案或分割區、啟動目標、監控的檔案系統路徑、受 systemd
控制和監督的計時器、暫時系統狀態快照、資源管理片段,或一組外部建立的程序。
「單位檔案」是 systemd
用於表示下列項目的通用術語:
服務: 程序相關資訊 (例如執行精靈);檔案名以 .service 結尾
目標: 用於將單位分組以及在啟動期間用作同步點;檔案名以 .target 結尾
插槽: IPC 或網路插槽或檔案系統 FIFO 的相關資訊,適用於插槽型啟動 (如
inetd
);檔案名以 .socket 結尾路徑: 用於觸發其他單位 (例如,在檔案變更時執行服務);檔案名以 .path 結尾
計時器: 受控計時器的相關資訊,適用於計時器型啟動;檔案名以 .timer 結尾
掛接點: 通常由 fstab 產生器自動產生;檔案名以 .mount 結尾
自動掛接點: 檔案系統自動掛接點的相關資訊;檔案名以 .automount 結尾
Swap: 用於記憶體分頁之交換裝置或檔案相關資訊;檔案名以 .swap 結尾
裝置: sysfs/udev(7) 裝置樹中所展示之裝置的相關資訊;檔案名以 .automount 結尾
範圍/片段: 分階層管理程序群組之資源的概念;檔案名以 .scope/.slice 結尾
如需 systemd
單位檔案的詳細資訊,請參閱 http://www.freedesktop.org/software/systemd/man/systemd.unit.html
15.2 基本用法 #
System V init 系統使用若干個指令來處理服務 - init 程序檔、insserv
、telinit
及其他。systemd
可簡化服務管理,因為對於大部分處理服務的任務,只需記住一條指令:systemctl
。它使用「
指令加子指令」表示法,與 git
或 zypper
相似:
systemctl GENERAL OPTIONS SUBCOMMAND SUBCOMMAND OPTIONS
如需完整的手冊,請參閱 man 1 systemctl
。
如果輸出進入終端機 (而不是進入管線或檔案之類),systemd
指令依預設會將長輸出傳送到頁面巡覽區。使用 --no-pager
選項可關閉切換模式。
systemd
還支援 bash 補齊,允許您輸入子指令的頭幾個字母,然後按 →|。此功能僅可用於 bash
外圍程序,並且需要安裝套件 bash-completion
。
15.2.1 管理正在執行系統中的服務 #
用於管理服務的子指令與透過 System V init 管理服務的子指令相同 (start
、stop
、...)。下面列出了服務管理指令的通用語法:
systemd
systemctl reload|restart|start|status|stop|... MY_SERVICE(S)
- System V init
rcMY_SERVICE(S) reload|restart|start|status|stop|...
systemd
可讓您一次管理多個服務。它不是像 System V init 那樣依次執行 init 程序檔,而是執行類似如下的指令:
tux >
sudo
systemctl start MY_1ST_SERVICE MY_2ND_SERVICE
若要列出系統上所有可用的服務:
tux >
sudo
systemctl list-unit-files --type=service
下表列出了 systemd
和 System V init 最重要的服務管理指令:
任務 |
|
System V init 指令 |
---|---|---|
啟動: |
start |
start |
停止: |
stop |
stop |
重新啟動: 關閉服務,然後啟動這些服務。如果某項服務並未執行,則會將其啟動。 |
restart |
restart |
有條件地重新啟動: 如果服務目前正在執行中,則予以重新啟動。對於未在執行中的服務,則不執行任何動作。 |
try-restart |
try-restart |
重新載入:
指示服務重新載入它們的組態檔案,而不中斷操作。使用案例:指示 Apache 重新載入修改過的 |
reload |
reload |
重新載入或重新啟動: 如果服務支援重新載入,則重新載入服務,否則重新啟動服務。如果某項服務並未執行,則會將其啟動。 |
reload-or-restart |
n/a |
有條件地重新載入或重新啟動: 如果服務支援重新載入,則重新載入服務,否則重新啟動那些目前正在執行的服務。對於未在執行中的服務,則不執行任何動作。 |
reload-or-try-restart |
n/a |
取得詳細的狀態資訊:
列出服務狀態的相關資訊。 |
status |
status |
取得簡要的狀態資訊: 顯示服務是否處於使用中狀態。 |
is-active |
status |
15.2.2 永久啟用/停用服務 #
上一節中提及的服務管理指令可讓您操作目前工作階段的服務。systemd
還可讓您永久啟用或停用服務,使之可以按要求自動啟動,或者始終無法使用。此操作可以透過 YaST 或在指令行上執行。
15.2.2.1 在指令行上啟用/停用服務 #
下表列出了 systemd
和 System V init 用於啟用和停用服務的指令:
在指令行上啟用服務時,服務不會自動啟動。系統將其排定為下一次系統啟動或執行層級/目標變更時啟動。若要在啟用服務之後立即啟動它,請明確執行 systemctl start MY_SERVICE
或 rc MY_SERVICE start
。
任務 |
|
System V init 指令 |
---|---|---|
啟用: |
|
|
停用: |
|
|
檢查: 顯示是否已啟用某個服務。 |
|
|
重新啟用: 與重新啟動服務相似,此指令先停用服務,然後再啟用該服務。若要使用服務的預設值重新啟用服務,可使用此任務。 |
|
無 |
遮罩: 「 停用」某項服務之後,仍然可以手動啟動它。若要徹底停用服務,您需要予以遮罩。使用須謹慎。 |
|
無 |
取消遮罩: 遮罩某項服務之後,惟有先將其取消遮罩,才能再次予以使用。 |
|
無 |
15.3 系統啟動和目標管理 #
啟動和關閉系統的整個程序由 systemd
維護。依此觀點,核心可以視為背景程序,以維護所有其他程序,並根據其他程式的要求來調整 CPU 時間和硬體存取。
15.3.1 目標與執行層級的比較 #
使用 System V init 時,系統將開機進入「
執行層級」。執行層級定義了系統的啟動方式,以及在所執行的系統中可以使用哪些服務。執行層級標有編號;最常見的執行層級是 0
(關閉系統)、3
(多重使用者,包含網路) 和 5
(多重使用者,包含網路及顯示管理員)。
systemd
使用所謂的「目標單位」引入新的概念。不過,它仍然與執行層級概念完全相容。目標單位是有名稱而不是有編號的,它有多個作用。例如,目標 local-fs.target
和 swap.target
掛接本地檔案系統和交換空間。
目標 graphical.target
提供包含網路和顯示管理員功能的多重使用者系統,與執行層級 5 相當。複雜的目標,例如 graphical.target
透過結合其他目標的子集用作「
中繼」目標。因為 systemd
能夠組合現有目標,便於建立自訂目標,因此提供了極大的靈活性。
下列清單顯示了最重要的 systemd
目標單位。如需完整清單,請參閱 man 7 systemd.special
。
systemd
目標單位 #default.target
預設開機的目標。這並非「 真實」目標,而是一個符號連結,指向
graphic.target
之類的另一個目標。可透過 YaST 永久變更 (請參閱第 15.4 節 「使用 YaST 管理服務」)。若要為某個工作階段變更它,請在開機提示處使用核心參數systemd.unit=MY_TARGET.target
。emergency.target
在主控台上啟動緊急外圍程序。請僅在開機提示符處以如下格式使用它:
systemd.unit=emergency.target
。graphical.target
啟動包含網路、多重使用者支援和顯示管理員功能的系統。
halt.target
關閉系統。
mail-transfer-agent.target
啟動傳送和接收郵件所需的所有服務。
multi-user.target
啟動包含網路的多重使用者系統。
reboot.target
系統重新開機。
rescue.target
啟動不包含網路的單一使用者系統。
為了保持與 System V init 執行層級系統的相容,systemd
提供了名為 runlevelX.target
的特殊目標,對應於編號為 X 的相應執行層級。
如果您要知道目前的目標,請使用指令:systemctl get-default
System V 執行層級 |
|
用途 |
---|---|---|
0 |
|
關閉系統 |
1, S |
|
單一使用者模式 |
2 |
|
本地多重使用者,不包含遠端網路 |
3 |
|
完整的多重使用者,包含網路 |
4 |
|
未使用/使用者定義 |
5 |
|
完整的多重使用者,包含網路及顯示管理員 |
6 |
|
系統重新開機 |
systemd
會忽略 /etc/inittab
System V init 系統中的執行層級在 /etc/inittab
中設定。systemd 不使用此組態。如需如何建立您自己的可開機目標的指示,請參閱第 15.5.4 節 「建立自訂目標」。
15.3.1.1 用於變更目標的指令 #
請使用下列指令來操作目標單位:
任務 |
|
System V init 指令 |
---|---|---|
變更目前的目標/執行層級 |
|
|
變更為預設目標/執行層級 |
|
無 |
取得目前的目標/執行層級 |
對於 |
或
|
永久性變更預設的執行層級 |
使用服務管理員或執行下列指令:
|
使用服務管理員或變更以下行
(位於 |
變更目前開機程序的預設執行層級 |
在開機提示的選項中輸入下列文字:
|
在開機提示中輸入所需的執行層級編號。 |
顯示目標/執行層級的相依性 |
「Requires」 會列出硬相依性 (必須解析的相依性),而 「Wants」 則列出軟相依性 (可行時解析的相依性)。 |
無 |
15.3.2 系統啟動除錯 #
systemd
針對系統啟動過程提供了分析方法。您可以查看所有服務及其狀態的清單 (而不必剖析 /var/log/
)。systemd
還允許您掃描啟動程序,以瞭解每項服務耗費多長時間啟動。
15.3.2.1 檢視服務的啟動情況 #
若要檢閱自從系統開機以來已啟動的完整服務清單,請輸入指令 systemctl
。這將列出所有使用中的服務,如下方所述 (已縮短)。若要獲得特定服務的詳細資訊,請使用 systemctl status MY_SERVICE
。
root #
systemctl
UNIT LOAD ACTIVE SUB JOB DESCRIPTION
[...]
iscsi.service loaded active exited Login and scanning of iSC+
kmod-static-nodes.service loaded active exited Create list of required s+
libvirtd.service loaded active running Virtualization daemon
nscd.service loaded active running Name Service Cache Daemon
chronyd.service loaded active running NTP Server Daemon
polkit.service loaded active running Authorization Manager
postfix.service loaded active running Postfix Mail Transport Ag+
rc-local.service loaded active exited /etc/init.d/boot.local Co+
rsyslog.service loaded active running System Logging Service
[...]
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
161 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
若要限制為輸出無法啟動的服務,請使用 --failed
選項:
root #
systemctl --failed
UNIT LOAD ACTIVE SUB JOB DESCRIPTION
apache2.service loaded failed failed apache
NetworkManager.service loaded failed failed Network Manager
plymouth-start.service loaded failed failed Show Plymouth Boot Screen
[...]
15.3.2.2 啟動時間除錯 #
為了對系統啟動時間除錯,systemd
提供了 systemd-analyze
指令。它會顯示總啟動時間以及按啟動時間排序的服務清單,還可以產生 SVG 圖,其中顯示各服務相對於其他服務所耗費的啟動時間。
- 列出系統啟動時間
root #
systemd-analyze Startup finished in 2666ms (kernel) + 21961ms (userspace) = 24628ms- 列出服務啟動時間
root #
systemd-analyze blame 15.000s backup-rpmdb.service 14.879s mandb.service 7.646s backup-sysconfig.service 4.940s postfix.service 4.921s logrotate.service 4.640s libvirtd.service 4.519s display-manager.service 3.921s btrfsmaintenance-refresh.service 3.466s lvm2-monitor.service 2.774s plymouth-quit-wait.service 2.591s firewalld.service 2.137s initrd-switch-root.service 1.954s ModemManager.service 1.528s rsyslog.service 1.378s apparmor.service [...]- 服務啟動時間圖
root #
systemd-analyze plot > jupiter.example.com-startup.svg
15.3.2.3 檢視完整的啟動程序 #
上面的指令行出了已啟動的服務及其啟動時間。如需更詳細的綜覽,請在開機提示符處指定以下參數,以指示 systemd
建立完整啟動程序的詳細記錄。
systemd.log_level=debug systemd.log_target=kmsg
現在,systemd
會將記錄訊息寫入核心環緩衝區。該緩衝區可透過 dmesg
檢視:
tux >
dmesg -T | less
15.3.3 System V 相容性 #
Systemd
與 System V 相容,因此,您仍可以使用現有的 System V init 程序檔。但是,至少有一個已知問題會導致 System V init 程序檔不能立即與 systemd
配合使用:透過 init 程序檔中的 su
或 sudo
以其他使用者身分啟動服務會導致程序檔失敗,產生「拒絕存取」錯誤。
使用 su
或 sudo
變更使用者時,會啟動 PAM 工作階段。完成 init 程序檔後會終止此工作階段。因此,init 程序檔啟動的服務也會終止。若要解決此問題,請執行下列步驟:
建立與 init 程序檔同名、副檔名為
.service
的服務檔案包裝程式。[Unit] Description=DESCRIPTION After=network.target [Service] User=USER Type=forking1 PIDFile=PATH TO PID FILE1 ExecStart=PATH TO INIT SCRIPT start ExecStop=PATH TO INIT SCRIPT stop ExecStopPost=/usr/bin/rm -f PATH TO PID FILE1 [Install] WantedBy=multi-user.target2
以適當的值取代 UPPERCASE LETTERS 中寫入的所有值。
使用
systemctl start 應用程式
啟動精靈。
15.4 使用 YaST 管理服務 #
基本服務管理也可以透過 YaST 服務管理員模組實現。該模組不僅支援啟動、停止、啟用和停用服務,還可用於顯示服務的狀態以及變更預設目標。若要啟動 YaST 模組,請選取「
› › 」。- 變更
若要變更系統開機進入的目標,請從
下拉方塊中選擇目標。最常用的目標是 (啟動圖形登入畫面) 和 (以指令行模式啟動系統)。- 啟動或停止服務
從表中選取服務。
欄顯示它目前是正在執行 ( ) 還是未在執行 ( )。透過選擇 或 可切換其狀態。如果啟動或停止服務,會變更其對目前執行中工作階段而言的狀態。若要在整個重新開機期間變更服務的狀態,您需要啟用或停用服務。
- 定義服務啟動行為
服務可以在開機時自動啟動,也可以手動啟動。從表中選取服務。
欄顯示它目前是 啟動還是 啟動。透過選擇 可切換其狀態。若要在目前工作階段中變更服務狀態,您需要依據上述方式啟動或停止服務。
- 檢視狀態訊息
若要檢視服務的狀態訊息,請從清單中選取該服務,然後選擇
。您看到的輸出與systemctl
-l
status MY_SERVICE 指令產生的輸出完全相同。
15.5 自訂 systemd
#
下列各節列出了 systemd
自訂的一些範例。
在自訂 systemd
時,請務必使用目錄 /etc/systemd/
,切勿使用 /usr/lib/systemd/
。否則,systemd
下次更新時會覆寫您的變更。
15.5.1 自訂單位檔案 #
建議使用 systemctl edit SERVICE
指令來自訂單位檔案。此指令會啟動預設的文字編輯器,並建立一個在 /etc/systemd/system/NAME.service.d/
中包含 override.conf
檔案的目錄。該指令還確定會向正在執行的 systemd
程序通知這些變更。
或者,您可以透過執行 systemctl edit --full SERVICE
來開啟原始檔案的副本進行編輯,而不是開啟一個空白檔案。編輯檔案時,請確定未移除任何現有區段。
下面將練習如何變更系統等待 MariaDB 啟動的時間。以 root 身分執行 systemctl edit --full mariadb.service
。開啟的檔案如下所示:
[Unit] Description=MySQL server Wants=basic.target Conflicts=mariadb.target After=basic.target network.target [Install] WantedBy=multi-user.target Alias=mysql.service [Service] Restart=on-abort Type=notify ExecStartPre=/usr/lib/mysql/mysql-systemd-helper install ExecStartPre=/usr/lib/mysql/mysql-systemd-helper upgrade ExecStart=/usr/lib/mysql/mysql-systemd-helper start # Configures the time to wait for start-up/stop TimeoutSec=300 # Prevent writes to /usr, /boot, and /etc ProtectSystem=full # Prevent accessing /home, /root and /run/user ProtectHome=true UMask=007
調整 TimeoutSec
值並儲存變更。若要啟用變更,請以 root 身分執行 systemctl daemon-reload
。
如需詳細資訊,請參閱可使用 man 1 systemctl
指令呼叫的 man 頁面。
15.5.2 建立放入式檔案 #
若要對組態檔案進行微小變更,請使用所謂的放入式檔案。放入式檔案可讓您延伸單位檔案的組態,而不必編輯或覆寫單位檔案本身。
例如,若要變更位於 /usr/lib/systemd/system/FOOBAR.SERVICE
中 FOOBAR 服務的單個值,請依照以下步驟操作:
建立名為
/etc/systemd/system/FOOBAR.service.d/
的目錄。注意字尾為
.d
。該目錄必須命名為要透過所放入之檔案修補的服務。在該目錄中,建立
your_modification.conf
檔案。確保該檔案僅包含待修改值所在的行。
將您所做的變更儲存到檔案中。
為避免放入式檔案與 SUSE 隨附檔案之間出現名稱衝突,建議在所有放入式檔案名稱前加上一個兩位數和一個破折號:例如,80-override.conf
。
以下範圍為保留值範圍:
0-19
,為systemd
上游保留20-25
,為 SUSE 隨附的systemd
保留26-29
,為 SUSE 套件 (systemd 除外) 保留50
,為使用systemctl set-property
建立的放入式檔案保留
請使用大於此範圍的兩位數,以確定 SUSE 隨附的任何放入式檔案都不會覆寫您自己的放入式檔案。
您可以使用 systemctl cat $UNIT
來列出並驗證考慮將哪些檔案納入單位組態。
15.5.3 將 xinetd
服務轉換為 systemd
#
從 SUSE Linux Enterprise Server 15 版本開始,移除了 xinetd
基礎架構。本節概述如何將現有的自訂 xinetd
服務檔案轉換為 systemd
通訊端。
對於每個 xinetd
服務檔案,您至少需要兩個 systemd
單位檔案:通訊端檔案 (*.socket
) 和關聯的服務檔案 (*.service
)。通訊端檔案告訴 systemd
要建立哪個通訊端,服務檔案告訴 systemd
要啟動哪個可執行檔。
以下面的 xinetd
服務檔案為例:
root #
cat /etc/xinetd.d/example
service example
{
socket_type = stream
protocol = tcp
port = 10085
wait = no
user = user
group = users
groups = yes
server = /usr/libexec/example/exampled
server_args = -auth=bsdtcp exampledump
disable = no
}
若要將它轉換為 systemd
,需要下面兩個相配的檔案:
root #
cat /usr/lib/systemd/system/example.socket
[Socket]
ListenStream=0.0.0.0:10085
Accept=false
[Install]
WantedBy=sockets.target
root #
cat /usr/lib/systemd/system/example.service
[Unit]
Description=example
[Service]
ExecStart=/usr/libexec/example/exampled -auth=bsdtcp exampledump
User=user
Group=users
StandardInput=socket
如需 systemd
的「通訊端」和「服務」檔案選項的完整清單,請參閱 systemd.socket 和 systemd.service 手冊頁 (man 5 systemd.socket
、man 5 systemd.service
)。
15.5.4 建立自訂目標 #
在 System V init SUSE 系統上並未使用執行層級 4,便於管理員自行建立執行層級組態。systemd
可讓您建立任意個自訂目標。建議您在開始時先在 graphical.target
等現有的目標上調整。
將組態檔案
/usr/lib/systemd/system/graphical.target
複製到/etc/systemd/system/MY_TARGET.target
,並依據需要調整該檔案。上一步中複製的組態檔案已涵蓋該目標的必要的 (「 硬」) 相依性。若要一併納入需要的 (「軟」) 相依項,請建立目錄
/etc/systemd/system/MY_TARGET.target.wants
。對每個需要的服務,建立從
/usr/lib/systemd/system
連到/etc/systemd/system/MY_TARGET.target.wants
的符號連結。設定好目標後,重新載入
systemd
組態以使新目標可用:tux >
sudo
systemctl daemon-reload
15.6 進階用法 #
下列各節涵蓋進階主題,適用於系統管理員。如需更為進階的 systemd
文件,請參閱 Lennart Pöttering 撰寫的適用於管理員的 systemd
相關系列文章,網址為 http://0pointer.de/blog/projects。
15.6.1 清理暫存目錄 #
systemd
支援定期清理暫存目錄。將會自動移轉並啟用前一系統版本中的組態。tmpfiles.d
(負責管理暫存檔案) 將從 /etc/tmpfiles.d/*.conf
、/run/tmpfiles.d/*.conf
和 /usr/lib/tmpfiles.d/*.conf
檔案中讀取其組態。/etc/tmpfiles.d/*.conf
中的組態將會覆寫其他兩個目錄中的相關組態 (/usr/lib/tmpfiles.d/*.conf
是套件將其組態檔案儲存到的位置)。
組態格式為每個路徑一行,該行包含動作與路徑、(選擇性) 模式、擁有權、期限和引數欄位,具體視動作而定。以下範例將取消連結 X11 鎖定檔案:
Type Path Mode UID GID Age Argument r /tmp/.X[0-9]*-lock
若要取得 tmpfile 計時器的狀態:
tux >
sudo
systemctl status systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static) Active: active (waiting) since Tue 2018-04-09 15:30:36 CEST; 1 weeks 6 days ago Docs: man:tmpfiles.d(5) man:systemd-tmpfiles(8) Apr 09 15:30:36 jupiter systemd[1]: Starting Daily Cleanup of Temporary Directories. Apr 09 15:30:36 jupiter systemd[1]: Started Daily Cleanup of Temporary Directories.
如需處理暫存檔案的詳細資訊,請參閱 man 5 tmpfiles.d
。
15.6.2 系統記錄 #
第 15.6.9 節 「服務除錯」說明如何檢視給定服務的記錄訊息。然而,記錄的訊息顯示並不局限為服務記錄。您還可以存取和查詢 systemd
寫入的完整記錄訊息 — 亦即「日誌」。使用 journalctl
指令可顯示從最舊項目開始的完整記錄訊息。如需套用過濾器或變更輸出格式等選項的資訊,請參閱 man 1 journalctl
。
15.6.3 快照 #
您可以使用 isolate
子指令將 systemd
的目前狀態儲存到指定的快照,日後可以回復到該狀態。此功能在測試服務或自訂目標時非常有用,因為它允許您隨時回到定義的狀態。快照僅在目前工作階段中可用,重新開機時將自動刪除。快照名稱必須以 .snapshot
結尾。
- 建立快照
tux >
sudo
systemctl snapshot MY_SNAPSHOT.snapshot- 刪除快照
tux >
sudo
systemctl delete MY_SNAPSHOT.snapshot- 檢視快照
tux >
sudo
systemctl show MY_SNAPSHOT.snapshot- 啟用快照
tux >
sudo
systemctl isolate MY_SNAPSHOT.snapshot
15.6.4 載入核心模組 #
使用 systemd
,可透過 /etc/modules-load.d
中的組態檔案,在開機時自動載入核心模組。該檔案應命名為 MODULE.conf 並包含以下內容:
# load module MODULE at boot time MODULE
如果某個套件安裝了用於載入核心模組的組態檔案,該檔案將安裝到 /usr/lib/modules-load.d
。如果存在兩個同名的組態檔案,將優先使用 /etc/modules-load.d
中的組態檔案。
如需詳細資訊,請參閱 modules-load.d(5)
線上文件。
15.6.5 載入服務之前執行動作 #
使用 System V 時,需要在載入服務之前執行的 init 動作必須在 /etc/init.d/before.local
中指定。systemd
不再支援此程序。如果您需要在啟動服務之前執行動作,請執行以下步驟:
- 載入核心模組
在
/etc/modules-load.d
目錄中建立一個 drop-in 檔案 (如需語法,請參閱man modules-load.d
)- 建立檔案或目錄,清理目錄,變更擁有權
在
/etc/tmpfiles.d
中建立一個 drop-in 檔案 (如需語法,請參閱man tmpfiles.d
)- 其他任務
從以下範本建立一個系統服務檔案,例如
/etc/systemd/system/before.service
:[Unit] Before=NAME OF THE SERVICE YOU WANT THIS SERVICE TO BE STARTED BEFORE [Service] Type=oneshot RemainAfterExit=true ExecStart=YOUR_COMMAND # beware, executable is run directly, not through a shell, check the man pages # systemd.service and systemd.unit for full syntax [Install] # target in which to start the service WantedBy=multi-user.target #WantedBy=graphical.target
建立服務檔案後,應執行以下指令 (以
root
身分):tux >
sudo
systemctl daemon-reloadtux >
sudo
systemctl enable before每次修改服務檔案時,都需要執行:
tux >
sudo
systemctl daemon-reload
15.6.6 核心控制群組 (cgroup) #
在傳統 System V init 系統上不一定能將程序明確指派給繁衍它的服務。有些服務 (例如 Apache) 會繁衍許多協力廠商程序 (例如 CGI 或 Java 程序),這些程序本身又會繁衍許多程序。這導致您很難明確指派,甚至根本無法明確指派。另外,服務在不當終止後,可能殘留部分子項保持活動狀態。
systemd
將每個服務放入它自己的 cgroup 中,從而解決此問題。cgroup 是一項核心功能,允許將程序及其所有子程序聚合至分層組織的群組中。systemd
根據相應的服務為每個 cgroup 命名。由於程序未經特許不得「離開」其 cgroup,因此這樣可以有效地使用服務名稱標記該服務繁衍的所有程序。
若要列出屬於服務的所有程序,請使用指令 systemd-cgls
。結果類似於以下範例 (已縮短):
root #
systemd-cgls --no-pager
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 20
├─user.slice
│ └─user-1000.slice
│ ├─session-102.scope
│ │ ├─12426 gdm-session-worker [pam/gdm-password]
│ │ ├─15831 gdm-session-worker [pam/gdm-password]
│ │ ├─15839 gdm-session-worker [pam/gdm-password]
│ │ ├─15858 /usr/lib/gnome-terminal-server
[...]
└─system.slice
├─systemd-hostnamed.service
│ └─17616 /usr/lib/systemd/systemd-hostnamed
├─cron.service
│ └─1689 /usr/sbin/cron -n
├─postfix.service
│ ├─ 1676 /usr/lib/postfix/master -w
│ ├─ 1679 qmgr -l -t fifo -u
│ └─15590 pickup -l -t fifo -u
├─sshd.service
│ └─1436 /usr/sbin/sshd -D
[...]
如需 cgroup 的詳細資訊,請參閱Book “System Analysis and Tuning Guide”, Chapter 9 “Kernel control groups”。
15.6.7 終止服務 (傳送訊號) #
如第 15.6.6 節 「核心控制群組 (cgroup)」中所述,在 System V init 系統中不一定能將程序指派給其父服務,導致難以終止服務及其所有子項。未終止的子程序將保留為廢止程序。
systemd
的概念是將每個服務限制在某個 cgroup 中,從而可以明確識別一個服務的所有子程序,因此可讓您將訊號傳送給這些程序中的每個程序。可使用 systemctl kill
將信號傳送給服務。如需可用信號清單,請參閱 man 7 signals
。
- 將
SIGTERM
傳送給服務 SIGTERM
是傳送的預設信號。tux >
sudo
systemctl kill MY_SERVICE- 將 SIGNAL 傳送給服務
可使用
-s
選項指定應傳送的信號。tux >
sudo
systemctl kill -s SIGNAL MY_SERVICE- 選取程序
依預設,
kill
指令會將信號傳送給指定 cgroup 的all
程序。您可以將傳送目標限制為control
或main
程序。後者非常實用,如下例透過傳送SIGHUP
強制服務重新載入其組態所示:tux >
sudo
systemctl kill -s SIGHUP --kill-who=main MY_SERVICE
15.6.8 有關 D-Bus 服務的重要說明 #
D-Bus 服務是 systemd
用戶端與做為 pid 1 執行的 systemd 管理員之間進行通訊的訊息匯流排。雖然 dbus
是個獨立的精靈,但它也是 init 基礎架構的組成部分。
在執行中的系統中終止或重新啟動 dbus
的效果類似於嘗試終止或重新啟動 pid 1。此操作將中斷 systemd
用戶端與伺服器間的通訊,並使大部分 systemd
功能不可用。
因此,不建議也不支援終止或重新啟動 dbus
。
更新 dbus
或與 dbus
有關的套件需要重新開機。如果不確定是否需要重新開機,請執行 sudo zypper ps -s
。如果 dbus
顯示在所列服務之中,則表明您需要將系統重新開機。
請記住,即使自動更新設定為跳過需要重新開機的套件,dbus
仍會更新。
15.6.9 服務除錯 #
依預設,systemd
的輸出不會太詳細。如果服務啟動成功,則不會產生任何輸出。如果啟動失敗,則會顯示簡短的錯誤訊息。不過,systemctl status
可讓您以不同方式對服務的啟動和作業進行除錯。
systemd
隨附自己的記錄機製 (「日誌」),可以記錄系統訊息,便於您一併顯示服務訊息與狀態訊息。status
指令的工作方式與 tail
相似,也可以採用不同的格式顯示記錄訊息,因此成為功能強大的除錯工具。
- 顯示服務啟動失敗訊息
每當服務啟動失敗時,使用
systemctl status MY_SERVICE
可獲得詳細的錯誤訊息:root #
systemctl start apache2 Job failed. See system journal and 'systemctl status' for details.root #
systemctl status apache2 Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled) Active: failed (Result: exit-code) since Mon, 04 Apr 2018 16:52:26 +0200; 29s ago Process: 3088 ExecStart=/usr/sbin/start_apache2 -D SYSTEMD -k start (code=exited, status=1/FAILURE) CGroup: name=systemd:/system/apache2.service Apr 04 16:52:26 g144 start_apache2[3088]: httpd2-prefork: Syntax error on line 205 of /etc/apache2/httpd.conf: Syntax error on li...alHost>- 顯示最後 N 條服務訊息
status
子指令的預設行為是顯示服務發出的最近 10 條訊息。若要變更要顯示的訊息數,請使用--lines=N
參數:tux >
sudo
systemctl status chronydtux >
sudo
systemctl --lines=20 status chronyd- 以附加模式顯示服務訊息
若要顯示服務訊息的「 即時串流」,請使用
--follow
選項,其工作方式與tail
-f
相似:tux >
sudo
systemctl --follow status chronyd- 訊息輸出格式
--output=模式
參數可讓您變更服務訊息的輸出格式。最重要的可用模式如下:short
預設格式。顯示記錄訊息及易於理解的時戳。
verbose
完整輸出所有欄位。
cat
精簡輸出,不含時戳。
15.7 systemd
計時器單位 #
與 cron 類似,systemd
計時器單位提供了一種在 Linux 上排程工作的機制。雖然 systemd
計時器單位的用途與 cron 相同,但其具備幾項優點。
使用計時器單位排程的工作可以依賴於其他
systemd
服務。計時器單位被視為一般
systemd
服務,因此可以使用systemctl
進行管理。計時器可以是即時計時器,也可以是單純計時器。
時間單位會被記錄到
systemd
日誌中,使得更易於監控和疑難排解。
systemd
計時器單位透過 .timer
副檔名識別。
15.7.1 systemd
計時器類型 #
計時器單位可以使用單純計時器和即時計時器。
與 cron 工作類似,即時計時器是依據行事曆事件觸發的。即時計時器使用選項
OnCalendar
進行定義。單純計時器將從某個特定起點開始經過指定時間後觸發。後者可以是系統開機或系統單位啟用事件。有幾個選項可用於定義單純計時器,包括
OnBootSec
、OnUnitActiveSec
和OnTypeSec
。單純計時器不是永久的,每次重新開機後都將被重設。
15.7.2 systemd
計時器和服務單位 #
每個計時器單位都必須有一個其所控制的相應 systemd
單位檔案。也就是說,將由 .timer
檔案啟用並管理相應的 .service
檔案。使用計時器時,.service
檔案不需要 [Install]
區段,因為服務將由計時器管理。
15.7.3 具體範例 #
為了理解 systemd
計時器單位的基本知識,我們設定了一個觸發 foo.sh
外圍程序程序檔的計時器。
第一步是建立用於控制外圍程序程序檔的 systemd
服務單位。為此,請開啟一個新的文字檔案進行編輯,並新增以下服務單位定義:
[Unit] Description="Foo shell script" [Service] ExecStart=/usr/local/bin/foo.sh
將檔案以名稱 foo.service
儲存到目錄 /etc/systemd/system/
中。
接下來,開啟一個新的文字檔案進行編輯,並新增以下計時器定義:
[Unit] Description="Run foo shell script" [Timer] OnBootSec=5min OnUnitActiveSec=24h Unit=foo.service [Install] WantedBy=multi-user.target
上述範例中的 [Timer]
區段指定了要觸發的服務 (foo.service
) 以及觸發時間。在此範例中,選項 OnBootSec
指定了一個在系統開機後五分鐘觸發服務的單純計時器,而選項 OnUnitActiveSec
會在服務被啟用後 24 小時觸發服務 (即計時器將每天觸發一次服務)。最後,選項 WantedBy
指定應在系統達到多使用者目標時啟動計時器。
您也可以不指定單純計時器,而是使用選項 OnCalendar
指定即時計時器。下面的即時計時器定義從星期一 12:00 開始,每週觸發一次相關服務單位。
[Timer] OnCalendar=weekly Persistent=true
選項 Persistent=true
表示如果計時器錯過了上一次啟動時間 (例如,由於系統關閉),則會在計時器啟用後立即觸發服務。
選項 OnCalendar
還可以用於使用以下格式來定義觸發服務的具體日期和時間:DayOfWeek Year-Month-Day Hour:Minute:Second
。下面的範例會在每天早上 5 點觸發服務:
OnCalendar=*-*-* 5:00:00
您可以使用星號指定任何值,使用逗號列出可能的值。使用由 .. 分隔的兩個值可表示一個連續的範圍。下面的範例會在每個月的星期五下午 6 點觸發服務:
OnCalendar=Fri *-*-1..7 18:00:00
若要在不同的時間觸發服務,您可以指定多個 OnCalendar
項目:
OnCalendar=Mon..Fri 10:00 OnCalendar=Sat,Sun 22:00
在上面的範例中,會在工作日的上午 10 點和週末的晚上 10 點觸發服務。
編輯好計時器單位檔案後,使用名稱 foo.timer
將其儲存到 /etc/systemd/system/
目錄中。若要檢查所建立的單位檔案是否正確,請執行以下指令:
tux >
sudo
systemd-analyze verify /etc/systemd/system/foo.*
如果指令未傳回任何輸出,則表示檔案成功通過驗證。
若要啟動計時器,請使用指令 sudo systemctl start foo.timer
。若要在開機時啟用計時器,請執行指令 sudo systemctl enable foo.timer
。
15.7.4 管理 systemd
計時器 #
由於計時器被視為一般 systemd
單位,因此您可以使用 systemctl
來管理它們。您可以使用 systemctl start
啟動計時器,使用 systemctl enable
啟用計時器,依此類推。除此之外,您還可以使用指令 systemctl list-timers
列出所有作用中計時器。若要列出包括非作用中計時器在內的所有計時器,請執行指令 systemctl list-timers --all
。
15.8 更多資訊 #
如需 systemd
的詳細資訊,請參閱以下線上資源:
- 首頁
- 適用於管理員的
systemd
Lennart Pöttering 是
systemd
的原著者之一,他撰寫了一系列部落格文章 (寫本章時已有 13 篇)。其網址為 http://0pointer.de/blog/projects。
第 III 部分 系統 #
- 16 64 位元系統環境中的 32 位元和 64 位元應用程式
SUSE® Linux Enterprise Server 可用於多種 64 位元平台。開發商尚未將所有 32 位元應用程式移植至 64 位元系統。本章簡略說明 64 位元 SUSE Linux Enterprise Server 平台上的 32 位元支援實作。
- 17
journalctl
:查詢systemd
日誌 systemd
具有自己的記錄系統,稱作日誌。由於所有系統事件都會寫入日誌,因此不需要執行基於syslog
的服務。- 18
update-alternatives
:管理指令和檔案的多個版本 系統上往往會安裝同一個工具的多個版本。為了讓管理員有選擇,以及能一起安裝和使用多個不同的版本,替代項系統提供了以一致的方式管理此類版本的功能。
- 19 基本網路知識
Linux 提供所有必要的網路工具及功能,以整合到所有類型的網路結構。可以透過 YaST 設定使用網路卡進行的網路存取。也可使用手動方式來設定組態。本章僅討論基本機制及相關的網路組態檔案。
- 20 印表機操作
SUSE® Linux Enterprise Server 支援以多種類型的印表機進行列印,包括遠端網路印表機。您可以手動設定印表機,也可以使用 YaST 進行設定。如需組態設定指示,請參閱Book “部署指南 ”, Chapter 20 “使用 YaST 設定硬體元件”, Section 20.3 “設定印表機”。圖形和指令行公用程式都可用來啟動和管理列印工作。如果您的印表機無法如預期般運作,請參閱第 20.8 節 「疑難排解」。
- 21 圖形使用者介面
SUSE Linux Enterprise Server 包含 X.org 伺服器和 GNOME 桌面。本章介紹用於所有使用者的圖形使用者介面組態。
- 22 使用 FUSE 存取檔案系統
FUSE 是使用者空間中的檔案系統 (file system in user space) 的縮寫。這表示您可以非特權使用者的身分設定並掛接檔案系統。一般情況下,只有
root
才能執行此任務。FUSE 自身就是一個核心模組。將 FUSE 與外掛程式結合便能延伸其功能,幾乎可存取所有檔案系統,如遠端 SSH 連接、ISO 影像及其他.- 23 管理核心模組
雖然 Linux 屬於單核心,但可透過核心模組加以延伸。這些特殊物件可以插入到核心中,並可視需要移除。就實際角度而言,核心模組使新增和移除核心自身未包含的驅動程式和介面成為現實。Linux 提供了數個用於管理核心模組的指令。
- 24 使用
udev
進行動態核心裝置管理 核心可以新增或移除執行中系統內幾乎所有的裝置。裝置狀態的變更 (無論裝置插入或移除) 必須傳播至使用者空間。插入及識別裝置後需要對其進行設定。如果辨識到的裝置狀態發生任何變更,必須通知該裝置的使用者。
udev
會提供所需的基礎結構,以便動態維護/dev
目錄中的裝置節點檔案和符號連結。udev
規則能將外部工具插入核心裝置事件處理。因而,您可以透過新增在核心裝置處理過程中執行的特定程序檔,來自訂udev
裝置處理方式,或者可以在裝置處理期間要求並輸入其他資料進行評估。- 25 特殊系統功能
本章會提供各種軟體套件、虛擬主控台及鍵盤配置的相關資訊。還會介紹
bash
、cron
和logrotate
等軟體元件,因為這些元件較之上一版有所變更或加強。這些元件也許不很重要,但與系統的關係密切,使用者應該變更它們的預設行為。本章最後一節則會介紹語言與國家特定的設定 (I18N 與 L10N)。- 26 使用 NetworkManager
NetworkManager 是筆記型電腦與其他可攜式電腦的理想解決方案。它允許對網路連接使用一流的加密類型和標準,包括連至 802.1X 保護網路的連接。802.1X 是「區域網路和都會區網路的 IEEE 標準 — 基於連接埠的網路存取控制」。有了 NetworkManager,您在外出時就不必顧慮網路介面的組態設定,以及在有線或無線網路間切換的問題。NetworkManager 可自動連接已知的無線網路,或是同時管理多個網路連接,然後按預設使用速度最快的連接。此外,您還可以手動在可用網路之間切換,並使用系統匣中的 Applet 管理網路連接。
- 27 電源管理
IBM Z 上不提供本章所述的功能和硬體,因此本章內容與這些平台不相關。
- 28 持續性記憶體
本章包含關於使用裝備非揮發性主記憶體的 SUSE Linux Enterprise 的額外資訊。此類記憶體稱做持續性記憶體,由一或多個 NVDIMM 構成。
16 64 位元系統環境中的 32 位元和 64 位元應用程式 #
SUSE® Linux Enterprise Server 可用於多種 64 位元平台。開發商尚未將所有 32 位元應用程式移植至 64 位元系統。本章簡略說明 64 位元 SUSE Linux Enterprise Server 平台上的 32 位元支援實作。
適用於 64 位元平台 POWER、IBM Z 和 AMD64/Intel 64 的 SUSE Linux Enterprise Server 可讓現有的 32 位元應用程式「無需額外設定」 即可在 64 位元環境中執行。對應的 32 位元平台為:用於 POWER 的 POWER 和用於 AMD64/Intel 64 的 x86。這項支援表示您可以繼續使用偏好的 32 位元應用程式,無需等到對應的 64 位元連接埠上市。目前的 POWER 系統以 32 位元模式執行大部分應用程式,不過您可以執行 64 位元應用程式。
SUSE Linux Enterprise Server 不支援編譯 32 位元應用程式。它只為 32 位元二進位檔案提供執行時期支援。
16.1 執行時期支援 #
如果某個應用程式有提供可在 32 位元和 64 位元環境下執行的版本,則同時安裝這兩個版本可能會導致問題。在這種情況下,請決定要安裝哪一個版本,以避免潛在的執行時期錯誤。
此規則的一個例外是 PAM (可插入驗證模組)。SUSE Linux Enterprise Server 在驗證程序中使用 PAM 做為使用者與應用程式之間的溝通層。在有執行 32 位元應用程式的 64 位元作業系統上,請務必安裝 32 位元和 64 位元的 PAM 版本。
每個應用程式需要一系列的程式庫才能正常執行。不幸的是,這些程式庫的 32 位元和 64 位元版本,名稱都一樣。它們必須透過其他方法來區分彼此。
為了與 32 位元版本保持相容,64 位元和 32 位元程式庫將儲存在同一位置。在 32 位元和 64 位元環境中,libc.so.6
的 32 位元版本位於 /lib/libc.so.6
。
所有 64 位元程式庫和物件檔案都位於名為 lib64
的目錄。以往能在 /lib
和 /usr/lib
之下找到的 64 位元物件檔案,現在放在 /lib64
以及 /usr/lib64
底下。這表示在 /lib
和 /usr/lib
之下,有預留空間給 32 位元程式庫使用,因而兩種版本的檔案名稱能夠保持不變。
如果 /lib
之下 32 位元子目錄的資料內容與字詞大小無關,則不會移動這些子目錄。此配置與 LSB (Linux Standards Base) 以及 FHS (File System Hierarchy Standard) 相容。
16.2 核心規格 #
適用於 AMD64/Intel 64、POWER 和 IBM Z 的 64 位元核心提供 64 位元和 32 位元兩種核心 ABI (應用程式二進位介面)。後者與對應的 32 位元核心的 ABI 是相同的。這意味著,32 位元和 64 位元應用程式與 64 位元核心的通訊方式相同。
針對 64 位元核心的 32 位元系統呼叫模擬不支援系統程式使用的某些 API。這要視平台而定。因此,有少數應用程式 (例如 lspci
) 必須在非 POWER 平台上以 64 位元程式的形式編譯,才能正常運作。在 IBM Z 上,並非所有 ioctl 都可用於 32 位元核心 ABI。
64 位核心只能載入 64 位元核心模組。必須專門為 64 位元核心編譯 64 位元模組。無法在 64 位元核心下使用 32 位元核心模組。
部份應用程式需要個別的核心可載入式模組。如果您想要在 64 位元系統環境中使用 32 位元應用程式,請聯絡應用程式提供者與 SUSE。確定 64 位元版的核心可載入模組及 32 位元編譯版核心 API 適用於此模組。
17 journalctl
:查詢 systemd
日誌 #
systemd
具有自己的記錄系統,稱作日誌。由於所有系統事件都會寫入日誌,因此不需要執行基於 syslog
的服務。
日誌本身是 systemd
管理的系統服務,完整名稱為 systemd-journald.service
。它會根據從核心、使用者程序、標準輸入和系統服務錯誤收到的記錄資訊,維護結構化的索引日誌,藉以收集和儲存記錄資料。systemd-journald
服務預設處於開啟狀態。
tux >
sudo
systemctl status systemd-journald systemd-journald.service - Journal Service Loaded: loaded (/usr/lib/systemd/system/systemd-journald.service; static) Active: active (running) since Mon 2014-05-26 08:36:59 EDT; 3 days ago Docs: man:systemd-journald.service(8) man:journald.conf(5) Main PID: 413 (systemd-journal) Status: "Processing requests..." CGroup: /system.slice/systemd-journald.service └─413 /usr/lib/systemd/systemd-journald [...]
17.1 將日誌設為永久 #
依預設,日誌在 /run/log/journal/
中儲存記錄資料。由於 /run/
目錄具有易失本性,因此,在重新開機時會遺失記錄資料。若要永久儲存記錄資料,/var/log/journal/
目錄必須存在且具有正確的擁有權和權限,使 systemd-journald 服務能夠儲存其資料。systemd
將為您建立該目錄,如果您執行以下操作,它將會切換到永久記錄:
以
root
身分開啟/etc/systemd/journald.conf
進行編輯。root #
vi /etc/systemd/journald.conf取消註解包含
Storage=
的行,並將它變更為[...] [Journal] Storage=persistent #Compress=yes [...]
儲存該檔案,然後重新啟動 systemd-journald:
root #
systemctl restart systemd-journald
17.2 journalctl
:實用參數 #
本節介紹了一些可用來增強 journalctl
預設行為的常見有用選項。journalctl
手冊頁 man 1 journalctl
中介紹了所有參數。
若要顯示與特定可執行檔相關的所有日誌訊息,請指定該可執行檔的完整路徑:
tux >
sudo
journalctl /usr/lib/systemd/systemd
- -f
只顯示最近的日誌訊息,另外,在將新的記錄項目新增到日誌時會列印這些新項目。
列印訊息並跳轉到日誌末尾,以便在頁面巡覽區中顯示最新的項目。
- -r
以反向順序列印日誌訊息,使最新的項目列在最前面。
- -k
只顯示核心訊息。這等同於欄位比對
_TRANSPORT=kernel
(請參閱第 17.3.3 節 「依據欄位過濾」)。- -u
只顯示指定
systemd
單元的訊息。這等同於欄位比對_SYSTEMD_UNIT=UNIT
(請參閱第 17.3.3 節 「依據欄位過濾」)。tux >
sudo
journalctl -u apache2 [...] Jun 03 10:07:11 pinkiepie systemd[1]: Starting The Apache Webserver... Jun 03 10:07:12 pinkiepie systemd[1]: Started The Apache Webserver.
17.3 過濾日誌輸出 #
如果不結合任何參數呼叫 journalctl
,它將顯示日誌的完整內容,最舊的項目列在最前面。可按特定的參數和欄位過濾輸出。
17.3.1 依據開機編號過濾 #
journalctl
可以依據特定的系統開機編號過濾訊息。若要列出所有可用的開機,請執行
tux >
sudo
journalctl --list-boots -1 097ed2cd99124a2391d2cffab1b566f0 Mon 2014-05-26 08:36:56 EDT—Fri 2014-05-30 05:33:44 EDT 0 156019a44a774a0bb0148a92df4af81b Fri 2014-05-30 05:34:09 EDT—Fri 2014-05-30 06:15:01 EDT
第一欄列出開機偏移:0
表示目前的開機,-1
表示上一次開機,-2
表示再上一次的開機,依此類推。第二欄包含開機 ID,其後是特定開機的限制時間戳記。
顯示目前開機中的所有訊息:
tux >
sudo
journalctl -b
如果需要查看上一次開機的日誌訊息,請新增一個偏移參數。下面的範例將輸出上一次開機的訊息:
tux >
sudo
journalctl -b -1
另一種方法是依據開機 ID 列出開機訊息。要實現此目的,請使用 _BOOT_ID 欄位:
tux >
sudo
journalctl _BOOT_ID=156019a44a774a0bb0148a92df4af81b
17.3.2 依據時間間隔過濾 #
可透過指定開始日期和/或結束日期來過濾 journalctl
的輸出。日期規格應採用「2014-06-30 9:17:16」這樣的格式。如果省略時間部分,則會假設為午夜。如果省略秒,則會假設為「:00」。如果省略日期部分,則會假設為目前日期。您也可以不採用數字表示法,而是指定關鍵字「yesterday」、「today」或「tomorrow」。它們表示當日前一天、當日或者當日後一天的午夜。如果指定「now」,則表示目前時間。您還可以指定以 -
或 +
為字首的相對時間,分別表示目前時間之前或之後的特定時間。
僅顯示從現在開始產生的新訊息,並持續更新輸出:
tux >
sudo
journalctl --since "now" -f
顯示從昨天午夜到 3:20AM 的所有訊息:
tux >
sudo
journalctl --since "today" --until "3:20"
17.3.3 依據欄位過濾 #
您可以按特定的欄位過濾日誌輸出。要比對的欄位語法為 FIELD_NAME=MATCHED_VALUE
,例如 _SYSTEMD_UNIT=httpd.service
。您可以在單個查詢中指定多個比對條件,以更精確地過濾輸出訊息。如需預設欄位的清單,請參閱 man 7 systemd.journal-fields
。
顯示特定程序 ID 產生的訊息:
tux >
sudo
journalctl _PID=1039
顯示屬於特定使用者 ID 的訊息:
# journalctl _UID=1000
顯示來自核心環緩衝區的訊息 (與 dmesg
產生的結果相同):
tux >
sudo
journalctl _TRANSPORT=kernel
顯示來自服務之標準輸出或錯誤輸出的訊息:
tux >
sudo
journalctl _TRANSPORT=stdout
僅顯示指定服務產生的訊息:
tux >
sudo
journalctl _SYSTEMD_UNIT=avahi-daemon.service
如果指定了兩個不同的欄位,則僅顯示同時與兩個運算式相符的項目:
tux >
sudo
journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1488
如果兩個比對參考了同一個欄位,則顯示與兩個運算式中任意一個相符的所有項目:
tux >
sudo
journalctl _SYSTEMD_UNIT=avahi-daemon.service _SYSTEMD_UNIT=dbus.service
可以使用「+」分隔符將兩個運算式組合成一個邏輯「OR」。下面的範例將顯示來自程序 ID 為 1480 之 Avahi 服務程序的所有訊息,以及來自 D-Bus 服務的所有訊息:
tux >
sudo
journalctl _SYSTEMD_UNIT=avahi-daemon.service _PID=1480 + _SYSTEMD_UNIT=dbus.service
17.4 調查 systemd
錯誤 #
本節將介紹一個簡單的範例,說明如何找出並修復 systemd
在 apache2
啟動期間報告的錯誤。
嘗試啟動 apache2 服務:
# systemctl start apache2 Job for apache2.service failed. See 'systemctl status apache2' and 'journalctl -xn' for details.
我們來看看該服務的狀態如何:
tux >
sudo
systemctl status apache2 apache2.service - The Apache Webserver Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled) Active: failed (Result: exit-code) since Tue 2014-06-03 11:08:13 CEST; 7min ago Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND \ -k graceful-stop (code=exited, status=1/FAILURE)導致錯誤的程序 ID 為 11026。
顯示與程序 ID 11026 相關的詳細訊息:
tux >
sudo
journalctl -o verbose _PID=11026 [...] MESSAGE=AH00526: Syntax error on line 6 of /etc/apache2/default-server.conf: [...] MESSAGE=Invalid command 'DocumenttRoot', perhaps misspelled or defined by a module [...]改正
/etc/apache2/default-server.conf
中的錯字,啟動 apache2 服務,然後列印其狀態:tux >
sudo
systemctl start apache2 && systemctl status apache2 apache2.service - The Apache Webserver Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled) Active: active (running) since Tue 2014-06-03 11:26:24 CEST; 4ms ago Process: 11026 ExecStop=/usr/sbin/start_apache2 -D SYSTEMD -DFOREGROUND -k graceful-stop (code=exited, status=1/FAILURE) Main PID: 11263 (httpd2-prefork) Status: "Processing requests..." CGroup: /system.slice/apache2.service ├─11263 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...] ├─11280 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...] ├─11281 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...] ├─11282 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...] ├─11283 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...] └─11285 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf -D [...]
17.5 Journald 組態 #
可透過修改 /etc/systemd/journald.conf
來調整 systemd-journald 服務的行為。本節只介紹基本的選項設定。如需完整的檔案描述,請參閱 man 5 journald.conf
。請注意,若要使變更生效,必須使用以下指令重新啟動日誌
tux >
sudo
systemctl restart systemd-journald
17.5.1 變更日誌大小限制 #
如果將日誌記錄資料儲存到永久位置 (請參閱第 17.1 節 「將日誌設為永久」),這些資料最多可佔用 /var/log/journal
所在檔案系統空間的 10%。例如,如果 /var/log/journal
位於一個 30 GB 的 /var
分割區中,則日誌最多可佔用 3 GB 磁碟空間。若要變更此限制,請變更 (並取消註解) SystemMaxUse
選項:
SystemMaxUse=50M
17.5.2 將日誌轉遞到 /dev/ttyX
#
您可以將日誌轉遞到終端機裝置,以便在偏好的終端機螢幕 (例如 /dev/tty12
) 上顯式相關的系統訊息。將以下 journald 選項變更為
ForwardToConsole=yes TTYPath=/dev/tty12
17.5.3 將日誌轉遞到 syslog 工具 #
Journald 與傳統的 syslog 實作 (例如 rsyslog
) 回溯相容。請務必滿足以下條件:
已安裝 rsyslog。
tux >
sudo
rpm -q rsyslog rsyslog-7.4.8-2.16.x86_64已啟用 rsyslog 服務。
tux >
sudo
systemctl is-enabled rsyslog enabled已在
/etc/systemd/journald.conf
中啟用轉遞至 syslog。ForwardToSyslog=yes
17.6 使用 YaST 過濾 systemd
日誌 #
過濾 systemd 日誌的簡單方法 (無需處理 journalctl 語法) 是使用 YaST 日誌模組。使用 sudo zypper in yast2-journal
安裝該模組後,請在 YaST 中選取 › 啟動該模組。也可以在指令行中輸入 sudo yast2 journal
來啟動該模組。
模組將在表中顯示記錄項目。使用頂部的搜尋方塊可以搜尋包含特定字元的項目,這類似於使用 grep
。若要依日期和時間、單位、檔案或優先程度過濾項目,請按一下 ,然後設定相應的選項。
17.7 在 GNOME 中檢視記錄 #
您可以使用 GNOME 記錄來檢視日誌。可從應用程式功能表啟動它。若要檢視系統記錄訊息,需要以 root 身分執行,例如使用 xdg-su gnome-logs
。按 Alt–F2 時可執行此指令。
18 update-alternatives
:管理指令和檔案的多個版本 #
系統上往往會安裝同一個工具的多個版本。為了讓管理員有選擇,以及能一起安裝和使用多個不同的版本,替代項系統提供了以一致的方式管理此類版本的功能。
18.1 綜覽 #
在 SUSE Linux Enterprise Server 上,有些程式執行的是相同或類似的任務。例如,如果系統上既安裝了 Java 1.7,也安裝了 Java 1.8,則會從 RPM 套件中呼叫替代項系統程序檔 (update-alternatives
)。替代項系統預設將參考版本 1.8:版本越高,優先程度也就越高。不過,管理員可以變更該預設設定,並可將一般名稱指向版本 1.7。
本章使用了下列術語:
- 管理目錄
預設的
/var/lib/rpm/alternatives
目錄,其中包含有關替代項目前狀態的資訊。- 替代項
檔案系統中某個特定檔案的名稱,可使用替代項系統透過一般名稱存取。
- 替代項目錄
包含符號連結的預設
/etc/alternatives
目錄。- 一般名稱
該名稱 (例如
/usr/bin/edit
) 參考可透過替代項系統使用的多個檔案中的一個。- 連結群組
一組相關的符號連結,可做為一個群組更新。
- 主連結
連結群組中用於確定如何設定群組中其他連結的連結。
- 從屬連結
連結群組中受主連結控制的連結。
- 符號連結 (symlink)
在同一檔案系統中做為另一個檔案的參考的檔案。替代項系統使用替代項目錄中的符號連結,在一個檔案的各個版本之間切換。
管理員可透過
update-alternatives
指令修改替代項目錄中的符號連結。
替代項系統提供 update-alternatives
指令供您建立、移除、維護和顯示有關符號連結的資訊。雖然這些符號連結通常是指向指令,但它們也可以指向 JAR 歸檔、man 頁面及其他檔案。本章中的範例使用了指令和 man 頁面,但它們也適用於其他檔案類型。
替代項系統使用替代項目錄來收集指向可能的替代項的連結。安裝包含替代項的新套件時,會將新的替代項新增至系統。是否將新套件的替代項選為預設值取決於它的優先程度和設定的模式。一般而言,版本較高的套件優先程度也較高。替代項系統可以在兩種模式下運作:
自動模式: 在此模式下,替代項系統會確保群組中的連結指向適合群組且優先程度最高的替代項。
手動模式: 在此模式下,替代項系統不會對系統管理員的設定進行任何變更。
例如,在替代項系統中,java
指令具有以下連結階層:
18.2 使用案例 #
預設從 RPM 套件中呼叫 update-alternatives
程序檔。安裝或移除一個套件時,該程序檔會處理該套件所有的符號連結。不過,您可以從指令行中手動執行該程序檔,以便:
顯示一般名稱的目前替代項。
變更替代項的預設值。
為替代項建立一組相關的檔案。
18.3 取得替代項的綜覽 #
若要取回所有已設定替代項的名稱,請使用:
tux >
ls /var/lib/alternatives
若要取得所有已設定替代項的綜覽及其值,請使用
tux >
sudo
update-alternatives --get-selections
asadmin auto /usr/bin/asadmin-2.7 awk auto /usr/bin/gawk chardetect auto /usr/bin/chardetect-3.6 dbus-launch auto /usr/bin/dbus-launch.x11 default-displaymanager auto /usr/lib/X11/displaymanagers/gdm [...]
18.4 檢視關於特定替代項的詳細資料 #
檢查替代項最簡單的方法就是查看指令的符號連結。例如,如果您想知道 java
指令參考的是什麼,請使用以下指令:
tux >
readlink --canonicalize /usr/bin/java
/usr/lib64/jvm/jre-10-openjdk/bin/java
如果您看到相同的路徑 (在本例中為 /usr/bin/java
),則此指令沒有替代項。
若要查看全部的替代項 (包括從屬連結),請使用 --display
選項:
tux >
sudo
update-alternatives --display java
java - auto mode link best version is /usr/lib64/jvm/jre-1.8.0-openjdk/bin/java link currently points to /usr/lib64/jvm/jre-1.8.0-openjdk/bin/java link java is /usr/bin/java slave java.1.gz is /usr/share/man/man1/java.1.gz slave jre is /usr/lib64/jvm/jre slave jre_exports is /usr/lib64/jvm-exports/jre slave keytool is /usr/bin/keytool slave keytool.1.gz is /usr/share/man/man1/keytool.1.gz slave orbd is /usr/bin/orbd slave orbd.1.gz is /usr/share/man/man1/orbd.1.gz [...]
18.5 設定替代項的預設版本 #
/usr/bin
中的指令預設會參考優先程度最高的替代項目錄。例如,java
指令預設會顯示下面的版本號碼:
tux >
java -version
openjdk version "10.0.1" 2018-04-17 OpenJDK Runtime Environment (build 10.0.1+10-suse-lp150.1.11-x8664) OpenJDK 64-Bit Server VM (build 10.0.1+10-suse-lp150.1.11-x8664, mixed mode)
若要將預設 java
指令變更為參考先前的版本,請執行:
tux >
sudo
update-alternatives --config java
root's password: There are 2 choices for the alternative java (providing /usr/bin/java). Selection Path Priority Status ------------------------------------------------------------ * 0 /usr/lib64/jvm/jre-10-openjdk/bin/java 2005 auto mode 1 /usr/lib64/jvm/jre-1.8.0-openjdk/bin/java 1805 manual mode 2 /usr/lib64/jvm/jre-10-openjdk/bin/java 2005 manual mode 3 /usr/lib64/jvm/jre-11-openjdk/bin/java 0 manual mode Press <enter> to keep the current choice[*], or type selection number:
根據您的系統和安裝的版本而定,具體的 Java 版本號碼會有所不同。選取 1
之後,java
會顯示下面的版本號碼:
tux >
java -version
java version "1.8.0_171" OpenJDK Runtime Environment (IcedTea 3.8.0) (build 1.8.0_171-b11 suse-lp150.2.3.1-x86_64) OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
另外,請記住以下幾點:
在手動模式下安裝另一個 Java 版本時,替代項系統既不會變更連結,也不會變更一般名稱。
在自動模式下安裝另一個 Java 版本時,替代項系統會變更 Java 主連結及所有從屬連結 (如第 18.4 節 「檢視關於特定替代項的詳細資料」中所示)。若要檢查主/從關係,請使用:
tux >
sudo
update-alternatives --display java
18.6 安裝自訂替代項 #
本節介紹如何在系統上設定自訂替代項。範例做了以下假設:
有兩個具有類似功能的程序檔:
foo-2
和foo-3
。這些程序檔儲存在
/usr/local/bin
目錄中,以免與/usr/bin
中的系統工具產生任何衝突。有一個主連結
foo
指向foo-2
或foo-3
。
若要在您的系統上提供替代項,請執行以下步驟:
將您的程序檔複製到
/usr/local/bin
目錄中。讓程序檔可執行:
tux >
sudo
chmod +x /usr/local/bin/foo-{2,3}
針對兩個程序檔執行
update-alternatives
:tux >
sudo
update-alternatives --install \ /usr/local/bin/foo 1\ foo 2\ /usr/local/bin/foo-2 3\ 200 4tux >
sudo
update-alternatives --install \ /usr/local/bin/foo 1\ foo 2\ /usr/local/bin/foo-3 3\ 300 4--install
後面的選項具有以下意義:檢查主連結:
tux >
sudo
update-alternatives --display foo
foo - auto mode link best version is /usr/local/bin/foo-3 link currently points to /usr/local/bin/foo-3 link foo is /usr/local/bin/foo /usr/local/bin/foo-2 - priority 200 /usr/local/bin/foo-3 - priority 300
完成所述步驟後,便可以使用主連結 /usr/local/bin/foo
了。
如果需要,可以安裝其他替代項。若要移除替代項,請使用以下指令:
tux >
sudo
update-alternatives --remove foo /usr/local/bin/foo-2
移除此程序檔之後,foo 群組的替代項系統看上去如下所示:
tux >
sudo
update-alternatives --display foo
foo - auto mode link best version is /usr/local/bin/foo-3 link currently points to /usr/local/bin/foo-3 link foo is /usr/local/bin/foo /usr/local/bin/foo-3 - priority 300
18.7 定義相依替代項 #
如果您有替代項,則僅憑程序檔本身不足以完成任務。大部分指令都不是完全獨立的:它們通常隨附其他檔案,例如延伸、組態或 man 頁面。若要建立依賴於主連結的替代項,請使用從屬替代項。
我們假設要延伸第 18.6 節 「安裝自訂替代項」中的範例,並提供 man 頁面和組態檔案:
兩個 man 頁面 (
foo-2.1.gz
和foo-3.1.gz
) 儲存在/usr/local/man/man1
目錄中。兩個組態檔案 (
foo-2.conf
和foo-3.conf
) 儲存在/etc
中。
請執行以下步驟將其他檔案新增至替代項中:
將組態檔案複製到
/etc
中:tux >
sudo
cp foo-{2,3}.conf /etc
將 man 頁面複製到
/usr/local/man/man1
目錄中:tux >
sudo
cp foo-{2,3}.1.gz /usr/local/man/man1/
使用
--slave
選項將從屬連結新增至主程序檔:tux >
sudo
update-alternatives --install \ /usr/local/bin/foo foo /usr/local/bin/foo-2 200 \ --slave /usr/local/man/man1/foo.1.gz \ foo.1.gz \ /usr/local/man/man1/foo-2.1.gz \ --slave /etc/foo.conf \ foo.conf \ /etc/foo-2.conf
tux >
sudo
update-alternatives --install \ /usr/local/bin/foo foo /usr/local/bin/foo-3 300 \ --slave /usr/local/man/man1/foo.1.gz \ foo.1.gz \ /usr/local/man/man1/foo-3.1.gz \ --slave /etc/foo.conf \ foo.conf \ /etc/foo-3.conf
檢查主連結:
foo - auto mode link best version is /usr/local/bin/foo-3 link currently points to /usr/local/bin/foo-3 link foo is /usr/local/bin/foo slave foo.1.gz is /usr/local/man/man1/foo.1.gz slave foo.conf is /etc/foo.conf /usr/local/bin/foo-2 - priority 200 slave foo.1.gz: /usr/local/man/man1/foo-2.1.gz slave foo.conf: /etc/foo-2.conf /usr/local/bin/foo-3 - priority 300 slave foo.1.gz: /usr/local/man/man1/foo-3.1.gz slave foo.conf: /etc/foo-3.conf
如果您使用 update-alternatives --config foo
將連結變更為 foo-2
,則所有從屬連結也會隨之變更。
19 基本網路知識 #
Linux 提供所有必要的網路工具及功能,以整合到所有類型的網路結構。可以透過 YaST 設定使用網路卡進行的網路存取。也可使用手動方式來設定組態。本章僅討論基本機制及相關的網路組態檔案。
Linux 及其他 Unix 作業系統使用 TCP/IP 通訊協定。它不是單一網路通訊協定,而是能夠提供各種服務的網路通訊協定家族的一員。TCP/IP 通訊協定系列中的數種通訊協定中所列的通訊協定用於透過 TCP/IP 在兩部機器之間交換資料。由 TCP/IP 組合而成的各個網路形成了一個跨國網路,也稱為「網際網路」。
RFC 代表要求建議 (Request for Comments)。RFC 是描述作業系統及其應用程式的各種網際網路通訊協定和執行程序的文件。RFC 文件描述網際網路通訊協定的設定。如需有關 RFC 的詳細資訊,請參閱 http://www.ietf.org/rfc.html。
- TCP
傳輸控制通訊協定:連接導向的安全通訊協定。傳輸的資料首先由應用程式當做資料流傳送出去,然後再由作業系統轉換為適當格式。資料送達目的地主機的相關應用程式時,使用的仍是最初傳送的原始資料流格式。TCP 可以判斷在傳輸期間是否有遺失或打亂了任何資料。只要是資料順序很重要的地方,就會執行 TCP。
- UDP
使用者資料包通訊協定:無連接、不安全的通訊協定。要傳送的資料以應用程式產生的封包形式加以傳送。不會保證資料抵達接收者時的順序,而且可能會發生資料遺失的情況。UDP 適用以記錄為導向的應用程式。它的特點是延遲時間比 TCP 短。
- ICMP
網際網路控制訊息通訊協定:這不是用於最終使用者的通訊協定,而是用來發出錯誤報告的特殊控制通訊協定,能夠控制參與 TCP/IP 資料傳輸的機器的行為。此外,它還提供特殊的回音模式,可以使用 ping 程式檢視。
- IGMP
網際網路群組管理通訊協定:此通訊協定在實做 IP 多點廣播時控制機器行為。
如 圖形 19.1 「TCP/IP 的簡化層模型」 中所顯示,資料交換發生在不同層。實際的網路層是透過 IP (網際網路通訊協定,Internet Protocol) 進行不安全的資料傳輸。在 IP 的上方,TCP (傳輸控制通訊協定,Transmission Control Protocol) 可以保證資料傳輸某種程度的安全性。IP 層由基礎硬體相依通訊協定提供支援,例如乙太網路。
圖表提供每層的一或兩個範例。層的順序是依據抽象階層 (abstraction level)。最低層非常靠近硬體。不過,最上層對硬體而言幾乎是完全抽象的。每層都有自己的特殊功能。這些特殊功能通常隱含於其描述中。資料連結層及實體層代表所使用的實體網路 (例如乙太網路)。
幾乎所有的硬體通訊協定都是採用封包導向模式。要傳輸的資料會收集在封包中 (無法一次全部傳送)。TCP/IP 封包的大小上限約為 64 KB。由於網路硬體可能有所限制,因此封包一般都很小。乙太網路上資料封包的大小上限約為 1500 個位元組。在乙太網路上傳送資料時,TCP/IP 封包的大小受此數量限制。如果傳送更多資料,則需要由作業系統傳送更多資料封包。
因為每層有自己指定的功能,關於每層的其他資訊必須儲存於資料封包中。這些資訊放在封包的「標頭」中。每層皆在產生的封包前端附加小的資料區塊,稱為通訊協定標頭。有關在乙太網路纜線上傳送的 TCP/IP 資料封包範例,請參閱圖形 19.2 「TCP/IP 乙太網路封包」中的說明。proof sum 位於封包結尾,不在開頭處。這樣可幫助網路硬體簡化程序。
當應用程式在網路上傳送資料時,資料會經過每一層,除實體層外,全部在 Linux 核心執行。每層都負責準備資料使其能夠傳送到下一層。最底層最後要負責傳送資料。接收到資料時則反轉執行整個程序。就如同洋蔥的層級一般,在每層中,會從已傳輸的資料上移除通訊協定標頭。最後,傳輸層負責讓目的地端的應用程式可以使用資料。以這種方式,每層僅直接與上下兩層通訊。對於應用程式而言,資料是透過無線連接還是有線連接傳輸都無關緊要。同樣地,對於資料線而言,只要封包的格式正確,無論傳送的是哪種類型的資料也是無關的。
19.1 IP 位址和路由 #
在此節中的討論僅限於 IPv4 網路。如需有關 IPv6 通訊協定 (IPv4 的後繼者) 的資訊,請參閱第 19.2 節 「IPv6 - 新一代網際網路」。
19.1.1 IP 位址 #
網際網路上的每台電腦都有唯一的 32 位元位址。這些 32 位元 (或 4 位元組) 通常按範例 19.1 「撰寫 IP 位址」中第二列所述寫入。
IP Address (binary): 11000000 10101000 00000000 00010100 IP Address (decimal): 192. 168. 0. 20
採用十進位格式,四位元組以十進位數字系統撰寫,以句號分隔。IP 位址是指定給主機或網路介面。每個 IP 位址在全球範圍內只能使用一次。此規則有例外狀況,但下文中並未提及。
IP 位址中的點表示階層系統。直到 1990 年代,IP 位址仍嚴格地以類別加以分類。然而,事實證明此系統太過死板,因此已停止使用。現在,則是使用無類別路由 (classless routing),即 CIDR (無類別網域間路由,classless interdomain routing)。
19.1.2 網路遮罩和路由 #
網路遮罩用於定義子網路的位址範圍。如果兩台主機位於相同的子網路內,它們之間可直接連接。如果它們不在同一個子網路內,則需要用於處理子網路所有流量之閘道的位址。若要檢查兩個 IP 位址是否位於同一子網路,只要使用網路遮罩 「AND」 兩個位址。如果結果相同,兩個 IP 位址位於同一個網路。如果不同,遠端的 IP 位址,即為遠端介面,只能透過閘道來通訊。
若要瞭解網路遮罩如何作用,請參閱範例 19.2 「將 IP 位址連結到網路遮罩」。網路遮罩由 32 位元組成,可辨認 IP 位址有多少屬於網路。這些位元為 1
標示 IP 位址中的對應位元,即表示為同屬一個網路。對於所有值為 0
的位元,標示其屬於子網路內。這表示愈多位元為 1
,子網路就愈小。因為網路遮罩永遠由多個連續的 1
位元組成,也可以計算網路遮罩內的位元數。在範例 19.2 「將 IP 位址連結到網路遮罩」中,第一個 24 位元的網路也可寫成 192.168.0.0/24
。
IP address (192.168.0.20): 11000000 10101000 00000000 00010100 Netmask (255.255.255.0): 11111111 11111111 11111111 00000000 --------------------------------------------------------------- Result of the link: 11000000 10101000 00000000 00000000 In the decimal system: 192. 168. 0. 0 IP address (213.95.15.200): 11010101 10111111 00001111 11001000 Netmask (255.255.255.0): 11111111 11111111 11111111 00000000 --------------------------------------------------------------- Result of the link: 11010101 10111111 00001111 00000000 In the decimal system: 213. 95. 15. 0
舉另外一個例子:使用相同乙太網路纜線連接的所有機器,通常位於同一個子網路中,而且可以直接存取。即使以交換器或橋接器實際分配子網路時,仍然可以直接連接這些主機。
位於本地子網路外的 IP 位址只能在設定目標網路的閘道時,才能與本地通訊。在大部分的狀況下,只能有一個閘道來處理所有對外的通訊。但是,您也可以為不同的子網路,設定多個閘道。
如果已經設定閘道,所有的外部 IP 封包會傳送到適當的閘道。然後此閘道會試圖以同樣方式傳送封包--主機對主機--直到連結到目標主機或封包 TTL (持續時間) 過期。
- 基本網路位址
這是網路遮罩「及」網路中的任何位址,如
Result
下的範例 19.2 「將 IP 位址連結到網路遮罩」 所顯示。此位址不能指定給任何主機。- 廣播位址
這可以解釋為:「存取此子網路中的所有主機。」。若要產生此位址,網路遮罩會以二進位格式反轉,連結到具有邏輯 OR 的基本網路位址。因此以上範例會得到 192.168.0.255。此位址無法指派給任何主機。
- 本地主機
位址
127.0.0.1
是指定到每個主機上的「「迴路裝置」」(loopback device)。使用此位址以及完整迴路網路127.0.0.0/8
中的所有位址 (使用 IPv4 定義),可以設定與您自己機器之間的連接。如果使用 IPv6,則只有一個迴路位址 (::1
)。
因為 IP 位址在全世界必須是唯一的,您不能選取隨機位址。如果要設立私人 IP 結構的網路,有三種位址網域可以使用。這些將無法從其他網際網路取得連結,因為他們無法透過網路傳送。這些位址網域在 RFC 1597 指定並列於 表格 19.1 「私人 IP 位址網域」 中。
網路/網路遮罩 |
領域 |
---|---|
|
|
|
|
|
|
19.2 IPv6 - 新一代網際網路 #
IBM Z 硬體的 CTC 和 IUCV 網路連接不支援 IPv6。
由於全球資訊網 (WWW) 的出現,過去十五年內,越來越多的電腦透過 TCP/IP 進行通訊,網際網路的規模發生了爆炸性的增長。自從 CERN 的 Tim Berners-Lee (http://public.web.cern.ch) 於 1990 年發明 WWW 以來,網際網路主機的數量從幾千台成長為幾百萬台。
如前面所述,IPv4 位址僅由 32 個位元組成。而且,損失了一些 IP 位址 — 由於組織網路的方式,使得這些 IP 位址無法使用。您的子網路中可用的位址數量是位元數的平方減 2。例如,子網路有 2 個、6 個或 14 個位址可用。例如,如果要連接 128 個主機到網際網路,則子網路需要 256 個 IP 位址,但是其中只有 254 個可用,因為子網路結構本身需要用掉兩個 IP 位址:廣播與基本網路位址。
在目前的 IPv4 通訊協定之下,DHCP 或 NAT (網路位址轉譯,Network Address Translation) 是典型的機制,可用來避免位址可能不足的問題。搭配保持私人和公用位址空間分開的方式,能夠減輕短少的情形。其中產生的問題是在於其組態,設定麻煩且難於維護。若要在 IPv4 網路中設定主機,需要一些位址項目,如主機自己的 IP 位址、子網路遮罩、閘道位址,可能還需要名稱伺服器位址。您必須知道所有這些項目,且無法從其他地方取得。
透過 IPv6,位址短少及繁複組態的情形應該都成為過去式了。以下小節說明更多 IPv6 改善的部分及它帶來的好處,還有關於從舊通訊協定轉移到新通訊協定的資訊。
19.2.1 優點 #
新通訊協定帶來的最為重要同時也最為顯著的改進是極大地擴充了可用的位址空間。IPv6 位址是由 128 個位元值組成,而不是傳統的 32 個位元。這樣提供了數以千兆的 IP 位址。
然而,IPv6 位址不僅是在長度方面與之前的位址不同;這些位置的內部結構也不同,可能包含有關系統及其所屬網路的更明確資訊。有關 IPv6 的詳細資訊,可以在 第 19.2.2 節 「位址類型和結構」 中找到。
以下列出了新通訊協定的其他優點:
- 自動設定
IPv6 讓網路能夠「「隨插即用」」(plug and play),表示新設定的系統不需經過任何手動設定,即可整合到 (區域) 網路。新主機使用其自動設定組態機制,從鄰近的路由器上可用的資訊取得自己的位址,依賴的是稱為「網路芳鄰探查」(Neighbor Discovery,ND) 的通訊協定。這個方法不需要管理員的介入,而且不需要維護分配位址的中央伺服器,這是 IPv4 的另一個優勢,因為自動位址分配需要 DHCP 伺服器。
但是,如果路由器連接到交換器,則路由器應傳送具有旗標的週期性通告,告知網路中的主機彼此如何進行互動。如需詳細資訊,請參閱 RFC 2462、
radvd.conf(5)
man 頁面以及 RFC 3315。- 機動性
IPv6 能夠同時將數個位址指定給一個網路介面。這樣使用者能夠輕鬆存取多個網路,如同使用行動電話企業提供的國際漫遊服務一般輕鬆自如。當您帶著行動電話出國時,電話只要進入通訊區域就會自動登入國外的服務,這樣無論您身處何地,用同一個號碼都可以聯絡到您,而且您也能像在國內一樣撥打電話。
- 安全通訊
使用 IPv4,網路安全性是附加的功能。IPv6 包括 IPSec 為其中一個核心功能,允許系統在安全的通道上進行通訊,避免網際網路上的外人竊聽。
- 反向相容性
實際上,不可能一次將整個網際網路從 IPv4 切換到 IPv6。因此關鍵在於,兩個通訊協定不僅能夠共存於網際網路上,而且能夠共存於一個系統中。使用相容位址 (IPv4 位址可以輕鬆轉換為 IPv6 位址) 和多個通道可以確保這一點。請參閱第 19.2.3 節 「IPv4 與 IPv6 的共存」。另外,系統可以仰賴「雙重堆疊 IP」(Dual Stack IP) 技術,同時支援這兩種通訊協定,這表示系統有兩個完全分開的網路堆疊,如此一來,兩種通訊協定版本不會相互干擾。
- 透過多路廣播自訂量身訂做的服務
利用 IPv4,有些服務 (如 SMB) 需要廣播它們的封包到區域網路上的所有主機。IPv6 使伺服器能夠透過多點傳播對主機定址 (即將多個主機做為群組的一部分定址),因而提供了更精細的方法。這種方法與透過廣播對所有主機定址,或透過單點傳播個別對每個主機定址均不同。定址為群組的主機,取決於具體的應用程式。例如,有些預先定義的群組可以定址所有名稱伺服器 (「所有名稱伺服器多點傳播群組」) 或所有路由器 (「所有路由器多點傳播群組」)。
19.2.2 位址類型和結構 #
如上所述,目前的 IP 通訊協定存在兩個重要限制:IP 位址日益短缺,並且設定網路、維護路由表的任務變得越來越複雜繁重。IPv6 透過擴充位址空間到 128 個位元解決了第一個問題。透過引入階層位址結構,結合尖端網路位址配置技術及多重定址功能 (將數個位址指定給同一個裝置,進而支援對多個網路的存取),第二個問題也得到緩解。
使用 IPv6 時,瞭解三種不同類型的位址是很有用的:
- 單點傳播
這類位址恰好與一個網路介面有關聯。這類位址的封包僅傳送到一個目的地。因此,單點廣播位址用來傳送封包到區域網路或網際網路上的個別主機。
- 多點傳播
這類位址與一組網路介面有關聯。這類位址的封包會傳送到屬於該組的所有目的地。多點傳播位址主要由特定網路服務使用,可直接與特定主機群組通訊。
- 任點廣播 (Anycast)
這類位址與一組介面有關聯。這類位址的封包會根據基礎路由通訊協定的原則,傳送到最靠近傳送者的群組成員。使用任點廣播位址,讓主機更易於找出在指定網路區域中提供特定服務的伺服器。相同類型的所有伺服器擁有一樣的任點廣播位址。只要主機要求服務,它會從最靠近位置的伺服器接收回覆,由路由通訊協定決定。如果此伺服器因為某種原因失敗,通訊協定會自動選取第二個最靠近的伺服器,或是選取第三個伺服器,依此類推。
IPv6 位址由八個四位數欄位組成,每個都代表 16 個位元,以十六進位標記法寫入。位址與位址之間以冒號 (:
) 分隔。指定欄位內的任何前導零位元組可以刪除,但是欄位內或尾端的零不能刪除。另一個慣例是多於四個連續的零位元組可能會摺疊成兩個冒號。然而,每個位址只允許一個 ::
。這類的簡略的標記法,顯示於範例 19.3 「範例 IPv6 位址」 中,其中三行都是代表相同的位址。
fe80 : 0000 : 0000 : 0000 : 0000 : 10 : 1000 : 1a4 fe80 : 0 : 0 : 0 : 0 : 10 : 1000 : 1a4 fe80 : : 10 : 1000 : 1a4
IPv6 位址的每個部分都有定義的功能。第一個位元組形成字首,指定位址類型。中間的部分是位址的網路部分,但是可能不會使用。位址的尾端形成主機部分。透過 IPv6,在位址尾端的斜線後表示字首的長度,可以定義網路遮罩。位址如 範例 19.4 「指定字首長度的 IPv6 位址」 中所示,包含的資訊是形成位址網路部分的前 64 個位元以及形成其主機部分的最後 64 個位元。換句話說,64
表示網路遮罩從左邊開始填入 64 個 1 位元值。就像 IPv4 一樣,IP 位址使用 AND 結合網路遮罩的值,判斷主機是否位於相同的子網路或在另一個子網路。
fe80::10:1000:1a4/64
IPv6 知道關於數個字首的預定類型。各種 IPv6 字首中列出了其中的一部分。
00
IPv4 位址與透過 IPv6 的 IPv4 相容位址。這些位址用來維護與 IPv4 的相容性。其使用仍然要求路由器能夠轉譯 IPv6 封包為 IPv4 封包。數個特殊的位址,如迴路裝置的位址,也有此字首。
2
或3
做為第一個數字可彙總的全域單點廣播位址。類似 IPv4,可以指定介面來構成特定子網路的部分。目前有下列位址空間:
2001::/16
(產品品質位址空間) 與2002::/16
(6to4 位址空間)。fe80::/10
連結本地位址。不應路由具有這種字首的位址,因此僅能從相同的子網路內進行連接。
fec0::/10
本地網站位址。這些位址可以傳送,但是僅能在所屬組織的網路內傳送。事實上,它們等同於目前私人網路位址空間的 IPv6 (例如,
10.x.x.x
)。ff
這些都是多點傳播位址。
單點廣播位址由三個基本元件組成:
- 公用拓撲
第一個部分 (也包含上述的其中一種字首) 用來透過公用網際網路傳送封包。它包含了有關提供網際網路存取的公司或機構資訊。
- 站點拓樸
第二個部分包含有關傳送封包的目的地子網路的路由資訊。
- 介面識別碼 (Interface ID)
第三個部分識別傳送封包的介面。它也允許 MAC 形成部分的位址。這個前提是 MAC 在全球是唯一的,由硬體廠商在裝置中編碼固定識別碼,可相當程度地簡化組態程序。事實上,結合前 64 個位址位元形成
EUI-64
記號,加上從 MAC 取得的最後 48 個位元,而其餘的 24 個位元則包含有關記號類型的特殊資訊。如此一來,就可以給沒有 MAC 的介面指定EUI-64
記號,例如以 PPP 為基礎的介面。
在此基本結構的最上層,IPv6 會分辨五種不同類型的單點廣播位址:
::
(未指定的)在首次啟始化介面時 (此時尚無法透過其他方法確定位址),主機會使用此位址做為其來源位址。
::1
(迴路)迴路裝置的位址。
- IPv4 相容位址
IPv6 位址是由 IPv4 位址以及由 96 個零位元組成的字首形成的。這類相容性位址用於通道 (請參閱第 19.2.3 節 「IPv4 與 IPv6 的共存」),允許 IPv4 與 IPv6 主機在純 IPv4 環境中彼此通訊。
- 對應至 IPv6 的 IPv4 位址
這類位址以 IPv6 標記法指定純 IPv4 位址。
- 本地位址
有兩種位址類型用於本地:
- 連結本地
這類位址僅能用於本地子網路。不應將此類型之來源位址或目標位址的封包路由到網際網路或其他子網路。這些位址包含特殊字首 (
fe80::/10
) 以及網路卡的介面識別碼,加上由空位元組所組成的中間部分。自動設定組態以便與屬於相同子網路中的其他主機通訊時,會使用這類位址。- 網站本地
具有這種位址的封包可以路由到其他子網路,但是不能路由到更寬廣的網際網路 — 不得跨越組織內部網路。這類位址用於內部網路,而且等同於 IPv4 所定義的私人位址空間。它們包含特殊字首 (
fec0::/10
)、介面 ID 以及指定子網路 ID 的 16 位元欄位。同樣地,餘下的將填入零位元組。
因為引入了 IPv6 這種全新的功能,所以每個網路介面通常會取得數個 IP 位址,其優點是可透過相同介面存取數個網路。其中一個網路可以使用 MAC 和已知的字首以完全自動化的方式設定,在啟用 IPv6 (使用連結本地位址) 後可以連接區域網路上的所有主機。利用形成位址部分的 MAC,全球使用的任何 IP 位址都成為唯一的。位址的唯一變數部分,是指定網站拓撲和公用拓撲,該部分視主機目前正在操作的實際網路而定。
如果主機要在不同的網路之間往返,至少需要兩個位址。其中一個,即主位址,不僅包含了介面識別碼,也包含了其通常所屬之主網路 (及其對應字首) 的識別碼。主位址是靜態位址,因此它通常不會變更。儘管如此,預定要送到行動主機的所有封包,還是可以傳送到主位址,無論是在主網路或其他外部網路中操作。這可藉由 IPv6 全新功能來達成,如「無狀態自動設定」與「網路芳鄰探查」。除了其主位址外,行動主機也取得一或多個其他的位址,這些位址屬於漫遊的外部網路。這些外部網路稱為 care-of 位址。主網路具有封包在外部漫遊時轉寄預定要送到主機的裝置。在 IPv6 環境中,這個任務是由主代理程式執行的,它會取得所有預定要送到主位址的封包,透過通道轉送它們。另一方面,預定送到 care-of 位址的封包會直接傳送到行動主機,不會特別繞行。
19.2.3 IPv4 與 IPv6 的共存 #
連接網際網路的所有主機從 IPv4 轉移到 IPv6 是一種漸進程序。這兩種通訊協定某些時候會共存。在一個系統上共存,可保證執行兩種通訊協定的「雙重堆疊」。但這仍然沒有解決啟用了 IPv6 的主機如何與 IPv4 主機通訊,以及應如何透過目前的網路 (絕大部分都以 IPv4 為基礎) 傳輸 IPv6 封包的問題。最佳的解決方案是提供通道及相容性位址 (請參閱第 19.2.2 節 「位址類型和結構」)。
IPv6 主機或多或少孤立於 (全球) IPv4 網路間,可透過通道通訊:IPv6 封包會被包成 IPv4 封包,在 IPv4 網路中移動。兩個 IPv4 主機之間的連接,稱為「通道」。為實現此功能,封包必須包含 IPv6 目的地位址 (或對應字首) 以及通道接收端上遠端主機的 IPv4 位址。基本通道可以根據主機管理員之間的協議「手動」設定;這也稱為「靜態通道」。
不過,靜態通道的組態及維護通常需要密集勞力,才能使用它們應付每天的通訊需求。因此,IPv6 提供三種不同的「動態通道」方法:
- 6over4
IPv6 封包會自動封裝成 IPv4 封包,透過能夠多點傳播的 IPv4 網路進行傳送。IPv6 的訣竅是將整個網路 (網際網路) 視為一個大型的區域網路 (LAN)。如此即能自動判定 IPv4 通道的接收端。然而,這個方法不能過多地延伸,而且不易推廣,因為 IP 多點傳播在網際網路上尚未普及。所以,它僅能為啟用多點傳播的小型公司或機構的網路提供解決方案。這個方法的規格詳述於 RFC 2529。
- 6to4
利用此方法,IPv4 位址會自動從 IPv6 位址產生,使得隔離的 IPv6 主機能夠在 IPv4 網路上通訊。不過,用此方法在隔離的 IPv6 主機與網際網路之間通訊時存在一些問題。該方法詳述於 RFC 3056。
- IPv6 通道仲介
這個方法仰賴提供 IPv6 主機專屬通道的特殊伺服器。詳述於 RFC 3053。
19.2.4 設定 IPv6 #
若要設定 IPv6,通常不需要在個別工作站中做任何變更。IPv6 預設會開啟這個選項。若要在安裝的系統上停用或啟用 IPv6,請使用 YaST root
身分輸入 modprobe
-i ipv6
。載入 IPv6 模組後無法將其卸載。
由於 IPv6 的自動組態概念,網路卡會在連結本地網路中指定一個位址。工作站通常不會進行路由表格管理。工作站可使用「路由器通告通訊協定」,向網路路由器查詢應使用的前置號碼和閘道。可使用 radvd 程式來設定 IPv6 路由器。此程式會通知工作站該 IPv6 位址應使用的前置號碼和路由器。或者,也可使用 zebra/quagga 自動設定位址和路由的組態。
如需如何使用 /etc/sysconfig/network
檔案設定各種通道類型的資訊,請參閱 ifcfg-tunnel
的 man 頁面 (man ifcfg-tunnel
)。
19.2.5 更多資訊 #
上述綜覽沒有完整地涵蓋 IPv6 主題。如果要深入瞭解該新通訊協定,請參閱以下線上文件和書籍:
- http://www.ipv6.org/
所有有關 IPv6 的入門資訊。
- http://www.ipv6day.org
啟動您 IPv6 網路所需的所有資訊。
- http://www.ipv6-to-standard.org/
啟用 IPv6 產品的清單。
- http://www.bieringer.de/linux/IPv6/
在此處可找到 Linux IPv6-HOWTO 和許多與此主題相關的連結。
- RFC 2460
有關 IPv6 的基本 RFC。
- IPv6 essentials
描述此主題所有重要面向的書籍,《IPv6 Essentials》由 Silivia Hagen 所著 (ISBN 0-596-00125-8)。
19.3 名稱解析 #
DNS 協助指定 IP 位址給一或多個名稱以及指定名稱給 IP 位址。在 Linux 中,這種轉換通常是由已知為 bind 的特殊類型軟體執行的。處理這個轉換的機器稱為「名稱伺服器」(name server)。所有名稱元件之間以句號分隔,它們共同組成一個階層系統。但是,名稱階層與上述的 IP 位址階層無關。
考慮使用完整名稱,如 jupiter.example.com
,以 hostname.domain
格式來寫入。完整名稱,也稱為完全合格的網域名稱 (FQDN),由主機名稱和網域名稱 (example.com
) 組成。後者也包含了「最上層網域」(top level domain) 或 TLD (com
)。
TLD 指定因為過去的緣故變得相當混淆。習慣上,美國使用三個字母的網域名稱。全世界的其他國家,則是使用兩個字母的 ISO 國際代碼為標準。除此之外,2000 年引入了較長的 TLD,代表特定活動範圍 (例如,.info
、.name
、.museum
)。
在早期的網際網路 (1990 年前),是使用檔案 /etc/hosts
儲存網際網路上所有機器的代表名稱。這種方式,對於連接到網際網路、快速增長的電腦數量層面而言,很快就證實是不切實際的。基於此因素,又開發出分散式的資料庫,以廣泛分散的方式來儲存主機名稱。這種資料庫與名稱伺服器類似,沒有有關網際網路上所有主機的立即可用資料,但是可以分散要求到其他名稱伺服器。
階層的最上層是由「root 名稱伺服器」(root name server) 所使用。這些 root 名稱伺服器管理最上層網域,且由「網路資訊中心」(Network Information Center,NIC) 負責管理。每個 root 名稱伺服器知道負責指定最上層網域的名稱伺服器。有關最上層網域 NIC 的資訊可從 http://www.internic.net 取得。
DNS 的功能不只是解析主機名稱。名稱伺服器也知道哪個主機,即「郵件交換器」(Mail Exchanger,MX),負責接收該領域的電子郵件。
若要讓您的機器能夠解析 IP 位址,它必須知道至少一個名稱伺服器及其 IP 位址。使用 YaST 可輕鬆指定此類名稱伺服器。如需使用 SUSE® Linux Enterprise Server 設定名稱伺服器存取組態的資訊,請參閱第 19.4.1.4 節 「設定主機名稱和 DNS」。關於設定您自己的名稱伺服器的資訊,請參閱第 31 章 「網域名稱系統」。
whois
通訊協定與 DNS 密切相關。利用此程式,可快速找出負責指定網域的伺服器。
.local
最上層網域將被解析程式視為連結本地網域。DNS 要求將做為多點傳播 DNS 要求予以傳送,而非通常的 DNS 要求。如果已在名稱伺服器組態中使用了 .local
網域,則必須在 /etc/host.conf
中關閉此選項。如需詳細資訊,請參閱 host.conf
手冊頁。
若要在安裝期間關閉 MDNS,請使用 nomdns=1
開機參數。
如需有關多點傳播 DNS 的詳細資訊,請參閱 http://www.multicastdns.org。
19.4 使用 YaST 設定網路連接 #
Linux 可支援多種網路類型。大多數使用不同的裝置名稱和組態檔,會分佈在檔案系統的不同位置。要更瞭解手動網路組態的綜覽,請參閱第 19.5 節 「手動設定網路連接」。
已建立連結的所有網路介面 (已連接網路線纜) 將自動進行設定。可隨時在安裝的系統上設定其他的硬體。以下幾節將說明 SUSE Linux Enterprise Server 支援之所有網路連接類型的網路組態。
IBM Z 平台支援可熱插拔網路卡,但不支援透過 DHCP 自動將它們進行網路整合 (與 PC 情況相同)。偵測到網路卡後,您需要手動設定介面。
19.4.1 使用 YaST 設定網路卡 #
若要在 YaST 中設定以太網路卡或 Wi-Fi/藍芽卡,請選取
› 。啟動模組後,YaST 將顯示「 」對話方塊,其中包含四個索引標籤:「 」、「 」、「 」和「 」。 」索引標籤可設定一般網路選項,例如網路設定方法、IPv6 和一般 DHCP 選項。如需詳細資訊,請參閱「第 19.4.1.3 節 「設定未偵測到的網路卡」。若要變更所設定網路卡的組態,請參閱第 19.4.1.2 節 「變更網路卡的組態」。
」索引標籤包含有關已安裝網路介面與組態的資訊。此處會列出所有正確偵測到之網路卡的名稱。在此對話方塊中,您可以手動設定新網路卡、移除或變更其組態。若要手動設定未自動偵測到的網路卡,請參閱使用「第 19.4.1.4 節 「設定主機名稱和 DNS」。
」索引標籤可設定機器的主機名稱以及要使用伺服器的名稱。如需詳細資訊,請參閱 」索引標籤用於設定路由組態。如需詳細資訊,請參閱19.4.1.1 設定全域網路選項 #
使用 YaST
模組的「 」索引標籤,可以設定重要的全域網路選項,例如使用 NetworkManager、IPv6 和 DHCP 用戶端選項。這些設定適用於所有網路介面。NetworkManager 現在由 SUSE Linux Enterprise Workstation Extension 提供。若要安裝 NetworkManager,請啟用 Workstation Extension 儲存庫,然後選取 NetworkManager 套件。
在「nm-applet
設定網路選項,且「 」模組的「 」、「 」和「 」索引標籤都會處於停用狀態。如需 NetworkManager 的詳細資訊,請參閱 SUSE Linux Enterprise Desktop 文件。
在「
」中,選擇是否要使用 IPv6 協定。可以同時使用 IPv6 和 IPv4。預設會啟用 IPv6。但是,在不使用 IPv6 通訊協定的網路中,停用 IPv6 通訊協定時回應較快。若要停用 IPv6,請停用「 」。如果停用了 IPv6,核心將不再自動載入 IPv6 模組。重新開機後會套用此設定。在「
」中,設定 DHCP 用戶端的選項。在一個網路中,每個 DHCP 用戶端的「 」均不能相同。若將其留為空白,則預設會使用網路介面的硬體位址。但是,如果您要使用同一個網路介面執行多個虛擬機,因此會使用同一個硬體位址,則請在此處指定不限格式的唯一識別碼。
「AUTO
,將傳送目前的主機名稱 (即 /etc/HOSTNAME
中定義的主機名稱)。將選項欄位留為空白則不會傳送主機名稱。
如果您不希望根據 DHCP 的資訊變更預設路由,請停用「
」。19.4.1.2 變更網路卡的組態 #
若要變更網路卡的組態,請在 YaST 的「
› 」中偵測到的網路卡清單中選取網路卡,然後按一下「 」。「 」對話方塊隨即出現,您可以使用「 」、「 」和「 」索引標籤調整網路卡的組態。19.4.1.2.1 設定 IP 位址 #
在「
」對話方塊的「 」索引標籤中,可以設定網路卡的 IP 位址或確定其 IP 位址的方式。系統支援 IPv4 和 IPv6 兩種位址。您可以為網路卡設定「 」(適用於 Bonding 裝置)、「 」(IPv4 或 IPv6),也可以透過「 」或/與「 」為其指定「 」。若要使用「
」,請選擇是使用「 」(適用於 IPv4)、「 」(適用於 IPv6),還是「 」。若情況適合,系統會將安裝時第一個可用的已連結網路卡自動設定為使用透過 DHCP 設定的自動位址。
在 IBM Z 平台上,只有擁有 MAC 位址的網路卡才支援基於 DHCP 的位址組態。此情況只適用於 OSA 和 OSA 高速網路卡。
若您用的是 DSL 連線而非 ISP (網際網路服務提供者) 指定的靜態 IP,還應該使用 DHCP。若您決定使用 DHCP,請在 YaST 網路卡組態模組中開啟「
」對話方塊,於「 」索引標籤的「 」中設定詳細資料。若您將虛擬主機設定為透過同一個介面與不同的主機進行通訊,則需要使用「 」來分辨它們。DHCP 對於用戶端組態是不錯的選擇,但不適用於伺服器組態。若要設定靜態 IP 位址,請如下執行:
在 YaST 網路卡組態模組的「
」索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下「 」。在「
」索引標籤中,選擇「 」。輸入「
」。使用 IPv4 和 IPv6 位址都可以。在「 」中輸入網路遮罩。若使用 IPv6 位址,請以/64
格式使用「 」做為字首長度。您還可以選擇為此位址輸入完全合法的「
」,它將會寫入/etc/hosts
組態檔案中。按
。若要啟用組態,請按一下「
」。
在啟動網路介面期間,wicked
會檢查載體,並且只有在偵測到連結之後,才會套用 IP 組態。如果不論連結狀態如何,您都需要套用該組態 (例如,您要測試監聽某個位址的服務),則可以在 /etc/sysconfig/network/ifcfg
內的介面組態檔案中新增變數 LINK_REQUIRED=no
,以跳過連結偵測。
另外,您可以使用變數 LINK_READY_WAIT=5
來指定等待連結的逾時值 (以秒為單位)。
如需 ifcfg-*
組態檔案的詳細資訊,請參閱第 19.5.2.5 節 「/etc/sysconfig/network/ifcfg-*
」和 man 5 ifcfg
。
若使用靜態位址,系統將不會自動設定名稱伺服器和預設閘道。若要設定名稱伺服器,請依第 19.4.1.4 節 「設定主機名稱和 DNS」 中的說明進行。若要設定閘道,請依第 19.4.1.5 節 「設定路由」 中的說明進行。
19.4.1.2.2 設定多個位址 #
一個網路裝置可擁有多個 IP 位址。
這些所謂的別名或標籤只能各自用於 IPv4。如果是 IPv6,則會被忽略。使用 iproute2
網路介面時可以使用一或多個地址。
若要使用 YaST 設定網路卡的其他地址,請執行以下步驟:
在 YaST「
」對話方塊的「 」索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下「 」。在「
› 」索引標籤中,按一下「 」。輸入「
」、「 」和「 」。別名中不要包含介面名稱。若要啟用組態,請確認設定。
19.4.1.2.3 變更裝置名稱和 udev 規則 #
可以在網路卡正在使用中時變更它的裝置名稱。也可以決定網路卡是否應由 udev 透過其硬體 (MAC) 位址或透過匯流排 ID 識別。後一個選項更適合大型伺服器,因為便於熱插拔網路卡。若要使用 YaST 設定這些選項,請執行下列步驟:
在 YaST「
」對話方塊的「 」索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下「 」。移至
索引標籤。目前的裝置名稱顯示在「 」中。按一下「 」。選擇 udev 是應透過網路卡的「
」還是透過「 」來識別網路卡。網路卡目前的 MAC 位址和匯流排 ID 將顯示在對話方塊中。若要變更裝置名稱,請選取「
」選項,然後編輯名稱。若要啟用組態,請確認設定。
19.4.1.2.4 變更網路卡核心驅動程式 #
有些網路卡可能有多個核心驅動程式可供使用。如果網路卡已設定,YaST 可讓您從可用且適合的驅動程式清單中選取要使用的核心驅動程式。還可以為核心驅動程式指定選項。若要使用 YaST 設定這些選項,請執行下列步驟:
在 YaST 網路設定模組的「
」索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下「 」。移至「
」索引標籤。在「
」中選取要使用的核心驅動程式。在 中以=
=VALUE 格式為所選驅動程式輸入任何選項。若要使用多個選項,應以空格將其隔開。若要啟用組態,請確認設定。
19.4.1.2.5 啟動網路裝置 #
若使用結合 wicked
的方法,則可以將裝置設定為在開機時、連接纜線時、偵測到網路卡時啟動,或以手動方式啟動,或永不啟動。若要變更裝置啟動,請執行下列步驟:
在 YaST 的
› 中,於偵測到的網路卡清單中選取一個網路卡,然後按一下 。在
索引標籤中,從 中選擇希望的項目。選擇「
」可在系統開機時啟動裝置。若使用「 」,系統會監控介面,探查是否有實體的連接。若使用 ,會在介面可用時對其進行設定。它與 選項類似,唯一的區別在於如果開機時介面不存在,則不會發生錯誤。選擇「 」可以透過ifup
手動控制介面。選擇 則不會啟動裝置。 與 類似,區別是使用systemctl stop wicked.service
指令不會關閉介面;如果wicked
處於使用中狀態,則network
服務也會處理wicked
服務。若您使用的是 NFS 或 iSCSI 根檔案系統,請使用此選項。若要啟用組態,請確認設定。
在透過網路將根分割區掛接為 NFS 共用的 (無磁碟) 系統中,設定 NFS 共用可供存取的網路裝置時請保持謹慎。
將系統關閉或重新開機時,預設的處理順序是先關閉網路連接,然後卸載根分割區。對於 NFS 根分割區,這種順序會造成問題,因為在尚未與 NFS 共用啟動網路連接的情況下,根分割區無法完全卸載。為防止系統停用相關的網路裝置,請依第 19.4.1.2.5 節 「啟動網路裝置」中所述開啟網路裝置組態索引標籤,然後在 窗格中選取 。
19.4.1.2.6 設定最大傳輸單元大小 #
您可以設定介面的最大傳送單位 (MTU)。MTU 指允許的最大封包大小 (以位元組計)。MTU 越高,頻寬效率就越高。但是,大型封包可能會將慢速介面阻擋一段時間,這會加劇後續封包的延遲。
在 YaST 的
› 中,於偵測到的網路卡清單中選取一個網路卡,然後按一下 。在「
」索引標籤中,從「 」清單中選取所需的項目。若要啟用組態,請確認設定。
19.4.1.2.7 PCIe 多功能裝置 #
支援 LAN、iSCSI 與 FCoE 的多功能裝置受支援。YaST FCoE 用戶端 (yast2 fcoe-client
) 會在額外的欄中顯示私人旗標,讓使用者可以選取用於 FCoE 的裝置。YaST 網路模組 (yast2 lan
) 會在網路組態中排除「僅供儲存的裝置」。
如需 FCoE 的詳細資訊,請參閱Book “儲存管理指南”, Chapter 16 “乙太網路光纖通道儲存:FCoE”, Section 16.3 “使用 YaST 管理 FCoE 服務”。
19.4.1.2.8 IP-over-InfiniBand (IPoIB) 的 Infiniband 組態 #
在 YaST 的
› 中選取 InfiniBand 裝置,然後按一下 。在「
」索引標籤中,選取一種「 」(IPoIB) 模式:「 」(預設) 或「 」。若要啟用組態,請確認設定。
如需有關 InfiniBand 的詳細資訊,請參閱 /usr/src/linux/Documentation/infiniband/ipoib.txt
。
19.4.1.2.9 設定防火牆 #
您不必依Book “Security and Hardening Guide”, Chapter 24 “Masquerading and firewalls”, Section 24.4 “firewalld
”中所述執行詳細的防火牆設定,只需在設定裝置的過程中決定裝置的基本防火牆組態。請執行下列步驟:
開啟 YaST 的
› 模組。在「 」索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下「 」。進入「
」對話方塊的「 」索引標籤。決定您要將介面指定至的「
」。可用的選項如下:- 防火牆已停用
只有當防火牆已停用或未執行時,此選項才可用。唯有您的機器位於受外部防火牆保護的更大網路中時,才能使用此選項。
- 自動指定區域
只有當防火牆已啟用時,此選項才可用。防火牆會執行,並且介面會自動指定至防火牆區域。包含關鍵字
any
的區域或外部區域將會用於這類介面。- 內部區域 (不受保護)
防火牆會執行,但不強制執行任何保護此介面的規則。如果您的機器位於受外部防火牆保護的更大網路中,請使用此選項。如果機器具有多個網路介面,此選項也適用於連接到內部網路的介面。
- 非軍事區域
廢除區域是內部網路與 (有潛在風險的) 網際網路之前的另一道防線。從內部網路與網際網路都可連接到指派至此區域的主機,但主機無法連存取內部網路。
- 外部區域
防火牆在此介面上執行,且會完全保護其抵禦其他可能有害的網路流量。此為預設選項。
若要啟用組態,請確認設定。
19.4.1.3 設定未偵測到的網路卡 #
如果未能正確偵測到某個網路卡,該卡將不會包含在已偵測到的網路卡清單中。若您確定您的系統具備網路卡的驅動程式,可手動設定。也可設定特殊的網路裝置類型,如橋接、Bond、TUN 或 TAP。若要設定未偵測到的網路卡或特殊裝置,請執行下列步驟:
在 YaST 的
› › 對話方塊中,按一下 。在「
」對話方塊中,從可用的選項中設定介面的「 」和「 」。如果網路卡為 USB 裝置,請啟用相應的核取方塊,並按 結束此對話方塊。否則,您可以根據需要定義要用於網路卡的核心 以及卡的 。在「
」中,可以設定ifup
用於介面的ethtool
選項。如需可用選項的資訊,請參閱ethtool
手冊頁。如果選項字串以
-
開頭 (例如,-K INTERFACE_NAME rx on
),則會用目前的介面名稱取代字串中的第二個單字。否則 (例如,autoneg off speed 10
),ifup
會在開頭加上-s INTERFACE_NAME
。按一下「
」。- 」、「 」和「 」索引標籤中設定介面的所有必要選項,例如 IP 位址、裝置啟動或防火牆區域。如需組態選項的詳細資訊,請參閱
若您介面裝置類型選擇「
」,請在下一個對話設定無線連接。若要啟用新的網路組態,請確認設定。
19.4.1.4 設定主機名稱和 DNS #
若您在安裝期間未變更網路組態,且已有乙太網路卡可用,則系統會自動為您的電腦產生主機名稱並啟動 DHCP。同時也會自動產生您主機要整合至網路環境所需的的名稱服務資訊。若網路位址設定使用 DHCP,則網域名稱伺服器清單會自動填入適當的資料。若您希望使用靜態設定,請手動設定數值。
若要變更您電腦的名稱並調整名稱伺服器搜尋清單,請如下執行:
在 YaST 的
› 網路設定 索引標籤。輸入
。請注意,主機名稱是全域的,將套用於所有網路介面。若您要使用 DHCP 獲取 IP 位址,則電腦的主機名稱將由 DHCP 伺服器自動設定。若要連接到其他網路,應禁止此行為,因為其他網路可能會指定其他主機名稱,而且在執行時期變更主機名稱會混淆圖形桌面。若要停止使用 DHCP 獲取 IP 位址,請停用「
」。在
中,選取修改 DNS 組態 (名稱伺服器、搜尋清單、/run/netconfig/resolv.conf
檔案的內容) 的方式。若選取「
」選項,則組態由netconfig
程序檔來處理,這樣會將靜態定義的資料 (使用 YaST 或在組態檔案中) 與從 DHCP 用戶端或 NetworkManager 動態取得的資料合併。一般情況均可採用此預設規則。若選取
選項,則無法使用netconfig
修改/run/netconfig/resolv.conf
檔案。但是可以手動編輯此檔案。若選取「
」選項,則應指定定義合併規則的「 」字串。該字串包含要視為設定之有效來源的介面名稱清單 (以逗號分隔)。除完整的介面名稱外,還允許使用基本萬用字元來對應多個介面。例如,eth* ppp?
將先找到所有 eth,然後找到所有 ppp0-ppp9 介面。以下為指定如何套用/etc/sysconfig/network/config
檔案中所定義之靜態設定的兩個特定規則值:STATIC
靜態設定需要與動態設定合併在一起。
STATIC_FALLBACK
只有動態組態不可用時才會使用靜態設定。
如需詳細資訊,請參閱
netconfig
(8) 的 man 頁面 (man 8 netconfig
)。輸入「
」並填寫「 」清單。名稱伺服器必須透過 IP 位址 (例如 192.168.1.116) 而非主機名稱指定。在「 」索引標籤中指定的名稱就是用於解析主機名稱 (沒有指定網域) 的網域名稱。如果使用多個「 」,請以逗號或空格將網域隔開。若要啟用組態,請確認設定。
還可以使用 YaST 透過指令行編輯主機名稱。YaST 執行的變更會立即生效 (手動編輯 /etc/HOSTNAME
檔案的情況除外)。若要變更主機名稱,請使用下列指令:
root #
yast dns edit hostname=HOSTNAME
若要變更名稱伺服器,請使用下列指令:
root #
yast dns edit nameserver1=192.168.1.116root #
yast dns edit nameserver2=192.168.1.117root #
yast dns edit nameserver3=192.168.1.118
19.4.1.5 設定路由 #
若要讓您的電腦與其他電腦和其他網路通訊,必須提供路由資訊,以讓網路流量採取正確的路徑。若使用 DHCP,會自動提供此資訊。若使用靜態設定,必須手動新增此資料。
在 YaST 中,移至「
› 」。輸入「
」的 IP 位址 (必要時可以輸入 IPv4 和 IPv6)。預設閘道會比對每個可能的目的地,但是如果某個符合所需位址的路由表項目已經存在,就會使用該項目,而非透過預設閘道使用預設路由。可以在「
」中輸入更多項目。輸入「 」網路 IP 位址、「 」IP 位址和「 」。選取要透過其將流量路由至所定義網路的「 」(減號表示任意裝置)。若要省略這些值的任何一個,請使用減號「-
」。若要在表中輸入預設閘道,請在「 」欄位中使用「default
」。注意:路由優先程度若使用了多個預設路由,則可以指定權值選項確定哪個路由的優先程度較高。若要指定度量選項,請在
中輸入- metric NUMBER
。權值最高的路由做為預設路由。如果該網路裝置已解除連接,將會移除其路由,使用下一個路由。如果系統是路由器,請視需要在「
」中啟用「 」和「 」。若要啟用組態,請確認設定。
19.4.2 IBM Z:設定網路裝置 #
SUSE Linux Enterprise Server for IBM Z 支援數種類型的網路介面。您可使用 YaST 設定所有類型。
19.4.2.1 qeth-hsi 裝置 #
若要將 qeth-hsi
(Hipersocket) 介面新增至安裝的系統中,請啟動 YaST 中的 › 模組。選取其中一個標示為「 」的裝置做為「讀取」裝置位址,然後按一下「 」。輸入讀取通道、寫入通道和控制通道的裝置編號 (裝置編號格式的範例:0.0.0800
)。然後按「下一步」。在 對話方塊中,為新介面指定 IP 位址和網路遮罩,然後按 和 結束網路組態。
19.4.2.2 qeth-ethernet 裝置 #
若要將 qeth-ethernet
(IBM OSA Express 乙太網路卡) 介面新增到安裝好的系統,請啟動 YaST 中的 › 模組。選取其中一個標記為 的裝置來做為「讀取」裝置位址,然後按一下 。輸入讀取通道、寫入通道和控制通道的裝置編號 (裝置編號格式的範例:0.0.0700
)。輸入所需的連接埠名稱、連接埠號碼 (如適用)、一些其他選項、您的 IP 位址以及適用的網路遮罩。按「 」與「 」結束網路組態。
19.4.2.3 ctc 裝置 #
若要將 ctc
(IBM 平行埠 CTC 介面卡) 介面新增到安裝好的系統,請啟動 YaST 中的 › 模組。選取一個標示為「 」的裝置做為您的讀取通道,然後按一下「 」。選擇適合您裝置的「 」(通常為「 」)。指定您和遠端合作夥伴的 IP 位址。如有需要,可透過「 › 」來調整 MTU 的大小。按「 」與「 」結束網路組態。
不建議使用此介面。未來的 SUSE Linux Enterprise Server 版本將不支援此介面。
19.4.2.4 lcs 裝置 #
若要將 lcs
(IBM OSA-2 介面卡) 介面新增到安裝好的系統,請啟動 YaST 中的 › 模組。選取標示為「 」的裝置,然後按一下「 」。輸入所需的連接埠號碼、一些其他選項、您的 IP 位址以及適用的網路遮罩。按「 」與「 」結束網路組態。
19.4.2.5 IUCV 裝置 #
若要將 iucv
(IUCV) 介面新增到安裝好的系統,請啟動 YaST 中的 › 模組。選取標示為「 」的裝置,並按一下「 」。YaST 會提示您提供 IUCV 合作夥伴的名稱 (「 」)。輸入名稱 (本項目區分大小寫) 然後選取「 」。指定合作夥伴的「 」及「 」。如果需要,在「 」索引標籤中「 」大小。按「 」與「 」結束網路組態。
不建議使用此介面。未來的 SUSE Linux Enterprise Server 版本將不支援此介面。
19.5 手動設定網路連接 #
手動設定網路軟體應為最後採取的替代方案。建議使用 YaST。不過,這個有關網路組態的背景資訊也可協助您使用 YaST。
19.5.1 wicked
網路組態 #
名為 wicked
的工具和程式庫提供了一個新的架構用於設定網路。
傳統網路介面管理面臨的其中一項挑戰是,各種不同的網路管理層混雜在一個程序檔中,最多在兩個不同的程序檔中。這些程序檔彼此之間如何互動沒有明確的定義。這會導致出現無法預測的問題、模糊的條件約束和慣例等情況。針對各種不同的情境部署多個特殊入侵層增大了維護負擔。所用的位址組態通訊協定透過 dhcpcd 等精靈來實作,而這些精靈與基礎架構中其他元件的互動相當不通暢。為了持續識別介面,引入了新潮的介面命名規劃,這一規劃需要繁重的 udev 支援。
wicked 的構想是透過多種方法分解問題。它沒有採用任何全新的理念,而是嘗試將不同專案中的想法集中在一起,以期形成一個更好的整體解決方案。
實現此目的的方法之一是使用用戶端/伺服器模型。此方法可讓 wicked 為位址組態等項目定義能夠很好地整合到整個架構中的標準化功能。例如,使用特定的位址組態時,管理員可能要求應該透過 DHCP 或 IPv4 zeroconf 設定介面。在這種情況下,位址組態服務只會從它的伺服器獲得租用,並傳遞到安裝了所要求位址和路由的 wicked 伺服器程序。
分解問題的另一個方法是強制執行分層機製。對於任何類型的網路介面,都可以定義一個 dbus 服務,用於設定網路介面的裝置層 — VLAN、橋接器、結合或半虛擬化裝置。位址組態等常用功能將透過在這些裝置特定服務頂層的聯合服務來實作,而無需專門實作。
wicked 架構使用各種 dbus 服務來實現這兩個方面的功能,這些服務將根據其類型連接至網路介面。本文提供了 wicked 中當前物件階層的簡要綜覽。
每個網路介面以 /org/opensuse/Network/Interfaces
的子物件表示。子物件的名稱由其 ifindex 指定。例如,通常 ifindex 為 1 的迴路介面是 /org/opensuse/Network/Interfaces/1
,註冊的第一個乙太網路介面是 /org/opensuse/Network/Interfaces/2
。
每個網路介面都有一個關聯的「類別」,用於選取該介面支援的 dbus 介面。依預設,每個網路介面的類別為 netif
,wickedd
將自動連接與此類別相容的所有介面。在目前實作中,包括以下介面:
- org.opensuse.Network.Interface
一般網路介面功能,例如,開啟或關閉連結、指定 MTU 等
- org.opensuse.Network.Addrconf.ipv4.dhcp, org.opensuse.Network.Addrconf.ipv6.dhcp, org.opensuse.Network.Addrconf.ipv4.auto
適用於 DHCP、IPv4 zeroconf 等的位址組態服務
除此之外,網路介面可能還需要或者提供特殊的組態機制。例如,對於某個乙太網路裝置,您應該能夠控制連結速度和檢查總數卸載等。為了實現此目的,乙太網路裝置都有一個名為 netif-ethernet
的自己的類別,該類別屬於 netif
的子類別。因此,指定給乙太網路介面的 dbus 介面具有上面列出的所有服務,以及 org.opensuse.Network.Ethernet
服務,後者僅可用於屬於 netif-ethernet
類別的物件。
同樣,橋接器、VLAN、結合裝置或 infiniband 等介面類型也存在適用類別。
您要如何與某個首先需要建立的介面 (例如 VLAN,它實際上是位於乙太網路裝置上的虛擬網路介面) 互動呢?為此,wicked 定義了出廠介面,例如 org.opensuse.Network.VLAN.Factory
。這種出廠介面只提供一個功能,就是讓您建立所需類型的介面。這些出廠介面將連接至 /org/opensuse/Network/Interfaces
清單節點。
19.5.1.1 wicked
架構和功能 #
wicked
服務包含多個部份,如圖形 19.4 「wicked
架構」中所述。
wicked
目前支援以下內容:
使用組態檔案後端來剖析 SUSE 樣式的
/etc/sysconfig/network
檔案。使用內部組態後端以 XML 格式表示網路介面組態。
開啟和關閉「一般」網路介面,例如乙太網路或 InfiniBand、VLAN、橋接器、結合裝置、tun、tap、虛構裝置、macvlan、macvtap、hsi、qeth、iucv 和無線 (目前限制為一個 wpa-psk/eap 網路) 裝置。
內建 DHCPv4 用戶端和內建 DHCPv6 用戶端。
預設啟用的 nanny 精靈有助於在裝置可用 (介面熱插入) 時自動啟動設定的介面,以及在偵測到連結 (載體) 時設定 IP 組態。如需詳細資訊,請參閱第 19.5.1.3 節 「Nanny」。
wicked
實作為一組與 systemd 相整合的 DBus 服務。因此,常用的systemctl
指令都將適用於wicked
。
19.5.1.2 使用 wicked
#
在 SUSE Linux Enterprise 上,預設會執行 wicked
。如果您要檢查目前啟用了哪個元件,以及該元件是否正在執行,請呼叫:
systemctl status network
如果已啟用 wicked
,則會看到類似下面的行:
wicked.service - wicked managed network interfaces Loaded: loaded (/usr/lib/systemd/system/wicked.service; enabled) ...
如果執行的是其他元件 (例如 NetworkManager) 並且您想要切換到 wicked
,請先停止正在執行的元件,然後啟用 wicked
:
systemctl is-active network && \ systemctl stop network systemctl enable --force wicked
如此可啟用 wicked 服務、建立從 network.service
到 wicked.service
的別名連結,並在下次開機時啟動網路。
啟動伺服器程序:
systemctl start wickedd
這會啟動 wickedd
(主要伺服器) 和關聯的要求者:
/usr/lib/wicked/bin/wickedd-auto4 --systemd --foreground /usr/lib/wicked/bin/wickedd-dhcp4 --systemd --foreground /usr/lib/wicked/bin/wickedd-dhcp6 --systemd --foreground /usr/sbin/wickedd --systemd --foreground /usr/sbin/wickedd-nanny --systemd --foreground
然後開啟網路:
systemctl start wicked
或者使用 network.service
別名:
systemctl start network
這些指令使用 /etc/wicked/client.xml
中定義的預設組態來源或系統組態來源。
若要啟用除錯,請在 /etc/sysconfig/network/config
中設定 WICKED_DEBUG
,例如:
WICKED_DEBUG="all"
或者,若要省略一些資訊:
WICKED_DEBUG="all,-dbus,-objectmodel,-xpath,-xml"
使用用戶端公用程式顯示所有介面的介面資訊,或者顯示以 IFNAME 指定的介面的介面資訊:
wicked show all wicked show IFNAME
XML 格式的輸出:
wicked show-xml all wicked show-xml IFNAME
開啟一個介面:
wicked ifup eth0 wicked ifup wlan0 ...
由於未指定組態來源,wicked 用戶端將會檢查 /etc/wicked/client.xml
中為它定義的預設組態來源:
firmware:
iSCSI 開機韌體表 (iBFT)compat:
ifcfg
檔案 — 為相容性而實作
將會套用 wicked
從指定介面的這些來源中取得的任何設定。預期的重要性順序為 firmware
、compat
- 將來這種順序可能會發生變更。
如需詳細資訊,請參閱 wicked
的 man 頁面。
19.5.1.3 Nanny #
Nanny 是一個由事件與規則驅動的精靈,負責熱插拔裝置等非同步或被動性案例。因此,nanny 精靈可幫助啟動或者重新啟動延遲的裝置,或臨時消失的裝置。Nanny 會監視裝置和連結的變化,並整合目前規則集定義的新裝置。由於指定的逾時條件約束的原因,即使 ifup
已結束,Nanny 仍會繼續設定。
依預設,nanny 精靈在系統上處於使用中狀態。可以在 /etc/wicked/common.xml
組態檔案中啟用該精靈:
<config> ... <use-nanny>true</use-nanny> </config>
如果使用此設定,ifup 和 ifreload 會將包含有效組態的規則套用至 nanny 精靈;然後,nanny 將會設定 wickedd
,從而確定支援熱插拔。nanny 將在背景中等待事件或變更 (例如,開啟新的裝置或載體)。
19.5.1.4 啟用多個介面 #
對於結合裝置和橋接器,有效的做法是在一個檔案 (ifcfg-bondX) 中定義整個裝置拓撲,並一次性將它開啟。然後,當您指定 (橋接器或結合裝置的) 頂層介面名稱時,wicked 可以開啟整個組態:
wicked ifup br0
此指令會依適當的順序自動設定橋接器及其相依項,而無需分別列出相依項 (連接埠等)。
若要在一個指令中開啟多個介面:
wicked ifup bond0 br0 br1 br2
若要開啟所有介面:
wicked ifup all
19.5.1.5 將通道與 Wicked 配合使用 #
如果需要將通道與 Wicked 配合使用,可以使用 TUNNEL_DEVICE
。它可用於指定可選的裝置名稱,讓通道繫結到該裝置。通道式封包只會透過此裝置進行路由。
如需詳細資訊,請參閱 man 5 ifcfg-tunnel
。
19.5.1.6 處理增量變更 #
有了 wicked
,當您要重新設定某個介面時,並不需要真正將它關閉 (除非核心有此要求)。例如,若要將另一個 IP 位址或路由新增到靜態設定的網路介面,請將該 IP 位址新增到介面定義,然後再次執行「ifup」操作。伺服器會儘量做到只更新那些已變更的設定。這適用於連結級別的選項,例如裝置 MTU 或 MAC 位址;也適用於網路級別的設定,例如位址、路由,甚至位址組態模式 (例如,從靜態組態轉到 DHCP 時)。
當然,對於合併了多個真實裝置 (例如橋接器或結合裝置) 的虛擬介面,事情會變得有些棘手。對於結合裝置,當裝置運作時,您無法變更某些參數,否則會導致出錯。
但是,您仍可以新增或移除結合裝置或橋接器的子裝置,或者選擇結合裝置的主要介面。
19.5.1.7 Wicked 延伸:位址組態 #
wicked
設計為可使用外圍程序檔延伸。這些延伸可在 config.xml
檔案中定義。
目前支援數種類別的延伸:
連結組態:這些程序檔負責根據用戶端提供的組態來設定裝置的連結層,以及負責將連結層再次拆開。
位址組態:這些程序檔負責管理裝置的位址組態。通常,位址組態和 DHCP 由
wicked
自身管理,但是,可借助延伸來執行。防火牆延伸:這些程序檔可以套用防火牆規則。
通常,延伸中包含一個啟動指令和一個停止指令、一個選擇性的「pid 檔案」,以及要傳遞給程序檔的一組環境變數。
為了說明此延伸的工作原理,請查看 etc/server.xml
中定義的防火牆延伸:
<dbus-service interface="org.opensuse.Network.Firewall"> <action name="firewallUp" command="/etc/wicked/extensions/firewall up"/> <action name="firewallDown" command="/etc/wicked/extensions/firewall down"/> <!-- default environment for all calls to this extension script --> <putenv name="WICKED_OBJECT_PATH" value="$object-path"/> <putenv name="WICKED_INTERFACE_NAME" value="$property:name"/> <putenv name="WICKED_INTERFACE_INDEX" value="$property:index"/> </dbus-service>
此延伸會附加至
<dbus-service>
標記,並定義針對此介面的動作而要執行的指令。此外,宣告可以定義並啟始化傳遞給動作的環境變數。
19.5.1.8 Wicked 延伸:組態檔案 #
您也可以使用程序檔來延伸組態檔案的處理。例如,extensions/resolver
程序檔根據 server.xml
中設定的行為來最終處理租用中的 DNS 更新:
<system-updater name="resolver"> <action name="backup" command="/etc/wicked/extensions/resolver backup"/> <action name="restore" command="/etc/wicked/extensions/resolver restore"/> <action name="install" command="/etc/wicked/extensions/resolver install"/> <action name="remove" command="/etc/wicked/extensions/resolver remove"/> </system-updater>
當 wickedd
中收到更新時,系統更新程式常式將剖析租用,並呼叫解析程式程序檔中的適當指令 (backup
、install
等)。此後便可使用 /sbin/netconfig
或者透過手動寫入 /run/netconfig/resolv.conf
(做為錯誤回復) 來設定 DNS 設定。
19.5.2 組態檔案 #
本節提供網路組態檔的綜覽,並說明其用途和使用的格式。
19.5.2.1 /etc/wicked/common.xml
#
/etc/wicked/common.xml
檔案包含所有應用程式都應使用的通用定義。它源自或包含在位於同一目錄下的其他組態檔案中。儘管您可以使用此檔案允許在所有 wicked
元件間除錯,但建議使用 /etc/wicked/local.xml
檔案來實現此目的。執行維護更新後,/etc/wicked/common.xml
可能會被覆寫,因此所做的變更可能會遺失。/etc/wicked/common.xml
檔案包含預設安裝中的 /etc/wicked/local.xml
,因此通常不需要修改 /etc/wicked/common.xml
。
若要透過將 <use-nanny>
設定為 false
來停用 nanny
,可重新啟動 wickedd.service
,然後執行以下指令來套用所有組態與規則:
tux >
sudo
wicked ifup all
如果 wickedd
、wicked
或 nanny
程式自己的組態檔案不存在,則會嘗試讀取 /etc/wicked/common.xml
。
19.5.2.2 /etc/wicked/server.xml
#
wickedd
伺服器程序會在啟動時讀取 /etc/wicked/server.xml
檔案。該檔案將延伸儲存於 /etc/wicked/common.xml
。除此之外,此檔案還會設定解析器的處理方式以及從 addrconf
要求者 (例如 DHCP) 接收資訊的方式。
建議將對此檔案所需的變更新增至一個由 /etc/wicked/server.xml
納入的單獨檔案 /etc/wicked/server-local.xml
。使用單獨的檔案可以避免所做的變更在更新維護期間遭到覆寫。
19.5.2.3 /etc/wicked/client.xml
#
/etc/wicked/client.xml
用於 wicked
指令。該檔案指定探查由 ibft 管理的裝置時所用程序檔的位置,並可設定網路介面組態的位置。
建議將對此檔案所需的變更新增至一個由 /etc/wicked/server.xml
納入的單獨檔案 /etc/wicked/client-local.xml
。使用單獨的檔案可以避免所做的變更在更新維護期間遭到覆寫。
19.5.2.4 /etc/wicked/nanny.xml
#
/etc/wicked/nanny.xml
設定連結層的類型。建議將特定的組態新增至一個單獨的檔案 /etc/wicked/nanny-local.xml
,以免在維護更新期間遺失所做的變更。
19.5.2.5 /etc/sysconfig/network/ifcfg-*
#
這些檔案包含網路介面的傳統組態。
wicked
和 ifcfg-*
檔案
如果您指定 compat:
字首,wicked
會讀取這些檔案。根據 /etc/wicked/client.xml
中 SUSE Linux Enterprise Server 的預設組態,wicked
將嘗試先讀取這些檔案,然後再讀取 /etc/wicked/ifconfig
中的 XML 組態檔案。
提供的 --ifconfig
參數主要用於測試。如果指定該參數,則不會套用 /etc/wicked/ifconfig
中定義的預設組態來源。
ifcfg-*
檔案包含啟動模式和 IP 位址等資訊。可以使用的參數請參閱 ifup
的手冊頁。此外,如果一個一般設定只能用於一個介面,則檔案 dhcp
和 wireless
中的大多數變數在 ifcfg-*
檔案中都可以使用。但是,/etc/sysconfig/network/config
中的大多數變數是全域變數,在 ifcfg
中無法覆寫它們。例如,NETCONFIG_*
變數就是全域變數。
若要設定 macvlan
和 macvtab
介面,請參閱 ifcfg-macvlan
和 ifcfg-macvtap
的 man 頁面。例如,對於 macvlan 介面,請提供使用以下設定的 ifcfg-macvlan0
:
STARTMODE='auto' MACVLAN_DEVICE='eth0' #MACVLAN_MODE='vepa' #LLADDR=02:03:04:05:06:aa
如需 ifcfg.template
的相關資訊,請參閱第 19.5.2.6 節 「/etc/sysconfig/network/config
、/etc/sysconfig/network/dhcp
和 /etc/sysconfig/network/wireless
」。
IBM Z
IBM Z 不支援 USB。介面檔案的名稱和網路別名包含 IBM Z 特定的元素,例如 qeth
。
19.5.2.6 /etc/sysconfig/network/config
、/etc/sysconfig/network/dhcp
和 /etc/sysconfig/network/wireless
#
檔案 config
包含 ifup
、ifdown
和 ifstatus
行為的一般設定。dhcp
包含 DHCP 設定,wireless
包含無線 LAN 卡的設定。所有三個組態檔中的變數都已被註解。/etc/sysconfig/network/config
中的某些變數也可以在 ifcfg-*
檔案中使用,而且在這些檔案中它們的優先程度更高。/etc/sysconfig/network/ifcfg.template
檔案列出了可在永久介面中指定的變數。但是,大多數 /etc/sysconfig/network/config
變數都是全域變數,在 ifcfg 檔案中不能將它們覆寫。例如,NETWORKMANAGER
或 NETCONFIG_*
變數就是全域變數。
在 SUSE Linux Enterprise 11 中,即使是在未正確設定 IPv6 路由器廣播 (RA) 的網路中,DHCPv6 一向也能正常運作。從 SUSE Linux Enterprise 12 開始,DHCPv6 要求網路中至少有一個路由器發出 RA,用於指示由 DHCPv6 管理此網路。
對於無法在其中正確設定路由器的網路,使用者可透過在 ifcfg
檔案中指定 DHCLIENT6_MODE='managed'
,使用 ifcfg
選項來覆寫此行為。您也可以在安裝系統中使用開機參數來實現這種解決方案:
ifcfg=eth0=dhcp6,DHCLIENT6_MODE=managed
19.5.2.7 /etc/sysconfig/network/routes
和 /etc/sysconfig/network/ifroute-*
#
TCP/IP 封包的靜態路由是由 /etc/sysconfig/network/routes
和 /etc/sysconfig/network/ifroute-*
檔案確定的。您可在 /etc/sysconfig/network/routes
中指定各種系統任務所需的全部靜態路由,包括前往主機的路由、透過閘道前往主機的路由,以及前往網路的路由。對於需要個別路由的介面,請定義額外的組態檔案:/etc/sysconfig/network/ifroute-*
。以介面的名稱取代萬用字元 (*
)。在路由組態檔中的項目看起來就像這樣:
# Destination Gateway Netmask Interface Options
路由的目的地是在第一欄。此欄可能包含網路或主機的 IP 位址,這是指可到達的名稱伺服器、完整合格的網路或主機名稱。應該以 CIDR 表示法 (地址加上關聯的路由字首長度) 寫入網路,例如 10.10.0.0/16 (對於 IPv4 路由) 或 fc00::/7 (對於 IPv6 路由)。關鍵字 default
表示該路由是與閘道位於相同位址系列中的預設閘道。對於沒有閘道的裝置,請使用明確的 0.0.0.0/0 或 ::/0 目的地。
第二欄包含預設的閘道或是可以存取主機或網路的閘道。
第三欄已廢棄;該欄用於包含目的地的 IPv4 網路遮罩。對於 IPv6 路由、預設路由,或者如果在第一欄中使用了字首長度 (CIDR 表示法),請在此處輸入破折號 (-
)。
第四欄包含介面名稱。如果使用破折號 (-
) 將它保留空白,可能會導致 /etc/sysconfig/network/routes
出現非預期的行為。如需詳細資訊,請參閱 routes
的 man 頁面。
第五欄 (選擇性) 可用於指定特殊選項。如需詳細資訊,請參閱 routes
的 man 頁面。
# --- IPv4 routes in CIDR prefix notation: # Destination [Gateway] - Interface 127.0.0.0/8 - - lo 204.127.235.0/24 - - eth0 default 204.127.235.41 - eth0 207.68.156.51/32 207.68.145.45 - eth1 192.168.0.0/16 207.68.156.51 - eth1 # --- IPv4 routes in deprecated netmask notation" # Destination [Dummy/Gateway] Netmask Interface # 127.0.0.0 0.0.0.0 255.255.255.0 lo 204.127.235.0 0.0.0.0 255.255.255.0 eth0 default 204.127.235.41 0.0.0.0 eth0 207.68.156.51 207.68.145.45 255.255.255.255 eth1 192.168.0.0 207.68.156.51 255.255.0.0 eth1 # --- IPv6 routes are always using CIDR notation: # Destination [Gateway] - Interface 2001:DB8:100::/64 - - eth0 2001:DB8:100::/32 fe80::216:3eff:fe6d:c042 - eth0
19.5.2.8 /var/run/netconfig/resolv.conf
#
主機所屬的網域在 /var/run/netconfig/resolv.conf
中指定 (關鍵字為 search
)。使用 search
選項最多可以指定六個網域,總共 256 個字元。解析不完整的名稱時,會嘗試附加個別 search
項目產生一個名稱。使用 nameserver
選項最多可以指定三個名稱伺服器,一行指定一個。註解以井號或分號 (#
或 ;
) 開頭。如需取得範例說明,請參閱範例 19.6 「/var/run/netconfig/resolv.conf
」。
不過,您不可手動編輯 /etc/resolv.conf
。此檔案由 netconfig
程序檔產生,它是 /run/netconfig/resolv.conf
的符號連結。若要定義靜態 DNS 組態而不使用 YaST,請在 /etc/sysconfig/network/config
檔案中手動編輯適當的變數:
NETCONFIG_DNS_STATIC_SEARCHLIST
用於主機名稱查詢的 DNS 網域名稱清單
NETCONFIG_DNS_STATIC_SERVERS
用於主機名稱查詢的名稱伺服器 IP 位址清單
NETCONFIG_DNS_FORWARDER
需要設定的 DNS 轉遞者名稱,例如
bind
或resolver
NETCONFIG_DNS_RESOLVER_OPTIONS
將寫入
/var/run/netconfig/resolv.conf
的任意選項,例如:debug attempts:1 timeout:10
如需詳細資訊,請參閱
resolv.conf
的 man 頁面。NETCONFIG_DNS_RESOLVER_SORTLIST
最多 10 個項目的清單,例如:
130.155.160.0/255.255.240.0 130.155.0.0
如需詳細資訊,請參閱
resolv.conf
的 man 頁面。
若要使用 netconfig 停用 DNS 組態,請設定 NETCONFIG_DNS_POLICY=''
。如需有關 netconfig
的詳細資訊,請參閱 netconfig(8)
的 man 頁面 (man 8 netconfig
)。
# Our domain search example.com # # We use dns.example.com (192.168.1.116) as nameserver nameserver 192.168.1.116
19.5.2.9 /sbin/netconfig
#
netconfig
是一個模組化工具,用於管理其他網路組態設定。它根據預先定義的規則,將靜態定義的設定與自動組態機制 (如 DHCP 或 PPP) 提供的設定進行合併。透過呼叫負責修改組態檔案和重新啟動服務或類似動作的 netconfig 模組,將必要的變更套用至系統。
netconfig
可以辨識三個主要動作。DHCP 或 PPP 等精靈使用 netconfig modify
與 netconfig remove
指令提供或移除 netconfig 的設定。使用者僅可使用 netconfig update
指令:
modify
netconfig modify
指令會修改目前的介面和服務特定的動態設定,並更新網路組態。Netconfig 會從標準輸入或從使用--lease-file FILENAME
選項指定的檔案中讀取設定,並將其儲存於內部,直到系統重新開機 (或者執行下一個修改或移除動作) 為止。系統會覆寫同一個介面與服務組合的現有設定。該介面由-i INTERFACE_NAME
參數指定。該服務由-s SERVICE_NAME
參數指定。remove
netconfig remove
指令為指定介面和服務組合移除由編輯動作提供的動態設定,並更新網路組態。該介面由-i INTERFACE_NAME
參數指定。該服務由-s SERVICE_NAME
參數指定。update
netconfig update
指令會使用目前的設定更新網路組態。當規則或靜態組態變更時可以使用此指令。如果只想更新指定的服務 (dns
、nis
或ntp
),請使用-m MODULE_TYPE
參數。
netconfig 規則和靜態組態設定可透過手動方式定義,或使用 YaST 在 /etc/sysconfig/network/config
檔案中定義。自動組態工具 (如 DHCP 或 PPP) 提供的動態組態設定經由這些工具,透過 netconfig modify
和 netconfig remove
動作直接傳送。NetworkManager 啟用時,netconfig (在 auto
規則模式中) 只會使用 NetworkManager 設定,而忽略使用傳統 ifup 方法設定的任何其他介面的設定。如果 NetworkManager 未提供任何設定,則使用靜態設定做為備用設定。系統不支援同時使用 NetworkManager 與 wicked
方法。
如需 netconfig
的詳細資訊,請參閱 man 8 netconfig
。
19.5.2.10 /etc/hosts
#
在此檔案中 (請參閱範例 19.7 「/etc/hosts
」),將為主機名稱指定 IP 位址。如果沒有執行任何名稱伺服器,將使用此 IP 連接設定的所有主機將列示於此。對於每個主機,請在檔案中輸入一行資訊,其中包含 IP 位址、完全合格的主機名稱及主機名稱。IP 位址必須在行的開頭,然後以空格和定位點分隔這些項目。註解的前面永遠是 #
符號。
127.0.0.1 localhost 192.168.2.100 jupiter.example.com jupiter 192.168.2.101 venus.example.com venus
19.5.2.11 /etc/networks
#
在此檔中,網路名稱會轉換為網路位址。格式與 hosts
檔案格式相似,但是網路名稱在位址前面。請參閱範例 19.8 「/etc/networks
」。
loopback 127.0.0.0 localnet 192.168.0.0
19.5.2.12 /etc/host.conf
#
名稱解析--透過解析器庫分析主機和網路的名稱--由此檔案收集。該檔案僅用於與 libc4 或 libc5 連結的程式。對於目前的 glibc 程式,請參閱 /etc/nsswitch.conf
中的設定。每個參數都必須單獨佔用一行。註解的前面是 #
符號。表格 19.2 「/etc/host.conf 的參數」 顯示了可用的參數。/etc/host.conf
範例是顯示在 範例 19.9 「/etc/host.conf
」。
order hosts, bind |
指定針對名稱解析存取服務的順序。可用的引數有 (以空格或逗號分隔): |
hosts:搜尋 | |
bind:存取名稱伺服器 | |
nis:使用 NIS | |
multi on/off |
定義在 |
nospoof on spoofalert on/off |
這些參數會影響名稱伺服器 spoofing,但並不會對網路組態產生任何影響。 |
trim domainname |
在主機名稱解析後,指定的網域名稱會與主機名稱分隔開來 (前提是主機名稱包括網域名稱)。只有在本地網域分隔出來的名稱位於 |
# We have named running order hosts bind # Allow multiple address multi on
19.5.2.13 /etc/nsswitch.conf
#
GNU C Library 2.0 的介紹隨附於名稱服務切換 (NSS,Name Service Switch) 的介紹。詳細資訊請參閱 nsswitch.conf(5)
man 頁面和 GNU C Library 參考手冊。
查詢的順序定義於檔案 /etc/nsswitch.conf
。nsswitch.conf
範例是顯示在 範例 19.10 「/etc/nsswitch.conf
」。備註前面標有 #
符號。在此範例中,hosts
資料庫下的項目表示要求是透過 DNS 傳送到 /etc/hosts
(files
) (請參閱第 31 章 「網域名稱系統」)。
passwd: compat group: compat hosts: files dns networks: files dns services: db files protocols: db files rpc: files ethers: files netmasks: files netgroup: files nis publickey: files bootparams: files automount: files nis aliases: files nis shadow: compat
NSS 上可用的「「資料庫」」列示於 表格 19.3 「透過 /etc/nsswitch.conf 可用的資料庫」。表格 19.4 「NSS「資料庫」的組態選項」中列出了 NSS 資料庫的組態選項。
|
|
|
乙太網路位址。 |
|
網路及其子網路遮罩的清單。當您使用子網路時才需要。 |
|
|
|
|
|
在網路中用於控制存取權限的有效主機與使用者清單,請參閱 |
|
|
|
NFS 及 NIS+ 使用之 Secure_RPC 的公開金鑰和私密金鑰。 |
|
|
|
|
|
|
|
|
|
|
|
直接存取檔案,例如 |
|
透過資料庫存取 |
|
NIS,請參閱Book “Security and Hardening Guide”, Chapter 4 “Using NIS” |
|
只能做為 |
|
只能做為 |
19.5.2.14 /etc/nscd.conf
#
此檔案用來設定 nscd (名稱服務快取精靈)。請參閱 nscd(8)
與 nscd.conf(5)
man 頁面。依預設,passwd
、groups
與 hosts
的系統項目會由 nscd 快取。這對 NIS 與 LDAP 等目錄服務的效能而言十分重要,因為存取名稱、群組或主機都不再需要網路連接。
如果啟用 passwd
的快取,通常需要 15 秒,才能辨識新增的本地使用者。使用以下指令重新啟動 nscd,縮短這段等待時間:
tux >
sudo
systemctl restart nscd
19.5.2.15 /etc/HOSTNAME
#
/etc/HOSTNAME
包含完全合格的主機名稱 (FQHN)。完全合格的主機名稱是附加網域名稱的主機名稱。此檔案只能包含一行,其中設定了主機名稱。機器開機時會讀取此檔案。
19.5.3 測試組態 #
將組態寫入您的組態檔案之前,可先進行測試。若要設定測試組態,請使用 ip
指令。若要測試連接,請使用 ping
指令。
ip
指令會直接變更網路組態,而不會將其儲存到組態檔案中。除非您將組態輸入正確的組態檔案,否則重新開機之後網路組態的變更就會遺失。
ifconfig
和 route
已過時
ifconfig
和 route
工具已過時。請改用 ip
。例如,ifconfig
會將介面名稱限制為 9 個字元。
19.5.3.1 使用 ip
設定網路介面 #
ip
是一項可顯示及設定網路裝置、路由、規則路由和通道的工具。
ip
是非常複雜的工具。它的常用語法為 ip
OPTIONS
OBJECT
COMMAND
。您可使用下列物件:
- link
此物件代表網路裝置。
- address
此物件代表裝置的 IP 位址。
- neighbor