跳至內容
documentation.suse.com / 管理指南
SUSE Linux Enterprise Server 15 SP3

管理指南

本指南介紹系統管理任務,例如維護、監控和自訂初始安裝的系統。

出版日期: 2022 年 10 月 12 日
附圖目錄
範例目錄

版權所有 © 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 帳戶。

如需本文件使用的文件環境的詳細資訊,請參閱儲存庫的讀我檔案

郵件

或者,您也可以向以下電子郵件地址報告錯誤以及傳送有關本文件的回饋:<>。請務必包含文件標題、產品版本以及文件發行日期。請參考相關的章節編號和標題 (或包含 URL),並提供問題的簡要說明。

3 文件慣例

本文件中使用以下注意事項與排版慣例:

  • /etc/passwd:目錄名稱與檔案名稱

  • PLACEHOLDER:以實際的值來取代 PLACEHOLDER

  • PATH:環境變數 PATH

  • ls--help:指令、選項和參數

  • user:使用者或群組

  • 套件名稱 :套件的名稱

  • AltAltF1:供人按下的按鍵或案件組合;顯示的按鍵與鍵盤上一樣為大寫

  • 檔案 檔案 ›  另存新檔:功能表項目、按鈕

  • AMD/Intel 本段內容僅與 AMD64/Intel 64 架構相關。箭頭標示了文字區塊的開頭與結尾。

    IBM Z, POWER 本段內容僅與 IBM ZPOWER 架構相關。箭頭標示了文字區塊的開頭與結尾。

  • 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 組態檔案

外圍程序可啟用為:

  1. 互動式登入外圍程序:  使用 --login 選項啟用 Bash 以登入機器,或使用 SSH 登入遠端機器時會採用這種方式。

  2. 一般互動式外圍程序:  啟動 xterm、konsole、gnome-terminal 或類似的指令行介面 (CLI) 工具時通常會呼叫此外圍程序。

  3. 非互動式外圍程序:  當在指令行呼叫外圍程序程序檔時,就會呼叫此外圍程序。

系統會讀取不同的組態檔案,視所使用的外圍程序類型而定。下面的表格顯示了登入與非登入外圍程序組態檔案。

表格 1.1︰ 登入外圍程序的 Bash 組態檔案

檔案

描述

/etc/profile

請勿修改此檔案,否則當下次更新時,您的修改可能會被破壞!

/etc/profile.local

擴充 /etc/profile 時使用此檔案

/etc/profile.d/

包含特定程式的泛系統組態檔案

~/.profile

在此處插入登入外圍程序的使用者特定組態

請注意,登入外圍程序還會獲取表格 1.2 「非登入外圍程序的 Bash 組態檔案」中所列的組態檔案。

表格 1.2︰ 非登入外圍程序的 Bash 組態檔案

/etc/bash.bashrc

請勿修改此檔案,否則當下次更新時,您的修改可能會被破壞!

/etc/bash.bashrc.local

使用此檔案只能插入 Bash 的泛系統修改

~/.bashrc

在此處插入使用者特定的組態

此外,Bash 還使用其他檔案:

表格 1.3︰ 用於 Bash 的特殊檔案

檔案

描述

~/.bash_history

包含您輸入的所有指令清單

~/.bash_logout

登出時執行

~/.alias

使用者為常用指令定義的別名。如需定義別名的詳細資料,請參閱 man 1 alias

非登入外圍程序

下面兩個特殊外圍程序會阻擋使用者登入系統:/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 系統中最重要的較高層級目錄。下列清單中提供了關於目錄與重要子目錄的更多詳細資訊。

表格 1.4︰ 標準目錄樹狀結構綜覽

目錄

內容

/

根目錄 — 目錄樹狀結構的起點。

/bin

基本的二進位檔案,例如系統管理員與一般使用者都需要使用的指令。通常還包含 Bash 等外圍程序。

/boot

開機載入程式的靜態檔案。

/dev

存取主機特定裝置所需的檔案。

/etc

主機特定系統的組態檔案。

/home

存放系統中所有擁有帳戶之使用者的主目錄。但是,root 的主目錄不在 /home 中,而是位於 /root 內。

/lib

基本的共用程式庫與核心模組。

/media

抽取式媒體的定點。

/mnt

用於暫時掛接檔案系統的定點。

/opt

附加應用程式軟體套件。

/root

超級使用者 root 的主目錄。

/sbin

基本的系統二進位檔案。

/srv

系統所提供之服務的資料。

/tmp

暫存檔案。

/usr

包含唯讀資料的次要階層。

/var

可變資料,例如記錄檔案。

/windows

僅當系統中同時安裝了 Microsoft Windows* 與 Linux 才可以使用。包含 Windows 資料。

以下清單提供了更多詳細資訊,以及目錄中包含的檔案與子目錄的一些範例:

/bin

包含 root 及其他使用者可能會使用的基本外圍程序指令。這些指令包括 lsmkdircpmvrm 以及 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 撰寫外圍程序程序檔

使用外圍程序程序檔可以方便地完成各種任務:收集資料、搜尋文字中的單字或片語,以及執行其他有用的操作。以下範例顯示了一個列印文字的小型外圍程序程序檔:

範例 1.1︰ 用於列印文字的外圍程序程序檔
#!/bin/sh 1
# Output the following line: 2
echo "Hello World" 3

1

第一行以 Shebang 字元 (#! ) 開頭,指出此檔案為程序檔。在 Shebang 後面指定的解譯器將執行該程序檔。在本例中,指定的解譯器為 /bin/sh

2

第二行為備註,以 # 開頭。我們建議對難以理解的行提供註解。提供適當的註解可以記住該行的用途和功能。另外,可協助其他閱讀者理解您的程序檔。在開發社群中,註解被視為一種良好的做法。

3

第三行使用內建指令 echo 列印相應的文字。

在執行此程序檔之前,必須滿足幾項先決條件:

  1. 每個程序檔都應包含 Shebang 行 (如上面的範例所示)。如果缺少該行,您需要手動呼叫直譯器。

  2. 您可以將程序檔儲存於任何位置。但是,最好將其儲存於外圍程序可以找到的目錄中。外圍程序中的搜尋路徑由環境變數 PATH 決定。一般使用者通常沒有寫入 /usr/bin 的權限。因此,建議將程序檔儲存在使用者目錄 ~/bin/ 中。以上範例名為 hello.sh

  3. 程序檔需要執行權限。使用下列指令設定權限:

    tux > chmod +x ~/bin/hello.sh

如果滿足了上述所有先決條件,便可以按以下方式執行程序檔:

  1. 做為絕對路徑:  執行程序檔時可以使用絕對路徑。在此例中為 ~/bin/hello.sh

  2. 任何位置:  如果 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︰ 有用的環境變數

HOME

目前使用者的主目錄

HOST

目前的主機名稱

LANG

工具當地化以後,會使用此環境變數指定的語言。也可將英語設定為 C

PATH

外圍程序的搜尋路徑,即以冒號分隔的目錄清單

PS1

指定在每條指令前列印的一般提示

PS2

指定執行多行指令時列印的輔助提示

PWD

目前的工作目錄

USER

目前的使用者

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.bz2
tux > echo ${file#*/}
home/tux/book/book.tar.bz2
${VAR##pattern}

從左側移除最長的相符項:

tux > file=/home/tux/book/book.tar.bz2
tux > echo ${file##*/}
book.tar.bz2
${VAR%pattern}

從右側移除最短的相符項:

tux > file=/home/tux/book/book.tar.bz2
tux > echo ${file%.*}
/home/tux/book/book.tar
${VAR%%pattern}

從右側移除最長的相符項:

tux > file=/home/tux/book/book.tar.bz2
tux > echo ${file%%.*}
/home/tux/book/book
${VAR/pattern_1/pattern_2}

PATTERN_2 取代 PATTERN_1VAR 的內容:

tux > file=/home/tux/book/book.tar.bz2
tux > 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/bar
funcname(){ ... }

建立外圍程序函數。可以使用位置參數存取其引數。下行定義了可列印較短訊息的函數 hello

tux > hello() { echo "Hello $1"; }

可以按以下格式呼叫此函數:

tux > hello Tux

將會列印:

Hello Tux

1.7 使用通用流程建構元

為了控制程序檔的流程,外圍程序包含 whileifforcase 建構元。

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 的重要資訊。以下清單中提供了更多關於此主題的資訊:

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 -un1
tux
tux > sudo id -un
root's password:2
root
tux > id -un
tux3
tux > sudo id -un
4
root

1

id -un 指令會列印目前使用者的登入名稱。

2

輸入期間不會顯示密碼 (無論是純文字還是遮罩字元均不顯示)。

3

只有以 sudo 開頭的指令才會以提升的特權執行。

4

提升的權限會持續一段時間,因此您不必再次提供 root。密碼。

提示
提示:I/O 重新導向

使用 sudo 時,I/O 重新導向不起作用:

tux > sudo echo s > /proc/sysrq-trigger
bash: /proc/sysrq-trigger: Permission denied
tux > sudo cat < /proc/1/maps
bash: /proc/1/maps: Permission denied

在上面的範例中,只有 echocat 指令才以提升的特權執行。重新導向將由使用者的外圍程序以使用者特權執行。若要以提升的特權執行重新導向,請如第 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 # exit
tux:~ > 
sudo -i (<指令>)

-s 類似,但會做為登入外圍程序啟動外圍程序。這表示系統會處理該外圍程式的啟動檔案 (.profile 等),並將目前的工作目錄設定為目標使用者的主目錄。

tux:~ > sudo -i
root's password:
root:~ # exit
tux:~ > 
提示
提示:環境變數

sudo 依預設不會傳播環境變數。使用 env_reset 選項會導致行為發生變化,請參閱有用的旗標和選項

2.2 設定 sudo

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

1

存在兩個例外:#include#includedir 是一般指令。

2

移除 ! 字元可將所需旗標設定為 ON。

3

請參閱第 2.2.3 節 「基本 sudoers 規則」

有用的旗標和選項
targetpw

此旗標控制呼叫使用者是否需要輸入密碼。如果要求輸入目標使用者 (例如 root) 的密碼則為開啟,如果要求輸入其自己的密碼則為關閉。

Defaults targetpw # Turn targetpw flag ON
rootpw

如果設定,sudo 將提示輸入 root 密碼。預設值為 OFF。

Defaults !rootpw # Turn rootpw flag OFF
env_reset

如果設定,sudo 會建構一個包含 TERMPATHHOMEMAILSHELLLOGNAMEUSERUSERNAMESUDO_* 的精簡環境。此外,會從呼叫環境輸入 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
sudoers 規則語法
User_List

一或多個 (用逗號分隔) 識別碼:使用者名稱、以 %GROUPNAME 格式表示的群組,或是以 #UID 格式表示的使用者 ID。可以使用 ! 字首來否定。

Host_List

一或多個 (用逗號分隔) 識別碼:完全合格的主機名稱或 IP 位址。可以使用 ! 字首來否定。Host_List 的常用選項為 ALL

NOPASSWD:|PASSWD:

如果使用者在 NOPASSWD: 之後執行的指令與 Cmd_List 相符,系統不會提示使用者輸入密碼。

PASSWD 是預設選項。僅當 PASSWDNOPASSWD 位於同一行時,才需要指定此選項:

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_ListHost_ListCmnd_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 targetpwALL ALL = ALL 等規則。否則,任何人都能夠以 root 身分執行指令。

2.3 sudo 使用案例

雖然預設組態可適用於標準使用情境,但您仍可依據特定需求自訂預設組態。

2.3.1 在無需提供 root 密碼的情況下使用 sudo

依設計,wheel 群組的成員可以用 root 身分執行所有帶有 sudo 的指令。下面的程序介紹如何將使用者帳戶新增至 wheel 群組。

  1. 將您的使用者帳戶新增至 wheel 群組。

    如果您的使用者帳戶還不是 wheel 群組的成員,請使用 sudo usermod -a -G wheel USERNAME 指令新增。登出然後重新登入即可啟用變更。執行 groups USERNAME 指令以驗證變更是否成功。

  2. 使用使用者帳戶的普通密碼進行驗證。

    使用 visudo 指令建立檔案 /etc/sudoers.d/userpw (請參閱第 2.2.1 節 「編輯組態檔案」) 並新增以下內容:

    Defaults !targetpw
  3. 選取新的預設規則。

    依據是否希望使用者重新輸入其密碼,在 /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
  4. 對預設規則設定更多限制.

    移除 /etc/sudoers 中的 allow-everything 規則或設定為備註:

    ALL     ALL=(ALL) ALL   # WARNING! Only use this together with 'Defaults targetpw'!
    警告
    警告:sudoers 中可造成嚴重後果的規則

    請勿跳過此步驟。否則任何使用者都能以 root 身分執行任何指令!

  5. 測試組態.

    wheel 成員身分和非成員身分執行 sudo

    tux:~ > groups
    users wheel
    tux:~ > sudo id -un
    tux's password:
    root
    wilber:~ > groups
    users
    wilber:~ > 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

擷取並儲存螢幕畫面。但在某些桌面環境中,可能無法正常工作。

ShiftF4

啟用和停用為視障使用者最佳化的配色方式。

ShiftF7

啟用/停用除記錄錯訊息功能。

ShiftF8

開啟檔案對話方塊,以將記錄檔案儲存至使用者定義的位置。

CtrlShiftAltD

傳送一個除錯事件。YaST 模組可透過執行特殊除錯動作來做出回應。結果取決於具體的 YaST 模組。

CtrlShiftAltM

啟動和停止巨集錄製。

CtrlShiftAltP

重播巨集。

CtrlShiftAltS

顯示樣式表編輯器。

CtrlShiftAltT

將工具集樹傾印至記錄檔案。

CtrlShiftAltX

開啟終端機視窗 (xterm)。當透過 VNC 安裝時很實用。

CtrlShiftAltY

顯示工具集樹瀏覽器。

4 文字模式下的 YaST

基於 ncurses 的虛擬圖形 YaST 介面主要用於協助系統管理員管理不含 X 伺服器的系統。與傳統的 GUI 相比,該介面具有多項優勢。您可以使用鍵盤在 ncurses 介面中導覽,並且幾乎所有介面元素都有對應的鍵盤捷徑。ncurses 介面的資源佔用較小,即使是在採用低設定的硬體上也能快速執行。您可以透過 SSH 連接執行基於 ncurses 的 YaST 版本,以便管理遠端系統。請注意,若要執行 YaST,終端機模擬器的大小不能小於 80x25 個字元。

文字模式下的 YaST 主視窗
圖形 4.1︰ 文字模式下的 YaST 主視窗

若要啟動基於 ncurses 的 YaST 版本,請開啟終端機並執行 sudo yast2 指令。使用 Tab 鍵或方向鍵在功能表項目、欄位和按鈕等介面元素之間導覽。您可以使用相應的功能鍵或鍵盤捷徑存取 YaST 中的所有功能表項目和按鈕。例如,您可以按 F9 鍵來取消目前操作,使用 F10 鍵可接受變更。在基於 ncurses 的 YaST 介面中,每個功能表項目和按鈕的標籤中都有一個反白的字母。此字母是指定給介面元素的鍵盤捷徑的一部分。例如,結束按鈕中反白字母 Q。這表示您可以按 AltAlt+Q 來啟動該按鈕。

提示
提示:重新整理 YaST 對話方塊

如果 YaST 對話方塊遭毀損或破壞 (例如在調整視窗大小時),請按 CtrlL 重新整理並還原其內容。

4.1 在模組中導覽

以下對 YaST 模組中控制元素的描述假設所有的功能鍵及 Alt 按鍵組合都起作用,且未被指定不同的全域功能。如需有關可能的例外狀況的資訊,請參閱第 4.3 節 「按鍵組合的限制」

在按鈕和選擇清單之間移動

使用 →| 鍵可在按鈕與包含選擇清單的框架之間移動。若要以相反方向導覽,請使用 Alt→|Shift→| 按鍵組合。

在選擇清單中導覽

使用方向鍵 () 可在包含選擇清單的作用中框架的個別元素之間移動。如果個別項目超出了框架寬度,可使用 ShiftShift 鍵水平捲動。如果使用方向鍵會導致選擇移至另一框架,請改用 CtrlECtrlA 鍵。

使用按鈕、選項圓鈕和核取方塊

若要選取有空白方括號 (核取方塊) 或空白圓括號 (選項圓鈕) 的項目,請按 SpaceEnter 鍵。或者,也可以直接使用 Althighlighted_letter 選取選項圓鈕與核取方塊。在此狀況中,您不需按 Enter 來做確認。如果您使用 →| 瀏覽至某個項目,按 Enter 即可執行所選取的動作或啟用個別的功能表項目。

功能鍵

使用功能鍵 (從 F1F12) 可快速存取各種按鈕。YaST 螢幕底部的行中顯示了可用的功能鍵組合 (FX)。因為不同的模組提供不同的按鈕 (「詳細資料」、「資訊」、「新增」、「刪除」等等),所以各個功能鍵實際對應的按鈕視作用中的 YaST 模組而有所不同。您可以將 F10 當作「接受」、「確定」、「下一步」以及「完成」來使用。按 F1 可存取 YaST 說明。

使用導覽樹狀結構

某些 YaST 模組使用視窗左側的導覽樹狀結構來選取組態對話方塊。使用方向鍵 () 可以在樹狀結構中進行導覽。使用 Space 可以開啟或關閉樹狀結構中的項目。在 ncurses 模式下,於導覽樹狀結構中選取後必須按 Enter 才能顯示所選取的對話方塊。這是一種特意行為,目的是為了在導覽樹狀結構時省去費時的重新描繪程序。

在軟體安裝模組中選取軟體

使用左側的過濾器可以列出與指定的字串相符的套件。已安裝的套件標有字母 i。若要變更套件的狀態,請按 SpaceEnter。或者,也可以使用動作功能表選取所需的狀態變更 (安裝、刪除、更新、禁用或鎖定)。

軟體安裝模組
圖形 4.2︰ 軟體安裝模組

4.2 進階按鍵組合

基於 ncurses 的 YaST 版本提供有數個進階按鍵組合。

ShiftF1

列出進階快速鍵。

ShiftF4

變更色彩綱要。

Ctrl

結束應用程式。

CtrlL

重新整理螢幕。

CtrlDF1

列出進階快速鍵。

CtrlDShift D

以螢幕擷取畫面的形式將對話方塊傾印到記錄檔案。

CtrlDShiftY

開啟 YDialogSpy 以查看工具樹階層。

4.3 按鍵組合的限制

如果您的視窗管理員使用了全部的 Alt 組合,則 YaST 中的 Alt 組合可能無效。像是 AltShift 等鍵也可能事先已由終端機的設定所佔用。

使用 Alt 而不是 Esc

您可以使用 Esc 來取代 Alt,而不使用 Alt。例如,EscH 可取代 AltH。(先按 Esc然後H 鍵。)

使用 CtrlFCtrlB 執行向後和向前導覽

如果 AltShift 按鍵組合已被視窗管理員或終端機佔用,可改用 CtrlF (向前) 和 CtrlB (向後) 按鍵組合。

功能鍵的限制

功能鍵 (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 -lyast --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 Guideyast 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.100
tux > 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 enable
tux > 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 enable
tux > 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 enable
tux > 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=81
tux > sudo yast http-server listen list
Listen Statements:
==================
:80
:81
tux > 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,rewrite
tux > sudo yast http-server modules disable=ssl
tux > 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 enable
tux > 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,256
tux > 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 enable
tux > 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 服務 (smbnmb):

tux > sudo yast samba-server service enable
tux > 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

顯示目前安全性組態的摘要:

sudoyast 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=0
tux > 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

指定音效卡的音量層級:

sudoyast 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/tftp
tux > sudo yast tftp-server directory list
Directory Path: /srv/tftp
status

控制 TFTP 伺服器服務的狀態:

tux > sudo yast tftp-server status disable
tux > sudo yast tftp-server status show
Service Status: false
tux > 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 線上更新對話方塊,請啟動 YaST 並選取軟體 › 線上更新。或者,也可以在指令行中使用 yast2 online_update 指令進行啟動。

線上更新」視窗包含四個區段。

YaST 線上更新
圖形 5.1︰ YaST 線上更新

左側的「摘要」區段列出了 SUSE Linux Enterprise Server 可用的修補程式。修補程式根據安全性關聯程度 (安全性建議選擇性) 進行排序。您可以從「顯示修補程式類別」中選取以下其中一個選項,以變更「摘要」區段的檢視窗:

需要的修補程式 (預設檢視窗)

適用於系統上安裝的套件,但尚未安裝的修補程式。

不需要的修補程式

適用於系統上未安裝之套件的修補程式,或已滿足其執行要求的修補程式 (相關套件已從其他來源進行更新)。

所有修補程式

SUSE Linux Enterprise Server 的所有可用修補程式。

「摘要」區段中的每個清單項目包含一個符號和修補程式名稱。有關可用符號及其含義的綜覽,請按 ShiftF1。「安全性」和「建議」狀態的修補程式所要求的動作已自動預設。這些動作包括「自動安裝」、「自動更新」和「自動刪除」。

如果從更新儲存庫以外的其他儲存庫安裝最新的套件,則可以使用此安裝來滿足此套件之修補程式的需求。在此情況下,會有一個核取標記顯示在修補程式摘要的前面。僅當您將修補程式標示為已安裝時,該修補程式才會顯示在清單中。事實上這並沒有安裝修補程式 (因為套件已經是最新的),而是將修補程式標示為已安裝。

「摘要」區段中選取一個項目,可在對話方塊的左下角看到簡短的「修補程式描述」。右上方的區段列出了所選修補程式中包含的套件 (一個修補程式可以包含多個套件)。按一下右上方區段中的項目,可檢視修補程式中包含的各套件的詳細資料。

5.2 安裝修補程式

在 YaST 的「連接更新」對話方塊中,您可以一次性安裝所有可用的修補程式,也可以手動選取所需的修補程式。您還可以回復已套用至系統的修補程式。

依預設,目前您系統可用的所有新修補程式 (選擇性修補程式除外) 均已標示為可供安裝。按一下「接受」「套用」後,這些修補程式將自動套用。如果一或多個修補程式需要將系統重新開機,則在開始安裝修補程式之前,系統會發出相關通知。此時,您可以選擇繼續安裝所選修補程式、跳過需要重新開機之所有修補程式的安裝並安裝剩餘的修補程式,或者返回修補程式手動選擇畫面。

程序 5.1︰ 使用 YaST 線上更新套用修補程式
  1. 啟動 YaST,然後選取「軟體 ›  線上更新」。

  2. 若要自動套用目前您系統可用的所有新修補程式 (選擇性修補程式除外),請按一下套用接受

  3. 首先修改要套用的修補程式選擇:

    1. 使用介面提供的相應過濾器和檢視窗。如需詳細資訊,請參閱第 5.1 節 「線上更新對話方塊」

    2. 根據您的需求和意愿選取或取消選取修補程式,方法是在修補程式上按一下滑鼠右鍵,然後從內容功能表中選擇相應的動作。

      重要
      重要:始終套用安全性更新

      除非很有必要,否則請不要取消選取任何安全性相關的修補程式。因為這些修補程式負責修復嚴重的安全性問題,可防止您的系統被入侵。

    3. 大部分的修補程式都會包含多套件的更新。若要變更對單一套件執行的動作,請在套件檢視中的某個套件上按一下滑鼠右鍵,然後選擇一項動作。

    4. 若要確認您的選擇並套用所選修補程式,請按一下「套用」或「接受」繼續。

  4. 安裝完成後,請按一下「完成」離開 YaST「線上更新」。您的系統現在已是最新狀態。

5.3 自動線上更新

您可以使用 YaST 設定每日、每週或每月的自動更新。安裝 yast2-online-update-configuration 套件。

依預設更新將下載為增量 RPM。由於透過增量 RPM 重建 RPM 套件需要佔用大量記憶體和處理器資源,出於效能考量,某些設定或硬體組態可能要求您停用增量 RPM。

某些修補程式 (例如核心更新或需要授權合約的套件) 需要使用者互動,而這可能會讓自動更新程序停止下來。您可以設定跳過需要使用者互動的修補程式。

使用 YaST 軟體模組中的修補程式索引標籤,可以查看可用的及已安裝的修補程式,包括錯誤報告和 CVE 公告的參考。

程序 5.2︰ 設定自動線上更新
  1. 安裝後,啟動 YaST 並選取軟體 › 線上更新。選擇組態 › 線上更新。若 yast2-online-update-configuration 未安裝,系統會提示您進行安裝。

    YaST 線上更新組態
    圖形 5.2︰ YaST 線上更新組態

    您也可以在指令行中使用 yast2 online_update_configuration 指令啟動模組。

  2. 選擇更新間隔:「每日」、「每週」或「每月」。

  3. 有時,修補程式可能需要引起管理員的注意,例如,在重新啟動關鍵服務時。而此修補程式可能是適用於 Docker 開放原始碼引擎的更新,執行此更新需要重新啟動所有容器。在安裝修補程式之前,系統會向使用者告知此操作的後果,並要求他們確認是否要安裝此修補程式。此類修補程式稱為互動式修補程式

    自動安裝修補程式時,系統會假設您已確認要安裝互動式修補程式。如果您希望在安裝之前先檢查這些修補程式,請選取跳過互動式修補程式。在這種情況下,自動修補期間會跳過互動式修補程式。請確定週期性地執行手動線上更新,以檢查是否有互動式修補程式等待安裝。

  4. 若要自動接受所有授權合約,請啟用「同意授權」

  5. 若要自動安裝已更新套件推薦的所有套件,請啟用「包含推薦的套件」。

  6. 若要停用增量 RPM (出於效能方面的考慮),請取消核取使用增量 RPM

  7. 若要根據類別 (例如安全性或推薦) 過濾修補程式,請核取根據類別過濾,並新增清單中的相應修補程式類別。系統將會只安裝所選類別的修補程式,合理的實務是僅啟用自動安全更新,並手動查看所有其他更新。修補通常比較可靠,但您可能還想測試非安全性修補程式,並在遇到任何問題時進行復原。

    • Packagemanager 和 YaST 提供的修補程式用於套件管理以及 YaST 功能和模組。

    • 安全性修補程式提供重要的更新和錯誤修復。

    • 推薦修補程式提供選擇性的錯誤修復和增強功能。

    • 選擇性表示新套件。

    • 其他相當於其他修補程式。

    • 文件不可用。

  8. 按一下確定確認您的組態。

自動線上更新隨後不會自動重新啟動系統。如果套件更新需要重新開機系統才能生效,則您需要手動重新開機。

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

您可以將上述所有指令組合使用。例如,以下指令將以詳細模式安裝 mcvim 套件 (來自 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_NAME
tux > sudo zypper remove PACKAGE_NAME
警告
警告:不要移除必要的系統套件

不要移除必要的系統套件,例如 glibczypperkernel 。如果移除這些套件,系統可能會變得不穩定,甚至完全停止運作。

6.1.3.1 選取要安裝或移除的套件

可以使用 zypper installzypper remove 指令,以多種方法來找到套件。

依確切的套件名稱
tux > sudo zypper install MozillaFirefox
依確切的套件名稱和版本號碼
tux > sudo zypper install MozillaFirefox-52.2
依儲存庫別名和套件名稱
tux > sudo zypper install mozilla:MozillaFirefox

mozilla 是要安裝套件所在之儲存庫的別名。

依含萬用字元的套件名稱

您可以選取名稱以特定字串開頭或結尾的所有套件。使用萬用字元時請務必小心,特別是在移除套件時。以下指令將安裝名稱以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.rpm
tux > 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       # Wrong
tux > sudo zypper install vim -emacs        # Correct
tux > sudo zypper install -- -emacs +vim    # Correct
tux > 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 選項可覆寫此行為。此選項必須放在實際指令 (installremovepatch) 的前面,如下所示:

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_NAME
tux > sudo zypper install PACKAGE_NAME

所有可安裝的新套件的清單可透過以下指令獲得:

tux > zypper list-updates

請注意,此指令只會列出符合以下準則的套件:

  • 與已安裝套件具有相同的廠商,

  • 提供套件的儲存庫相較於已安裝套件,擁有更高或相同的優先程度,

  • 可安裝 (符合所有相依性條件)。

所有新可用套件 (無論是否可安裝) 的清單可透過以下指令獲得:

tux > sudo zypper list-updates --all

若要找出新套件無法安裝的原因,請依上文所述使用 zypper installzypper 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

結果類似於以下輸出:

範例 6.1︰ Zypper — 已知儲存庫的清單
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 1
tux > 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 可以是以下之一:httphttpsftpcddvddirfilecifssmbnfshdiso)

若要重新命名儲存庫別名,請使用 renamerepo 指令。以下範例會將別名 Mozilla Firefox 變更為 firefox

tux > sudo zypper renamerepo 'Mozilla Firefox' firefox

6.1.7 使用 Zypper 查詢儲存庫和套件

Zypper 提供多種方法來查詢儲存庫或套件。若要獲得所有可用產品、模式、套件或修補程式的清單,請使用以下指令:

tux > zypper products
tux > zypper patterns
tux > zypper packages
tux > zypper patches

若要在所有儲存庫中查詢某些套件,請使用 search。若要獲得有關特定套件的資訊,請使用 info 指令。

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 helpzypper 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 套件管理員) 用於管理軟體套件。主要指令為 rpmrpmbuild。使用者、系統管理員和套件建立者可以在功能強大的 RPM 資料庫中查詢已安裝軟體的詳細資訊。

rpm 有五種模式:安裝、解除安裝 (或更新) 軟體套件、重建 RPM 資料庫、查詢 RPM 庫或個別的 RPM 歸檔、對套件執行完整性檢查,以及簽署套件。rpmbuild 可用於建立初始來源的可安裝套件。

可安裝的 RPM 歸檔以特殊二進位格式包裝封裝。這些歸檔由要安裝的程式檔和 rpm 在安裝期間用來設定軟體套件或儲存在 RPM 資料庫中供記錄之用的特定中繼資訊所組成。RPM 歸檔的副檔名通常為 .rpm

提示
提示:軟體開發套件

對於多個套件,軟體開發所需的元件 (程式庫、標題、包含檔案等)已置於獨立的套件中。只有在您想要自行編譯軟體 (例如,最新的 GNOME 套件) 時,才需要這些開發套件。根據副檔名 -devel 即可識別出這些套件,例如 alsa-develgimp-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 週期。

makedeltarpmapplydelta 二進位檔案屬於增量 RPM 套裝軟體 (deltarpm 套件) 的一部分,可協助您建立並套用增量 RPM 套件。您可以使用下列指令建立名稱為 new.delta.rpm 的增量 RPM。下列指令假設 old.rpmnew.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 查詢選項」

表格 6.1︰ 基本 RPM 查詢選項

-i

套件資訊

-l

檔案清單

-f FILE

查詢包含 FILE 檔案的套件 (完整的路徑必須以 FILE 指定)

-s

含有狀態資訊的檔案清單 (隱含 -l)

-d

只列出文件檔案 (隱含 -l)

-c

只列出組態檔案 (隱含 -l)

--dump

含有完整詳細資訊的檔案清單 (與 -l-c-d 配合使用)

--provides

列出另一個套件可以使用 --requires 要求的套件功能

--requires-R

套件所需的功能

--scripts

安裝程序檔 (預先安裝、後續安裝、解除安裝)

例如,rpm -q -i wget 指令可顯示如 範例 6.2 「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 「搜尋套件的程序檔」中所示的外圍程序檔。執行時,可將部份檔案名稱當作參數傳給程序檔。

rpm -q --changelog PACKAGE 指令會顯示有關特定套件的詳細變更資訊清單,並依日期排序。

藉由安裝的 RPM 資料庫,可執行驗證檢查。這些檢查可以使用 -V--verify 來啟動。將 rpm 與此選項配合使用,將顯示套件中自安裝後已變更的所有檔案。rpm 使用八位字元符號來提供有關以下變更的提示:

表格 6.2︰ RPM 驗證選項

5

MD5 檢查總數

S

檔案大小

L

符號連結

T

修改時間

D

主要和次要的裝置編號

U

擁有者

G

群組

M

模式 (權限和檔案類型)

如果是組態檔,會印出字母 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 中必須可以找到 rpmrpmbuild 的下列目錄 (除非您在如 /etc/rpmrc 的檔案中指定自訂設定):

SOURCES

代表原始來源 (.tar.bz2.tar.gz 檔案等)和套裝作業系統特定的調整 (大多數為 .diff.patch 檔案)

SPECS

用於 .spec 檔案,和中繼 Makefile 相似,可控制 build 程序

BUILD

所有來源均在此目錄中解壓縮、修補和編譯

RPMS

儲存完整二進位套件的地方

SRPMS

此處為來源 RPM

當您使用 YaST 安裝來源套件時,所有需要的元件都會安裝在 /usr/src/packages 中:SOURCES 中的來源和調整以及 SPECS 中的相關 .spec 文件。

警告
警告:系統完整性

請不要以系統元件 (glibcrpm 等) 做試驗,因為這樣會危害系統的穩定性。

以下範例使用 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 執行以下任務:

7.1 預設設定

SUSE Linux Enterprise Server 上的 Snapper 設定為系統變更的復原工具。依預設,SUSE Linux Enterprise Server 的根分割區 (/) 使用 Btrfs 格式化。如果根分割區 (/) 足夠大 (大約超過 16 GB),則會自動啟用快照建立功能。依預設,在除 / 以外的分割區上會停用快照。

提示
提示:在已安裝系統中啟用 Snapper

如果您在安裝期間停用了 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>

1

match 屬性定義模式是 Unix 外圍程序樣式的萬用字元 (w) 還是 Python正規表示式 (re)。

2

如果符合指定模式且對應的套件標示為 important (例如核心套件),則快照也會標示為 important。

3

用於比對套件名稱的模式。根據 match 屬性的設定,特殊字元也可能會被解譯為外圍程序萬用字元或正規表示式。此模式符合所有以 kernel- 開頭的套件名稱。

4

此行無條件符合所有套件。

使用此組態時,只要安裝套件即會建立快照對 (第 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=@ /mnt
tux > sudo btrfs subvolume create /mnt/usr/important
tux > sudo umount /mnt

/etc/fstab 中的相應項目需類似於:

/dev/sda2 /usr/important btrfs subvol=@/usr/important 0 0
提示
提示:停用寫入時複製 (cow)

子磁碟區可能包含經常變更的檔案,例如虛擬化磁碟影像、資料庫檔案或記錄檔案。如果是這樣,可考慮對此磁碟區停用寫入時複製功能,以免複製磁碟區塊。在 /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(檔案系統) 指定檔案系統。檔案系統 的有效值有 ext3etx4xfs。範例:

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)。

程序 7.1︰ 使用 YaST Snapper 模組復原變更
  1. 從 YaST 的「其他」區段或透過輸入 yast2 snapper 啟動「Snapper」模組。

  2. 請確定「目前組態」設為「」。除非您手動新增了自己的 Snapper 組態,否則應始終如此設定。

  3. 從清單中選擇一對前快照和後快照。YaST 與 Zypper 快照對都屬於「前與後」類型。在「描述」欄中,YaST 快照標示為 zypp(y2base),Zypper 快照標示為 zypp(zypper)

    Image
  4. 按一下「顯示變更」以開啟兩個快照之間不同的檔案清單。

    Image
  5. 檢閱檔案清單。若要顯示檔案的前版本與後版本之間的差異,請從清單中選取它。

    Image
  6. 要還原一個或多個檔案,請勾選相應的核取方塊來選取相關的檔案或目錄。按一下「還原選定項目」,然後按一下「」確認該動作。

    Image

    要還原單個檔案,請按一下其名稱以啟動差異比對檢視。按一下「從第一個還原」,然後按一下「」確認您的選擇。

程序 7.2︰ 使用 snapper 指令復原變更
  1. 執行 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)
  2. 使用下列指令取得快照對的已變更檔案清單:snapper status ..。含有內容變更的檔案以 c 標示,新增的檔案以 + 標示,刪除的檔案以 - 標示。

    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
  3. 若要顯示特定檔案的差異,請執行 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
    [...]
  4. 若要還原一或多個檔案,請執行 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 目錄中的組態檔案),但不能從快照還原整份檔案清單中的檔案。

此限制僅影響從根檔案系統建立的快照!

程序 7.3︰ 使用 YaST Snapper 模組還原檔案
  1. 從 YaST 的其他區段或透過輸入 yast2 snapper 啟動 Snapper 模組。

  2. 選擇要從中選擇快照的「目前組態」。

  3. 選取要從中還原檔案的時間軸快照,並選擇「顯示變更」。時間軸快照屬於「單一」類型,以「時間軸」描述。

  4. 按一下檔案名稱,從文字方塊中選取一個檔案。隨即顯示快照版本與目前系統之間的差異。勾選該核取方塊以選取要還原的檔案。對所有您要還原的檔案執行此操作。

  5. 按一下「還原選定項目」,然後按一下「」確認該動作。

程序 7.4︰ 使用 snapper 指令還原檔案
  1. 執行以下指令獲取特定組態之時間軸快照的清單:

    tux > sudo snapper -c CONFIG list -t single | grep timeline

    CONFIG 需要以現有的 Snapper 組態取代。使用 snapper list-configs 顯示清單。

  2. 執行以下指令獲取指定快照之已變更檔案的清單:

    tux > sudo snapper -c CONFIG status SNAPSHOT_ID..0

    以您要從中還原檔案之快照的 ID 取代 SNAPSHOT_ID

  3. (選擇性)透過執行以下指令,列出目前檔案版本與快照中之檔案的差異

    tux > sudo snapper -c CONFIG diff SNAPSHOT_ID..0 FILE NAME

    如果您未指定 <檔案名稱>,則會顯示所有檔案的差異。

  4. 要還原一或多個檔案,請執行

    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 節 「從快照中排除的目錄」) 可以位於單獨的分割區上。

  • 系統必須能透過已安裝的開機載入程式開機。

要從可開機的快照執行復原,請按如下步驟執行:

  1. 將系統開機。在開機功能表中,選擇「可開機快照」並選取您要開機的快照。系統會按日期列出快照清單,最近的快照最先列出。

  2. 登入系統。仔細檢查是否一切都如預期般運作。請注意,您無法對快照中包含的任何目錄執行寫入。但無論您接下來執行什麼操作,您寫入到其他目錄的資料都會遺失。

  3. 根據您是否要執行復原操作,選擇下一步動作:

    1. 如果您不想對目前狀態的系統執行復原,請重新開機進入目前的系統狀態。然後,您便可選擇另一個快照,或是啟動救援系統。

    2. 若要進行復原,請執行

      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 啟動所選的快照。從開機功能表啟動快照不會立即重新開機,而是開啟所選快照的開機載入程式。

開機載入程式:快照
圖形 7.1︰ 開機載入程式:快照

開機載入程式中的每個快照項目遵循一種可方便您識別快照的命名規劃:

[*]1OS2 (KERNEL3,DATE4TTIME5,DESCRIPTION6)

1

如果快照標示為重要,該項將帶有 * 標記。

2

作業系統標籤。

4

採用 YYYY-MM-DD 格式的日期。

5

採用 HH:MM 格式的時間。

6

此欄位包含快照的描述。對於手動建立的快照,這是使用選項 --description 建立的字串,或自訂字串 (請參閱提示:為開機載入程式快照項目設定自訂描述)。對於自動建立的快照,這是呼叫的工具,例如 zypp(zypper)yast_sw_single。根據開機螢幕的大小,可能會截斷較長的描述。

提示
提示:為開機載入程式快照項目設定自訂描述

可以用自訂字串來取代快照描述欄位中的預設字串。例如,如果自動建立的描述不能充分描述快照,或者使用者提供的描述太長,則這種做法會很有用。若要為快照編號設定自訂字串字串,請使用以下指令:

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_snapperpam_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/username
root # snapper -c home_username create-config /home/username
root # sed -i -e "s/ALLOW_USERS=\"\"/ALLOW_USERS=\"username\"/g" \
/etc/snapper/configs/home_username
root # yast users add username=username home=/home/username password=password
root # chown username.group /home/username
root # 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 Snapper 模組從這些快照中還原檔案。在 YaST 中,您需要選取「目前組態」,同時還需要使用全域參數 -c 指定 snapper 的組態 (例如 snapper -c myconfig list)。

若要建立新的 Snapper 組態,請執行 snapper create-config

tux > sudo snapper -c www-data1 create-config /srv/www2

1

組態檔案的名稱。

2

要建立快照之分割區或 Btrfs 子磁碟區的掛接點。

此指令將會使用 /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 顯示的組態名稱之一。OPTIONVALUE 的可能的值列於第 7.5.1.1 節 「組態資料」中。

刪除組態

使用子指令 snapper -c CONFIG delete-config 可刪除組態。請將 CONFIG 取代為 snapper list-configs 顯示的組態名稱之一。

7.5.1.1 組態資料

每個組態都包含可以從指令行修改的選項清單。以下清單提供每個選項的詳細資料。若要變更某個值,請執行 snapper -c 組態 set-config "索引鍵="

ALLOW_GROUPSALLOW_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,則會每小時建立一個快照。有效值:yesno.

預設值為 "no"

TIMELINE_CLEANUP / TIMELINE_LIMIT_*

為時間軸快照定義清理演算法。如需詳細資料,請參閱第 7.7.2 節 「清理時間軸快照」

7.5.1.2 以普通使用者身分使用 Snapper

依預設,Snapper 只能由 root 使用者使用。但是,在下列情況中,某些群組或使用者需要能夠建立快照或透過回復至快照來復原變更:

  • 想要建立 /srv/www 快照的網站管理員

  • 想要建立其主目錄快照的使用者

若要實現這些目的,您可以建立用於為使用者和/或群組授予權限的 Snapper 組態。相應的 .snapshots 目錄必須可由指定的使用者讀取和存取。實現這一目的最簡單的方法是將 SYNC_ACL 選項設定為 yes

程序 7.5︰ 讓普通使用者可以使用 Snapper

請注意,此程序中的所有步驟都必須由 root 使用者執行。

  1. 如果 Snapper 組態尚不存在,請為使用者可在其上使用 Snapper 的分割區或子磁碟區建立一個 Snapper 組態。如需指示,請參閱第 7.5 節 「建立並修改 Snapper 組態」。範例:

    tux > sudo snapper --config web_data create /srv/www
  2. 組態檔案將在 /etc/snapper/configs/CONFIG 下建立,其中 CONFIG 是您在上一步中使用 -c/--config 指定的值 (如 /etc/snapper/configs/web_data)。依據個人需要來加以調整。如需詳細資訊,請參閱 第 7.5.1 節 「管理現有組態」

  3. 設定 ALLOW_USERS 和/或 ALLOW_GROUPS 的值,以分別向使用者和/或群組授予權限。多個項目需要用 Space 加以分隔。例如,若要向使用者 www_admin 授予權限,請執行:

    tux > sudo snapper -c web_data set-config "ALLOW_USERS=www_admin" SYNC_ACL="yes"
  4. 現在,指定的使用者和/或群組便可以使用給定的 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 listsnapper 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 中按一下建立。下列範例說明如何從指令行建立快照。本文件未明確介紹 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 模組已列出所有快照。從清單中選擇一個快照,然後按一下「修改」。

snapper modify --cleanup-algorithm "時間軸" 10

修改預設 () 組態之快照 10 的中繼資料。清理演算法設為時間軸

snapper --config home modify --description "每日備份" -cleanup-algorithm "時間軸"120

修改名為 home 的自訂組態之快照 120 的中繼資料。將會設定新的描述並取消設定清理演算法。

7.6.4 刪除快照

若要使用 YaST Snapper 模組刪除快照,請從清單中選擇快照,然後按一下「刪除」。

若要使用指令行工具刪除快照,需要知道其編號。請透過執行 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_LIMITNUMBER_LIMIT_IMPORTANTNUMBER_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 指定的期限時,會刪除快照。有效值:yesno.

預設值為 "yes"

用於變更或設定值的範例指令:

tux > sudo snapper -c CONFIG set-config "TIMELINE_CLEANUP=yes"
TIMELINE_LIMIT_DAILYTIMELINE_LIMIT_HOURLYTIMELINE_LIMIT_MONTHLYTIMELINE_LIMIT_WEEKLYTIMELINE_LIMIT_YEARLY

要以小時、天、月、週和年保留的快照數量。

每個項目的預設值為 "10",但 TIMELINE_LIMIT_WEEKLY 除外 (預設為 "0")。

TIMELINE_MIN_AGE

定義快照在可供自動刪除之前的最短保留期限 (秒)。

預設值為 "1800"

範例 7.1︰ 時間軸組態範例
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_AGETIMELINE_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 顯示快照使用的獨佔磁碟空間

快照會共用資料以有效利用儲存空間,因此,使用 dudf 等一般指令無法準確測量已用的磁碟空間。想要在啟用了配額的 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 指定清理演算法,否則不會為手動建立的快照 (請參閱) 指定清理演算法。總是為自動建立的快照指定 numbertimeline 演算法。若要從一或多個快照中移除此類指定,請執行以下步驟:

  1. 列出所有可用的快照:

    tux > sudo snapper list -a
  2. 記住您要防止刪除的快照數。

  3. 執行以下指令,並用您記住的數字取代數字預留位置:

    tux > sudo snapper modify --cleanup-algorithm "" #1 #2 #n
  4. 再次執行 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 清單和缺陷報告。

Image

您可以安裝多個版本的核心套件及其即時修補程式。這些套件不會衝突。您可以為執行中核心安裝更新的核心套件及即時修補程式。在此情況下,您可能會收到將系統重新開機的提示。訂閱了 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 訂閱的註冊代碼。

若要在您的系統上啟用核心即時修補,請執行以下步驟:

  1. 執行 yast2 registration 指令並按一下選取延伸

  2. 在可用延伸清單中選取 SUSE Linux Enterprise Live Patching 15,然後按下一步

  3. 確認授權條款並按下一步

  4. 輸入您的 SLE Live Patching 註冊代碼並按一下下一步

  5. 檢查安裝摘要和所選的模式。系統應該會自動選擇安裝 Live PatchingSLE Live Patching Lifecycle Data 模式,以及一些其他套件以滿足相依關係。

  6. 按一下接受完成安裝。這樣將會在您的系統上安裝基礎核心即時修補元件、初始即時修補程式,以及所需的相依項。

8.4 從指令行啟用核心即時修補

若要啟用核心即時修補,您需要擁有作用中 SLES 和 SLE Live Patching 訂閱。請造訪 SUSE Customer Center 以檢查您的訂閱的狀態,並獲取 SLES Live Patching 訂閱的註冊代碼。

  1. 執行 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
  2. 使用獲得的指令後接 -r LIVE_PATCHING_REGISTRATION_CODE 以啟用 SLES Live Patching,例如:

    SUSEConnect -p sle-module-live-patching/15.3/x86_64 \
      -r LIVE_PATCHING_REGISTRATION_CODE
  3. 使用 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 技術支援部門以獲得協助。

程序 8.1︰ 手動降級修補程式
  1. 使用 klp -v patches 指令確定執行中即時修補程式。以 RPM: 開頭的行中顯示的就是目前的執行中修補程式。例如:

    RPM: kernel-livepatch-5_3_18-24_29-default-2-2.1.x86_64

    上例中的 5_3_18-24_29-default 指的就是執行中核心版本。

  2. 使用 zypper search -s kernel-livepatch-RUNNING_KERNEL_VERSION-default 指令搜尋修補程式的先前版本。該指令會傳回可用套件版本清單。請注意,每個新即時修補程式套件發行版本的版本號碼會加 1。請務必選擇版本號碼低於目前版本號碼的發行版本。

  3. 使用 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-webappstomcat-admin-webapps

  • phpMyAdmin

  • sca-appliance-*

  • mpi-selector

  • emacs 可正常工作 (Emacs 遊戲除外)

  • bindbind-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 進行連接」中所述在 VNC 伺服器欄位中輸入主機,然後按一下連接

vncviewer 要求輸入連接詳細資料
圖形 10.1︰ vncviewer

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︰ Remmina 的主視窗

該應用程式主視窗顯示儲存的遠端工作階段清單。在這裡,您可以新增和儲存新遠端工作階段、快速啟動新工作階段而不儲存、啟動先前儲存的工作階段,或設定 Remmina 的全域優先設定。

10.2.3 新增遠端工作階段

若要新增和儲存新遠端工作階段,請按一下主視窗左上方的 新增工作階段遠端桌面優先設定視窗即會開啟。

遠端桌面優先設定
圖形 10.3︰ 遠端桌面優先設定

在用於指定剛才新增的遠端工作階段設定檔的欄位中填寫資訊。最重要的技術包括:

名稱

設定檔的名稱,將列於主視窗中。

通訊協定

連接到遠端工作階段時要使用的通訊協定,例如 VNC。

伺服器

遠端伺服器的 IP 或 DNS 位址和顯示號碼。

使用者名稱、密碼

將用於進行遠端驗證的身分證明。保留為空白表示不進行驗證。

色彩深度、品質

根據連接速度和品質選取最佳選項。

選取進階索引標籤可輸入更具體的設定。

提示
提示:停用加密

如果用戶端與遠端伺服器之間的通訊不加密,請啟用停用加密,否則連接會失敗。

選取 SSH 索引標籤可顯示進階 SSH 通道和驗證選項。

請按 儲存 加以確認。新的設定檔將列在主視窗中。

10.2.4 啟動遠端工作階段

您可以啟動先前儲存的工作階段,也可以快速啟動一個遠端工作階段而不儲存連接詳細資料。

10.2.4.1 快速啟動遠端工作階段

若要快速啟動遠端工作階段而不新增和儲存連接詳細資料,請使用主視窗頂部的下拉式方塊和文字方塊。

快速啟動
圖形 10.4︰ 快速啟動

從下拉式方塊中選取通訊協定 (例如「VNC」),然後輸入 VNC 伺服器 DNS 或 IP 位址,後跟一個冒號和顯示號碼,然後按 Enter 確認。

10.2.4.2 開啟儲存的遠端工作階段

若要開啟特定的遠端工作階段,請從工作階段清單中連按兩下該工作階段。

10.2.4.3 遠端工作階段視窗

遠端工作階段會在新視窗的索引標籤中開啟。每個索引標籤代管一個工作階段。視窗左側的工具列可協助您管理視窗/工作階段,例如切換全螢幕模式、調整視窗大小以適應工作階段的顯示大小、將特定按鍵動作傳送到工作階段、擷取工作階段的螢幕畫面,或設定影像品質。

正在檢視遠端工作階段的 Remmina
圖形 10.5︰ 正在檢視遠端工作階段的 Remmina

10.2.5 編輯、複製和刪除儲存的工作階段

若要編輯儲存的某個遠端工作階段,請在 Remmina 主視窗中以滑鼠右鍵按一下該工作階段的名稱,然後選取編輯。如需相關欄位的描述,請參閱第 10.2.3 節 「新增遠端工作階段」

若要複製儲存的某個遠端工作階段,請在 Remmina 主視窗中以滑鼠右鍵按一下該工作階段的名稱,然後選取複製。在遠端桌面優先設定視窗中,變更設定檔的名稱,(選擇性) 調整相關選項,然後按一下儲存確認。

若要刪除儲存的某個遠端工作階段,請在 Remmina 主視窗中以滑鼠右鍵按一下該工作階段的名稱,然後選取刪除。在下一個對話方塊中,按一下確認。

10.2.6 從指令行執行遠端工作階段

如果您需要從指令行或使用批次檔案開啟遠端工作階段,而不先開啟應用程式主視窗,請使用以下語法:

 tux > remmina -c profile_name.remmina

Remmina 的設定檔儲存在您主目錄下的 .local/share/remmina/ 目錄中。若要確定哪個設定檔屬於您要開啟的工作階段,請執行 Remmina,在主視窗中按一下工作階段名稱,然後在視窗底部的狀態行中查看設定檔的路徑。

讀取設定檔的路徑
圖形 10.6︰ 讀取設定檔的路徑

如果 Remmina 未在執行,您可以將設定檔重新命名為更合理的檔案名稱,例如 sle15.remmina。您甚至可以將設定檔複製到自訂目錄,並從該目錄中使用 remmina -c 指令來執行它。

10.3 在 VNC 伺服器上設定一次性工作階段

一次性工作階段由遠端用戶端啟動。它會在伺服器上啟動圖形登入畫面。這樣,您就可以選擇啟動工作階段的使用者,如果登入管理員支援,還可以選擇桌面環境。終止此類 VNC 工作階段的用戶端連接時,在該工作階段內啟動的所有應用程式也會隨之終止。一次性 VNC 工作階段無法共用,不過在同一台主機上可以同時啟動多個工作階段。

程序 10.1︰ 啟用一次性 VNC 工作階段
  1. 啟動YaST › 網路服務 › 遠端管理 (VNC)

  2. 核取允許進行遠端管理 (不含工作階段管理)

  3. 如果您打算在網頁瀏覽器視窗中存取 VNC 工作階段,請啟用允許使用網路瀏覽器存取

  4. 若需要,還可核取在防火牆中開啟埠(例如,當網路介面設定為位於外部區域中時)。如果您有多個網路介面,請透過防火牆細節設定在特定介面開啟防火牆埠的限制。

  5. 下一步 確認您的設定值。

  6. 如果有些需要的套件尚未提供,您需要批准安裝缺失套件。

    提示
    提示:重新啟動顯示管理員

    YaST 對顯示管理員設定進行了變更。您需要登出目前的圖形工作階段並重新啟動顯示管理員,以使變更生效。

遠端管理
圖形 10.7︰ 遠端管理

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 檢視器 (vnc1vnc3),另外三個用於 JavaScript 用戶端 (vnchttpd1vnchttpd3)。預設只有 vnc1vnchttpd1 處於作用中狀態。

若要在開機時啟動 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
重要
重要:防火牆和 VNC 連接埠

依照程序 10.1 「啟用一次性 VNC 工作階段」 中所述啟用遠端管理時,會在防火牆中開啟連接埠 58015901。如果提供 VNC 工作階段的網路介面受防火牆保護,則您在為 VNC 工作階段啟用其他連接埠時,需要手動開啟相應的連接埠。如需指示,請參閱Book “Security and Hardening Guide”, Chapter 24 “Masquerading and firewalls”

10.4 設定永久 VNC 伺服器工作階段

從多個用戶端可以同時存取一個永久工作階段。此特性非常適合用於在一個用戶端具有完整存取權,而所有其他用戶端具有僅檢視存取權的場合進行演示操作。另一個使用案例是:訓練員可能需要在其中存取學員桌面的訓練工作階段。

提示
提示:連接至永久 VNC 工作階段

若要連接至永久 VNC 工作階段,必須安裝 VNC 檢視器。如需更多詳細資料,請參閱第 10.1 節 「vncviewer 用戶端」。或者,可在支援 JavaScript 的網頁瀏覽器中輸入以下 URL 來檢視 VNC 工作階段:http://jupiter.example.com:5801

持續 VNC 工作階段分為以下兩類:

10.4.1 使用 vncserver 啟動的 VNC 工作階段

此類型的持續 VNC 工作階段在伺服器上啟動。不論用戶端的連接狀態為何,此工作階段以及在此工作階段中啟動的所有應用程式會一直執行,直至工作階段被終止。對永久工作階段的存取受到密碼保護,密碼可能為以下兩種類型:

  • 授予完全存取權的一般密碼,或

  • 授予非互動式 (僅檢視) 存取權限的選擇性僅檢視密碼。

一個工作階段可以同時擁有這兩種類型的多個用戶端連接。

程序 10.2︰ 使用 vncserver 啟動永久 VNC 工作階段
  1. 開啟外圍程序,並確定您以應當擁有 VNC 工作階段的使用者身分登入。

  2. 如果提供 VNC 工作階段的網路介面受防火牆保護,則您需要在防火牆中手動開啟工作階段使用的連接埠。如果要啟動多個工作階段,可以開啟一系列連接埠。如需如何設定防火牆的詳細資料,請參閱Book “Security and Hardening Guide”, Chapter 24 “Masquerading and firewalls”

    vncserver 對顯示埠 :1 使用連接埠 5901,對顯示埠 :2 使用連接埠 5902,依此類推。對於永久工作階段,VNC 顯示埠和 X 顯示埠的號碼通常都是相同的。

  3. 若要以 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 工作階段

程序 10.3︰ 啟用永久 VNC 工作階段
  1. 啟動「YaST ›  網路服務 ›  遠端管理 (VNC)」。

  2. 啟用允許進行遠端管理 (含工作階段管理)

  3. 如果您打算在網頁瀏覽器視窗中存取 VNC 工作階段,請啟用允許使用網路瀏覽器存取

  4. 若需要,還可核取在防火牆中開啟埠(例如,當網路介面設定為位於外部區域中時)。如果您有多個網路介面,請透過防火牆細節設定在特定介面開啟防火牆埠的限制。

  5. 下一步 確認您的設定值。

  6. 如果有些需要的套件尚未提供,您需要批准安裝缺失套件。

    提示
    提示:重新啟動顯示管理員

    YaST 對顯示管理員設定進行了變更。您需要登出目前的圖形工作階段並重新啟動顯示管理員,以使變更生效。

10.4.2.1 設定永久 VNC 工作階段

程序 10.3 「啟用永久 VNC 工作階段」中所述啟用 VNC 工作階段管理後,便可以使用您喜歡的 VNC 檢視器 (例如 vncviewer 或 Remmina) 正常連接到遠端工作階段。此時將顯示登入畫面。當您登入後,桌面環境的系統匣中將出現「VNC」圖示。按一下該圖示可開啟 VNC 工作階段視窗。如果該圖示未出現,或者您的桌面環境不支援將圖示放在系統匣中,請手動執行 vncmanager-controller

VNC 工作階段設定
圖形 10.8︰ VNC 工作階段設定

有幾項設定會影響 VNC 工作階段的行為:

非持續,私人

這相當於一次性工作階段。其他使用者將看不見此工作階段,它在您斷開連接後即會終止。如需相關資訊,請參閱第 10.3 節 「在 VNC 伺服器上設定一次性工作階段」

持續,可見

其他使用者可以看見工作階段,它在您斷開連接後仍繼續執行。

工作階段名稱

您可以在此處指定持續工作階段的名稱,以便在重新連接時可以輕鬆識別它。

不需要密碼

任何人不必提供使用者身分證明登入即可存取工作階段。

需要使用者登入

需要使用有效的使用者名稱和密碼登入後,才能存取工作階段。該選項會在允許的使用者文字方塊中列出有效的使用者名稱。

一次允許一個用戶端

防止多個使用者同時加入該工作階段。

一次允許多個用戶端

允許多個使用者同時加入持續工作階段。適合用於遠端展示或訓練工作階段。

按一下確定加以確認。

10.4.2.2 加入永久 VNC 工作階段

第 10.4.2.1 節 「設定永久 VNC 工作階段」中所述設定持續 VNC 工作階段後,可透過 VNC 檢視器加入它。當 VNC 用戶端連接到伺服器後,系統將提示您選擇是要建立新工作階段,還是加入現有工作階段:

加入永久 VNC 工作階段
圖形 10.9︰ 加入永久 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 項目。SOURCEDEST 預留位置可以是路徑和/或 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 伺服器,請執行以下操作:

程序 11.1︰ 設定 Rsync 伺服器
  1. 在 jupiter 上,建立用於儲存您所有備份檔案的目錄。在此範例中,我們使用 /var/backup

    root # mkdir /var/backup
  2. 指定擁有權。在此範例中,該目錄為使用者群組中的使用者 tux 所擁有:

    root # chown tux.users /var/backup
  3. 設定 rsyncd 精靈。

    我們將組態檔案分割成一個主檔案,和一些用於存放您的備份目標的模組。如此,以後便可更輕鬆地新增其他目標。全域值可以儲存在 /etc/rsyncd.d/*.inc 檔案中,而模組放置在 etc/rsyncd.d/*.conf 檔案中:

    1. 建立目錄 /etc/rsyncd.d/

      root # mkdir /etc/rsyncd.d/
    2. 在主組態檔案 /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

      1

      /etc/rsyncd.d/*.inc 檔案中的全域值合併到主組態檔案中。

      2

      /etc/rsyncd.d/*.conf 檔案中載入任何模組 (或目標)。這些檔案不應包含任何對全域值的參考。

    3. 在檔案 /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

      1

      備份目標。可以使用您喜歡的任何名稱。但最好依照目標的用途來命名,並使用在 *.conf 檔案中所用的相同名稱。

      2

      指定在進行檔案傳輸時所用的使用者名稱或群組名稱。

      3

      定義用於儲存備份的路徑 (從步驟 1 中)。

      4

      指定所允許使用者的逗號分隔清單。清單以最簡單的方式包含允許連接到此模組的使用者名稱。在我們的範例中,只允許使用者 tux

      5

      指定包含使用者名稱和明文密碼的行所在檔案的路徑。

    4. 建立包含以下內容的 /etc/rsyncd.secrets 檔案,並取代 PASSPHRASE

      # user:passwd
      tux:PASSPHRASE
    5. 確認該檔案只有 root 使用者可讀取:

      root # chmod 0600 /etc/rsyncd.secrets
  4. 透過以下指令啟動並啟用 rsyncd 精靈:

    root # systemctl enable rsyncd
    root # systemctl start rsyncd
  5. 測試是否可存取 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 使用第一次輸入的密碼來解密 /bootsystemd 使用第二次輸入的密碼來載入加密的磁碟區。

在配備 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:

  1. zipl/boot/zipl 分割區開機,該分割區可格式化為 Ext2、Ext3、Ext4 或 XFS 檔案系統。此分割區包含一個極簡的核心,以及一個載入記憶體中的 initramfs。initramfs 包含 Btrfs 驅動程式 (及其他元件) 和開機載入程式 GRUB 2。系統使用參數 initgrub (告知要啟動 GRUB 2) 來啟動核心。

  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"

繼續執行程序 12.1 「產生 initramfs」

將系統目錄移至 RAID 或 LVM

每次您要將執行中系統上的交換檔案或系統目錄 (例如 /usr) 移至 RAID 或邏輯磁碟區時,都需要建立一個包含軟體 RAID 或 LVM 驅動程式支援的 initramfs

為此,請在 /etc/fstab 中建立相關的項目,並掛接新項目 (例如,使用 mount -a 和/或 swapon -a)。

繼續執行程序 12.1 「產生 initramfs」

將磁碟新增至包含根檔案系統的 LVM 群組或 Btrfs RAID

每當您要在包含根檔案系統的邏輯磁碟區群組或者 Btrfs RAID 中新增 (或移除) 磁碟時,都需要建立一個支援增大的磁碟區的 initramfs。請遵循程序 12.1 「產生 initramfs」中的說明操作。

繼續執行程序 12.1 「產生 initramfs」

變更核心變數

如果您在 sysctl 介面中透過編輯相關檔案 (/etc/sysctl.conf/etc/sysctl.d/*.conf) 變更了核心變數的值,系統下次重新開機時,這項變更將會遺失。即使您在執行時使用 sysctl --system 載入這些值,變更也不會儲存到 initramfs 檔案中。您需要依照程序 12.1 「產生 initramfs」中所述更新該檔案。

程序 12.1︰ 產生 initramfs

請注意,您需要以 root 使用者身分執行以下程序中的所有指令。

  1. 執行以下指令產生新的 initramfs 檔案

    dracut MY_INITRAMFS

    請以所選檔案名稱取代 MY_INITRAMFS。新的 initramfs 將會建立為 /boot/MY_INITRAMFS

    或者執行 dracut -f。這會覆寫目前使用的現有檔案。

  2. (如果在上一步中執行了 dracut -f,請跳過此步驟。)為上一步中所建立的 initramfs 檔案建立連結:

    (cd /boot && ln -sf MY_INITRAMFS initrd)
  3. 在 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)。

注意
注意:需要 GUID 分割區表 (GPT)

預設已在 UEFI/x86_64 安裝中啟用安全開機功能。可以在開機載入程式設定對話方區塊的開機碼選項索引標籤中找到啟用安全開機支援選項。該選項支援在韌體中啟用安全開機後開機,同時也支援在停用安全開機後開機。

安全開機支援
圖形 13.1︰ 安全開機支援

安全開機功能要求 GUID 分割區表 (GPT) 以主開機記錄 (MBR) 取代舊分割區。如果 YaST 在安裝期間偵測到 EFI 模式,它將會嘗試建立 GPT 分割區。UEFI 需要在 FAT 格式 EFI 系統分割區 (ESP) 上找到 EFI 程式。

若要支援 UEFI 安全開機,需要有開機載入程式,且韌體認可其數位簽名是可信金鑰。該金鑰需要先天為韌體所信任 (無需任何手動介入)。

實現此目的方法有兩種。一種方法是與硬體廠商協作,讓他們簽署一個 SUSE 金鑰,隨後 SUSE 會使用它來簽署開機載入程式。另一種方法是執行 Microsoft 的 Windows Logo Certification 程式認證開機載入程式,並讓 Microsoft 辨識 SUSE 簽署金鑰 (即,使用其 KEK 進行簽署)。目前,SUSE 透過 UEFI 簽署服務 (在此範例中為 Microsoft) 來簽署載入程式。

UEFI:安全開機程序
圖形 13.2︰ UEFI:安全開機程序

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。使用註冊 MOK 選項可從 MokNew 變數複製金鑰。

通常會在 shim 無法載入 grub2 並退回到載入 MokManager 時執行從磁碟註冊金鑰。由於 MokNew 尚不存在,您可以選擇在 UEFI 分割區上尋找金鑰。

13.1.3 將自訂核心開機

下文以 https://en.opensuse.org/openSUSE:UEFI#Booting_a_custom_kernel 為基礎。

安全開機不會阻止您使用自我編譯的核心。您必須使用您自己的證書簽署該核心,並讓韌體或 MOK 知道該證書。

  1. 建立用於簽署的自訂 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

  2. 將金鑰和證書封裝成 PKCS#12 結構:

    tux > openssl pkcs12 -export -inkey key.asc -in cert.pem \
      -name kernel_cert -out cert.p12
  3. 產生 NSS 資料庫以與 pesign 配合使用:

    tux > certutil -d . -N
  4. 將 PKCS#12 中包含的金鑰和證書輸入到 NSS 資料庫中:

    tux > pk12util -d . -i cert.p12
  5. 使用 pesign 以新簽名保護核心:

    tux > pesign -n . -c kernel_cert -i arch/x86/boot/bzImage \
      -o vmlinuz.signed -s
  6. 列出核心影像上的簽名:

    tux > pesign -n . -S -i vmlinuz.signed

    此時,您可以如一般方式在 /boot 中安裝核心。因為核心現在已有自訂簽名,所以需要將用於簽署的證書輸入到 UEFI 韌體或 MOK 中。

  7. 將證書轉換為 DER 格式以便輸入到韌體或 MOK 中:

    tux > openssl x509 -in cert.pem -outform der -out cert.der
  8. 將證書複製到 ESP 以方便存取:

    tux > sudo cp cert.der /boot/efi/
  9. 使用 mokutil 自動啟動 MOK 清單。

      1. 將證書輸入到 MOK 中:

        tux > mokutil --root-pw --import cert.der

        --root-pw 選項可讓 root 使用者直接使用。

      2. 檢查準備就緒、即待註冊的證書清單:

        tux > mokutil --list-new
      3. 將系統重新開機;shim 應會啟動 MokManager。您需要輸入 root 密碼以確認將證書輸入到 MOK 清單中。

      4. 檢查是否已註冊新輸入的金鑰。

        tux > mokutil --list-enrolled
      1. 或者,如果要手動啟動 MOK,請按照下面的程序操作:

        重新開機

      2. 在 GRUB 2 功能表中,按「c」鍵。

      3. 類型:

        chainloader $efibootdir/MokManager.efi
        boot
      4. 選取「從磁碟註冊金鑰」。

      5. 導覽到 cert.der 檔案並按 Enter

      6. 遵循指示註冊金鑰。一般情況下,應按「0」後再按「y」進行確認。

        或者,韌體功能表可能提供將新金鑰新增至簽名資料庫的方法。

13.1.4 使用非內建驅動程式

在啟用安全開機的情況下進行安裝的過程中,不支援新增非現成驅動程式 (即,不是 SUSE Linux Enterprise Server 隨附的驅動程式)。預設不信任用於 SolidDriver/PLDP 的簽署金鑰。

您可以透過兩種不同的方式,在啟用安全開機的情況下在安裝期間安裝協力廠商驅動程式。在這兩種情況下,都要:

  • 在安裝之前,透過韌體或系統管理工具將需要的金鑰新增至韌體資料庫。此選項取決於您具體所用的硬體。如需詳細資訊,請諮詢您的硬體廠商。

  • 使用 https://drivers.suse.com/ 上或您的硬體廠商提供的可開機驅動程式 ISO,於第一次開機時在 MOK 清單中註冊需要的金鑰。

若要使用可開機驅動程式 ISO 在 MOK 清單中註冊驅動程式金鑰,請執行以下步驟:

  1. 將上述 ISO 影像燒錄到空白 CD/DVD 媒體中。

  2. 使用新的 CD/DVD 媒體開始安裝,並準備好標準的安裝媒體或網路安裝伺服器的 URL。

    如果您要進行網路安裝,請使用 install= 選項在指令行上輸入網路安裝來源的 URL。

    如果您是從光學媒體安裝,安裝程式會先從驅動程式套件開機,然後要求插入產品的第一張安裝光碟。

  3. 安裝時將會使用包含已更新驅動程式的 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 更多資訊

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-oncegrub2-set-default 指令指定的項目開機。grub2-reboot 只設定下一次重新開機的預設開機項目,而 grub2-set-default 設定發生變更之前的預設開機項目。grub2-editenv list 列出下一個開機項目。

GRUB_HIDDEN_TIMEOUT

等待使用者按某個鍵的指定秒數。在此期間,除非使用者按下某個鍵,否則不顯示功能表。如果使用者在指定的時間內未按任何鍵,控制權將移交給 GRUB_TIMEOUTGRUB_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_header10_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.5 在開機程序期間編輯功能表項目

當系統由於組態錯誤而不再能夠開機時,如果能夠直接編輯功能表項目,就會很有幫助。使用功能表編輯器還可以在不變更系統組態的情況下測試新設定。

  1. 在圖形開機功能表中,使用方向鍵選取要編輯的項目。

  2. E 開啟文字型編輯器。

  3. 使用方向鍵移到您要編輯的行。

    GRUB 2 開機編輯器
    圖形 14.1︰ GRUB 2 開機編輯器

    現在,您可以採取以下兩種做法:

    1. 將用空格分隔的參數新增到以 linuxlinuxefi 開頭的行的末尾,以編輯核心參數。https://en.opensuse.org/Linuxrc 上提供了完整的參數清單。

    2. 或者編輯一般選項,以變更核心版本等。按 →| 鍵會顯示所有可能的補齊建議。

  4. F10 使用您所做的變更啟動系統,或者按 Esc 放棄編輯,並返回 GRUB 2 功能表。

透過這種方式進行的變更只會套用到目前的開機過程,而不會永久儲存。

重要
重要:開機程序期間的鍵盤配置

US 鍵盤配置是啟動時唯一可以使用的鍵盤配置。請參閱Book “部署指南 ”, Chapter 12 “疑難排解”, Section 12.3 “從安裝媒體開機失敗”, 美式鍵盤配置

注意
注意:安裝媒體中的開機載入程式

在使用傳統 BIOS 的系統上,安裝媒體的開機載入程式仍是 GRUB Legacy。若要新增開機參數,請選取一項,然後開始輸入。在安裝開機項目中新增的內容將永久儲存在安裝的系統中。

注意
注意:在 IBM Z 上編輯 GRUB 2 功能表項目

IBM Z 上的游標移動操作和編輯指令有所不同,如需詳細資料,請參閱第 14.4 節 「IBM Z 上終端機使用方式的差異」

14.2.6 設定開機密碼

即使在作業系統開機之前,GRUB 2 也支援對檔案系統的存取。沒有 root 權限的使用者可以存取 Linux 系統中的檔案,而在系統開機後,他們將無權存取這些檔案。若要阻擋此類型的存取,或防止使用者啟動特定的功能表項目,請設定開機密碼。

重要
重要:開機需要密碼

如果設定了開機密碼,則每次開機時都需要輸入該密碼,這意味著系統不會自動開機。

按如下步驟設定開機密碼。或者使用 YaST (使用密碼保護開機載入程式 )。

  1. 使用 grub2-mkpasswd-pbkdf2 來加密密碼:

    tux > sudo grub2-mkpasswd-pbkdf2
    Password: ****
    Reenter password: ****
    PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...
  2. 將產生的字串連同 set superusers 指令一起貼到檔案 /etc/grub.d/40_custom 中。

    set superusers="root"
    password_pbkdf2 root grub.pbkdf2.sha512.10000.9CA4611006FE96BC77A...
  3. 若要將變更輸入主要組態檔案中,請執行:

    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 模組。在 YaST 控制中心內,選取「系統 ›  開機載入程式」。模組會顯示系統目前的開機載入程式組態,並允許您進行變更。

使用「開機碼選項」索引標籤可以檢視和變更關於類型、位置和進階載入程式設定的設定。您可以選擇要在標準模式還是 EFI 模式下使用 GRUB 2。

開機代碼選項
圖形 14.2︰ 開機代碼選項
重要
重要:EFI 系統要求使用 GRUB2-EFI

如果您使用的是 EFI 系統,則只能安裝 GRUB2-EFI,否則您的系統不再能夠開機。

重要
重要:重新安裝開機載入程式

若要重新安裝開機載入程式,請確定變更 YaST 中的一個設定,然後將其復原。例如,若要重新安裝 GRUB2-EFI,請先選取 GRUB2,然後立即重新切換至 GRUB2-EFI

否則,開機載入程式可能只會部分重新安裝。

注意
注意:自訂開機載入程式

若要使用此處未列出的開機載入程式,請選取「請勿安裝任何開機載入程式」。請先詳細閱讀開機載入程式的說明文件,再選取這個選項。

14.3.1 開機載入程式位置和開機代碼選項

開機載入程式的預設位置為主開機記錄 (MBR) 或 / 分割區的開機磁區,具體取決於分割區設定。若要修改開機載入程式的位置,請執行下列步驟:

程序 14.1︰ 變更開機載入程式位置
  1. 選取「開機碼選項」索引標籤,然後為「開機載入程式位置」選擇以下其中一個選項:

    從主開機記錄開機

    選取此選項將在包含 /boot 目錄的磁碟 MBR 中安裝開機載入程式。通常,這將是掛接到 / 的磁碟,但如果 /boot 掛接到其他磁碟上的獨立分割區中,則將會使用該磁碟的 MBR。

    從根分割區開機

    這會在 / 分割區的開機磁區中安裝開機載入程式。

    自訂根分割區

    這個選項可讓您手動指定開機載入程式的位置。

  2. 按一下「確定」以套用變更。

代碼選項
圖形 14.3︰ 代碼選項

開機碼選項索引標籤包含以下其他選項:

在分割區表中為開機分割區設定使用中旗標

啟用包含 /boot 目錄的分割區。對於 POWER 系統,則會啟用 PReP 分割區。此選項用於具有舊 BIOS 的系統和/或舊式作業系統,因為它們可能無法從非使用中的分割區開機。您可以放心地啟用此選項。

將一般開機碼寫入 MBR

如果 MBR 包含自訂的「非 GRUB」代碼,此選項會以不受作業系統限制的泛型代碼取代該代碼。如果您停用此選項,系統可能變得無法開機。

啟用受信任的開機支援

啟動可支援受信任運算功能的 TrustedGRUB2(受信任的平台摸組 (Trusted Platform Module, TPM))。如需詳細資訊,請參閱 https://github.com/Sirrix-AG/TrustedGRUB2

保護性 MBR 旗標區段包含以下選項:

set

適用於傳統舊版 BIOS 開機。

remove

適用於 UEFI 開機。

do not change

如果您已有一個正常運作的系統,這通常是最適合的選項。

大多數情況下,YaST 預設會使用適合的選項。

14.3.2 調整磁碟順序

如果您的電腦有多個硬碟,您可以指定磁碟的開機順序。如果從 MBR 開機,將在清單中的第一個磁碟中安裝 GRUB 2。預設在該磁碟中安裝 SUSE Linux Enterprise Server。清單的其餘部分是有關 GRUB 2 的裝置對應程式的提示 (請參閱第 14.2.4 節 「BIOS 磁碟機與 Linux 裝置之間的映射」)。

警告
警告:無法開機的系統

通常情況下,預設值幾乎對所有部署都有效。如果您錯誤地變更了磁碟的開機順序,系統下次重新開機時可能無法開機。例如,如果清單中的第一個磁碟不在 BIOS 開機序列中,並且清單中的其他磁碟有空白 MBR,系統將無法開機。

程序 14.2︰ 設定磁碟順序
  1. 開啟「開機碼選項」索引標籤。

  2. 按一下編輯磁碟開機順序

  3. 如果列出超過一個磁碟,請選擇一個磁碟,然後按一下「向上」或「向下」重新排列顯示磁碟的順序。

  4. 按兩次「確定」儲存變更。

14.3.3 設定進階選項

可以透過開機載入程式選項索引標籤來設定進階開機參數。

14.3.3.1 開機載入程式選項索引標籤

開機載入程式選項
圖形 14.4︰ 開機載入程式選項
開機載入程式逾時

輸入新值或者用滑鼠按住相應的方向鍵,以變更「逾時秒數」的值。

偵測外來作業系統

如果選取該選項,開機載入程式將會搜尋其他系統 (例如 Windows) 或其他 Linux 安裝。

開機時隱藏功能表

隱藏開機功能表並使用預設項目開機。

調整預設開機項目

從「預設開機區段」清單中選取所需項目。請注意,開機項目名稱中的>符號用於分隔開機區段及其子區段。

使用密碼保護開機載入程式

使用一個附加的密碼保護開機載入程式和系統。如需手動設定的詳細資料,請參閱第 14.2.6 節 「設定開機密碼」。如果啟用此選項,則每次開機時都需要輸入該密碼,這意味著系統不會自動開機。但是,如果您更偏好 GRUB 1 的行為方式,請額外啟用僅啟用項目修改防護。使用此設定時,任何人都可以選取開機項目並將系統開機,僅在修改開機項目時,才需要提供 GRUB 2 root 使用者的密碼。

14.3.3.2 核心參數索引標籤

核心參數
圖形 14.5︰ 核心參數
選擇性核心指令行參數

在這裡指定選擇性的核心參數,以啟用/停用系統功能、新增驅動程式,等等。

CPU 緩和措施

SUSE 針對為防禦 CPU 旁路攻擊而部署的所有軟體緩和措施發行了一或多個核心開機指令行參數。其中一些參數可能會導致效能損失。請依據您的設定選擇以下其中一個選項,以在安全性和效能之間取得平衡:

自動:  啟用您的 CPU 型號所需的全部緩和措施,但不能防禦跨 CPU 線串的攻擊。此設定可能會在一定程度上影響效能,具體視您的工作負載而定。

自動 + 停用 SMT:  提供整套可用的安全性緩和措施。啟用您的 CPU 型號所需的全部緩和措施。此外,它還會停用同步多重線串,以避免遭到跨多個 CPU 線串發起的旁路攻擊。此設定可能會進一步影響效能,具體視您的工作負載而定。

關閉:  停用所有緩和措施。CPU 可能會遭到旁路攻擊,具體視 CPU 型號而定。此設定不會對效能造成任何影響。

手動:  不設定任何緩和措施層級。請使用核心指令行選項手動指定 CPU 緩和措施。

使用圖形主控台

如果核取該選項,則開機功能表會顯示在圖形開頭顯示畫面中,而不是以文字模式顯示。依預設,系統會自動設定開機螢幕的解析度,但您可以透過主控台解析度手動進行設定。可以使用主控台主題檔案選擇器指定圖形主題定義檔案。請僅在您想要套用自己的自訂主題時,才變更此設定。

使用序列控制台

如果您的機器是透過序列控制台控制的,請啟用此選項並指定以何速度來使用哪一個 COM 埠。請參閱 info grubhttp://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 終端機在顯示和重新整理螢幕方面要好得多。

游標移動方式

無法進行傳統的游標移動操作。AltMetaCtrl 和游標鍵不起作用。若要移動游標,請使用第 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

範例 14.1︰ grub2-mkconfig 用法
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.cfg
grub2-mkrescue

為安裝的 GRUB 2 組態建立一個可開機的救援影像。

範例 14.2︰ grub2-mkrescue 用法
grub2-mkrescue -o save_path/name.iso iso
grub2-script-check

檢查指定檔案中有無語法錯誤。

範例 14.3︰ grub2-script-check 用法
grub2-script-check /boot/grub2/grub.cfg
grub2-once

僅設定下次開機的預設開機項目。若要取得可用開機項目的清單,請使用 --list 選項。

範例 14.4︰ grub2-once 用法
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 程序檔、insservtelinit 及其他。systemd 可簡化服務管理,因為對於大部分處理服務的任務,只需記住一條指令:systemctl。它使用 指令加子指令表示法,與 gitzypper 相似:

systemctl GENERAL OPTIONS SUBCOMMAND SUBCOMMAND OPTIONS

如需完整的手冊,請參閱 man 1 systemctl

提示
提示:終端機輸出和 Bash 補齊

如果輸出進入終端機 (而不是進入管線或檔案之類),systemd 指令依預設會將長輸出傳送到頁面巡覽區。使用 --no-pager 選項可關閉切換模式。

systemd 還支援 bash 補齊,允許您輸入子指令的頭幾個字母,然後按 →|。此功能僅可用於 bash 外圍程序,並且需要安裝套件 bash-completion

15.2.1 管理正在執行系統中的服務

用於管理服務的子指令與透過 System V init 管理服務的子指令相同 (startstop、...)。下面列出了服務管理指令的通用語法:

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 最重要的服務管理指令:

表格 15.1︰ 服務管理指令

任務

systemd 指令

System V init 指令

啟動: 

start
start

停止: 

stop
stop

重新啟動:  關閉服務,然後啟動這些服務。如果某項服務並未執行,則會將其啟動。

restart
restart

有條件地重新啟動:  如果服務目前正在執行中,則予以重新啟動。對於未在執行中的服務,則不執行任何動作。

try-restart
try-restart

重新載入:  指示服務重新載入它們的組態檔案,而不中斷操作。使用案例:指示 Apache 重新載入修改過的 httpd.conf 組態檔案。請注意,並非所有服務都支援重新載入。

reload
reload

重新載入或重新啟動:  如果服務支援重新載入,則重新載入服務,否則重新啟動服務。如果某項服務並未執行,則會將其啟動。

reload-or-restart
n/a

有條件地重新載入或重新啟動:  如果服務支援重新載入,則重新載入服務,否則重新啟動那些目前正在執行的服務。對於未在執行中的服務,則不執行任何動作。

reload-or-try-restart
n/a

取得詳細的狀態資訊:  列出服務狀態的相關資訊。systemd 指令顯示詳細資料,例如描述、可執行檔、狀態、cgroup 及服務發出的最新訊息 (請參閱第 15.6.9 節 「服務除錯」)。使用 System V init 顯示的詳細資料級別因服務而異。

status
status

取得簡要的狀態資訊:  顯示服務是否處於使用中狀態。

is-active
status

15.2.2 永久啟用/停用服務

上一節中提及的服務管理指令可讓您操作目前工作階段的服務。systemd 還可讓您永久啟用或停用服務,使之可以按要求自動啟動,或者始終無法使用。此操作可以透過 YaST 或在指令行上執行。

15.2.2.1 在指令行上啟用/停用服務

下表列出了 systemd 和 System V init 用於啟用和停用服務的指令:

重要
重要:服務啟動

在指令行上啟用服務時,服務不會自動啟動。系統將其排定為下一次系統啟動或執行層級/目標變更時啟動。若要在啟用服務之後立即啟動它,請明確執行 systemctl start MY_SERVICErc MY_SERVICE start

表格 15.2︰ 用於啟用和停用服務的指令

任務

systemd 指令

System V init 指令

啟用: 

systemctl enable MY_SERVICE(S)

insserv MY_SERVICE(S)chkconfig -a MY_SERVICE(S)

停用: 

systemctl disable MY_SERVICE(S).service

insserv -r MY_SERVICE(S)chkconfig -d MY_SERVICE(S)

檢查:  顯示是否已啟用某個服務。

systemctl is-enabled MY_SERVICE

chkconfig MY_SERVICE

重新啟用:  與重新啟動服務相似,此指令先停用服務,然後再啟用該服務。若要使用服務的預設值重新啟用服務,可使用此任務。

systemctl reenable MY_SERVICE

遮罩:  停用某項服務之後,仍然可以手動啟動它。若要徹底停用服務,您需要予以遮罩。使用須謹慎。

systemctl mask MY_SERVICE

取消遮罩:  遮罩某項服務之後,惟有先將其取消遮罩,才能再次予以使用。

systemctl unmask MY_SERVICE

15.3 系統啟動和目標管理

啟動和關閉系統的整個程序由 systemd 維護。依此觀點,核心可以視為背景程序,以維護所有其他程序,並根據其他程式的要求來調整 CPU 時間和硬體存取。

15.3.1 目標與執行層級的比較

使用 System V init 時,系統將開機進入 執行層級。執行層級定義了系統的啟動方式,以及在所執行的系統中可以使用哪些服務。執行層級標有編號;最常見的執行層級是 0 (關閉系統)、3 (多重使用者,包含網路) 和 5 (多重使用者,包含網路及顯示管理員)。

systemd 使用所謂的目標單位引入新的概念。不過,它仍然與執行層級概念完全相容。目標單位是有名稱而不是有編號的,它有多個作用。例如,目標 local-fs.targetswap.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

表格 15.3︰ System V 執行層級和 systemd 目標單位

System V 執行層級

systemd 目標

用途

0

runlevel0.targethalt.targetpoweroff.target

關閉系統

1, S

runlevel1.targetrescue.target

單一使用者模式

2

runlevel2.targetmulti-user.target

本地多重使用者,不包含遠端網路

3

runlevel3.targetmulti-user.target

完整的多重使用者,包含網路

4

runlevel4.target

未使用/使用者定義

5

runlevel5.targetgraphical.target

完整的多重使用者,包含網路及顯示管理員

6

runlevel6.targetreboot.target

系統重新開機

重要
重要:systemd 會忽略 /etc/inittab

System V init 系統中的執行層級在 /etc/inittab 中設定。systemd 使用此組態。如需如何建立您自己的可開機目標的指示,請參閱第 15.5.4 節 「建立自訂目標」

15.3.1.1 用於變更目標的指令

請使用下列指令來操作目標單位:

任務

systemd 指令

System V init 指令

變更目前的目標/執行層級

systemctl isolate MY_TARGET.target

telinit X

變更為預設目標/執行層級

systemctl default

取得目前的目標/執行層級

systemctl list-units --type=target

對於 systemd,通常會有多個作用中目標。該指令列出目前處於使用中狀態的所有目標。

who -r

runlevel

永久性變更預設的執行層級

使用服務管理員或執行下列指令:

ln -sf /usr/lib/systemd/system/ MY_TARGET.target /etc/systemd/system/default.target

使用服務管理員或變更以下行

id: X:initdefault:

(位於 /etc/inittab 中)

變更目前開機程序的預設執行層級

在開機提示的選項中輸入下列文字:

systemd.unit= MY_TARGET.target

在開機提示中輸入所需的執行層級編號。

顯示目標/執行層級的相依性

systemctl show -p "Requires" MY_TARGET.target

systemctl show -p "Wants" MY_TARGET.target

Requires 會列出硬相依性 (必須解析的相依性),而 Wants 則列出軟相依性 (可行時解析的相依性)。

15.3.2 系統啟動除錯

systemd 針對系統啟動過程提供了分析方法。您可以查看所有服務及其狀態的清單 (而不必剖析 /var/log/)。systemd 還允許您掃描啟動程序,以瞭解每項服務耗費多長時間啟動。

15.3.2.1 檢視服務的啟動情況

若要檢閱自從系統開機以來已啟動的完整服務清單,請輸入指令 systemctl。這將列出所有使用中的服務,如下方所述 (已縮短)。若要獲得特定服務的詳細資訊,請使用 systemctl status MY_SERVICE

範例 15.1︰ 列出作用中的服務
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 選項:

範例 15.2︰ 列出失敗的服務
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
Image

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 程序檔中的 susudo 以其他使用者身分啟動服務會導致程序檔失敗,產生拒絕存取錯誤。

使用 susudo 變更使用者時,會啟動 PAM 工作階段。完成 init 程序檔後會終止此工作階段。因此,init 程序檔啟動的服務也會終止。若要解決此問題,請執行下列步驟:

  1. 建立與 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 中寫入的所有值。

    1

    選擇性 — 僅當 init 程序檔啟動精靈時才使用。

    2

    multi-user.target 在開機到 graphical.target 時也會啟動 init 程序檔。如果只應在開機到顯示管理員時才將它啟動,請在此處使用 graphical.target

  2. 使用 systemctl start 應用程式啟動精靈。

15.4 使用 YaST 管理服務

基本服務管理也可以透過 YaST 服務管理員模組實現。該模組不僅支援啟動、停止、啟用和停用服務,還可用於顯示服務的狀態以及變更預設目標。若要啟動 YaST 模組,請選取「YaST ›  系統 ›  服務管理員」。

服務管理員
圖形 15.1︰ 服務管理員
變更預設系統目標

若要變更系統開機進入的目標,請從「預設系統目標」下拉方塊中選擇目標。最常用的目標是「圖形介面」 (啟動圖形登入畫面) 和「多重使用者」 (以指令行模式啟動系統)。

啟動或停止服務

從表中選取服務。狀態欄顯示它目前是正在執行 (作用中) 還是未在執行 (非作用中)。透過選擇啟動停止可切換其狀態。

如果啟動或停止服務,會變更其對目前執行中工作階段而言的狀態。若要在整個重新開機期間變更服務的狀態,您需要啟用或停用服務。

定義服務啟動行為

服務可以在開機時自動啟動,也可以手動啟動。從表中選取服務。啟動欄顯示它目前是手動啟動還是開機時啟動。透過選擇啟動模式可切換其狀態。

若要在目前工作階段中變更服務狀態,您需要依據上述方式啟動或停止服務。

檢視狀態訊息

若要檢視服務的狀態訊息,請從清單中選取該服務,然後選擇 顯示詳細資料。您看到的輸出與 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.SERVICEFOOBAR 服務的單個值,請依照以下步驟操作:

  1. 建立名為 /etc/systemd/system/FOOBAR.service.d/ 的目錄。

    注意字尾為 .d。該目錄必須命名為要透過所放入之檔案修補的服務。

  2. 在該目錄中,建立 your_modification.conf 檔案。

    確保該檔案僅包含待修改值所在的行。

  3. 將您所做的變更儲存到檔案中。

注意
注意:避免名稱衝突

為避免放入式檔案與 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.socketman 5 systemd.service)。

15.5.4 建立自訂目標

在 System V init SUSE 系統上並未使用執行層級 4,便於管理員自行建立執行層級組態。systemd 可讓您建立任意個自訂目標。建議您在開始時先在 graphical.target 等現有的目標上調整。

  1. 將組態檔案 /usr/lib/systemd/system/graphical.target 複製到 /etc/systemd/system/MY_TARGET.target,並依據需要調整該檔案。

  2. 上一步中複製的組態檔案已涵蓋該目標的必要的 () 相依性。若要一併納入需要的 () 相依項,請建立目錄 /etc/systemd/system/MY_TARGET.target.wants

  3. 對每個需要的服務,建立從 /usr/lib/systemd/system 連到 /etc/systemd/system/MY_TARGET.target.wants 的符號連結。

  4. 設定好目標後,重新載入 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-reload
tux > 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。結果類似於以下範例 (已縮短):

範例 15.3︰ 列出屬於某個服務的所有程序
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 程序。您可以將傳送目標限制為 controlmain 程序。後者非常實用,如下例透過傳送 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 chronyd
tux > 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 進行定義。

  • 單純計時器將從某個特定起點開始經過指定時間後觸發。後者可以是系統開機或系統單位啟用事件。有幾個選項可用於定義單純計時器,包括 OnBootSecOnUnitActiveSecOnTypeSec。單純計時器不是永久的,每次重新開機後都將被重設。

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 的詳細資訊,請參閱以下線上資源:

首頁

http://www.freedesktop.org/wiki/Software/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 特殊系統功能
  • 本章會提供各種軟體套件、虛擬主控台及鍵盤配置的相關資訊。還會介紹 bashcronlogrotate 等軟體元件,因為這些元件較之上一版有所變更或加強。這些元件也許不很重要,但與系統的關係密切,使用者應該變更它們的預設行為。本章最後一節則會介紹語言與國家特定的設定 (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 位元應用程式。

注意
注意:不支援建構 32 位元應用程式

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 將為您建立該目錄,如果您執行以下操作,它將會切換到永久記錄:

  1. root 身分開啟 /etc/systemd/journald.conf 進行編輯。

    root # vi /etc/systemd/journald.conf
  2. 取消註解包含 Storage= 的行,並將它變更為

    [...]
    [Journal]
    Storage=persistent
    #Compress=yes
    [...]
  3. 儲存該檔案,然後重新啟動 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 錯誤

本節將介紹一個簡單的範例,說明如何找出並修復 systemdapache2 啟動期間報告的錯誤。

  1. 嘗試啟動 apache2 服務:

    # systemctl start apache2
    Job for apache2.service failed. See 'systemctl status apache2' and 'journalctl -xn' for details.
  2. 我們來看看該服務的狀態如何:

    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。

  3. 顯示與程序 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
    [...]
  4. 改正 /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 中選取 系統 ›  Systemd 日誌 啟動該模組。也可以在指令行中輸入 sudo yast2 journal 來啟動該模組。

YaST systemd 日誌
圖形 17.1︰ YaST systemd 日誌

模組將在表中顯示記錄項目。使用頂部的搜尋方塊可以搜尋包含特定字元的項目,這類似於使用 grep。若要依日期和時間、單位、檔案或優先程度過濾項目,請按一下變更過濾器,然後設定相應的選項。

17.7 在 GNOME 中檢視記錄

您可以使用 GNOME 記錄來檢視日誌。可從應用程式功能表啟動它。若要檢視系統記錄訊息,需要以 root 身分執行,例如使用 xdg-su gnome-logs。按 AltF2 時可執行此指令。

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.1︰ java 指令的替代項系統
/usr/bin/java 1
 -> /etc/alternatives/java 2
     -> /usr/lib64/jvm/jre-10-openjdk/bin/java 3

1

一般名稱。

2

替代項目錄中的符號連結。

3

替代項之一。

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-2foo-3

  • 這些程序檔儲存在 /usr/local/bin 目錄中,以免與 /usr/bin 中的系統工具產生任何衝突。

  • 有一個主連結 foo 指向 foo-2foo-3

若要在您的系統上提供替代項,請執行以下步驟:

  1. 將您的程序檔複製到 /usr/local/bin 目錄中。

  2. 讓程序檔可執行:

    tux > sudo chmod +x /usr/local/bin/foo-{2,3}
  3. 針對兩個程序檔執行 update-alternatives

    tux > sudo update-alternatives --install \
       /usr/local/bin/foo 1\
       foo 2\
       /usr/local/bin/foo-2 3\
       200 4
    tux > sudo update-alternatives --install \
       /usr/local/bin/foo 1\
       foo 2\
       /usr/local/bin/foo-3 3\
       300 4

    --install 後面的選項具有以下意義:

    1

    一般名稱。為了避免混淆,該名稱通常是不含任何版本號碼的程序檔名稱。

    2

    主連結的名稱。必須相同。

    3

    位於 /usr/local/bin 中的原始程序檔的路徑。

    4

    優先程度。我們給 foo-2 設定一個低於 foo-3 的優先程度。最好使用增大得非常明顯的數字來區分優先程度。例如,foo-2 的優先程度是 200,foo-3 的優先程度是 300。

  4. 檢查主連結:

    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.gzfoo-3.1.gz) 儲存在 /usr/local/man/man1 目錄中。

  • 兩個組態檔案 (foo-2.conffoo-3.conf) 儲存在 /etc 中。

請執行以下步驟將其他檔案新增至替代項中:

  1. 將組態檔案複製到 /etc 中:

    tux > sudo cp foo-{2,3}.conf /etc
  2. 將 man 頁面複製到 /usr/local/man/man1 目錄中:

    tux > sudo cp foo-{2,3}.1.gz /usr/local/man/man1/
  3. 使用 --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
  4. 檢查主連結:

    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/IP 通訊協定系列中的數種通訊協定
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 層由基礎硬體相依通訊協定提供支援,例如乙太網路。

TCP/IP 的簡化層模型
圖形 19.1︰ TCP/IP 的簡化層模型

圖表提供每層的一或兩個範例。層的順序是依據抽象階層 (abstraction level)。最低層非常靠近硬體。不過,最上層對硬體而言幾乎是完全抽象的。每層都有自己的特殊功能。這些特殊功能通常隱含於其描述中。資料連結層及實體層代表所使用的實體網路 (例如乙太網路)。

幾乎所有的硬體通訊協定都是採用封包導向模式。要傳輸的資料會收集在封包中 (無法一次全部傳送)。TCP/IP 封包的大小上限約為 64 KB。由於網路硬體可能有所限制,因此封包一般都很小。乙太網路上資料封包的大小上限約為 1500 個位元組。在乙太網路上傳送資料時,TCP/IP 封包的大小受此數量限制。如果傳送更多資料,則需要由作業系統傳送更多資料封包。

因為每層有自己指定的功能,關於每層的其他資訊必須儲存於資料封包中。這些資訊放在封包的「標頭」中。每層皆在產生的封包前端附加小的資料區塊,稱為通訊協定標頭。有關在乙太網路纜線上傳送的 TCP/IP 資料封包範例,請參閱圖形 19.2 「TCP/IP 乙太網路封包」中的說明。proof sum 位於封包結尾,不在開頭處。這樣可幫助網路硬體簡化程序。

TCP/IP 乙太網路封包
圖形 19.2︰ TCP/IP 乙太網路封包

當應用程式在網路上傳送資料時,資料會經過每一層,除實體層外,全部在 Linux 核心執行。每層都負責準備資料使其能夠傳送到下一層。最底層最後要負責傳送資料。接收到資料時則反轉執行整個程序。就如同洋蔥的層級一般,在每層中,會從已傳輸的資料上移除通訊協定標頭。最後,傳輸層負責讓目的地端的應用程式可以使用資料。以這種方式,每層僅直接與上下兩層通訊。對於應用程式而言,資料是透過無線連接還是有線連接傳輸都無關緊要。同樣地,對於資料線而言,只要封包的格式正確,無論傳送的是哪種類型的資料也是無關的。

19.1 IP 位址和路由

在此節中的討論僅限於 IPv4 網路。如需有關 IPv6 通訊協定 (IPv4 的後繼者) 的資訊,請參閱第 19.2 節 「IPv6 - 新一代網際網路」

19.1.1 IP 位址

網際網路上的每台電腦都有唯一的 32 位元位址。這些 32 位元 (或 4 位元組) 通常按範例 19.1 「撰寫 IP 位址」中第二列所述寫入。

範例 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

範例 19.2︰ 將 IP 位址連結到網路遮罩
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.1︰ 私人 IP 位址網域

網路/網路遮罩

領域

10.0.0.0/255.0.0.0

10.x.x.x

172.16.0.0/255.240.0.0

172.16.x.x172.31.x.x

192.168.0.0/255.255.0.0

192.168.x.x

19.2 IPv6 - 新一代網際網路

重要
重要:IBM Z: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 位址」 中,其中三行都是代表相同的位址。

範例 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 結合網路遮罩的值,判斷主機是否位於相同的子網路或在另一個子網路。

範例 19.4︰ 指定字首長度的 IPv6 位址
fe80::10:1000:1a4/64

IPv6 知道關於數個字首的預定類型。各種 IPv6 字首中列出了其中的一部分。

各種 IPv6 字首
00

IPv4 位址與透過 IPv6 的 IPv4 相容位址。這些位址用來維護與 IPv4 的相容性。其使用仍然要求路由器能夠轉譯 IPv6 封包為 IPv4 封包。數個特殊的位址,如迴路裝置的位址,也有此字首。

23 做為第一個數字

可彙總的全域單點廣播位址。類似 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 網路設定模組。在全域選項索引標籤上,視需要選取或取消選取啟用 IPv6 選項。若要暫時啟用直至下次重新開機,請以 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 密切相關。利用此程式,可快速找出負責指定網域的伺服器。

注意
注意:MDNS 和 .local 網域名稱

.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:可熱插拔網路卡

IBM Z 平台支援可熱插拔網路卡,但不支援透過 DHCP 自動將它們進行網路整合 (與 PC 情況相同)。偵測到網路卡後,您需要手動設定介面。

19.4.1 使用 YaST 設定網路卡

若要在 YaST 中設定以太網路卡或 Wi-Fi/藍芽卡,請選取系統 ›  網路設定。啟動模組後,YaST 將顯示「網路設定」對話方塊,其中包含四個索引標籤:「全域選項」、「綜覽」、「主機名稱/DNS」和「路由」。

使用「全域選項」索引標籤可設定一般網路選項,例如網路設定方法、IPv6 和一般 DHCP 選項。如需詳細資訊,請參閱 第 19.4.1.1 節 「設定全域網路選項」

綜覽」索引標籤包含有關已安裝網路介面與組態的資訊。此處會列出所有正確偵測到之網路卡的名稱。在此對話方塊中,您可以手動設定新網路卡、移除或變更其組態。若要手動設定未自動偵測到的網路卡,請參閱第 19.4.1.3 節 「設定未偵測到的網路卡」。若要變更所設定網路卡的組態,請參閱第 19.4.1.2 節 「變更網路卡的組態」

使用「主機名稱/DNS」索引標籤可設定機器的主機名稱以及要使用伺服器的名稱。如需詳細資訊,請參閱 第 19.4.1.4 節 「設定主機名稱和 DNS」

路由」索引標籤用於設定路由組態。如需詳細資訊,請參閱第 19.4.1.5 節 「設定路由」

組態網路設定
圖形 19.3︰ 組態網路設定

19.4.1.1 設定全域網路選項

使用 YaST 網路設定模組的「全域選項」索引標籤,可以設定重要的全域網路選項,例如使用 NetworkManager、IPv6 和 DHCP 用戶端選項。這些設定適用於所有網路介面。

注意
注意:NetworkManager 由 Workstation Extension 提供

NetworkManager 現在由 SUSE Linux Enterprise Workstation Extension 提供。若要安裝 NetworkManager,請啟用 Workstation Extension 儲存庫,然後選取 NetworkManager 套件。

在「網路設定方法」中,選擇管理網路連線的方式。若希望 NetworkManager 桌面 applet 管理所有介面的連線,請選擇「NetworkManager 服務」。NetworkManager 最適合用於在多個有線和無線網路之間進行切換。如果您執行的不是桌面環境,或者您的電腦是 Xen 伺服器、虛擬系統或者會在網路中提供 DHCP 或 DNS 等網路服務,請使用「Wicked 服務」方法。如果使用 NetworkManager,則應使用 nm-applet 設定網路選項,且「網路設定」模組的「綜覽」、「主機名稱/DNS」和「路由」索引標籤都會處於停用狀態。如需 NetworkManager 的詳細資訊,請參閱 SUSE Linux Enterprise Desktop 文件。

在「IPv6 通訊協定設定」中,選擇是否要使用 IPv6 協定。可以同時使用 IPv6 和 IPv4。預設會啟用 IPv6。但是,在不使用 IPv6 通訊協定的網路中,停用 IPv6 通訊協定時回應較快。若要停用 IPv6,請停用「啟用 IPv6」。如果停用了 IPv6,核心將不再自動載入 IPv6 模組。重新開機後會套用此設定。

在「DHCP 用戶端選項」中,設定 DHCP 用戶端的選項。在一個網路中,每個 DHCP 用戶端的「DHCP 用戶端識別碼」均不能相同。若將其留為空白,則預設會使用網路介面的硬體位址。但是,如果您要使用同一個網路介面執行多個虛擬機,因此會使用同一個硬體位址,則請在此處指定不限格式的唯一識別碼。

要傳送的主機名稱」指定當 DHCP 用戶端將訊息傳送至 DHCP 伺服器時,主機名稱選項欄位所使用的字串。有些 DHCP 伺服器會根據此主機名稱 (動態 DNS) 更新名稱伺服器區域 (正向和反向記錄)。此外,有些 DHCP 伺服器需要「要傳送的主機名稱」選項欄位包含用戶端傳送之 DHCP 訊息中的特定字串。如果保留 AUTO,將傳送目前的主機名稱 (即 /etc/HOSTNAME 中定義的主機名稱)。將選項欄位留為空白則不會傳送主機名稱。

如果您不希望根據 DHCP 的資訊變更預設路由,請停用「透過 DHCP 變更預設路由」。

19.4.1.2 變更網路卡的組態

若要變更網路卡的組態,請在 YaST 的「網路設定 ›  綜覽」中偵測到的網路卡清單中選取網路卡,然後按一下「編輯」。「網路卡設定」對話方塊隨即出現,您可以使用「一般」、「位址」和「硬體」索引標籤調整網路卡的組態。

19.4.1.2.1 設定 IP 位址

在「網路卡設定」對話方塊的「位址」索引標籤中,可以設定網路卡的 IP 位址或確定其 IP 位址的方式。系統支援 IPv4 和 IPv6 兩種位址。您可以為網路卡設定「無 IP 位址」(適用於 Bonding 裝置)、「靜態指定的 IP 位址」(IPv4 或 IPv6),也可以透過「DHCP」或/與「Zeroconf」為其指定「動態位址」。

若要使用「動態位址」,請選擇是使用「僅限 DHCP 版本 4」(適用於 IPv4)、「僅限 DHCP 版本 6」(適用於 IPv6),還是「DHCP 版本 4 與 6」。

若情況適合,系統會將安裝時第一個可用的已連結網路卡自動設定為使用透過 DHCP 設定的自動位址。

注意
注意:IBM Z 和 DHCP

在 IBM Z 平台上,只有擁有 MAC 位址的網路卡才支援基於 DHCP 的位址組態。此情況只適用於 OSA 和 OSA 高速網路卡。

若您用的是 DSL 連線而非 ISP (網際網路服務提供者) 指定的靜態 IP,還應該使用 DHCP。若您決定使用 DHCP,請在 YaST 網路卡組態模組中開啟「網路設定」對話方塊,於「全域選項」索引標籤的「DHCP 用戶端選項」中設定詳細資料。若您將虛擬主機設定為透過同一個介面與不同的主機進行通訊,則需要使用「DHCP 用戶端識別碼」來分辨它們。

DHCP 對於用戶端組態是不錯的選擇,但不適用於伺服器組態。若要設定靜態 IP 位址,請如下執行:

  1. 在 YaST 網路卡組態模組的「綜覽」索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下「編輯」。

  2. 在「位址」索引標籤中,選擇「靜態指定的 IP 位址」。

  3. 輸入「IP 位址」。使用 IPv4 和 IPv6 位址都可以。在「子網路遮罩」中輸入網路遮罩。若使用 IPv6 位址,請以 /64 格式使用「子網路遮罩」做為字首長度。

    您還可以選擇為此位址輸入完全合法的「主機名稱」,它將會寫入 /etc/hosts 組態檔案中。

  4. 下一步

  5. 若要啟用組態,請按一下「確定」。

注意
注意:介面啟動和連結偵測

在啟動網路介面期間,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 設定網路卡的其他地址,請執行以下步驟:

  1. 在 YaST「網路設定」對話方塊的「綜覽」索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下「編輯」。

  2. 在「位址 ›  其他位址」索引標籤中,按一下「新增」。

  3. 輸入「IPv4 地址標籤」、「IP 位址」和「網路遮罩」。別名中不要包含介面名稱。

  4. 若要啟用組態,請確認設定。

19.4.1.2.3 變更裝置名稱和 udev 規則

可以在網路卡正在使用中時變更它的裝置名稱。也可以決定網路卡是否應由 udev 透過其硬體 (MAC) 位址或透過匯流排 ID 識別。後一個選項更適合大型伺服器,因為便於熱插拔網路卡。若要使用 YaST 設定這些選項,請執行下列步驟:

  1. 在 YaST「網路設定」對話方塊的「綜覽」索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下「編輯」。

  2. 移至一般索引標籤。目前的裝置名稱顯示在「Udev 規則」中。按一下「變更」。

  3. 選擇 udev 是應透過網路卡的「MAC 位址」還是透過「匯流排 ID」來識別網路卡。網路卡目前的 MAC 位址和匯流排 ID 將顯示在對話方塊中。

  4. 若要變更裝置名稱,請選取「變更裝置名稱」選項,然後編輯名稱。

  5. 若要啟用組態,請確認設定。

19.4.1.2.4 變更網路卡核心驅動程式

有些網路卡可能有多個核心驅動程式可供使用。如果網路卡已設定,YaST 可讓您從可用且適合的驅動程式清單中選取要使用的核心驅動程式。還可以為核心驅動程式指定選項。若要使用 YaST 設定這些選項,請執行下列步驟:

  1. 在 YaST 網路設定模組的「綜覽」索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下「編輯」。

  2. 移至「硬體」索引標籤。

  3. 在「模組名稱」中選取要使用的核心驅動程式。在選項中以 = =VALUE 格式為所選驅動程式輸入任何選項。若要使用多個選項,應以空格將其隔開。

  4. 若要啟用組態,請確認設定。

19.4.1.2.5 啟動網路裝置

若使用結合 wicked 的方法,則可以將裝置設定為在開機時、連接纜線時、偵測到網路卡時啟動,或以手動方式啟動,或永不啟動。若要變更裝置啟動,請執行下列步驟:

  1. 在 YaST 的系統 ›  網路設定中,於偵測到的網路卡清單中選取一個網路卡,然後按一下編輯

  2. 一般索引標籤中,從裝置啟用中選擇希望的項目。

    選擇「開機時」可在系統開機時啟動裝置。若使用「電纜連接」,系統會監控介面,探查是否有實體的連接。若使用熱插拔時,會在介面可用時對其進行設定。它與開機時選項類似,唯一的區別在於如果開機時介面不存在,則不會發生錯誤。選擇「手動」可以透過 ifup 手動控制介面。選擇永不則不會啟動裝置。在 NFSroot 時開機時類似,區別是使用 systemctl stop wicked.service 指令不會關閉介面;如果 wicked 處於使用中狀態,則 network 服務也會處理 wicked 服務。若您使用的是 NFS 或 iSCSI 根檔案系統,請使用此選項。

  3. 若要啟用組態,請確認設定。

提示
提示:NFS 用做根檔案系統

在透過網路將根分割區掛接為 NFS 共用的 (無磁碟) 系統中,設定 NFS 共用可供存取的網路裝置時請保持謹慎。

將系統關閉或重新開機時,預設的處理順序是先關閉網路連接,然後卸載根分割區。對於 NFS 根分割區,這種順序會造成問題,因為在尚未與 NFS 共用啟動網路連接的情況下,根分割區無法完全卸載。為防止系統停用相關的網路裝置,請依第 19.4.1.2.5 節 「啟動網路裝置」中所述開啟網路裝置組態索引標籤,然後在裝置啟動窗格中選取在 NFSroot 時

19.4.1.2.6 設定最大傳輸單元大小

您可以設定介面的最大傳送單位 (MTU)。MTU 指允許的最大封包大小 (以位元組計)。MTU 越高,頻寬效率就越高。但是,大型封包可能會將慢速介面阻擋一段時間,這會加劇後續封包的延遲。

  1. 在 YaST 的系統 ›  網路設定中,於偵測到的網路卡清單中選取一個網路卡,然後按一下編輯

  2. 在「一般」索引標籤中,從「設定 MTU」清單中選取所需的項目。

  3. 若要啟用組態,請確認設定。

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 組態
  1. 在 YaST 的系統 ›  網路設定中選取 InfiniBand 裝置,然後按一下編輯

  2. 在「一般」索引標籤中,選取一種「IP-over-InfiniBand」(IPoIB) 模式:「已連接」(預設) 或「資料包」。

  3. 若要啟用組態,請確認設定。

如需有關 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中所述執行詳細的防火牆設定,只需在設定裝置的過程中決定裝置的基本防火牆組態。請執行下列步驟:

  1. 開啟 YaST 的系統 ›  網路設定模組。在「綜覽」索引標籤中,於偵測到的網路卡清單中選取一個網路卡,然後按一下「編輯」。

  2. 進入「網路設定」對話方塊的「一般」索引標籤。

  3. 決定您要將介面指定至的「防火牆區域」。可用的選項如下:

    防火牆已停用

    只有當防火牆已停用或未執行時,此選項才可用。唯有您的機器位於受外部防火牆保護的更大網路中時,才能使用此選項。

    自動指定區域

    只有當防火牆已啟用時,此選項才可用。防火牆會執行,並且介面會自動指定至防火牆區域。包含關鍵字 any 的區域或外部區域將會用於這類介面。

    內部區域 (不受保護)

    防火牆會執行,但不強制執行任何保護此介面的規則。如果您的機器位於受外部防火牆保護的更大網路中,請使用此選項。如果機器具有多個網路介面,此選項也適用於連接到內部網路的介面。

    非軍事區域

    廢除區域是內部網路與 (有潛在風險的) 網際網路之前的另一道防線。從內部網路與網際網路都可連接到指派至此區域的主機,但主機無法連存取內部網路。

    外部區域

    防火牆在此介面上執行,且會完全保護其抵禦其他可能有害的網路流量。此為預設選項。

  4. 若要啟用組態,請確認設定。

19.4.1.3 設定未偵測到的網路卡

如果未能正確偵測到某個網路卡,該卡將不會包含在已偵測到的網路卡清單中。若您確定您的系統具備網路卡的驅動程式,可手動設定。也可設定特殊的網路裝置類型,如橋接、Bond、TUN 或 TAP。若要設定未偵測到的網路卡或特殊裝置,請執行下列步驟:

  1. 在 YaST 的系統 ›  網路設定 ›  綜覽對話方塊中,按一下新增

  2. 在「硬體」對話方塊中,從可用的選項中設定介面的「裝置類型」和「組態名稱」。如果網路卡為 USB 裝置,請啟用相應的核取方塊,並按下一步結束此對話方塊。否則,您可以根據需要定義要用於網路卡的核心模組名稱以及卡的選項

    在「Ethtool 選項」中,可以設定 ifup 用於介面的 ethtool 選項。如需可用選項的資訊,請參閱 ethtool 手冊頁。

    如果選項字串以 - 開頭 (例如,-K INTERFACE_NAME rx on),則會用目前的介面名稱取代字串中的第二個單字。否則 (例如,autoneg off speed 10),ifup 會在開頭加上 -s INTERFACE_NAME

  3. 按一下「下一步」。

  4. 在「一般」、「位址」和「硬體」索引標籤中設定介面的所有必要選項,例如 IP 位址、裝置啟動或防火牆區域。如需組態選項的詳細資訊,請參閱第 19.4.1.2 節 「變更網路卡的組態」

  5. 若您介面裝置類型選擇「無線」,請在下一個對話設定無線連接。

  6. 若要啟用新的網路組態,請確認設定。

19.4.1.4 設定主機名稱和 DNS

若您在安裝期間未變更網路組態,且已有乙太網路卡可用,則系統會自動為您的電腦產生主機名稱並啟動 DHCP。同時也會自動產生您主機要整合至網路環境所需的的名稱服務資訊。若網路位址設定使用 DHCP,則網域名稱伺服器清單會自動填入適當的資料。若您希望使用靜態設定,請手動設定數值。

若要變更您電腦的名稱並調整名稱伺服器搜尋清單,請如下執行:

  1. 在 YaST 的系統 › 模組中,移至網路設定主機名稱/DNS索引標籤。

  2. 輸入主機名稱。請注意,主機名稱是全域的,將套用於所有網路介面。

    若您要使用 DHCP 獲取 IP 位址,則電腦的主機名稱將由 DHCP 伺服器自動設定。若要連接到其他網路,應禁止此行為,因為其他網路可能會指定其他主機名稱,而且在執行時期變更主機名稱會混淆圖形桌面。若要停止使用 DHCP 獲取 IP 位址,請停用「透過 DHCP 變更主機名稱」。

  3. 修改 DNS 組態中,選取修改 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)。

  4. 輸入「名稱伺服器」並填寫「網域搜尋」清單。名稱伺服器必須透過 IP 位址 (例如 192.168.1.116) 而非主機名稱指定。在「網域搜尋」索引標籤中指定的名稱就是用於解析主機名稱 (沒有指定網域) 的網域名稱。如果使用多個「網域搜尋」,請以逗號或空格將網域隔開。

  5. 若要啟用組態,請確認設定。

還可以使用 YaST 透過指令行編輯主機名稱。YaST 執行的變更會立即生效 (手動編輯 /etc/HOSTNAME 檔案的情況除外)。若要變更主機名稱,請使用下列指令:

root # yast dns edit hostname=HOSTNAME

若要變更名稱伺服器,請使用下列指令:

root # yast dns edit nameserver1=192.168.1.116
root # yast dns edit nameserver2=192.168.1.117
root # yast dns edit nameserver3=192.168.1.118

19.4.1.5 設定路由

若要讓您的電腦與其他電腦和其他網路通訊,必須提供路由資訊,以讓網路流量採取正確的路徑。若使用 DHCP,會自動提供此資訊。若使用靜態設定,必須手動新增此資料。

  1. 在 YaST 中,移至「網路設定 ›  路由」。

  2. 輸入「預設閘道」的 IP 位址 (必要時可以輸入 IPv4 和 IPv6)。預設閘道會比對每個可能的目的地,但是如果某個符合所需位址的路由表項目已經存在,就會使用該項目,而非透過預設閘道使用預設路由。

  3. 可以在「路由表」中輸入更多項目。輸入「目的地」網路 IP 位址、「閘道」IP 位址和「網路遮罩」。選取要透過其將流量路由至所定義網路的「裝置」(減號表示任意裝置)。若要省略這些值的任何一個,請使用減號「-」。若要在表中輸入預設閘道,請在「目的地」欄位中使用「default」。

    注意
    注意:路由優先程度

    若使用了多個預設路由,則可以指定權值選項確定哪個路由的優先程度較高。若要指定度量選項,請在選項中輸入 - metric NUMBER。權值最高的路由做為預設路由。如果該網路裝置已解除連接,將會移除其路由,使用下一個路由。

  4. 如果系統是路由器,請視需要在「網路設定」中啟用「IPv4 轉遞」和「IPv6 轉遞」。

  5. 若要啟用組態,請確認設定。

19.4.2 IBM Z:設定網路裝置

SUSE Linux Enterprise Server for IBM Z 支援數種類型的網路介面。您可使用 YaST 設定所有類型。

19.4.2.1 qeth-hsi 裝置

若要將 qeth-hsi (Hipersocket) 介面新增至安裝的系統中,請啟動 YaST 中的系統 › 網路設定模組。選取其中一個標示為「Hipersocket」的裝置做為「讀取」裝置位址,然後按一下「編輯」。輸入讀取通道、寫入通道和控制通道的裝置編號 (裝置編號格式的範例:0.0.0800)。然後按「下一步」。在網路位址設定對話方塊中,為新介面指定 IP 位址和網路遮罩,然後按下一步確定結束網路組態。

19.4.2.2 qeth-ethernet 裝置

若要將 qeth-ethernet (IBM OSA Express 乙太網路卡) 介面新增到安裝好的系統,請啟動 YaST 中的系統 ›  網路設定模組。選取其中一個標記為「IBM OSA 高速乙太網路卡」的裝置來做為「讀取」裝置位址,然後按一下「編輯」。輸入讀取通道、寫入通道和控制通道的裝置編號 (裝置編號格式的範例:0.0.0700)。輸入所需的連接埠名稱、連接埠號碼 (如適用)、一些其他選項、您的 IP 位址以及適用的網路遮罩。按「下一步」與「確定」結束網路組態。

19.4.2.3 ctc 裝置

若要將 ctc (IBM 平行埠 CTC 介面卡) 介面新增到安裝好的系統,請啟動 YaST 中的系統 ›  網路設定模組。選取一個標示為「IBM 平行埠 CTC 介面卡」的裝置做為您的讀取通道,然後按一下「設定」。選擇適合您裝置的「裝置設定」(通常為「相容模式」)。指定您和遠端合作夥伴的 IP 位址。如有需要,可透過「進階 ›  > 細節設定」來調整 MTU 的大小。按「下一步」與「確定」結束網路組態。

警告
警告:CTC 不再受支援

不建議使用此介面。未來的 SUSE Linux Enterprise Server 版本將不支援此介面。

19.4.2.4 lcs 裝置

若要將 lcs (IBM OSA-2 介面卡) 介面新增到安裝好的系統,請啟動 YaST 中的系統 ›  網路設定模組。選取標示為「IBM OSA-2 介面卡」的裝置,然後按一下「設定」。輸入所需的連接埠號碼、一些其他選項、您的 IP 位址以及適用的網路遮罩。按「下一步」與「確定」結束網路組態。

19.4.2.5 IUCV 裝置

若要將 iucv (IUCV) 介面新增到安裝好的系統,請啟動 YaST 中的系統 ›  網路設定模組。選取標示為「IUCV」的裝置,並按一下「編輯」。YaST 會提示您提供 IUCV 合作夥伴的名稱 (「對等」)。輸入名稱 (本項目區分大小寫) 然後選取「下一步」。指定合作夥伴的「IP 位址」及「遠端 IP 位址」。如果需要,在「一般」索引標籤中「設定 MTU」大小。按「下一步」與「確定」結束網路組態。

警告
警告: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 介面。依預設,每個網路介面的類別為 netifwickedd 將自動連接與此類別相容的所有介面。在目前實作中,包括以下介面:

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 架構
圖形 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.servicewicked.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 中為它定義的預設組態來源:

  1. firmware:iSCSI 開機韌體表 (iBFT)

  2. compat: ifcfg 檔案 — 為相容性而實作

將會套用 wicked 從指定介面的這些來源中取得的任何設定。預期的重要性順序為 firmwarecompat - 將來這種順序可能會發生變更。

如需詳細資訊,請參閱 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 中收到更新時,系統更新程式常式將剖析租用,並呼叫解析程式程序檔中的適當指令 (backupinstall等)。此後便可使用 /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
注意
注意:組態檔案

如果 wickeddwickednanny 程式自己的組態檔案不存在,則會嘗試讀取 /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-*

這些檔案包含網路介面的傳統組態。

注意
注意:wickedifcfg-* 檔案

如果您指定 compat: 字首,wicked 會讀取這些檔案。根據 /etc/wicked/client.xmlSUSE Linux Enterprise Server 的預設組態,wicked 將嘗試先讀取這些檔案,然後再讀取 /etc/wicked/ifconfig 中的 XML 組態檔案。

提供的 --ifconfig 參數主要用於測試。如果指定該參數,則不會套用 /etc/wicked/ifconfig 中定義的預設組態來源。

ifcfg-* 檔案包含啟動模式和 IP 位址等資訊。可以使用的參數請參閱 ifup 的手冊頁。此外,如果一個一般設定只能用於一個介面,則檔案 dhcpwireless 中的大多數變數在 ifcfg-* 檔案中都可以使用。但是,/etc/sysconfig/network/config 中的大多數變數是全域變數,在 ifcfg 中無法覆寫它們。例如,NETCONFIG_* 變數就是全域變數。

若要設定 macvlanmacvtab 介面,請參閱 ifcfg-macvlanifcfg-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 包含 ifupifdownifstatus 行為的一般設定。dhcp 包含 DHCP 設定,wireless 包含無線 LAN 卡的設定。所有三個組態檔中的變數都已被註解。/etc/sysconfig/network/config 中的某些變數也可以在 ifcfg-* 檔案中使用,而且在這些檔案中它們的優先程度更高。/etc/sysconfig/network/ifcfg.template 檔案列出了可在永久介面中指定的變數。但是,大多數 /etc/sysconfig/network/config 變數都是全域變數,在 ifcfg 檔案中不能將它們覆寫。例如,NETWORKMANAGERNETCONFIG_* 變數就是全域變數。

注意
注意:使用 DHCPv6

在 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 頁面。

範例 19.5︰ 通用網路介面和一些靜態路由
# --- 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 轉遞者名稱,例如 bindresolver

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)。

範例 19.6︰ /var/run/netconfig/resolv.conf
# 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 modifynetconfig 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 指令會使用目前的設定更新網路組態。當規則或靜態組態變更時可以使用此指令。如果只想更新指定的服務 (dnsnisntp),請使用 -m MODULE_TYPE 參數。

netconfig 規則和靜態組態設定可透過手動方式定義,或使用 YaST 在 /etc/sysconfig/network/config 檔案中定義。自動組態工具 (如 DHCP 或 PPP) 提供的動態組態設定經由這些工具,透過 netconfig modifynetconfig 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 位址必須在行的開頭,然後以空格和定位點分隔這些項目。註解的前面永遠是 # 符號。

範例 19.7︰ /etc/hosts
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

範例 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

表格 19.2︰ /etc/host.conf 的參數

order hosts, bind

指定針對名稱解析存取服務的順序。可用的引數有 (以空格或逗號分隔):

hosts:搜尋 /etc/hosts 檔案

bind:存取名稱伺服器

nis:使用 NIS

multi on/off

定義在 /etc/hosts 中所輸入的主機是否可以有多個 IP 位址。

nospoof on spoofalert on/off

這些參數會影響名稱伺服器 spoofing,但並不會對網路組態產生任何影響。

trim domainname

在主機名稱解析後,指定的網域名稱會與主機名稱分隔開來 (前提是主機名稱包括網域名稱)。只有在本地網域分隔出來的名稱位於 /etc/hosts 檔案,但仍然使用附加的網域名稱進行辨識時,這個選項才有用。

範例 19.9︰ /etc/host.conf
# 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.confnsswitch.conf 範例是顯示在 範例 19.10 「/etc/nsswitch.conf。備註前面標有 # 符號。在此範例中,hosts 資料庫下的項目表示要求是透過 DNS 傳送到 /etc/hosts (files) (請參閱第 31 章 「網域名稱系統)

範例 19.10︰ /etc/nsswitch.conf
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 資料庫的組態選項。

表格 19.3︰ 透過 /etc/nsswitch.conf 可用的資料庫

aliases

sendmail 所執行的郵件別名;請參閱 man 5 aliases

ethers

乙太網路位址。

netmasks

網路及其子網路遮罩的清單。當您使用子網路時才需要。

group

getgrent 所使用的使用者群組。請參閱 group 的 man 頁面。

hosts

gethostbyname 及類似函數所使用的主機名稱與 IP 位址。

netgroup

在網路中用於控制存取權限的有效主機與使用者清單,請參閱 netgroup(5) man 頁面。

networks

getnetent 所使用的網路名稱與位址。

publickey

NFS 及 NIS+ 使用之 Secure_RPC 的公開金鑰和私密金鑰。

passwd

getpwent 所使用的使用者密碼;請參閱 passwd(5) man 頁面。

protocols

getprotoen 所使用的網路通訊協定;請參閱 protocols(5) man 頁面。

rpc

getrpcbyname 及類似功能所使用的遠端程序呼叫名稱與位址。

services

getservent 使用的網路服務。

shadow

getspnam 所使用的使用者遮蔽密碼;請參閱 shadow(5) man 頁面。

表格 19.4︰ NSS資料庫的組態選項

files

直接存取檔案,例如 /etc/aliases

db

透過資料庫存取

nisnisplus

NIS,請參閱Book “Security and Hardening Guide”, Chapter 4 “Using NIS”

dns

只能做為 hostsnetworks 的延伸

compat

只能做為 passwdshadowgroup 的延伸

19.5.2.14 /etc/nscd.conf

此檔案用來設定 nscd (名稱服務快取精靈)。請參閱 nscd(8)nscd.conf(5) man 頁面。依預設,passwdgroupshosts 的系統項目會由 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 指令會直接變更網路組態,而不會將其儲存到組態檔案中。除非您將組態輸入正確的組態檔案,否則重新開機之後網路組態的變更就會遺失。

注意
注意:ifconfigroute 已過時

ifconfigroute 工具已過時。請改用 ip。例如,ifconfig 會將介面名稱限制為 9 個字元。

19.5.3.1 使用 ip 設定網路介面

ip 是一項可顯示及設定網路裝置、路由、規則路由和通道的工具。

ip 是非常複雜的工具。它的常用語法為 ip OPTIONS OBJECT COMMAND。您可使用下列物件:

link

此物件代表網路裝置。

address

此物件代表裝置的 IP 位址。

neighbor