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

管理指南

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

出版日期: 2023 年 12 月 11 日
附圖目錄
範例目錄

版權所有 © 2006-2023 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 36: “Building and managing profiles with YaST

  • Section 24.4: “Setting up a VPN server or client using YaST”

  • Chapter 17: “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 Guide”yast audit-laf 接受以下指令:

set

設定選項:

tux > sudo yast audit-laf set log_file=/tmp/audit.log

若要顯示完整的選項清單,請執行 yast audit-laf set help

show

顯示選項的設定:

tux > sudo yast audit-laf show diskspace
space_left: 75
space_left_action: SYSLOG
admin_space_left: 50
admin_space_left_action: SUSPEND
action_mail_acct: root
disk_full_action: SUSPEND
disk_error_action: SUSPEND

若要顯示完整的選項清單,請執行 yast audit-laf show help

4.4.3.4 yast dhcp-server

管理 DHCP 伺服器以及進行其設定。yast dhcp-server 接受以下指令:

disable

停用 DHCP 伺服器服務。

enable

啟用 DHCP 伺服器服務。

host

進行個別主機的設定。

interface

指定要監聽的網路介面:

tux > sudo yast dhcp-server interface current
Selected Interfaces: eth0
Other Interfaces: bond0, pbu, eth1

若要顯示完整的選項清單,請執行 yast dhcp-server interface help

options

管理全域 DHCP 選項。若要顯示完整的選項清單,請執行 yast dhcp-server options help

status

列印 DHCP 服務的狀態。

subnet

管理 DHCP 子網路選項。若要顯示完整的選項清單,請執行 yast dhcp-server subnet help

4.4.3.5 yast dns-server

管理 DNS 伺服器組態。yast dns-server 接受以下指令:

acls

顯示存取控制清單設定:

 tux > sudo yast dns-server acls show
 ACLs:
 -----
  Name       Type        Value
  ----------------------------
  any        Predefined
  localips   Predefined
  localnets  Predefined
  none       Predefined
dnsrecord

設定區域資源記錄:

tux > sudo yast dnsrecord add zone=example.org query=office.example.org type=NS value=ns3

若要顯示完整的選項清單,請執行 yast dns-server dnsrecord help

forwarders

設定 DNS 轉遞者:

tux > sudo yast dns-server forwarders add ip=10.0.0.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 19 “Kexec and Kdump”, Section 19.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 23 “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 23 “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 10 “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 23 “Masquerading and firewalls”, Section 23.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 3 “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

此物件代表 ARP 或 NDISC 快取項目。

route

此物件代表路由表格項目。

rule

此物件代表路由原則資料庫中的規則。

maddress

此物件代表多點傳播位址。

mroute

此物件代表多點傳播路由快取項目。

tunnel

此物件表示 IP 上的通道。

若未提供指令,會使用預設指令 (通常是 list)。

使用以下指令變更裝置的狀態:

tux > sudo ip link set DEV_NAME

例如,若要停用裝置 eth0,請輸入

tux > sudo ip link set eth0 down

若要再次啟用該裝置,請使用

tux > sudo ip link set eth0 up
提示
提示:中斷 NIC 裝置的連接

如果使用以下指令停用某部裝置

tux > sudo ip link set DEV_NAME down

該指令會在軟體層級停用網路介面。

如果您想要模擬拔下乙太網路纜線或關閉已連接交換器之類的連結丟失,請執行

tux > sudo ip link set DEV_NAME carrier off

例如,ip link set DEV_NAME down 會丟棄使用 DEV_NAME 的所有路由,而 ip link set DEV carrier off 則不會。請注意,carrier off 需要網路裝置驅動程式的支援。

若要將裝置再次連接回實體網路,請執行

tux > sudo ip link set DEV_NAME carrier on

啟用裝置之後,就可加以設定。若要設定 IP 位址,請使用

tux > sudo ip addr add IP_ADDRESS + dev DEV_NAME

例如,若要將介面 eth0 的位址設定為帶有標準廣播 (選項 brd) 的 192.168.12.154/30,請輸入

tux > sudo ip addr add 192.168.12.154/30 brd + dev eth0

若要具備作用中連接,必須設定預設閘道。若要為您的系統設定閘道,請輸入

tux > sudo ip route add default via gateway_ip_address

若要顯示所有裝置,請使用

tux > sudo ip link ls

若要只顯示執行中介面,請使用

tux > sudo ip link ls up

若要輸出裝置的介面統計資料,請輸入

tux > sudo ip -s link ls DEV_NAME

若要檢視其他有用資訊 (特別是有關虛擬網路裝置的資訊),請輸入

tux > sudo ip -d link ls DEV_NAME

另外,若要檢視裝置的網路層 (IPv4、IPv6) 位址,請輸入

tux > sudo ip addr

在輸出中,可以找到有關裝置 MAC 位址的資訊。若要顯示所有路由,請使用

tux > sudo ip route show

如需有關使用 ip 的詳細資訊,請輸入 ip help 或參閱 man 8 ip 手冊頁。help 選項也適用於所有 ip 子指令,如:

tux > sudo ip addr help

/usr/share/doc/packages/iproute2/ip-cref.pdf 中提供了有關 ip 的說明。

19.5.3.2 使用 ping 測試連接

ping 指令是測試 TCP/IP 連接運作的標準工具。其使用 ICMP 通訊協定,將小型資料封包 ECHO_REQUEST 傳送至目的地主機,要求立即回應。如果成功,ping 將顯示表示這一結果的訊息。這表示網路連結正在作用。

ping 不僅會測試兩台電腦之間能否連接,還會提供一些關於連接品質的基本資訊。您可在 範例 19.11 「指令 ping 的輸出」 中看到 ping 輸出的一些範例。倒數第二行包含送出的封包數、封包遺失率以及執行 ping 總共花費的時間等資訊。

因此,可使用主機名稱或 IP 位址,例如 ping example.comping 192.168.3.100。程式會持續傳送封包,直到您按下 Ctrl C 為止。

若您只需要檢查連接功能性,您可以 -c 選項限定封包數量。例如,若要將 ping 限制於三個封包,請輸入 ping -c 3 example.com

範例 19.11︰ 指令 ping 的輸出
ping -c 3 example.com
PING example.com (192.168.3.100) 56(84) bytes of data.
64 bytes from example.com (192.168.3.100): icmp_seq=1 ttl=49 time=188 ms
64 bytes from example.com (192.168.3.100): icmp_seq=2 ttl=49 time=184 ms
64 bytes from example.com (192.168.3.100): icmp_seq=3 ttl=49 time=183 ms
--- example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2007ms
rtt min/avg/max/mdev = 183.417/185.447/188.259/2.052 ms

兩個封包之間的預設間隔為一秒。若要變更間隔,可以使用 ping 提供的選項 -i。例如,若要將 ping 間隔增加到十秒,請輸入 ping -i 10 example.com

在具備多網路裝置的系統中,透過特定介面位址傳送 ping 非常實用。若要執行此動作,請使用 -I 選項以及所選裝置的名稱,例如 ping -I wlan1 example.com

如需使用 ping 的選項與詳細資訊,請輸入 ping -h 或參閱 ping (8) man 頁面。

提示
提示:Ping IPv6 位址

對於 IPv6 位址,請使用 ping6 指令。請注意,若要 ping 連結-本機位址,必須使用 -I 指定介面。如果該位址可透過 eth1 存取,則可以使用以下指令實現目的:

ping6 -I eth1 fe80::117:21ff:feda:a425

19.5.4 單位檔案和啟動程序檔

除了上述的組態檔案之外,還有一些在機器開機時載入網路服務的 systemd 單位檔案和各種程序檔。當系統切換為 multi-user.target 目標時,會啟動這些單位檔案和程序檔。網路程式的一些單位檔案和啟動程序檔中介紹了一些單位檔案和程序檔。如需有關 systemd 的詳細資訊,請參閱第 15 章 「systemd 精靈;如需有關 systemd 目標的詳細資訊,請參閱 systemd.special 的 man 頁面 (man systemd.special)。

網路程式的一些單位檔案和啟動程序檔
network.target

network.target 是網路的 systemd 目標,但其具體含義取決於系統管理員提供的設定。

如需詳細資訊,請參閱 http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/

multi-user.target

multi-user.target 是包含所有必需網路服務的多使用者系統的 systemd 目標。

rpcbind

啟動可將 RPC 程式號碼轉換為通用位址的 rpcbind 公用程式。NFS 伺服器等 RPC 服務需要用到。

ypserv

啟動 NIS 伺服器。

ypbind

啟動 NIS 用戶端。

/etc/init.d/nfsserver

啟動 NFS 伺服器。

/etc/init.d/postfix

控制後置程序。

19.6 路由器基本設定

路由器是一種網路裝置,可接收和傳送往來於多個網路的資料 (網路封包)。路由器常用於將本地網路連接至遠端網路 (網際網路) 或連接多個本地網路區段。透過 SUSE Linux Enterprise Server,您可以建構一個具備 NAT (網路位址翻譯) 或進階防火牆等功能的路由器。

下面是將 SUSE Linux Enterprise Server 轉變為路由器的基本步驟。

  1. 啟用轉遞,例如在 /etc/sysctl.d/50-router.conf

    net.ipv4.conf.all.forwarding = 1
    net.ipv6.conf.all.forwarding = 1

    然後,為介面提供靜態 IPv4 與 IPv6 IP 設定。啟用轉遞會停用多項機制,例如 IPv6 不再接受 IPv6 RA (路由器廣播),這也會妨礙建立預設路由器。

  2. 許多情況下 (例如,當您可以透過多個介面連接同一個網路,或者通常使用的是 VPN 且已位於正常的多宿主主機上時),必須停用 IPv4 逆向路徑過濾 (此功能目前不適用於 IPv6):

    net.ipv4.conf.all.rp_filter = 0

    不過,您還可以改用防火牆設定進行過濾。

  3. 若要接受來自路由器 (位於外部、上行或 ISP 介面) 的 IPv6 RA,並再次建立預設 (亦或更具特定性) 的 IPv6 路由,請設定:

    net.ipv6.conf.${ifname}.accept_ra = 2
    net.ipv6.conf.${ifname}.autoconf = 0

    (注意:在以點分隔的 sysfs 路徑中,eth0.42 需要寫為 eth0/42。)

更多路由器行為和轉遞相依性的描述,可造訪 https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

為了在內部 (DMZ) 介面上提供 IPv6,並將您自己宣告為 IPv6 路由器,同時將網路自動設定到用戶端,請安裝並設定 /etc/radvd.conf 中的 radvd,例如:

interface eth0
{
    IgnoreIfMissing on;         # do not fail if interface missed

    AdvSendAdvert on;           # enable sending RAs
    AdvManagedFlag on;          # IPv6 addresses managed via DHCPv6
    AdvOtherConfigFlag on;      # DNS, NTP... only via DHCPv6

    AdvDefaultLifetime 3600;    # client default route lifetime of 1 hour

    prefix 2001:db8:0:1::/64    # (/64 is default and required for autoconf)
    {
        AdvAutonomous off;         # Disable address autoconf (DHCPv6 only)

        AdvValidLifetime 3600;     # prefix (autoconf addr) is valid 1 h
        AdvPreferredLifetime 1800; # prefix (autoconf addr) is prefered 1/2 h
    }
}

設定防火牆,以透過 NAT 偽裝從 LAN 進入 WAN 的流量,並在 WAN 介面上阻擋內傳流量:

tux > sudo firewall-cmd --permanent --zone=external --change-interface=WAN_INTERFACE
tux > sudo firewall-cmd --permanent --zone=external --add-masquerade
tux > sudo firewall-cmd --permanent --zone=internal --change-interface=LAN_INTERFACE
tux > sudo firewall-cmd --reload

19.7 設定結合裝置

對於某些系統而言,實作的網路連接除了需要符合一般乙太網路裝置的標準資料安全性或可用性要求之外,還需要符合其他要求。在這些情況下,數個乙太網路裝置可以結集成單個 Bonding 裝置。

bonding 裝置的組態是透過 bonding 模組選項來設定,而其行為主要受 Bonding 裝置的模式影響。該模式預設為 active-backup,這表示如果使用中的從屬裝置失敗,另一個從屬裝置將變成使用中狀態。可以使用以下結合模式:

0 (balance-rr)

封包依次透過第一個到最後一個可用介面傳輸。提供容錯和負載平衡。

1 (active-backup)

只有一個網路介面處於使用中狀態。如果它失敗,另一個介面將變成使用中狀態。此設定是 SUSE Linux Enterprise Server 的預設設定。提供容錯。

2 (balance-xor)

根據以下規則在所有可用介面間拆分流量:[ (source MAC address XOR'd with destination MAC address XOR packet type ID) modulo slave count] 需要交換器的支援。提供容錯和負載平衡。

3 (broadcast)

在所有介面上廣播所有流量。需要交換器的支援。提供容錯。

4 (802.3ad)

將介面聚合成共用相同速度和雙工設定的群組。需要介面驅動程式中的 ethtool 支援,以及支援 IEEE 802.3ad 動態鏈結聚合並進行了相應設定的交換器。提供容錯和負載平衡。

5 (balance-tlb)

調適性傳輸負載平衡。需要介面驅動程式中的 ethtool 支援,但不需要交換器支援。提供容錯和負載平衡。

6 (balance-alb)

調適性負載平衡。需要介面驅動程式中的 ethtool 支援,但不需要交換器支援。提供容錯和負載平衡。

如需各種模式的詳細描述,請參閱 https://www.kernel.org/doc/Documentation/networking/bonding.txt

提示
提示:Bonding 和 Xen

Bonding 裝置僅適用於具有多個實際網路卡的機器。在大多數組態中,這表示您只應該在 Dom0 中使用結合組態。此外,只有在您將多個網路卡指定給 VM 客體系統的情況下,在 VM 客體中設定結合才有用。

注意
注意: IBM POWER:ibmveth 不支援結合模式 5 和 6 (balance-tlb/balance-alb)

tlb/alb 結合組態與 Power 韌體之間存在衝突。簡言之,處於 tlb/alb 模式的結合驅動程式會傳送同時包含來源與目的地 MAC 位址 (列做虛擬乙太網路 MAC 位址) 的乙太網路迴路封包。Power 韌體不支援這些封包。因此,ibmveth 不支援結合模式 5 和 6。

若要設定 bonding 裝置,請執行以下程序:

  1. 執行 YaST ›  系統 ›  網路設定

  2. 使用「新增」,然後將「裝置類型」變更為「Bond」。按繼續以繼續。

    Image
  3. 選取為結合裝置指定 IP 位址的方法。有三種方法可供您選擇:

    • 無 IP 位址

    • 動態位址 (透過 DHCP 或 Zeroconf)

    • 靜態指定的 IP 位址

    請使用適合您環境的方法。

  4. 在「Bond 從屬」索引標籤中,透過啟用相關的核取方塊來選取應包含在 Bond 中的乙太網路裝置。

  5. 編輯結合驅動程式選項並選取結合模式。

  6. 確認參數 miimon=100 已新增至「Bond 驅動程式選項」。若沒有此參數,就無法定期檢查資料的完整性。

  7. 按「下一步」,然後按一下「確定」離開 YaST,以建立裝置。

19.7.1 結合從屬的熱插拔

在特定網路環境 (例如高可用性) 中,有時候您需要將 Bonding 從屬介面取代成其他介面。原因可能在於網路裝置不斷發生故障。解決方案是設定 Bonding 從屬的熱插拔。

請依一般方式設定 Bond (根據 man 5 ifcfg-bonding),例如:

ifcfg-bond0
          STARTMODE='auto' # or 'onboot'
          BOOTPROTO='static'
          IPADDR='192.168.0.1/24'
          BONDING_MASTER='yes'
          BONDING_SLAVE_0='eth0'
          BONDING_SLAVE_1='eth1'
          BONDING_MODULE_OPTS='mode=active-backup miimon=100'

使用 STARTMODE=hotplugBOOTPROTO=none 指定從屬:

ifcfg-eth0
          STARTMODE='hotplug'
          BOOTPROTO='none'

ifcfg-eth1
          STARTMODE='hotplug'
          BOOTPROTO='none'

BOOTPROTO=none 會使用 ethtool 選項 (若提供),但不會使用 ifup eth0 設定連結。這是因為從屬介面是由 Bond 主要裝置所控制的。

STARTMODE=hotplug 會使從屬介面在可用時自動加入 Bond。

需要變更 /etc/udev/rules.d/70-persistent-net.rules 中的 udev 規則,以便依匯流排 ID (udev KERNELS 關鍵字等同於 hwinfo --netcard 中的「SysFS BusID」) 比對裝置,而不是依 MAC 位址比對。如此將允許更換有缺陷的硬體 (位於同一插槽但 MAC 不同的網路卡),並避免在結合變更其所有從屬裝置的 MAC 位址時出現混淆。

例如:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
KERNELS=="0000:00:19.0", ATTR{dev_id}=="0x0", ATTR{type}=="1",
KERNEL=="eth*", NAME="eth0"

開機時,systemd network.service 不會等待熱插拔從屬,但會等待結合就緒 (至少需要一個可用的從屬)。當從系統移除其中一個從屬介面 (從 NIC 驅動程式解除結合、NIC 驅動程式的 rmmod 或實際 PCI 熱插拔移除) 時,核心會自動將它從 Bond 中移除。當將新卡新增至系統時 (更換插槽中的硬體),udev 會使用匯流排型永久命名規則將它重新命名為從屬的名稱,然後為它呼叫 ifup。呼叫 ifup 會自動將新卡加入結合。

19.8 設定用於網路組合的組合裝置

連結彙總一詞是描述結合 (或聚合) 網路連接以提供邏輯層的一般性詞彙。有時,您會看到通道組合乙太網路結合連接埠截斷等詞彙。它們都是同義詞,指的是同一個概念。

這一概念便是廣為人知的結合,並且最初整合於 Linux 核心之內 (請參閱第 19.7 節 「設定結合裝置」瞭解其原始實作)。網路組合一詞指的是這一概念的新型實作。

結合與網路組合的主要不同之處在於,組合提供的是一組小型核心模組,它們負責為 teamd 例項提供介面。其餘所有操作都在使用者空間內處理。這與原始的結合實作不同,原始的結合實作單獨在其核心內包含了其所有功能。如需兩者的比較,請參閱表格 19.5 「結合與組合的功能比較」

表 19.5︰ 結合與組合的功能比較
特性結合組合
廣播、輪替 TX 規則
使用中備份 TX 規則
LACP (802.3ad) 支援
以雜湊為基礎的 TX 規則
使用者可以設定雜湊函數
TX 負載平衡支援 (TLB)
針對 LACP 的 TX 負載平衡支援
Ethtool 連結監控
ARP 連結監控
NS/NA (IPV6) 連結監控
針對 TX/RX 路徑的 RCU 鎖定
連接埠優先程度和粘性
單獨的依連接埠連結監控設定
多連結監控設定受限制
VLAN 支援
多裝置堆疊
來源:http://libteam.org/files/teamdev.pp.pdf

結合與網路組合兩種實作可以同時使用。網路組合是現有結合實作的一個備用方案。它不會取代結合。

網路組合可用於多種用途。下文中將介紹兩種最重要的用途,分別是:

  • 實現不同網路裝置之間的負載平衡。

  • 當其中一個網路裝置出現故障時,容錯移轉至另一個裝置。

目前還沒有支援建立組合裝置的 YaST 模組。您需要手動設定網路組合。一般程序如下所示,該程序適用於所有網路組合組態:

程序 19.1︰ 一般程序
  1. 確定您已安裝所有必要的套件。安裝套件 libteam-toolslibteamdctl0, 與 python-libteam

  2. /etc/sysconfig/network/ 下建立組態檔案。通常將是 ifcfg-team0。如果需要多部網路組合裝置,請為它們加上數字並依次遞增。

    此組態檔案包含一些變數,在 man 頁面中有相關說明 (請參閱 man ifcfgman ifcfg-team)。系統內的 /etc/sysconfig/network/ifcfg.template 檔案中提供了範例組態。

  3. 移除將用於組合裝置的介面的組態檔案 (通常為 ifcfg-eth0ifcfg-eth1)。

    建議製做一個備份並移除兩個檔案。Wicked 將重新建立這些組態檔案,並收入適用於組合的必要參數。

  4. (選擇性) 檢查 Wicked 組態檔案中是否已包含所需的一切內容。

    tux > sudo wicked show-config
  5. 啟動網路組合裝置 team0

    tux > sudo wicked ifup all team0

    如需其他除錯資訊,請在 all 子指令之後使用 --debug all 選項。

  6. 檢查網路組合裝置的狀態。此動作可藉由下列指令來完成:

    • 從 Wicked 取得 teamd 實例的狀態:

      tux > sudo wicked ifstatus --verbose team0
    • 取得整個實例的狀態:

      tux > sudo teamdctl team0 state
    • 取得 teamd 實例的 systemd 狀態:

      tux > sudo systemctl status teamd@team0

    三者顯示的視圖依您的需求而定,略有不同。

  7. 如果日後需要變更 ifcfg-team0 檔案中的內容,請使用以下指令重新載入其組態:

    tux > sudo wicked ifreload team0

不要使用 systemctl 來啟動或停止組合裝置!而應使用 wicked 指令,如上所述。

若要徹底移除組合裝置,請執行以下程序:

程序 19.2︰ 移除組合裝置
  1. 停止網路組合裝置 team0

    tux > sudo wicked ifdown team0
  2. 將檔案 /etc/sysconfig/network/ifcfg-team0 重新命名為 /etc/sysconfig/network/.ifcfg-team0。在檔案名稱前面插入一個點,以使 wicked看不到它。如果您確實不再需要該組態,也可以移除該檔案。

  3. 重新載入組態:

    tux > sudo wicked ifreload all

19.8.1 使用案例:網路組合的負載平衡

負載平衡用於提升頻寬。使用下面的組態檔案可建立具有負載平衡能力的網路組合裝置。繼續執行程序 19.1 「一般程序」中的步驟以設定裝置。透過 teamdctl 檢查輸出。

範例 19.12︰ 網路組合的負載平衡組態
STARTMODE=auto 1
BOOTPROTO=static 2
IPADDRESS="192.168.1.1/24" 2
IPADDR6="fd00:deca:fbad:50::1/64" 2

TEAM_RUNNER="loadbalance" 3
TEAM_LB_TX_HASH="ipv4,ipv6,eth,vlan"
TEAM_LB_TX_BALANCER_NAME="basic"
TEAM_LB_TX_BALANCER_INTERVAL="100"

TEAM_PORT_DEVICE_0="eth0" 4
TEAM_PORT_DEVICE_1="eth1" 4

TEAM_LW_NAME="ethtool" 5
TEAM_LW_ETHTOOL_DELAY_UP="10" 6
TEAM_LW_ETHTOOL_DELAY_DOWN="10" 6

1

控制組合裝置的啟動。auto 值表示介面會在網路服務可用時設定,並在每次重新開機時自動啟動。

如果您需要自行控制裝置 (並防止其自動啟動),請將 STARTMODE 設定為 manual

2

設定靜態 IP 位址 (此處的 IPv4 為 192.168.1.1,IPv6 為 fd00:deca:fbad:50::1)。

如果網路組合裝置應該使用動態 IP 位址,請設定 BOOTPROTO="dhcp",並移除包含 IPADDRESSIPADDR6 的行或將其設為備註。

3

TEAM_RUNNER 設定為 loadbalance 以啟用負載平衡模式。

4

指定應聚合以建立網路組合裝置的一或多部裝置。

5

定義連結監控器以監控從屬裝置的狀態。使用預設值 ethtool 只會檢查裝置是否已啟動並可存取,因此檢查速度很快。但它不會檢查裝置是否可以真正地傳送或接收封包。

如果您需要進一步確信連接的可用性,請使用 arp_ping 選項。這樣會向任意主機傳送 ping (在 TEAM_LW_ARP_PING_TARGET_HOST 變數中設定)。僅當接收到回覆時,才會將網路組合裝置視為正常執行。

6

以毫秒為單位定義連結建立 (或斷開) 與執行器收到通知之間的延遲。

19.8.2 使用案例:使用網路組合實現容錯移轉

容錯移轉引入了一個平行的備份網路裝置,用於確保關鍵網路組合裝置的高可用性。備份網路裝置將全天候執行,並在主要裝置出現故障時接管其工作。

使用以下組態檔案可以建立具有容錯移轉功能的網路組合裝置。繼續執行程序 19.1 「一般程序」中的步驟以設定裝置。透過 teamdctl 檢查輸出。

範例 19.13︰ DHCP 網路組合裝置的組態
STARTMODE=auto 1
BOOTPROTO=static 2
IPADDR="192.168.1.2/24" 2
IPADDR6="fd00:deca:fbad:50::2/64" 2

TEAM_RUNNER=activebackup 3
TEAM_PORT_DEVICE_0="eth0" 4
TEAM_PORT_DEVICE_1="eth1" 4

TEAM_LW_NAME=ethtool 5
TEAM_LW_ETHTOOL_DELAY_UP="10" 6
TEAM_LW_ETHTOOL_DELAY_DOWN="10" 6

1

控制組合裝置的啟動。auto 一值表示將在網路服務可用時設定介面,並且會在每次重新開機時自動啟動介面。

如果您需要自行控制裝置 (並防止其自動啟動),請將 STARTMODE 設定為 manual

2

設定靜態 IP 位址 (此處的 IPv4 為 192.168.1.2,IPv6 為 fd00:deca:fbad:50::2)。

如果網路組合裝置應該使用動態 IP 位址,請設定 BOOTPROTO="dhcp",並移除包含 IPADDRESSIPADDR6 的行或將其設為備註。

3

TEAM_RUNNER 設定為 activebackup 以啟用容錯移轉模式。

4

指定應聚合以建立網路組合裝置的一或多部裝置。

5

定義連結監控器以監控從屬裝置的狀態。使用預設值 ethtool 只會檢查裝置是否已啟動並可存取,因此檢查速度很快。但它不會檢查裝置是否可以真正地傳送或接收封包。

如果您需要進一步確信連接的可用性,請使用 arp_ping 選項。這樣會向任意主機傳送 ping (在 TEAM_LW_ARP_PING_TARGET_HOST 變數中設定)。只有在收到回覆後,才視為網路組合裝置已啟動。

6

以毫秒為單位定義連結建立 (或斷開) 與執行器收到通知之間的延遲。

19.8.3 使用案例:組合裝置上的 VLAN

VLAN 是虛擬區域網路 (Virtual Local Area Network) 的縮寫。它允許在單個實體乙太網路上執行多個邏輯 (虛擬) 乙太網路。會在邏輯上將網路分割成不同的廣播網域,以便封包只可在為同一 VLAN 指定的連接埠之間進行交換。

下面的使用案例會在組合裝置的基礎上建立兩個靜態 VLAN:

  • vlan0,結合到 IP 位址 192.168.10.1

  • vlan1,結合到 IP 位址 192.168.20.1

請執行下列步驟:

  1. 在交換器上啟用 VLAN 標記。若要針對組合裝置使用負載平衡,交換器需要支援連結聚合控制通訊協定 (LACP) (802.3ad)。如需詳細資料,請參閱硬體手冊。

  2. 確定是否要針對組合裝置使用負載平衡或容錯移轉。依第 19.8.1 節 「使用案例:網路組合的負載平衡」第 19.8.2 節 「使用案例:使用網路組合實現容錯移轉」所述設定組合裝置。

  3. /etc/sysconfig/network 中,建立包含以下內容的 ifcfg-vlan0 檔案:

    STARTMODE="auto"
    BOOTPROTO="static" 1
    IPADDR='192.168.10.1/24' 2
    ETHERDEVICE="team0" 3
    VLAN_ID="0" 4
    VLAN='yes'

    1

    定義固定的 IP 位址 (在 IPADDR 中指定)。

    2

    定義 IP 位址,此處包含其網路遮罩。

    3

    包含要用於 VLAN 介面的實際介面,此處是我們的組合裝置 (team0)。

    4

    為 VLAN 指定唯一的 ID。檔案名稱和 VLAN_ID 最好與名稱 ifcfg-vlanVLAN_ID 對應。在本範例中,VLAN_ID0,因而檔案名稱為 ifcfg-vlan0

  4. /etc/sysconfig/network/ifcfg-vlan0 檔案複製到 /etc/sysconfig/network/ifcfg-vlan1,並變更以下值:

    • 192.168.10.1/24192.168.20.1/24IPADDR

    • 01VLAN_ID

  5. 啟動兩個 VLAN:

    root # wicked ifup vlan0 vlan1
  6. 檢查 ifconfig 的輸出:

    root # ifconfig -a
    [...]
    vlan0     Link encap:Ethernet  HWaddr 08:00:27:DC:43:98
              inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0
              inet6 addr: fe80::a00:27ff:fedc:4398/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 b)  TX bytes:816 (816.0 b)
    
    vlan1     Link encap:Ethernet  HWaddr 08:00:27:DC:43:98
              inet addr:192.168.20.1 Bcast:192.168.20.255 Mask:255.255.255.0
              inet6 addr: fe80::a00:27ff:fedc:4398/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 b)  TX bytes:816 (816.0 b)

19.9 使用 Open vSwitch 的軟體定義的網路

軟體定義網路 (SDN) 表示控制流量傳送目標的系統 (控制平面) 與轉遞流量至所選目的地的基礎系統 (資料平面,也稱為轉遞平面) 區分開來。這表示之前由單個而且往往不太靈活的交換器執行的功能,現在可以分給交換器 (資料平面) 及其控制器 (控制平面) 共同執行。在此模式下,可以對控制器編寫程式,使其變得非常靈活,而且可以快速適應不斷變化的網路條件。

Open vSwitch 是實作與 OpenFlow 通訊協定相容的分散式虛擬多層交換器的軟體。OpenFlow 允許控制器應用程式修改交換器的組態。它會分層至 TCP 通訊協定,並對一定範圍的軟體和硬體實作。於是,單個控制器便可以驅動多個大相逕庭的交換器。

19.9.1 Open vSwitch 的優勢

使用 Open vSwitch 的軟體定義網路有多項優勢,尤其是與虛擬機器配合使用時:

  • 可以輕鬆識別網路狀態。

  • 網路及其即時狀態可以從一個主機移動至另一個主機。

  • 可以追蹤網路動態,並啟用外部軟體對它們進行回應。

  • 可以套用並處理網路封包中的標記以識別它們的來源或目標機器,並維護其他網路位置。可以設定及移轉標記規則。

  • Open vSwitch 會實作 GRE 通訊協定 (泛型路由封裝)。有了這點,舉例而言,您便可以將私人 VM 網路彼此相連。

  • Open vSwitch 可以單獨使用,不過其設計是與網路硬體整合,可用於控制硬體交換器。

19.9.2 安裝 Open vSwitch

  1. 安裝 Open vSwitch 及補充套件:

    root # zypper install openvswitch openvswitch-switch

    如果您想讓 Open vSwitch 與 KVM 監管程式配合使用,還需另外安裝 tunctl 。如果您想讓 Open vSwitch 與 Xen 監管程式配合使用,還需另外安裝 openvswitch-kmp-xen

  2. 啟用 Open vSwitch 服務:

    root # systemctl enable openvswitch
  3. 重新啟動電腦或使用 systemctl 立即啟動 Open vSwitch 服務:

    root # systemctl start openvswitch
  4. 若要檢查 Open vSwitch 是否已正確啟動,請使用:

    root # systemctl status openvswitch

19.9.3 Open vSwitch 精靈和公用程式綜覽

Open vSwitch 由一些元件組成,其中包括一個核心模組和不同的使用者空間元件。核心模組用於加速資料路徑,但 Open vSwitch 的精簡安裝並不需要該模組。

19.9.3.1 精靈

Open vSwitch 的中心可執行檔是其兩個精靈。啟動 openvswitch 服務時,它們也會間接啟動。

Open vSwitch 主要精靈 (ovs-vswitchd) 提供交換器的實作。Open vSwitch 資料庫精靈 (ovsdb-server) 為儲存 Open vSwitch 之組態和狀態的資料庫提供服務。

19.9.3.2 公用程式

Open vSwitch 還包含一些方便您配合使用的公用程式。以下列出了其中一部分,僅介紹了重要的指令。

ovsdb-tool

建立、升級、壓縮與查詢 Open vSwitch 資料庫。對 Open vSwitch 資料庫執行異動。

ovs-appctl

設定正在執行的 ovs-vswitchdovsdb-server 精靈。

ovs-dpctlovs-dpctl-top

建立、修改、視覺化與刪除資料路徑。使用此工具可能會干擾 ovs-vswitchd,後者也執行資料路徑管理。因此,它通常僅用於診斷。

ovs-dpctl-top 會建立 top 一類的資料路徑的視覺化。

ovs-ofctl

管理任何遵守 OpenFlow 通訊協定的交換器。ovs-ofctl 不僅可以與 Open vSwitch 互動。

ovs-vsctl

提供組態資料庫的概覽介面,可用於查詢及修改資料庫。實際上,它會顯示 ovs-vswitchd 的狀態,並可用於其設定。

19.9.4 使用 Open vSwitch 建立橋接器

以下範例組態使用 SUSE Linux Enterprise Server 上預設使用的 Wicked 網路服務。若要瞭解 Wicked 的詳細資訊,請參閱第 19.5 節 「手動設定網路連接」

安裝並啟動 Open vSwitch 後,執行如下操作:

  1. 若要設定虛擬機器使用的橋接器,請建立包含如下內容的檔案:

    STARTMODE='auto'1
    BOOTPROTO='dhcp'2
    OVS_BRIDGE='yes'3
    OVS_BRIDGE_PORT_DEVICE_1='eth0'4

    1

    啟動網路服務時自動設定橋接器。

    2

    設定 IP 位址時使用的通訊協定。

    3

    將組態標記為 Open vSwitch 橋接器。

    4

    選擇應新增至橋接器的一或多部裝置。若要新增多部裝置,請在文件中為每部裝置附加一行:

    OVS_BRIDGE_PORT_DEVICE_SUFFIX='DEVICE'

    SUFFIX 可以是任何英數字串。不過,為了避免之前的定義被覆寫,請確定每部裝置的 SUFFIX 均唯一。

    將檔案儲存至 /etc/sysconfig/network 目錄,並命名為 ifcfg-br0。您也可以使用除 br0 以外自己喜歡的任何名稱。但檔案名稱必須以 ifcfg- 開頭。

    若要瞭解更多選項,請參閱 ifcfgifcfg-ovs-bridge 的 man 頁面 (man 5 ifcfgman 5 ifcfg-ovs-bridge)。

  2. 現在,啟動橋接器:

    root # wicked ifup br0

    Wicked 完成後應該會輸出橋接器的名稱及狀態 up (顯示在名稱的旁邊)。

19.9.5 Open vSwitch 直接與 KVM 配合使用

第 19.9.4 節 「使用 Open vSwitch 建立橋接器」中所述建立橋接器後,您便可使用 Open vSwitch 來管理透過 KVM/QEMU 建立的虛擬機器的網路存取。

  1. 為了能夠發揮 Wicked 的最大效用,可以對之前設定的橋接器做進一步的變更。開啟之前建立的 /etc/sysconfig/network/ifcfg-br0 並為另一個連接埠裝置附加一行:

    OVS_BRIDGE_PORT_DEVICE_2='tap0'

    另外,將 BOOTPROTO 設定為 none。現在,此檔案的內容形式如下:

    STARTMODE='auto'
    BOOTPROTO='none'
    OVS_BRIDGE='yes'
    OVS_BRIDGE_PORT_DEVICE_1='eth0'
    OVS_BRIDGE_PORT_DEVICE_2='tap0'

    新的連接埠裝置 tap0 將在下一步中進行設定。

  2. 現在,為 tap0 裝置新增組態檔案:

    STARTMODE='auto'
    BOOTPROTO='none'
    TUNNEL='tap'

    將檔案儲存至 /etc/sysconfig/network 目錄,並命名為 ifcfg-tap0

    提示
    提示:允許其他使用者存取 Tap 裝置

    若要透過以非 root 使用者身分啟動的虛擬機器使用此 TAP 裝置,請附加:

    TUNNEL_SET_OWNER=USER_NAME

    若要為整個群組授予存取權,請附加:

    TUNNEL_SET_GROUP=GROUP_NAME
  3. 最後,開啟定義為第一個 OVS_BRIDGE_PORT_DEVICE 的裝置的組態。如果之前未變更過名稱,應為 eth0。因此,開啟 /etc/sysconfig/network/ifcfg-eth0,並確定已設定以下選項:

    STARTMODE='auto'
    BOOTPROTO='none'

    如果檔案尚不存在,請予以建立。

  4. 使用 Wicked 重新啟動橋接器介面:

    root # wicked ifreload br0

    此操作還會觸發系統重新載入新定義的橋接器連接埠裝置。

  5. 若要啟動某虛擬機器,請使用類似如下的內容:

    root # qemu-kvm \
    -drive file=/PATH/TO/DISK-IMAGE1 \
    -m 512 -net nic,vlan=0,macaddr=00:11:22:EE:EE:EE \
    -net tap,ifname=tap0,script=no,downscript=no2

    1

    您要啟動之 QEMU 磁碟影像的路徑。

    2

    使用之前建立的 TAP 裝置 (tap0)。

    如需使用 KVM/QEMU 的更多資訊,請參閱Book “Virtualization Guide”

19.9.6 Open vSwitchlibvirt 配合使用

第 19.9.4 節 「使用 Open vSwitch 建立橋接器」中所述建立橋接器之後,可以將該橋接器新增至使用 libvirt 進行管理的現有虛擬機器。由於 libvirtOpen vSwitch 橋接器提供部份支援,因此您可以直接使用第 19.9.4 節 「使用 Open vSwitch 建立橋接器」中建立的橋接器,無需進一步變更網路組態。

  1. 開啟目標虛擬機器的網域 XML 檔案:

    root # virsh edit VM_NAME

    VM_NAME 取代為所需虛擬機器的名稱。預設的文字編輯器即會開啟。

  2. 在文件中尋找網路區段,即尋找以 <interface type="..."> 開頭並以 </interface> 結尾的區段。

    將現有區段取代為類似如下的網路區段:

    <interface type='bridge'>
      <source bridge='br0'/>
      <virtualport type='openvswitch'/>
    </interface>
    重要
    重要:virsh iface-* 和虛擬機器管理員與 Open vSwitch 的相容性

    目前,在使用 virsh iface-* 工具和虛擬機器管理員的情況下,Open vSwitchlibvirt 還不相容。如果您使用此類工具,組態可能會破壞。

  3. 現在,您可以照常啟動或重新啟動虛擬機器。

如需使用 libvirt 的更多資訊,請參閱Book “Virtualization Guide”

19.9.7 更多資訊

https://docs.openvswitch.org/en/latest/#documentation

Open vSwitch 專案網站的文件區段

https://www.opennetworking.org/images/stories/downloads/sdn-resources/white-papers/wp-sdn-newnorm.pdf

Open Networking Foundation 編寫的關於軟體定義網路和 OpenFlow 通訊協定的白皮書

20 印表機操作

SUSE® Linux Enterprise Server 支援以多種類型的印表機進行列印,包括遠端網路印表機。您可以手動設定印表機,也可以使用 YaST 進行設定。如需組態設定指示,請參閱Book “部署指南 ”, Chapter 20 “使用 YaST 設定硬體元件”, Section 20.3 “設定印表機”。圖形和指令行公用程式都可用來啟動和管理列印工作。如果您的印表機無法如預期般運作,請參閱第 20.8 節 「疑難排解」

CUPS (Common Unix Printing System,通用 UNIX 列印系統) 是 SUSE Linux Enterprise Server 中的標準列印系統。

印表機可藉由介面 (例如 USB 或網路) 和印表機語言加以區分。在購買印表機時,請確認硬體可支援印表機的介面,並且印表機採用適合的語言。印表機可根據下列三種印表機語言來分類:

PostScript 印表機

Linux 和 Unix 內部列印系統以 PostScript 印表機語言產生和處理大部分列印工作。如果印表機可直接處理 PostScript 文件,且不需轉換到列印系統中其他階段,潛在錯誤來源的次數便會減少。

目前,PostScript 正逐漸被 PDF 取代,後者成為標準列印工作格式。可直接列印 PDF (而不是僅僅是 PostScript) 的 PostScript+PDF 印表機已面世。對於傳統的 PostScript 印表機,需要在列印工作流程中將 PDF 轉換為 PostScript。

標準印表機 (PCL 和 ESC/P 等語言)

如果已知印表機語言,列印系統可以藉由 Ghostscript 將 PostScript 工作轉換為對應的印表機語言。此處理階段稱為解釋。最知名的語言是大多數 HP 印表機與類似產品使用的 PCL,以及 Epson 印表機使用的 ESC/P。這些印表機語言通常都受 Linux 支援,並可產生不錯的列印效果。Linux 可能無法提供一些特殊的印表機功能。除了 HP 和 Epson 之外,目前尚沒有其他印表機廠商開發 Linux 驅動程式,並透過開放原始碼授權將這些驅動程式提供給 Linux 套裝作業系統供應商。

專屬印表機 (也稱為 GDI 印表機)

這些印表機並不支援任何一般的印表機語言。它們使用自己的印表機語言,而當有新型號發行,那些語言也可能有所變更。這些印表機通常指有 Windows 驅動程式。如需詳細資訊,請參閱第 20.8.1 節 「不支援標準印表機語言的印表機」

在購買新印表機之前,請參考下列來源以檢查您想要購買的印表機之支援性:

http://www.openprinting.org/printers

OpenPrinting 首頁,含印表機資料庫。資料庫會顯示最新的 Linux 支援狀態。但是,Linux 版本僅可與生產期間可用的驅動程式整合。因此,目前被評選為完全支援的印表機,在最新的 SUSE Linux Enterprise Server 版本發行之後,可能將失去此稱號。因此,資料庫不一定能指出正確狀態,而僅提供估計值。

http://pages.cs.wisc.edu/~ghost/

Ghostscript 網頁。

/usr/share/doc/packages/ghostscript/catalog.devices

內建 Ghostscript 驅動程式清單

20.1 CUPS 工作流程

使用者會建立列印工作。列印工作由要列印的資料和有關線上同時週邊作業器的資訊組成。其中包括印表機的名稱或列印佇列的名稱,還有可能包括有關過濾器 (例如印表機特定的選項) 的資訊。

每一台印表機都至少有一個專屬的列印佇列。線上同時週邊作業器會在佇列中列印工作,直到所需的印表機已準備好接收資料。當印表機備妥時,線上同時週邊作業器會透過過濾器與後端,傳送資料至印表機。

過濾器會將列印應用程式所產生的資料 (通常為 PostScript 或 PDF,但也會有 ASCII、JPEG 等) 轉換為印表機特定資料 (PostScript、PCL、ESC/P 等)。印表機的特性描述在 PPD 檔案中。PPD 檔案含有印表機特定選項以及在印表機上啟用它們所需的參數。過濾器系統可確保啟用使用者所選取的選項。

如果您是使用 PostScript 印表機,過濾器系統會將資料轉換為印表機特定的 PostScript。這並不需要印表機驅動程式。如果您使用非 PostScript 印表機,過濾器系統會將資料轉換為印表機特定資料。這將需要印表機適用的印表機驅動程式。後端會從過濾器接收印表機特定的資料,然後將它傳送至印表機。

20.2 連接印表機的方法和通訊協定

有各種方法可將印表機連接到系統。CUPS 的組態無法辨識本地印表機與透過網路連接到系統的印表機。如需有關印表機連線的詳細資訊,請參閱 https://en.opensuse.org/SDB:CUPS_in_a_Nutshell 上的文章 CUPS in a Nutshell (CUPS 概述)。

IBM Z CUPS 不支援 z/VM 所提供且本地連接到 IBM Z 大型主機的印表機和類似裝置。在這些平台上,僅可透過網路列印。網路印表機的電纜必須根據印表機廠商的說明來安裝。

警告
警告:變更執行中系統的電纜連接

在將印表機連接到機器時,請不要忘記只有 USB 裝置可在操作中插上和拔除。若要避免損壞您的系統或印表機,請先關機再變更任何非 USB 的連接。

20.3 安裝軟體

PPD (PostScript 印表機描述) 為描述內容 (如解析度) 和選項 (如雙面列印模組的可用性) 的電腦語言。這些描述是使用 CUPS 中各種印表機選項所需。沒有 PPD 檔案,列印資料會被轉送給處於 raw 狀態的印表機,這通常不是想要的狀態。

若要設定 PostScript 印表機,最好的方法是取得適當的 PPD 檔。manufacturer-PPDsOpenPrintingPPDs-postscript 套件中提供了許多 PPD 檔案。請參閱第 20.7.3 節 「各個套件中的 PPD 檔案」第 20.8.2 節 「PostScript 印表機沒有合適的可用 PPD 檔案」

新的 PPD 檔案可儲存在 /usr/share/cups/model/ 目錄中,或依照Book “部署指南 ”, Chapter 20 “使用 YaST 設定硬體元件”, Section 20.3.1.1 “使用 YaST 新增驅動程式”中所述透過 YaST 新增到列印系統中。之後,便可在印表機設定期間選取該 PPD 檔案。

如果印表機廠商要求您安裝整個軟體套件,請謹慎處理。這種安裝類型可能導致 SUSE Linux Enterprise Server 提供的支援失效。另外,列印指令可能會以不同的方式運作,並且系統可能不再能夠對其他廠商的裝置定址。基於此原因,不建議安裝廠商軟體。

20.4 網路印表機

網路印表機可支援各種通訊協定,有些甚至可同時支援。雖然大部分受支援的通訊協定已標準化,但有一些廠商還是會修改標準。這樣,廠商只會針對一部分作業系統提供驅動程式。不幸地,他們很少提供 Linux 驅動程式。目前的情況是,您無法以每一個通訊協定均能在 Linux 中順暢執行的假設來行事。因此,您可能需要試驗各種選項以實現功能性組態。

CUPS 支援 socketLPDIPPsmb 通訊協定。

socket

socket 指將純文字列印資料直接傳送到 TCP 通訊端的連接。經常使用的幾個 socket 連接埠號碼為 910035。裝置 URI (資源識別字串) 的語法為 socket://IP.OF.THE.PRINTER:PORT,例如 socket://192.168.2.202:9100/

LPD (行列式印表機精靈,Line Printer Daemon)

RFC 1179 中有對 LPD 通訊協定的詳細介紹。在此通訊協定下,部分工作相關資料 (如列印佇列的 ID) 會先於實際列印的資料傳送。因此,在設定 LPD 通訊協定時,必須指定列印佇列。雖然各家印表機廠商不同,但其實作方式足以靈活地接受任何名稱做為列印佇列。如有需要,印表機手冊應該會指出要使用的名稱。通常使用 LPT、LPT1、LP1 或類似名稱。LPD 服務的連接埠號碼為 515。裝置 URI 的範例為 lpd://192.168.2.202/LPT1

IPP (網際網路列印通訊協定,Internet printing protocol)

IPP 基於 HTTP 通訊協定。有了 IPP,可比使用其他通訊協定傳輸更多工作相關資料。CUPS 使用 IPP 進行內部資料傳輸。正確設定 IPP 必須要有列印佇列的名稱。IPP 的連接埠號碼為 631。裝置 URI 的範例為 ipp://192.168.2.202/psipp://192.168.2.202/printers/ps

SMB (Windows 共用)

CUPS 也支援在連接到 Windows 共用的印表機上列印。此用途使用的通訊協定為 SMB。SMB 使用的埠號有 137138139。裝置 URI 的範例為 smb://user:password@workgroup/smb.example.com/printersmb://user:password@smb.example.com/printersmb://smb.example.com/printer

必須在設定組態之前決定印表機支援的通訊協定。如果廠商未提供所需資訊,可使用 nmap 指令 (隨附於 nmap 套件) 來確定通訊協定。nmap 會檢查主機上是否有開啟的連接埠。例如:

tux > nmap -p 35,137-139,515,631,9100-10000 IP.OF.THE.PRINTER

20.5 使用指令行工具設定 CUPS

CUPS 可透過 lpinfolpadminlpoptions 等指令行工具來設定。您需要一個裝置 URI,其中包含後端 (如 USB 和參數)。若要判斷系統中的裝置 URI 是否有效,請使用以下 lpinfo -v | grep ":/" 指令:

tux > sudo lpinfo -v | grep ":/"
direct usb://ACME/FunPrinter%20XL
network socket://192.168.2.253

使用 lpadmin,CUPS 伺服器管理員可新增、移除或管理列印佇列。若要新增印表機佇列,請使用下列語法:

tux > sudo lpadmin -p QUEUE -v DEVICE-URI -P PPD-FILE -E

裝置 (-v) 便會以 QUEUE (-p) 的形式供您使用,並使用指定的 PPD 檔案 (-P)。這表示如果要手動設定印表機,您必須知道 PPD 檔案以及裝置 URI。

請勿使用 -E 做為第一選項。對於所有 CUPS 指令,第一個引數 -E 設定使用加密連接。若要啟用印表機,必須依照下列範例所示使用 -E

tux > sudo lpadmin -p ps -v usb://ACME/FunPrinter%20XL -P \
/usr/share/cups/model/Postscript.ppd.gz -E

下列範例是設定網路印表機:

tux > sudo lpadmin -p ps -v socket://192.168.2.202:9100/ -P \
/usr/share/cups/model/Postscript-level1.ppd.gz -E

如需 lpadmin 的更多選項,請參閱 lpadmin(8) 的 man 頁面。

在印表機設定期間,某些選項會設成預設。可針對每一個列印工作修改這些選項 (視所使用的列印工具而定)。也可以使用 YaST 變更這些預設選項。使用指令行工具,可依下列方式設定預設選項:

  1. 首先,列出所有選項:

    tux > sudo lpoptions -p QUEUE -l

    範例:

    Resolution/Output Resolution: 150dpi *300dpi 600dpi

    啟用的預設選項前面會加上星號 (*),用以識別。

  2. lpadmin 變更選項:

    tux > sudo lpadmin -p QUEUE -o Resolution=600dpi
  3. 檢查新設定:

    tux > sudo lpoptions -p QUEUE -l
    
    Resolution/Output Resolution: 150dpi 300dpi *600dpi

當一般使用者執行 lpoptions 時,設定會寫入 ~/.cups/lpoptions。然而,root 設定會會寫至 /etc/cups/lpoptions

20.6 從指令行列印

若要從指令行列印,請輸入 lp -d QUEUENAME FILENAME,並以相應的名稱取代 QUEUENAMEFILENAME

有些應用程式有賴 lp 指令來進行列印。在此情況下,請在應用程式的列印對話方塊中輸入正確的指令 (通常無需指定 FILENAME),例如 lp -d QUEUENAME

20.7 SUSE Linux Enterprise Server 中的特殊功能

部分 CUPS 功能已針對 SUSE Linux Enterprise Server 做出調整。此處涵蓋部份最重要的變更。

20.7.1 CUPS 和防火牆

完成 SUSE Linux Enterprise Server 的預設安裝後,firewalld 將處於使用中狀態,並且網路介面設定為位於 public 區域中,這會阻擋內送流量。

firewalld 處於使用中狀態時,您可能需要將 firewalld 設定為允許用戶端瀏覽網路印表機,方法是允許 mdnsipp 通過內部網路區域。公用區域應該永不公開印表機佇列。

(Book “Security and Hardening Guide”, Chapter 23 “Masquerading and firewalls”, Section 23.4 “firewalld中和 https://en.opensuse.org/SDB:CUPS_and_SANE_Firewall_settings 上提供了有關 firewalld 組態的詳細資訊。)

20.7.1.1 CUPS 用戶端

CUPS 用戶端通常在位於防火牆之後的受信任網路環境中的一般工作站上執行。在此情況下,建議將網路介面設定為處於「內部區域」中,以便可從該網路中存取工作站。

20.7.1.2 CUPS 伺服器

如果 CUPS 伺服器位於受防火牆保護的受信任網路環境中,則應將網路介面設定為處於防火牆的「內部區域」中。建議不要在不可信網路環境中設定 CUPS 伺服器,除非您確定該伺服器受到特殊防火牆規則和 CUPS 組態中的安全設定的保護。

20.7.2 瀏覽網路印表機

CUPS 伺服器會定期宣告透過網路共用之印表機的可用性及狀態資訊。用戶端可以存取此資訊,以便在列印對話方塊之類的地方顯示可用印表機清單。這稱為「瀏覽」

CUPS 伺服器透過傳統的 CUPS 瀏覽協定或 Bonjour/DNS-SD 通告其在網路上的列印佇列。為了能夠瀏覽網路列印佇列,需要在透過 CUPS 伺服器列印的所有用戶端上執行 cups-browsed 服務。預設不會啟動 cups-browsed。若要為使用中的工作階段啟動該服務,請使用 sudo systemctl start cups-browsed。若要確保它在開機後會自動啟動,請在所有用戶端上透過 sudo systemctl enable cups-browsed 予以啟用。

如果在啟動 cups-browsed 後瀏覽無法運作,則表明 CUPS 伺服器可能是透過 Bonjour/DNS-SD 通告網路列印佇列。在這種情況下,您需要另外安裝套件 avahi,然後在所有用戶端上透過 sudo systemctl start avahi-daemon 啟動相關聯的服務。

如需如何透過 firewalld 允許瀏覽印表機的資訊,請參閱第 20.7.1 節 「CUPS 和防火牆」

20.7.3 各個套件中的 PPD 檔案

YaST 印表機組態使用安裝於 /usr/share/cups/model/ 中的 PPD 檔案來設定 CUPS 的佇列。為了尋找適合印表機型號的 PPD 檔案,YaST 會對照硬體偵測期間確定的廠商和型號比較所有 PPD 檔案內的廠商和型號。基於此原因,YaST 印表機組態將從 PPD 檔案中取出的廠商和型號資訊產生資料庫。

僅使用 PPD 檔案且不使用其他資訊來源的組態,好處在於 /usr/share/cups/model/ 中的 PPD 檔案可自由修改。例如,如果您擁有 PostScript 印表機,可直接將 PPD 檔案複製到 /usr/share/cups/model (如果這些檔案尚不存在於 manufacturer-PPDsOpenPrintingPPDs-postscript 套件中),以取得印表機的最佳組態。

其他 PPD 檔案由下列套件提供:

  • gutenprint:Gutenprint 驅動程式及其相符的 PPD

  • splix:SpliX 驅動程式及其相符的 PPD

  • OpenPrintingPPDs-ghostscript:Ghostscript 內建驅動程式的 PPD

  • OpenPrintingPPDs-hpijs:適用於非 HP 印表機之 HPIJS 驅動程式的 PPD

20.8 疑難排解

下列章節涵蓋印表機硬體和軟體最常遭遇的問題,以及解決或避免這些問題的方式。涵蓋的主題包括 GDI 印表機、PPD 檔案和連接埠組態,並討論了一般網路印表機問題、列印瑕疵、佇列處理。

20.8.1 不支援標準印表機語言的印表機

這些印表機不支援任何的一般印表機語言,且只有特殊的專屬控制序列才能處理。因此它們僅可在製造廠商針對其開發驅動程式的作業系統版本上使用。GDI 是 Microsoft* 為繪圖裝置所開發的程式設計介面。製造廠商通常只提供 Windows 適用的驅動程式,而由於 Windows 驅動程式使用 GDI 介面,因此這些印表機也稱為 GDI 印表機。問題實際並不是出在程式設計介面上,而是因這些印表機只能透過相應印表機型號的專用印表機語言來定址所造成。

部分 GDI 印表機可切換到 GDI 模式或某種標準印表機語言來操作。如果手邊有印表機手冊,可以參閱其中內容。某些型號需要特殊的 Windows 軟體才能進行切換 (請注意,從 Windows 列印時,Windows 印表機驅動程式可能都會將印表機切換回 GDI 模式)。對於其他 GDI 印表機,則可以使用標準印表機語言的延伸模組。

部分製造廠商提供其 印表機的專用驅動程式。專用印表機驅動程式的壞處在於,其不保證可與安裝的列印系統配合使用,也不保證適用於各種硬體平台。相反的,支援標準印表機語言的印表機不需依賴特殊的列印系統版本或特殊硬體平台。

與其費時費力研究如何讓專用 Linux 驅動程式運作,購買一台支援標準印表機語言 (最好是 PostScript) 的印表機可能更符合成本效益。這樣可一次解決所有驅動程式問題、減少安裝與設定特殊驅動程式軟體以及取得列印系統中新開發所需之驅動程式更新的需要。

20.8.2 PostScript 印表機沒有合適的可用 PPD 檔案

如果 manufacturer-PPDsOpenPrintingPPDs-postscript 套件不包含適用於 PostScript 印表機的 PPD 檔案,通常可以使用印表機廠商提供的驅動程式 CD 中的 PPD 檔案,或從印表機廠商的網頁下載適合的 PPD 檔案。

如果 PPD 檔案以壓縮保存檔 (.zip) 或自解壓縮保存檔 (.exe) 形式提供,請以 unzip 解壓縮。首先,檢閱 PPD 檔案的授權條款。然後,請使用 cupstestppd 公用程式來檢查 PPD fi檔案是否符合 Adobe PostScript Printer Description File Format Specification, version 4.3 (Adobe PostScript 印表機說明檔案格式規格,版本 4.3)。如果公用程式傳回 FAIL,就表示 PPD 檔案非常嚴重,可能造成重大問題。應該要減少 cupstestppd 所報告的問題點。若有需要,請詢問印表機製造廠商以取得適合的 PPD 檔案。

20.8.3 網路印表機連接

確定網路問題

將印表機直接連接到電腦。基於測試因素,請將印表機設為本地印表機。如果可以,問題便與網路相關。

檢查 TCP/IP 網路

TCP/IP 網路和名稱解析必須可作用。

檢查遠端 lpd

使用以下指令測試是否可以與 Host 上的 lpd (連接埠 515) 建立 TCP 連接:

tux > netcat -z HOST 515 && echo ok || echo failed

如果無法建立到 lpd 的連接,可能是 lpd 不在作用中,或是有基本網路問題。

如果相應的 lpd 處於使用中狀態,並且主機接受查詢,請以 root 身分執行以下指令,以查詢遠端 HOSTQUEUE 的狀態報告:

root # echo -e "\004queue" \
| netcat -w 2 -p 722 HOST 515

如果 lpd 沒有回應,它可能不在作用中,或是有基本網路問題。如果 lpd 有回應,回應應該會顯示主機上的佇列為何無法列印。如果您收到類似範例 20.1 「來自 lpd 的錯誤訊息」 中的回應,問題可能是由遠端 lpd 所造成的。

範例 20.1︰ 來自 lpd 的錯誤訊息
lpd: your host does not have line printer access
lpd: queue does not exist
printer: spooling disabled
printer: printing disabled
檢查遠端 cupsd

CUPS 網路伺服器預設每 30 秒在 UDP 連接埠 631 上廣播一次其佇列。因而可以使用下面的指令來測試網路中是否有廣播 CUPS 網路伺服器。請確定在執行指令之前停止本地 CUPS 精靈。

tux > netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID

如果廣播 CUPS 網路伺服器存在,輸出將如 範例 20.2 「來自 CUPS 網路伺服器的廣播」 中所示。

範例 20.2︰ 來自 CUPS 網路伺服器的廣播
ipp://192.168.2.202:631/printers/queue

IBM Z 請注意,IBM Z 乙太網路裝置預設不接收廣播。

以下指令可用於測試是否可以與 HOST 上的 cupsd (連接埠 631) 建立 TCP 連接:

tux > netcat -z HOST 631 && echo ok || echo failed

如果無法建立到 cupsd 的連線,可能是 cupsd 不在作用中,或是有基本網路問題。lpstat -h HOST -l -t 會傳回 HOST 上所有佇列的狀態報告 (可能很長),前提是相應的 cupsd 處於作用中狀態並且主機接受查詢。

下面的指令可用於測試 HOST 上的 QUEUE 是否接受由單一換行字元組成的列印工作。應該不會印出任何資料。可能會退出一張空白頁。

tux > echo -en "\r" \
| lp -d queue -h HOST
對網路印表機或列印伺服器機器進行疑難排解

有時,在列印伺服器機器中執行的線上同時週邊作業器在處理多項列印工作時會產生問題。這是列印伺服器機器中的線上同時週邊作業器造成的,目前尚無法解決此問題。因應措施是,直接透過 TCP 通訊端對連接到列印伺服器機器的印表機進行定址,以繞過列印伺服器機器中的線上同時週邊作業器。請參閱第 20.4 節 「網路印表機」

如此,列印伺服器機器僅充當各種不同資料傳輸方式之間 (TCP/IP 網路和本地印表機連接) 的轉換器。若要使用此方法,您需要知道列印伺服器機器上的 TCP 連接埠。如果印表機連接到列印伺服器機器且已啟動,則通常可以在開啟列印伺服器機器電源一段時間後,使用 nmap 套件中的 nmap 公用程式確定此 TCP 連接埠。例如,nmap  IP-address 可能會傳送列印伺服器機器的以下輸出:

Port       State       Service
23/tcp     open        telnet
80/tcp     open        http
515/tcp    open        printer
631/tcp    open        cups
9100/tcp   open        jetdirect

此輸出表示,可以在連接埠 9100 上透過 TCP 通訊端對連接到列印伺服器機器的印表機定址。根據預設,nmap 僅會檢查 /usr/share/nmap/nmap-services 中所列出之一般熟知的幾個連接埠。若要檢查所有可能的連接埠,請使用指令 nmap -p  FROM_PORT-TO_PORT IP_ADDRESS。這可能會花費一些時間。如需詳細資訊,請參閱 nmap 的 man 頁面。

輸入以下指令

tux > echo -en "\rHello\r\f" | netcat -w 1 IP-address port
cat file | netcat -w 1 IP-address port

將字元字串或檔案直接傳送到對應連接埠以測試印表機是否可在此連接埠上定址。

20.8.4 列印成品有瑕疵但不顯示錯誤訊息

對列印系統而言,在 CUPS 後端完成資料至接收者 (印表機) 的資料傳輸時,列印工作便完成。如果接收者的進一步處理失敗 (例如,印表機無法列印印表機特定資料),列印系統並不知道。如果印表機無法列印印表機特定資料,請選取更適合印表機的 PPD 檔案。

20.8.5 停用的佇列

如果到接收者的資料傳輸在數次嘗試之後完全失敗,CUPS 後端 (如 USBsocket) 會向列印系統報告錯誤 (向 cupsd)。在報告資料傳輸失敗之前,允許失敗嘗試的次數,由後端決定。因為進一步的嘗試可能徒勞無功,cupsd 會停止對應佇列的列印。排除問題的起因之後,系統管理員必須以指令 cupsenable 重新啟動列印。

20.8.6 CUPS 瀏覽:刪除列印工作

如果 CUPS 網路伺服器透過瀏覽向用戶端主機廣播它的佇列,而且在用戶端主機上有適合的本地 cupsd 在作用中,用戶端 cupsd 會從應用程式接收列印工作,並將它們轉送給伺服器上的 cupsd。當伺服器上的 cupsd 接受列印工作時,系統會為其指定一個新工作號碼。因此,用戶端主機上的工作號碼和伺服器上的工作號碼不同。列印工作通常會立刻轉遞,所以無法以用戶端主機上的工作編號來刪除,因為用戶端 cupsd 將列印工作轉遞給伺服器 cupsd 後,便認為列印工作已完成。

若要刪除伺服器上的列印工作,請使用 lpstat -h cups.example.com -o 之類的指令來確定伺服器上的工作編號。此情況假設伺服器尚未完成該列印工作 (即尚未完全將它傳送到印表機)。以如下方式使用獲得的工作編號來刪除伺服器上的列印工作:

tux > cancel -h cups.example.com QUEUE-JOBNUMBER

20.8.7 不良列印工作和資料傳輸錯誤

如果您在列印過程中關閉印表機或電腦,列印工作將保留在佇列中。一旦電腦 (或印表機) 重新開啟,列印工作將繼續進行。必須以 cancel 將損毀的列印工作從佇列中移除。

如果列印工作損毀,或主機與印表機之間的通訊發生錯誤,印表機將無法正確處理資料,並列印出許多含有不明字元的紙張。若要修復該問題,請執行以下步驟:

  1. 若要停止列印,請從噴墨印表機取出所有紙張,或是打開雷射印表機的紙匣。高品質的印表機會有按鈕可取消目前的列印成品。

  2. 列印工作可能仍在佇列中,因為只有將工作完全傳送到印表機之後,才會移除。使用 lpstat -olpstat -h cups.example.com -o 檢查目前正在列印的佇列。使用 cancel QUEUE-JOBNUMBERcancel -h cups.example.com QUEUE-JOBNUMBER 刪除列印工作。

  3. 即使列印工作已從佇列刪除,部份資料可能仍會傳送到印表機。請檢查對應佇列的 CUPS 後端程序是否仍在執行中,並將它終止。

  4. 將印表機關閉一段時間以完全重設印表機。然後裝入紙張並開啟印表機電源。

20.8.8 CUPS 除錯

使用以下標準程序找出 CUPS 中的問題:

  1. 設定 /etc/cups/cupsd.conf 中的 LogLevel debug

  2. 停止 cupsd

  3. 移除 /var/log/cups/error_log* 以避免必須搜尋很大的記錄檔。

  4. 啟動 cupsd

  5. 重覆造成問題的動作。

  6. 檢查 /var/log/cups/error_log* 中的訊息以辨識問題的起因。

20.8.9 更多資訊

如需在 SUSE Linux Enterprise Server 上執行列印操作的詳細資訊,請參閱 https://en.opensuse.org/Portal:Printing 上的 openSUSE 支援資料庫。許多特定問題的解決方法在「SUSE 知識庫」(https://www.suse.com/support/) 中都有說明。請搜尋文字 CUPS 找到相關文章。

21 圖形使用者介面

SUSE Linux Enterprise Server 包含 X.org 伺服器和 GNOME 桌面。本章介紹用於所有使用者的圖形使用者介面組態。

21.1 X Window 系統

X.org 伺服器是實作 X11 通訊協定的事實上標準。X 採網路結構,可讓應用程式在一個主機上啟動而在透過任何種類的網路 (LAN 或網際網路) 連接的其他主機上顯示。

X Window System 一般不需要任何組態設定。X 啟動期間會動態偵測硬體。因此,xorg.conf 的使用已被取代。如果您仍需要指定自訂選項來變更 X 的行為方式,您仍然可以透過修改 /etc/X11/xorg.conf.d/ 下的組態檔案實現變更。

提示
提示:IBM Z:設定圖形使用者介面

IBM Z 沒有任何 X.Org 支援的輸入或輸出裝置。因此,本節中所述的所有組態程序都不適用。如需 IBM Z 的更多相關資訊,請參閱Book “部署指南 ”, Chapter 5 “IBM Z 和 LinuxONE 上的安裝”

您可安裝 xorg-docs 套件以更深入地瞭解 X11。man 5 xorg.conf 更詳細地說明了手動設定的格式 (如果需要)。您可在專案的首頁 http://www.x.org 上找到關於 X11 開發的更多資訊。

驅動程式位於 xf86-video-* 套件中,例如 xf86-video-ati。相關手冊頁中詳細描述了這些套件隨附的很多驅動程式。例如,如果您使用 ati 驅動程式,在 man 4 ati 中可以找到有關此驅動程式的詳細資訊。

/usr/share/doc/packages/<package_name> 中提供了有關協力廠商驅動程式的資訊。例如,安裝套件後,x11-video-nvidiaG04 的文件就位於 /usr/share/doc/packages/x11-video-nvidiaG03 中。

21.2 安裝與設定字型

Linux 中的字型可分為兩個部分:

描邊或向量字型

包含字符形狀的數學說明和繪圖說明。因此,每個字符都可以調整為任意大小而無損品質。在可以使用此類字型 (或字符) 之前,需要將數學說明轉換為點陣 (網格)。此過程稱為字型點陣化字型影射 (內嵌於字型中) 改進和最佳化特定大小的展示效果。點陣化和影射透過 FreeType 程式庫完成。

Linux 下的常用格式是 PostScript Type 1 和 Type 2、TrueType 及 OpenType。

點陣圖或點陣字型

包含為特定字型大小設計的像素陣列。點陣圖字型的展示速度超快,而且相當簡單。然而,與向量字型相比,它無法在無損品質的情況下調整。因此,這些字型通常以不同的大小分佈。近期,點陣圖字型仍然在 Linux 主控台使用,有時也見於終端機。

Linux 旗下最常用的格式是可攜式編譯格式 (PCF) 或字符點陣圖影射格式 (BDF)。

這些字型的外觀會受兩個主要方面影響:

  • 選擇合適的字型系列,

  • 採用特定演算法展示字型,讓讀者觀看起來最為舒適。

最後一點僅與向量字型相關。雖然上述兩點非常主觀,但是需要建立一些預設值。

Linux 字型展示系統由若干個程式庫及其各種關係組成。基本字型程式庫是 FreeType,它會將字型字符從受支援的格式轉換為最佳化的點陣圖字符。展示程序由演算法及其參數 (可能受父問題影響) 控制。

使用 FreeType 的每個程式或程式庫都應參考 Fontconfig 程式庫。此程式庫會從使用者及系統收集字型組態。當使用者修正其 Fontconfig 設定時,此變更將導致發生 Fontconfig 感知的套用。

Arabic、Han 或 Phags-Pa 等程序檔所需的更複雜的 OpenType 塑形,以及其他更高層級的文字處理透過 HarfbuzzPango 來進行。

21.2.1 顯示已安裝的字型

若要大致瞭解系統上已安裝哪些字型,請執行 rpmfc-list 指令。二者均會出色回答,但有可能因根據系統和使用者組態傳回不同的清單。

rpm

呼叫 rpm 可查看系統上已安裝哪些包含字型的軟體套件:

tux > rpm -qa '*fonts*'

每個字型套件應符合此表示式。然而,指令可能傳回誤報,例如 fonts-config (可能既不是也不包含字型)。

fc-list

呼叫 fc-list,大致瞭解哪些字型系列可供存取、是否已安裝在系統上或主目錄中:

tux > fc-list ':' family
注意
注意:指令 fc-list

指令 fc-list 是 Fontconfig 程式庫的包裝程式。它可以從 Fontconfig (更確切地說,從它的快取) 查詢大量有趣的資訊。請參閱 man 1 fc-list 以取得詳細資料。

21.2.2 檢視字型

如果您要瞭解已安裝的字型有何外觀,請使用指令 ftview (套件 ft2demos) 或造訪 http://fontinfo.opensuse.org/。例如,若要以 14 點顯示 FreeMono 字型,請依照下方所述使用 ftview

tux > ftview 14 /usr/share/fonts/truetype/FreeMono.ttf

如果您需要進一步的資訊,請造訪 http://fontinfo.opensuse.org/ 以瞭解哪些樣式 (標準、粗體、斜體等)和語言受支援。

21.2.3 查詢字型

若要查詢給定模式時使用哪中字型,請使用 fc-match 指令。

例如,如果您的模式包含已安裝的字型,fc-match 會傳回檔案名稱、字型系列和樣式:

tux > fc-match 'Liberation Serif'
LiberationSerif-Regular.ttf: "Liberation Serif" "Regular"

如果所需字型在系統上不存在,Fontconfig 會調用相符規則嘗試找到最接近的可用字型。換言之,您的要求被取代為:

tux > fc-match 'Foo Family'
DejaVuSans.ttf: "DejaVu Sans" "Book"

Fontconfig 支援別名,即用另一個系列名稱取代原始名稱。常見的情況是通用名稱,例如 sans-serifserifmonospace。這些別名可取代為實際的系列名稱或者甚至是系列名稱的偏好設定清單:

tux > for font in serif sans mono; do fc-match "$font" ; done
DejaVuSerif.ttf: "DejaVu Serif" "Book"
DejaVuSans.ttf: "DejaVu Sans" "Book"
DejaVuSansMono.ttf: "DejaVu Sans Mono" "Book"

結果可能因系統而異,具體視目前安裝的字型而定。

注意
注意:視 Fontconfig 而定的相似度規則

Fontconfig 始終根據給定要求傳回最相似的實際系列 (如果至少已安裝一個系列)。「相似度」視 Fontconfig 的內部測量以及使用者或管理員的 Fontconfig 設定而定。

21.2.4 安裝字型

若要安裝新字型,可採用下列幾種主要的方法:

  1. *.ttf*.otf 等字型檔案手動安裝至已知字型目錄。如果要將字型套用至整個系統,請使用標準目錄 /usr/share/fonts。如果要安裝到主目錄中,請使用 ~/.config/fonts

    如果不想使用標準目錄,Fontconfig 可讓您選擇其他目錄。使用 <dir> 元素通知 Fontconfig 所用目錄,相關詳細資料請參閱第 21.2.5.2 節 「深入瞭解 fontconfig XML」

  2. 使用 zypper 安裝字型。許多字型做為套件提供,隨附在 SUSE 套裝作業系統或位於 M17N:fonts 儲存庫中。使用以下指令將儲存庫新增至清單。例如,若要為 SUSE Linux Enterprise Server 15 SP3 新增儲存庫,請使用以下指令:

    tux > sudo zypper ar
         https://download.opensuse.org/repositories/M17N:/fonts/SLE_15/

    若要搜尋 字型系列名稱,請使用下面此指令:

    tux > zypper se 'FONT_FAMILY_NAME*fonts'

21.2.5 設定字型外觀

結果不一定會令人滿意,具體視展示媒體和字型大小而定。例如,如今常規監視器解析度為 100dpi,導致像素太大,字型看上去粗陋難看。

有些演算法可用於應對低解析度,例如消除鋸齒 (灰階平滑化)、影射 (適合網格) 或子像素展示 (在一個方向使解析度增至三倍)。這些演算法還可能因字型格式而異。

重要
重要:子像素呈現的專利問題

SUSE 套裝作業系統中不使用子像素展示。雖然 FreeType2 支援此演算法,但是所涉及的幾項專利將於 2019 年年末到期。因此,除非系統含有 FreeType2 程式庫並且該程式庫中已編譯子像素展示,否則在 Fontconfig 中設定子像素展示選項沒有任何效果。

透過 Fontconfig,可為每種字型個別選取展示演算法,也可為一組字型選取展示演算法。

21.2.5.1 透過 sysconfig 設定字型

SUSE Linux Enterprise Server 在 Fontconfig 上提供一個 sysconfig 層。您可以從此處入手體驗字型組態。若要變更預設設定,請編輯組態檔案 /etc/sysconfig/fonts-config。(或使用 YaST sysconfig 模組)。編輯該檔案之後,請執行 fonts-config

tux > sudo /usr/sbin/fonts-config

重新啟動應用程式以查看效果。請記住下列指示:

  • 一些應用程式不需要重新啟動。例如,Firefox 會不時重新讀取 Fontconfig 組態。新建立或重新載入的標籤日後可取得新的字型組態。

  • 系統會在安裝或移除每個套件後自動呼叫 fonts-config 程序檔 (否則表示字型軟體套件有誤)。

  • 可以使用 fonts-config 指令行選項暫時覆寫每個 sysconfig 變數。如需詳細資料,請參閱 fonts-config --help

有數個 sysconfig 變數可以變更。請參閱 man 1 fonts-config 或 YaST sysconfig 模組的說明頁面。系統提供下列變數:

呈現演算法的用法

請考慮 FORCE_HINTSTYLEFORCE_AUTOHINTFORCE_BWFORCE_BW_MONOSPACEUSE_EMBEDDED_BITMAPSEMBEDDED_BITMAP_LANGAGES

一般別名的優先設定清單

使用 PREFER_SANS_FAMILIESPREFER_SERIF_FAMILIESPREFER_MONO_FAMILIESSEARCH_METRIC_COMPATIBLE

下面的清單提供了一些組態範例,從「最適合閱讀」字型 (對比度較高) 到「最漂亮」(較平滑) 排序。

點陣圖字型

透過 PREFER_*_FAMILIES 變數設定偏好的點陣圖字型。對於這些變數,請按照說明部份中的範例操作。須知,這些字型以黑白且未平滑形式展示,並且點陣圖字型只有數種大小。考慮使用

SEARCH_METRIC_COMPATIBLE="no"

來停用度量相容性驅動的系統名稱取代。

以黑白呈現的可調整字型

展示可調整字型時如果未消除鋸齒,可能導致效果類似於點陣圖字型,同時保持字型可調整性。使用示意良好的 Liberation 系列之類。遺憾的是,系統中缺少影射良好的字型。設定下列變數以強制採用此方法。

FORCE_BW="yes"
以黑白呈現的等寬字型

僅以未消除鋸齒的方式展示等寬字型,否則使用預設設定:

FORCE_BW_MONOSPACE="yes"
預設設定

展示所有字型時都消除鋸齒。使用位元組碼解譯器 (BCI) 展示影射良好的字型,使用自動影射器 (hintstyle=hintslight) 展示其他字型。讓所有相關 sysconfig 變數保持預設設定。

CFF 字型

以 CFF 格式使用字型。人們認為它們在 FreeType2 中進行最新改進之後,比預設的 TrueType 字型更適合閱讀。請按照 PREFER_*_FAMILIES 範例嘗試一下。可以透過

SEARCH_METRIC_COMPATIBLE="no"

將展示調暗調粗,因為它們依預設透過 hintstyle=hintslight 展示。還可以考慮使用:

SEARCH_METRIC_COMPATIBLE="no"
專用自動影射器

即使對於影射良好的字型,也可以使用 FreeType2 的自動影射器。這可能會導致字形變得更粗、對比度更低,有時還會變得更模糊。設定下列變數以啟用此項:

FORCE_AUTOHINTER="yes"

可使用 FORCE_HINTSTYLE 來控制影射層級。

21.2.5.2 深入瞭解 fontconfig XML

Fontconfig 的組態設定格式是可延伸標記語言 (XML)。下面的幾個範例不是完整參考,而是簡要概觀。詳細資料及其他靈感可在 man 5 fonts-conf/etc/fonts/conf.d/ 中找到。

中心 Fontconfig 組態檔案是 /etc/fonts/fonts.conf,它及其他作品包括整個 /etc/fonts/conf.d/ 目錄。若要自訂 Fontconfig,可在兩個位置插入變更:

Fontconfig 組態檔案
  1. 泛系統變更: 編輯檔案 /etc/fonts/local.conf (依預設包含一個空的 fontconfig 元素)。

  2. 使用者特定變更: 編輯檔案 ~/.config/fontconfig/fonts.conf。將 Fontconfig 組態檔案置於 ~/.config/fontconfig/conf.d/ 目錄中。

使用者特定變更會覆寫任何泛系統設定。

注意
注意:已棄用的使用者組態檔案

檔案 ~/.fonts.conf 標示為已取代,不應繼續使用。請改為使用 ~/.config/fontconfig/fonts.conf

每個組態檔案都需要有 fontconfig 元素。因此,最小的檔案外觀如下:

<?xml version="1.0"?>
   <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
   <fontconfig>
   <!-- Insert your changes here -->
   </fontconfig>

如果預設目錄不足,請插入 dir 元素及相應的目錄:

<dir>/usr/share/fonts2</dir>

Fontconfig 會以遞迴方式搜尋字型。

字型展示演算法可透過下列 Fontconfig 片段選擇 (請參閱範例 21.1 「指定呈現演算法」):

範例 21.1︰ 指定呈現演算法
<match target="font">
 <test name="family">
  <string>FAMILY_NAME</string>
 </test>
 <edit name="antialias" mode="assign">
  <bool>true</bool>
 </edit>
 <edit name="hinting" mode="assign">
  <bool>true</bool>
 </edit>
 <edit name="autohint" mode="assign">
  <bool>false</bool>
 </edit>
 <edit name="hintstyle" mode="assign">
  <const>hintfull</const>
 </edit>
</match>

可以測試的字型的各個內容。例如,<test> 元素可測試字型系列 (如範例中所示)、字型間隔、間距、字型格式以及其他。完全棄用 <test> 時,系統會將所有 <edit> 元素套用至每個字型 (全域變更)。

範例 21.2︰ 別名和系列名稱取代
規則 1
<alias>
 <family>Alegreya SC</family>
 <default>
  <family>serif</family>
 </default>
</alias>
規則 2
<alias>
 <family>serif</family>
 <prefer>
  <family>Droid Serif</family>
 </prefer>
</alias>
規則 3
<alias>
 <family>serif</family>
 <accept>
  <family>STIXGeneral</family>
 </accept>
</alias>

範例 21.2 「別名和系列名稱取代」中的規則可產生已設定優先順序的系列清單 (PFL)。系統會根據元素執行不同的動作:

規則 1 中的 <default>

此規則會在 PFL 末尾新增 serif 系列名稱。

規則 2 中的 <prefer>

只要 PFL 中存在 Alegreya SC,此規則就會在 PFL 中的第一個 serif 之前新增Droid Serif

規則 3 中的 <accept>

此規則會在 PFL 中第一個 serif 系列名稱之後,緊貼著它新增 STIXGeneral 系列名稱。

將此片段放置在一起,當片段按規則 1 - 規則 2 - 規則 3 的順序出現並且使用者要求 Alegreya SC 時,便會建立如表格 21.1 「從 fontconfig 規則產生 PFL」中所述的 PFL。

表 21.1︰ 從 fontconfig 規則產生 PFL

順序

目前 PFL

要求

Alegreya SC

規則 1

Alegreya SCserif

規則 2

Alegreya SCDroid Serifserif

規則 3

Alegreya SCDroid Serifserif

在 Fontconfig 的度量中,系列名稱具有最高優先順序,高於樣式、大小等其他模式。Fontconfig 會檢查目前在系統上安裝了哪個系列。如果已安裝 Alegreya SC,則 Fontconfig 會傳回此名稱。如果未安裝,則系統會檢查 Droid Serif 等。

請小心。在變更 Fontconfig 片段的順序時,Fontconfig 可能傳回不同的結果,如表格 21.2 「從變更了順序的 fontconfig 規則產生 PFL 的結果」中所述。

表 21.2︰ 從變更了順序的 fontconfig 規則產生 PFL 的結果

順序

目前 PFL

記事

要求

Alegreya SC

執行相同的要求。

規則 2

Alegreya SC

PFL 中沒有 serif,未取代任何內容

規則 3

Alegreya SC

PFL 中沒有 serif,未取代任何內容

規則 1

Alegreya SCserif

PFL 中存在 Alegreya SC,執行取代

注意
注意:隱含意義

<default> 別名視為此群組的分類或包含 (如果未安裝)。如範例所示,<default> 應該一律優先於該群組的 <prefer><accept> 別名。

<default> 分類不限於一般別名 serif、sans-serif 和 monospace。如需複雜的範例,請參閱 /usr/share/fontconfig/conf.avail/30-metric-aliases.conf

範例 21.3 「別名和系列名稱取代」中的下列 Fontconfig 片段會建立 serif 群組。當前一種字型未安裝時,此群組中的每個系列可取代其他系列。

範例 21.3︰ 別名和系列名稱取代
<alias>
 <family>Alegreya SC</family>
 <default>
  <family>serif</family>
 </default>
</alias>
<alias>
 <family>Droid Serif</family>
 <default>
  <family>serif</family>
 </default>
</alias>
<alias>
 <family>STIXGeneral</family>
 <default>
  <family>serif</family>
 </default>
</alias>
<alias>
 <family>serif</family>
 <accept>
  <family>Droid Serif</family>
  <family>STIXGeneral</family>
  <family>Alegreya SC</family>
 </accept>
</alias>

優先順序由 <accept> 別名中的順序提供。類似地,可以使用較強的 <prefer> 別名。

範例 21.4 「別名和系列名稱取代」擴展了範例 21.2 「別名和系列名稱取代」

範例 21.4︰ 別名和系列名稱取代
規則 4
<alias>
 <family>serif</family>
 <accept>
  <family>Liberation Serif</family>
 </accept>
</alias>
規則 5
<alias>
 <family>serif</family>
 <prefer>
  <family>DejaVu Serif</family>
 </prefer>
</alias>

範例 21.4 「別名和系列名稱取代」中擴展的組態將導致下列 PFL 演變:

表 21.3︰ 從 fontconfig 規則產生 PFL 的結果

順序

目前 PFL

要求

Alegreya SC

規則 1

Alegreya SCserif

規則 2

Alegreya SCDroid Serifserif

規則 3

Alegreya SCDroid Serifserif

規則 4

Alegreya SCDroid SerifserifLiberation SerifSTIXGeneral

規則 5

Alegreya SCDroid SerifDejaVu SerifserifLiberation SerifSTIXGeneral

注意
注意:隱含意義。
  • 如果同一個一般名稱存在多個 <accept> 宣告,則最後剖析的宣告「勝出」。若有可能,在建立泛系統組態時不要在使用者 (/etc/fonts/conf.d/*-user.conf) 之後使用 <accept>。

  • 如果同一個一般名稱存在多個 <accept> 宣告,則最後剖析的宣告「勝出」。若有可能,在泛系統組態中不要在使用者之前使用 <prefer>

  • 對於相同的一般名稱,每個 <prefer> 宣告會覆寫 <accept> 宣告。如果管理員不僅希望使用者能使用 <prefer>,還想允許其使用 <accept>,就不應該在泛系統組態中使用 <prefer>。另一方面,因為使用者通常都是使用 <prefer>,這種做法應該不會產生任何不利影響。我們還發現在泛系統組態中使用 <prefer> 的情況。

21.3 適用於管理員的 GNOME 組態

21.3.1 dconf 系統

系統使用 dconf 管理 GNOME 桌面的組態。dconf 是依階層結構化的資料庫或登錄,可讓使用者修改其個人設定,並可讓系統管理員為所有使用者設定預設值或強制值。dconf 取代了 GNOME 2 的 gconf 系統。

使用 dconf-editor 可透過圖形使用者介面檢視 dconf 選項。使用 dconf 可透過指令行存取和修改組態選項。

GNOME Tweaks 工具提供易於使用的使用者介面,其中包含不屬於一般 GNOME 組態的其他組態選項。從 GNOME 應用程式功能表或在指令行中使用 gnome-tweak-tool 可啟動該工具。

21.3.2 泛系統組態

/etc/dconf/db/ 目錄中可設定全域 dconf 組態參數,其中包括 GDM 的組態或針對使用者鎖定特定的組態選項。

我們以下面的程序舉例說明如何建立泛系統組態:

  1. /etc/dconf/db/ 中建立以 .d 結尾的新目錄。此目錄可包含任意數量的組態選項文字檔案。在此範例中,建立含有以下內容的檔案 /etc/dconf/db/network.d/00-proxy

    # This is a comment
    [system/proxy/http]
    host='10.0.0.1'
    enabled=true
  2. 將新組態指令剖析為 dconf 資料庫格式:

    tux > sudo dconf update
  3. 建立 /etc/dconf/profiles/user 檔案,以將新 network 組態資料庫新增至預設使用者設定檔。然後新增以下內容:

    system-db:network

    /etc/dconf/profiles/user 檔案是將要使用的 GNOME 預設設定。在環境變數 DCONF_PROFILE 中可定義其他設定檔。

  4. 選擇性:若要鎖定使用者的代理組態,請建立 /etc/dconf/db/network/locks/proxy 檔案。然後將含有不能變更的關鍵字的一行新增至此檔案:

    /system/proxy/http/host
    /system/proxy/http/enabled

您可以使用圖形 dconf-editor 建立包含一個使用者的設定檔,然後使用 dconf dump / 列出所有組態選項。之後便可將組態選項儲存在全域設定檔中。

https://wiki.gnome.org/Projects/dconf/SystemAdministrators 中提供了全域組態的詳細描述。

21.3.3 更多資訊

如需詳細資訊,請參閱 http://help.gnome.org/admin/

21.4 使用 SUSE Prime 在 Intel 和 NVIDIA Optimus GPU 之間切換

SUSE Prime 是一款用於在內建 Intel 圖形處理單位 (GPU) 和配有 NVIDIA「可切換圖形」Optimus 技術的 NVIDIA GPU 之間切換的工具。Optimus 提供了一種可在內建 Intel GPU 和獨立 NVIDIA GPU 之間輕鬆切換的機制。專為在省電模式下或以最佳效能執行筆記型電腦而設計:使用 Intel GPU 可省電,使用 NVIDIA GPU 可支援 3D 應用程式。

SUSE Prime 只能在執行 X11 (而不是 Wayland) 的系統上工作。如果您的系統執行 Wayland,您必須將其停用,並退回到 X11 (如果您希望使用 SUSE Prime) (請參閱第 21.4.1 節 「先決條件」)。

21.4.1 先決條件

/etc/X11/xorg.conf.d 目錄中不能有 /etc/X11/xorg.conf 檔案,也不能有作用中「ServerLayout」、「Device」或「Screen」區段的組態檔案。

SUSE Prime 僅適用於 X11。請使用 loginctl 指令查看您的系統是使用 X11 還是 Wayland:

tux > loginctl
   SESSION        UID USER             SEAT             TTY             
         2       1000 tux             seat0               
tux > loginctl show-session 2|grep Type
Type=x11

如果您的系統使用 Wayland,請編輯 /etc/gdm/custom.conf 並取消註解 WaylandEnable=false 將其停用。然後重新開機。

21.4.2 安裝和使用 SUSE Prime

您的 NVIDIA 圖形卡應已安裝且正常工作。如果沒有,請參閱第 21.4.3 節 「安裝 NVIDIA 驅動程式」

安裝 suse-prime 套件:

tux > sudo zypper install suse-prime

若要切換 GPU,請執行以下指令之一,然後登出並重新登入:

tux > sudo prime-select intel
tux > sudo prime-select intel2
tux > sudo prime-select nvidia

如果是 modesetting 驅動程式,請使用 intel 驅動程式。intel2 適用於使用 xf86-video-intel 驅動程式的系統。您可以透過安裝和執行 inxi取得此資訊:

tux > inxi -G
Graphics: Device-1: Intel Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller
          Display Server: x11(X.org 1.20.1 ) drivers: modesetting (unloaded: fbdev, vesa)
          Resolution: 1920x1080@60.00hz
          OpenGL: renderer: Mesa DRI Intel Haswell Desktop version: 4.5 Mesa 18.2.8

哪個 GPU 目前處於作用中狀態?

tux > sudo /usr/sbin/prime-select get-current
Driver configured: intel

21.4.3 安裝 NVIDIA 驅動程式

如果您需要識別 NVIDIA 卡以便瞭解要使用哪個驅動程式,請執行以下指令:

tux > /sbin/lspci | grep VGA

依照以下步驟使用 Zypper 安裝驅動程式。

列出可用的驅動程式套件:

tux > sudo zypper se nvidia

然後為您的 NVIDIA 圖形卡安裝驅動程式:

tux > sudo zypper se packagename

22 使用 FUSE 存取檔案系統

FUSE 是使用者空間中的檔案系統 (file system in user space) 的縮寫。這表示您可以非特權使用者的身分設定並掛接檔案系統。一般情況下,只有 root 才能執行此任務。FUSE 自身就是一個核心模組。將 FUSE 與外掛程式結合便能延伸其功能,幾乎可存取所有檔案系統,如遠端 SSH 連接、ISO 影像及其他.

22.1 設定 FUSE

您必須先安裝套件 fuse 才能使用 FUSE。是否需要以獨立套件形式提供的其他外掛程式,取決於要使用的檔案系統。

一般而言,您無需設定 FUSE。但建議您建立可將所有掛接點組合於其中的目錄。例如,可以建立目錄 ~/mounts 並在該處插入不同檔案系統的子目錄。

22.2 掛接 NTFS 分割區

新技術檔案系統 (NTFS,New Technology File System) 是 Windows 的預設檔案系統。在一般情況下,由於非特權使用者無法使用外部 FUSE 程式庫掛接 NTFS 區塊裝置,因此下文所述的 Windows 分割區掛接程序需要 root 特權。

  1. 切換為 root 身份,然後安裝套件 ntfs-3gSUSE Linux Enterprise Workstation Extension 中提供了該套件。

  2. 建立將用作掛接點的目錄,例如 ~/mounts/windows

  3. 確定所需的 Windows 分割區。使用 YaST 並啟動磁碟分割程式模組,以檢視屬於 Windows 的分割區,但不要做任何修改。或者也可以切換為 root 身份,然後執行 /sbin/fdisk -l。尋找分割區類型為 HPFS/NTFS 的分割區。

  4. 在讀寫模式下裝載分割區。使用相應的 Windows 分割區取代佔位符 DEVICE

    tux > ntfs-3g /dev/DEVICE MOUNT POINT

    若要在唯讀模式下使用 Windows 分割區,請附加 -o ro

    tux > ntfs-3g /dev/DEVICE MOUNT POINT -o ro

    指令 ntfs-3g 使用目前的使用者 (UID) 與群組 (GID) 裝載指定裝置。若要對其他使用者設定寫入權限,請使用指令 id USER 以取得 UID 與 GID 的輸出。使用下列指令進行設定:

    root # id tux
    uid=1000(tux) gid=100(users) groups=100(users),16(dialout),33(video)
    ntfs-3g /dev/DEVICE MOUNT POINT -o uid=1000,gid=100

    可在 man 頁面中找到其他選項。

若要卸載資源,請執行 fusermount -u 掛接點

22.3 更多資訊

如需詳細資訊,請參閱 FUSE 首頁:https://github.com/libfuse/libfuse

23 管理核心模組

雖然 Linux 屬於單核心,但可透過核心模組加以延伸。這些特殊物件可以插入到核心中,並可視需要移除。就實際角度而言,核心模組使新增和移除核心自身未包含的驅動程式和介面成為現實。Linux 提供了數個用於管理核心模組的指令。

23.1 使用 lsmod 和 modinfo 列出載入的模組

使用 lsmod 指令可檢視目前載入了哪些核心模組。該指令的輸出可能如下所示:

tux > lsmod
Module                  Size  Used by
snd_usb_audio         188416  2
snd_usbmidi_lib        36864  1 snd_usb_audio
hid_plantronics        16384  0
snd_rawmidi            36864  1 snd_usbmidi_lib
snd_seq_device         16384  1 snd_rawmidi
fuse                  106496  3
nfsv3                  45056  1
nfs_acl                16384  1 nfsv3

輸出內容分為三欄:Module 欄列出所載入模組的名稱,Size 欄顯示各模組的大小。Used by 欄顯示參考模組的程序數及其名稱。請注意,此清單可能不完整。

若要檢視有關特定核心模組的詳細資訊,請使用 modinfo MODULE_NAME 指令。其中 MODULE_NAME 為所需核心模組的名稱。請注意,modinfo 二進位檔案位於使用者的 PATH 環境變數中未包含的 /sbin 目錄下。這意味著,當您以普通使用者身分執行 modinfo 指令時,必須指定該二進位檔案的完整路徑:

tux > /sbin/modinfo kvm
filename:       /lib/modules/5.3.18-57-default/kernel/arch/x86/kvm/kvm.ko.xz
license:        GPL
author:         Qumranet
suserelease:    SLE15-SP3
srcversion:     3D8FBA9060D4537359A06FC
depends:        irqbypass
supported:      yes
retpoline:      Y
intree:         Y
name:           kvm
vermagic:       5.3.18-57-default SMP mod_unload modversions

23.2 新增和移除核心模組

雖然可以使用 insmodrmmod 分別新增和移除核心模組,但建議使用 modprobe 工具來執行這些操作。modprobe 具有多項重要優勢,包括自動解析相依項以及將核心模組加入黑名單。

如果不指定任何參數,使用 modprobe 指令會安裝指定的核心模組。必須使用 root 特權來執行 modprobe

tux > sudo modprobe acpi

若要移除核心模組,請使用 -r 參數:

tux > sudo modprobe -r acpi

23.2.1 開機時自動載入核心模組

您可以選擇不手動載入核心模組,而是使用 system-modules-load.service 服務在開機期間自動載入這些模組。若要啟用核心模組,請將 .conf 檔案新增到 /etc/modules-load.d/ 目錄下。建議為組態檔案指定與模組相同的名稱,例如:

/etc/modules-load.d/rt2800usb.conf

組態檔案中必須包含所需核心模組的名稱 (例如 rt2800usb)。

透過上述的這個技巧,無需指定任何參數即可載入核心模組。如果您需要使用特定選項載入核心模組,請將組態檔案新增到 /etc/modprobe.d/ 目錄下。該檔案的副檔名必須為 .conf。檔案名稱必須符合以下命名慣例:priority-modulename.conf,例如:50-thinkfan.conf。組態檔案中必須包含核心模組名稱及所需參數。您可以使用以下範例指令來建立包含核心模組名稱及其參數的組態檔案:

tux > echo "options thinkpad_acpi fan_control=1" | sudo tee /etc/modprobe.d/thinkfan.conf
注意
注意:載入核心模組

當偵測到裝置或使用者空間要求特定功能時,系統會自動載入大多數核心模組。因此,很少需要手動將模組新增到 /etc/modules-load.d/

23.2.2 使用 modprobe 將核心模組加入黑名單

將某個核心模組加入黑名單後,開機期間便不再會載入該模組。要停用您懷疑可能導致系統出現問題的某個模組時,此功能十分實用。請注意,您仍可透過使用 insmodmodprobe 工具來手動載入加入黑名單的核心模組。

若要將模組加入黑名單,請將 blacklist MODULE_NAME 一行新增到 /etc/modprobe.d/50-blacklist.conf 檔案中。例如:

blacklist nouveau

以 root 身分執行 mkinitrd 指令以產生新的 initrd 影像,然後將機器重新開機。可使用以下指令執行上述步驟:

tux > su
echo "blacklist nouveau" >> /etc/modprobe.d/50-blacklist.conf && mkinitrd && reboot

如果只想暫時停用某個核心模組,可在開機期間即時將其加入黑名單。若要實現此目標,請在開機螢幕顯示時按 E 鍵。這樣,您會進入一個可供您修改開機參數的小編輯器。找到如下所示的行:

linux /boot/vmlinuz...splash= silent quiet showopts

modprobe.blacklist=MODULE_NAME 指令新增到該行結尾處。例如:

linux /boot/vmlinuz...splash= silent quiet showopts modprobe.blacklist=nouveau

F10CtrlX 以依照指定的組態開機。

若要透過 GRUB 將某個核心模組永久加入黑名單,請開啟要編輯的 /etc/default/grub 檔案,將 modprobe.blacklist=MODULE_NAME 選項新增到 GRUB_CMD_LINUX 指令中。然後執行 sudo grub2-mkconfig -o /boot/grub2/grub.cfg 指令使變更生效。

24 使用 udev 進行動態核心裝置管理

核心可以新增或移除執行中系統內幾乎所有的裝置。裝置狀態的變更 (無論裝置插入或移除) 必須傳播至使用者空間。插入及識別裝置後需要對其進行設定。如果辨識到的裝置狀態發生任何變更,必須通知該裝置的使用者。udev 會提供所需的基礎結構,以便動態維護 /dev 目錄中的裝置節點檔案和符號連結。udev 規則能將外部工具插入核心裝置事件處理。因而,您可以透過新增在核心裝置處理過程中執行的特定程序檔,來自訂 udev 裝置處理方式,或者可以在裝置處理期間要求並輸入其他資料進行評估。

24.1 /dev 目錄

/dev 中的裝置節點可用來存取對應的核心裝置。透過 udev/dev 目錄會反映核心的目前狀態。每個核心裝置都有一個對應的裝置檔案。如果裝置與系統的連接中斷,該裝置節點就會遭到移除。

/dev 目錄的內容保存在暫存檔案系統中,而且所有檔案都會在每次系統開機時顯示。根據系統設計,手動建立或修改的檔案在重新開機後都將遺失。無論可使用 systemd-tmpfiles 建立的對應核心裝置狀態為何,靜態檔案和目錄都必須在 /dev 目錄中。組態檔案可在 /usr/lib/tmpfiles.d//etc/tmpfiles.d/ 中找到;如需詳細資訊,請參閱 systemd-tmpfiles(8) 線上文件。

24.2 核心 ueventudev

sysfs 檔案系統會輸出必要的裝置資訊。每個核心已偵測和啟始化的裝置,都會建立包含其裝置名稱的目錄。其中會包含裝置特定的屬性內容。

每次新增或移除裝置時,核心都會傳送 uevent 來通知 udev 此變更。udev 精靈會在啟動時從 /usr/lib/udev/rules.d/*.rules/etc/udev/rules.d/*.rules 檔案中讀取並剖析所有規則,然後將剖析結果保留在記憶體中。如果變更、新增或移除了規則檔案,精靈可以使用 udevadm control --reload 指令重新載入這些規則在記憶體中的表示。如需有關 udev 規則及其語法的詳細資訊,請參閱第 24.6 節 「使用 udev 規則影響核心裝置事件處理」

每個收到的事件都將與提供的規則集合進行比對。這些規則可新增或變更事件環境識別碼、要求要建立之裝置節點的特定名稱、新增指向該節點的符號連結,或是新增要在裝置節點建立後執行的程式。驅動程式核心 uevent 是從核心網路連結插槽接收。

24.3 驅動程式、核心模組和裝置

核心匯流排驅動程式會查探裝置。核心 (kernel) 會為每個偵測到的裝置建立一個內部裝置結構,而驅動程式核心 (core) 會向 udev 精靈傳送一個 uevent。匯流排裝置會以特殊格式的 ID 識別本身,表明其為何種裝置。通常這些 ID 會包含廠商和產品 ID,以及其他子系統特定值。每個匯流排都會指定自己的 ID 配置,即所謂的 MODALIAS。核心會接收這些裝置資訊,並根據這些資訊設定 MODALIAS ID 字串,然後隨事件一起傳送該字串。例如,USB 滑鼠的 ID 字串將如下所示:

MODALIAS=usb:v046DpC03Ed2000dc00dsc00dp00ic03isc01ip02

每個裝置驅動程式都包含有裝置可處理的已知別名清單。清單會包含在核心模組檔案本身。depmod 程式會讀取 ID 清單,並且為目前所有可用模組在核心的 /lib/modules 目錄中建立 modules.alias 檔案。透過此基礎結構,模組載入方式就會像在每次出現帶有 MODALIAS 識別碼的事件時呼叫 modprobe 一樣容易。如果是呼叫 modprobe $MODALIAS,此次呼叫就會比對裝置的已組織裝置別名和模組指定別名。如果有找到符合項目,該模組就可載入。以上這一切都是由 udev 自動觸發。

24.4 開機和初始裝置設定

udev 精靈執行之前,於開機過程中發生的所有裝置事件都會遺失,這是因為處理這些事件的基礎結構位於根檔案系統中,在該階段無法使用。為彌補這一損失,核心在 sysfs 檔案系統中之每部裝置的裝置目錄中都提供了一份 uevent 檔案。使用 add 寫入該檔案,核心便可重新傳送與開機期間所遺失的相同事件。負責 /sys 中所有 uevent 檔案的簡易迴圈,可以再次觸發所有事件,建立裝置節點並執行裝置設定。

例如,開機期間出現的 USB 滑鼠可能無法由早期的開機邏輯啟始化,這是因為當時尚無法使用驅動程式。裝置探查事件遺失,而且無法找到裝置的核心模組。您無需手動搜尋連接的裝置,udev 會在根檔案系統可用後向核心要求所有裝置事件,這樣 USB 滑鼠裝置的事件就會再次執行。現在,它會在已掛接根目錄檔案系統中找到核心模組,並讓 USB 滑鼠完成啟始化。

從使用者空間的角度,執行期間的裝置冷插拔 (ColdPlud) 順序和裝置探查並沒有明顯的不同。這兩種情況都會使用相同規則來進行比對,而且會執行相同的設定程式。

24.5 監控執行中的 udev 精靈

udevadm monitor 程式可用來視覺化驅動程式核心事件以及 udev 事件程序的時間。

UEVENT[1185238505.276660] add   /devices/pci0000:00/0000:00:1d.2/usb3/3-1 (usb)
UDEV  [1185238505.279198] add   /devices/pci0000:00/0000:00:1d.2/usb3/3-1 (usb)
UEVENT[1185238505.279527] add   /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0 (usb)
UDEV  [1185238505.285573] add   /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0 (usb)
UEVENT[1185238505.298878] add   /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10 (input)
UDEV  [1185238505.305026] add   /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10 (input)
UEVENT[1185238505.305442] add   /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/mouse2 (input)
UEVENT[1185238505.306440] add   /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/event4 (input)
UDEV  [1185238505.325384] add   /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/event4 (input)
UDEV  [1185238505.342257] add   /devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10/mouse2 (input)

UEVENT 行會顯示核心已透過網路連結傳送的事件。UDEV 行會顯示已完成的 udev 事件處理常式。列印時間是百萬分之一秒。介於 UEVENTUDEV 之間的時間是指 udev 處理此事件所耗費的時間,或者是 udev 精靈延遲執行以便此事件能與執行中相關事件同步的時間。例如,硬碟分割區的事件始終會等待主要磁碟裝置事件完成,因為分割區事件可能與主要磁碟事件向硬體查詢的資料有關。

udevadm monitor --env 會顯示完整的事件環境:

ACTION=add
DEVPATH=/devices/pci0000:00/0000:00:1d.2/usb3/3-1/3-1:1.0/input/input10
SUBSYSTEM=input
SEQNUM=1181
NAME="Logitech USB-PS/2 Optical Mouse"
PHYS="usb-0000:00:1d.2-1/input0"
UNIQ=""
EV=7
KEY=70000 0 0 0 0
REL=103
MODALIAS=input:b0003v046DpC03Ee0110-e0,1,2,k110,111,112,r0,1,8,amlsfw

udev 也會將訊息傳送到 syslog。控制哪些訊息要傳送到 syslog 的預設 syslog 優先程度是在 udev 的組態檔 /etc/udev/udev.conf 中指定。可以使用 udevadm control --log_priority=LEVEL/NUMBER 變更執行中精靈的記錄優先程度。

24.6 使用 udev 規則影響核心裝置事件處理

udev 規則可以比對核心新增至事件本身的任何內容,或者核心輸出到 sysfs 的任何資訊。規則也可向外部程式要求其他資訊。系統會將事件與目錄 /usr/lib/udev/rules.d/ (適用於預設規則) 和 /etc/udev/rules.d (系統專屬的組態) 中提供的所有規則進行比對。

規則檔案中的每一行都包含至少一個鍵值組合。鍵類型共有兩種,包括比對和指定鍵。當所有比對鍵都與指定值相符時就會套用規則,而該指定值就會指定給指定鍵。相符規則可以指定裝置節點的名稱、新增指向該節點的符號連結,或是在事件處理過程中執行指定的程式。如果找不到任何符合規則,就會使用預設的裝置節點名稱來建立裝置節點。如需有關規則語法和系統提供之用於比對或輸入資料的鍵的詳細資訊,請參閱 udev man 頁面。以下範例規則提供了對 udev 規則語法的基本介紹。這些範例規則全部摘自 udev 預設規則集 /usr/lib/udev/rules.d/50-udev-default.rules

範例 24.1︰ 範例 udev 規則
# console
KERNEL=="console", MODE="0600", OPTIONS="last_rule"

# serial devices
KERNEL=="ttyUSB*", ATTRS{product}=="[Pp]alm*Handheld*", SYMLINK+="pilot"

# printer
SUBSYSTEM=="usb", KERNEL=="lp*", NAME="usb/%k", SYMLINK+="usb%k", GROUP="lp"

# kernel firmware loader
SUBSYSTEM=="firmware", ACTION=="add", RUN+="firmware.sh"

主控台規則包含三個鍵:一個比對鍵 (KERNEL) 以及兩個指定鍵 (MODEOPTIONS)。KERNEL 比對規則用於搜尋類型為主控台的所有項目的裝置清單。只有完全符合的項目才有效,才會觸發此規則讓其執行。MODE 鍵用於將特殊權限指派給裝置節點,在此案例中,僅此裝置的擁有者才會被指派讀取與寫入權限。OPTIONS 鍵用於將此規則做為要套用至所有此類型裝置的最後一條規則。符合此特殊裝置類型的任何後續規則都不會生效。

序列裝置規則在 50-udev-default.rules 中雖已不再可用,但仍值得瞭解一下。它包含兩個比對鍵 (KERNELATTRS) 與一個指派鍵 (SYMLINK)。KERNEL 鍵用於搜尋類型為 ttyUSB 的所有裝置。使用 * 萬用字元時,此鍵可比對多部此類裝置。第二個比對鍵 ATTRS 用於檢查 sysfs 中針對 ttyUSB 裝置的 product 屬性檔案是否包含特定字串。指派鍵 (SYMLINK) 用於觸發將符號連結新增至 /dev/pilot 下的此裝置。此鍵中使用的運算子 (+=) 將告知 udev 額外執行此動作,即使先前或之後的規則會新增其他符號連結也是如此。由於此規則包含兩個比對鍵,因此僅當兩個條件均滿足時才適用。

印表機規則可處理 USB 印表機,它包含兩個比對鍵,必須同時套用這兩個鍵才能套用整個規則 (SUBSYSTEMKERNEL)。三個指定鍵用於命名此裝置類型 (NAME)、建立符號裝置連結 (SYMLINK) 以及對此裝置類型的成員進行分組 (GROUP)。在 KERNEL 鍵中使用 * 萬用字元可使其符合多部 lp 印表機裝置。可以在 NAMESYMLINK 鍵中使用替代項,透過內部裝置名稱延伸這些字串。例如,第一部 lp USB 印表機的符號連結會讀取 /dev/usblp0

核心韌體載入程式規則可讓 udev 在執行時期透過外部輔助程式程序檔載入其他韌體。SUBSYSTEM 比對鍵可搜尋韌體子系統。ACTION 鍵可檢查是否已新增任何屬於韌體子系統的裝置。RUN+= 鍵可觸發執行 firmware.sh 程序檔以查找要載入的韌體。

某些一般特性適用於所有規則:

  • 每條規則都包含一個或多個以逗號分隔的鍵值對。

  • 鍵的操作由運算子決定。udev 規則支援多個運算子。

  • 每個指定值必須括在引號中。

  • 規則檔案中的每一行都表示一條規則。如果某規則的長度超出一行,請使用 \ 連接不同的行,就如同在外圍程序語法中一樣。

  • udev 規則支援符合 *? [] 模式的外圍程序式模式。

  • udev 規則支援替代項。

24.6.1 udev 規則中使用運算子

建立金鑰時,您可以根據要建立的金鑰類型從多個運算子中進行選擇。比對鍵通常用於尋找符合或明顯不符合搜尋值的值。比對鍵可包含以下運算子:

==

比較是否相等。如果鍵包含搜尋模式,則所有符合此模式的結果均有效。

!=

比較是否不相等。如果鍵包含搜尋模式,則所有符合此模式的結果均有效。

指派鍵可使用以下運算子:

=

將某個值指派給鍵。如果鍵先前包含值清單,則此鍵將重設並僅指派單一值。

+=

將某個值新增至包含項目清單的鍵。

:=

指派最終值。不允許後續規則再做任何變更。

24.6.2 udev 規則中使用替代項

udev 規則支援使用佔位符與替代項。使用方式與任何其他程序檔中的方式類似。在 udev 規則中可以使用以下替代項:

%r, $root

依預設為裝置目錄 /dev

%p, $devpath

DEVPATH 的值。

%k, $kernel

KERNEL 的值或內部裝置名稱。

%n, $number

裝置編號。

%N, $tempnode

裝置檔案的暫存名稱。

%M, $major

裝置的主要編號。

%m, $minor

裝置的次要編號。

%s{ATTRIBUTE}, $attr{ATTRIBUTE}

sysfs 屬性的值 (透過 ATTRIBUTE 指定)。

%E{VARIABLE}, $env{VARIABLE}

環境變數的值 (透過 VARIABLE 指定)。

%c, $result

PROGRAM 的輸出。

%%

% 字元。

$$

$ 字元。

24.6.3 使用 udev 比對鍵

比對鍵定義要套用 udev 規則所必須滿足的條件。以下為可用的比對鍵:

ACTION

事件動作的名稱,例如新增或移除裝置時的 addremove

DEVPATH

事件裝置的裝置路徑,例如 DEVPATH=/bus/pci/drivers/ipw3945,用於搜尋與 ipw3945 驅動程式相關的所有事件。

KERNEL

事件裝置的內部 (核心) 名稱。

SUBSYSTEM

事件裝置的子系統,例如 SUBSYSTEM=usb,適用於與 USB 裝置相關的所有事件。

ATTR{FILENAME}

事件裝置的 sysfs 屬性。例如,若要比對 vendor 屬性檔案名稱中包含的字串,可以使用 ATTR{vendor}=="On[sS]tream"

KERNELS

udev 向上搜尋裝置路徑,以尋找相符的裝置名稱。

SUBSYSTEMS

udev 向上搜尋裝置路徑,以尋找相符的裝置子系統名稱。

DRIVERS

udev 向上搜尋裝置路徑,以尋找相符的裝置驅動程式名稱。

ATTRS{FILENAME}

udev 向上搜尋裝置路徑,以尋找與 sysfs 屬性值相符的裝置。

ENV{KEY}

環境變數的值,例如 ENV{ID_BUS}="ieee1394,用於搜尋與 FireWire 匯流排 ID 相關的所有事件。

PROGRAM

udev 執行外部程式。若要成功執行,程式必須以離開碼零返回。RESULT 鍵可使用程式的輸出 (列印至 STDOUT)。

RESULT

比對上次 PROGRAM 呼叫的輸出字串。即可將此鍵包含於相同規則中 (如 PROGRAM 鍵),也可含於後續規則中。

24.6.4 使用 udev 指定鍵

與上述比對鍵不同,指定鍵不會說明必須滿足的條件,而是將值、名稱和動作指定給 udev 維護的裝置節點。

NAME

要建立之裝置節點的名稱。如果規則已設定了節點名稱,則將忽略適用於此節點的所有其他含 NAME 鍵的規則。

SYMLINK

與要建立的節點相關聯之符號連結的名稱。可以為多項比對規則新增符號連結以便使用裝置節點進行建立。您還可以使用空格字元分隔符號連結名稱,從而為一項規則中的一個節點指定多個符號連結。

OWNER、GROUP、MODE

新裝置節點的權限。在此處指定的值將覆寫已編譯的任何項目。

ATTR{KEY}

指定要寫入事件裝置之 sysfs 屬性的值。如果使用運算子 ==,也會使用此鍵來比對 sysfs 屬性的值。

ENV{KEY}

告知 udev 將某變數輸出到環境中。如果使用運算子 ==,也會使用此鍵來比對環境變數。

RUN

告知 udev 將某程式新增至要為此裝置執行的程式清單。對極短任務套用此項時要格外小心,以免封鎖此裝置的其他事件。

LABEL

GOTO 可以跳轉之處新增一個標籤。

GOTO

告知 udev 跳過數個規則,繼續執行 GOTO 鍵所參考標籤對應的規則。

IMPORT{TYPE}

將變數載入事件環境,如外部程式的輸出。udev 可輸入多種類型的變數。如果未指定任何類型,udev 會根據檔案權限的可執行位元嘗試自行決定類型。

  • program 可告知 udev 執行外部程式並輸入其輸出。

  • file 可告知 udev 輸入文字檔。

  • parent 可告知 udev 輸入父代裝置中儲存的鍵。

WAIT_FOR_SYSFS

告知 udev 等待為特定裝置建立指定的 sysfs 檔案。例如,WAIT_FOR_SYSFS="ioerr_cnt" 會通知 udev 等待 ioerr_cnt 檔案建立完成。

OPTIONS

OPTION 鍵可以使用多個值:

  • last_rule 告知 udev 忽略所有後續規則。

  • ignore_device 告知 udev 完全忽略此事件。

  • ignore_remove 告知 udev 忽略針對該裝置的所有後續移除事件。

  • all_partitions 告知 udev 為區塊裝置上的所有可用分割區建立裝置節點。

24.7 永久裝置命名

動態裝置目錄和 udev 規則基礎架構讓系統可以為所有磁碟裝置提供固定名稱,無論裝置的辨識順序或所使用的連接為何。核心所建立的每個相應區塊裝置,都會採用針對特定匯流排、磁碟類型或檔案系統所設計的工具進行檢查。udev 會根據核心動態提供的裝置節點名稱,維護指向裝置的永久符號連結類別:

/dev/disk
|-- by-id
|   |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B -> ../../sda
|   |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part1 -> ../../sda1
|   |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part6 -> ../../sda6
|   |-- scsi-SATA_HTS726060M9AT00_MRH453M4HWHG7B-part7 -> ../../sda7
|   |-- usb-Generic_STORAGE_DEVICE_02773 -> ../../sdd
|   `-- usb-Generic_STORAGE_DEVICE_02773-part1 -> ../../sdd1
|-- by-label
|   |-- Photos -> ../../sdd1
|   |-- SUSE10 -> ../../sda7
|   `-- devel -> ../../sda6
|-- by-path
|   |-- pci-0000:00:1f.2-scsi-0:0:0:0 -> ../../sda
|   |-- pci-0000:00:1f.2-scsi-0:0:0:0-part1 -> ../../sda1
|   |-- pci-0000:00:1f.2-scsi-0:0:0:0-part6 -> ../../sda6
|   |-- pci-0000:00:1f.2-scsi-0:0:0:0-part7 -> ../../sda7
|   |-- pci-0000:00:1f.2-scsi-1:0:0:0 -> ../../sr0
|   |-- usb-02773:0:0:2 -> ../../sdd
|   |-- usb-02773:0:0:2-part1 -> ../../sdd1
`-- by-uuid
    |-- 159a47a4-e6e6-40be-a757-a629991479ae -> ../../sda7
    |-- 3e999973-00c9-4917-9442-b7633bd95b9e -> ../../sda6
    `-- 4210-8F8C -> ../../sdd1

24.8 udev 使用的檔案

/sys/*

由 Linux 核心提供的虛擬檔案系統,可輸出所有目前已知裝置。udev 用此資訊在 /dev 中建立裝置節點。

/dev/*

動態建立的裝置節點和使用 systemd-tmpfiles 建立的靜態內容;如需詳細資訊,請參閱 systemd-tmpfiles(8) 線上文件。

下列檔案和目錄包含了 udev 基礎結構的重要元件:

/etc/udev/udev.conf

udev 主組態檔。

/etc/udev/rules.d/*

系統專屬的 udev 事件比對規則。可在這裡新增自訂規則,以修改或覆寫 /usr/lib/udev/rules.d/* 中的預設規則。

系統依英數字元順序剖析檔案。檔案中優先程度較高的規則會修改或覆寫優先程度較低的規則。數值越小,優先程度越高。

/usr/lib/udev/rules.d/*

預設的 udev 事件比對規則。此目錄中的檔案由套件擁有,將在更新時覆寫。請勿在這裡新增、移除或編輯檔案,應該使用 /etc/udev/rules.d

/usr/lib/udev/*

udev 規則中呼叫的協助程式。

/usr/lib/tmpfiles.d//etc/tmpfiles.d/

針對靜態 /dev 內容。

24.9 更多資訊

如需關於 udev 基礎結構的詳細資訊,請參閱下列 man 頁面:

udev

關於 udev、鍵、規則和其他重要組態問題的一般資訊。

udevadm

udevadm 可用於控制 udev 的執行時期行為、要求核心事件、管理事件佇列以及提供簡單的除錯機制。

udevd

關於 udev 事件管理精靈的資訊。

25 特殊系統功能

本章會提供各種軟體套件、虛擬主控台及鍵盤配置的相關資訊。還會介紹 bashcronlogrotate 等軟體元件,因為這些元件較之上一版有所變更或加強。這些元件也許不很重要,但與系統的關係密切,使用者應該變更它們的預設行為。本章最後一節則會介紹語言與國家特定的設定 (I18N 與 L10N)。

25.1 特殊軟體套件的相關資訊

下列章節提供了有關以下工具的基本資訊:bashcronlogrotatelocateulimitfree

25.1.1 bash 套件和 /etc/profile

Bash 是預設的系統外圍程序。如果以它做為登入外圍程序,可以讀取多種啟始化檔案。Bash 會以它們顯示在清單中的順序來處理。

  1. /etc/profile

  2. ~/.profile

  3. /etc/bash.bashrc

  4. ~/.bashrc

~/.profile~/.bashrc 中進行自訂設定。為了要確保這些檔案能正確的處理,您必須將基本設定從 /etc/skel/.profile/etc/skel/.bashrc 中複製至使用者的主目錄。建議您在更新後從 /etc/skel 複製設定。請執行下列的外圍程式指令,以避免遺失您調整過的設定。

tux > mv ~/.bashrc ~/.bashrc.old
tux > cp /etc/skel/.bashrc ~/.bashrc
tux > mv ~/.profile ~/.profile.old
tux > cp /etc/skel/.profile ~/.profile

然後個人的調整設定需要從 *.old 檔案再複製回去。

25.1.2 cron 套件

使用 cron 可在預先定義的時間自動在背景中執行指令。cron 使用格式有特別設定的時間表,並且該工具隨附了數個預設的時間表。使用者也可以視需要指定自訂的表。

cron 表格現在位於 /var/cron/tabs/etc/crontab 做為整個系統的 cron 表格。在時間表格之後、指令之前,輸入要直接執行指令的使用者名稱。在 範例 25.1 「/etc/crontab 中的項目」 中,則是輸入 root。位於 /etc/cron.d 的套件專用表格有相同的格式。請參閱 cron man 頁面 (man cron)。

範例 25.1︰ /etc/crontab 中的項目
1-59/5 * * * *   root   test -x /usr/sbin/atrun && /usr/sbin/atrun

您不能呼叫 crontab -e 指令來編輯 /etc/crontab。這個檔案必須直接載入編輯器中,然後進行修改和儲存。

有些套件會將外圍程序程序檔安裝到 /etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly 目錄中,由 /usr/lib/cron/run-crons 控制這些程序檔的執行。/usr/lib/cron/run-crons 每隔 15 分鐘會從主表格 (/etc/crontab) 執行一次。這會保證被忽略的程序可以在適當的時間執行。

若要在自訂的時間執行 hourlydaily 或其他定期維護程序檔,請定期使用 /etc/crontab 項目移除時戳檔案 (請參閱範例 25.2 「/etc/crontab:移除時戳檔案」,它可以在每個整點前移除 hourly,在每天凌晨的 2:14 移除 daily 等)。

範例 25.2︰ /etc/crontab:移除時戳檔案
59 *  * * *     root  rm -f /var/spool/cron/lastrun/cron.hourly
14 2  * * *     root  rm -f /var/spool/cron/lastrun/cron.daily
29 2  * * 6     root  rm -f /var/spool/cron/lastrun/cron.weekly
44 2  1 * *     root  rm -f /var/spool/cron/lastrun/cron.monthly

或者,可以將 /etc/sysconfig/cron 中的 DAILY_TIME 設定為 cron.daily 啟動的時間。MAX_NOT_RUN 的設定可確定日常任務能夠觸發並加以執行,即使使用者在長時間內均未於指定的 DAILY_TIME 開啟電腦。MAX_NOT_RUN 的最大值為 14 天。

為明確起見,日常系統維護工作會配送至不同的程序檔。它們包含在 aaa_base 套件中。例如,/etc/cron.daily 包含元件 suse.de-backup-rpmdbsuse.de-clean-tmpsuse.de-cron-local

25.1.3 停止 Cron 狀態訊息

若要避免 Cron 狀態訊息導致的郵件泛濫,請將新安裝 /etc/sysconfig/cron 中的 SEND_MAIL_ON_NO_ERROR 預設值設為「no」。即使將此設定設為「no」,系統仍會將 cron 資料輸出傳送至 MAILTO 位址,如 cron 手冊頁所述。

對於更新,建議根據需要設定這些值。

25.1.4 記錄檔案:套件 logrotate

某些系統服務 (精靈) 以及核心本身,會定期將系統狀態與特定事件記錄到記錄檔案中。這樣,管理員可以定期檢查某個時間點的系統狀態、找出錯誤或有問題的功能,並用精確的方式來排除它們。這些記錄檔通常以 FHS 所指定的方式儲存於 /var/log,而且會日益增大。logrotate 套件有助於控制這些檔案增大的方式。如需詳細資訊,請參閱Book “System Analysis and Tuning Guide”, Chapter 3 “System log files”, Section 3.3 “Managing log files with logrotate

25.1.5 locate 指令

可以快速尋找檔案的 locate 指令,未包含在軟體標準安裝的範圍內。如果需要,請安裝套件 mlocate,它是套件 findutils-locate 的後續套件。updatedb 程序會在每晚自行啟動,或在啟動系統後的 15 分鐘左右啟動。

25.1.6 ulimit 指令

利用 ulimit (user limits) 指令,您可以限制系統資源的使用,並顯示這些限制。ulimit 對於限制應用程式可使用的記憶體特別有用。利用它,可以避免應用程式佔用過多的系統資源,降低作業系統效能,甚至讓系統當機。

ulimit 可以搭配多種選項來使用。若要限制記憶體的使用,請利用表格 25.1 「ulimit:為使用者設定資源」 中所列的選項。

表 25.1︰ ulimit:為使用者設定資源

-m

最大的常駐集大小

-v

外圍程序可用的虛擬記憶體最大容量

-s

堆疊的最大大小

-c

所建立的核心檔案的最大大小

-a

將會報告所有目前限制

系統範圍的預設項目在 /etc/profile 中設定。建議不要直接編輯此檔案,因為在系統升級期間將會覆寫變更。若要自訂系統範圍的設定檔設定,請使用 /etc/profile.local。每個使用者的設定應該在 ~USER/.profile 中設定。

範例 25.3︰ ulimit~/.bashrc 中的設定
# Limits maximum resident set size (physical memory):
ulimit -m 98304

# Limits of virtual memory:
ulimit -v 98304

記憶體配置的單位必須為 KB。如需詳細資訊,請參閱 man bash

重要
重要:ulimit 支援

並非所有的外圍程序都支援 ulimit 指示詞。PAM (例如 pam_limits) 做為 ulimit 的替代方法,提供了全面的調整功能。

25.1.7 free 指令

free 指令顯示系統中總的可用記憶體、已用實體記憶體和交換空間,以及核心佔用的緩衝區和快取。可用的 RAM 的概念要回溯到聯合記憶體管理的年代之前。記憶體要物盡其用的口號非常適用於 Linux。所以,Linux 一直致力於平衡快取,而不允許有剩餘或未使用的記憶體。

基本上,核心不會直接瞭解有關任何應用程式或使用者資料的資訊。相反地,它會在頁面快取中管理應用程式與使用者資料。如果記憶體不足,它的某些部分會寫入交換分割區或檔案中,這樣,使用 mmap 指令便可一開始就從這些交換分割區或檔案中讀取這些部分 (請參閱 man mmap)。

核心也可以有其他的快取,例如 slab 快取,網路存取的快取資料會儲存於此處。這可以解釋 /proc/meminfo 中計數器之間的不同。它們大部分 (但非全部) 都可以透過 /proc/slabinfo 來存取。

不過,如果您的目標是要得知目前使用了多少 RAM,請在 /proc/meminfo 中尋找此資訊。

25.1.8 man 頁面和資訊頁面

某些 GNU 應用程式 (例如 tar) 不再支援 man 頁面。針對這些指令,請使用 --help 選項來取得 頁面的快速綜覽,這些頁面將提供更深入詳盡的說明。InfoInfo 是 GNU 的超文字系統。您可以輸入 info info 來讀取此系統的介紹。您可以輸入 emacs -f info 或直接在主控台中使用 info,以便使用 Emacs 檢視 info 頁面。您也可以使用 tkinfo、xinfo 或說明系統來檢視資訊頁面。

25.1.9 使用 man 指令選取 man 頁面

若要讀取 man 頁面,請輸入 man MAN_PAGE。如果不同區段中存在同名的 man 頁面,所有的這些 man 頁面都會列出,並會顯示對應的區段號碼。請選取要顯示的那個頁面。如果您未在幾秒內輸入區段號碼,將會顯示第一個 man 頁面。

若要將此行為變更為預設系統行為,請在外圍程序啟始化檔案 (如 ~/.bashrc) 中設定 MAN_POSIXLY_CORRECT=1

25.1.10 GNU Emacs 的設定

GNU Emacs 是個複雜的工作環境。以下幾個小節包含在 GNU Emacs 啟動時組態檔案的處理情形。更多相關資訊可在 http://www.gnu.org/software/emacs/ 取得。

啟動時,Emacs 會讀取多個檔案,其中包含使用者、系統管理員以及供應商的自訂設定或預設組態設定。啟始化檔案 ~/.emacs 會從 /etc/skel 安裝至個別使用者的主目錄。.emacs 接著會讀取 /etc/skel/.gnu-emacs 檔案。如果要自訂程式,請將 .gnu-emacs 複製到主目錄 (利用 cp /etc/skel/.gnu-emacs ~/.gnu-emacs 指令),並依照您的需求來設定。

.gnu-emacs 定義 ~/.gnu-emacs-custom 檔案為 自訂檔案。如果使用者是使用 Emacs 中的自訂選項來進行設定,這些設定會儲存至 ~/.gnu-emacs-custom 中。

透過 SUSE Linux Enterprise Serveremacs 套件可將檔案 site-start.el 安裝至目錄 /usr/share/emacs/site-lisp 中。site-start.el 檔案會在啟始化檔案 ~/.emacs 前載入。此外,site-start.el 會確保那些以 Emacs 附加套件來散佈的特定組態檔案皆能自動載入,例如 psgml。此類型的組態檔案也位於 /usr/share/emacs/site-lisp 中,並且會以 suse-start- 為開頭。本地系統管理員可在 default.el 中指定整個系統的設定。

有關這些檔案的詳細資訊可在 Init File 下的 Emacs 資訊檔案中取得:info:/emacs/InitFile。關於如何在需要時停止載入這些檔案的資訊,也可在此找到。

Emacs 的元件分成數個套件:

  • emacs 基本套件。

  • emacs-x11 (通常已安裝):具有 X11 支援的程式。

  • emacs-nox沒有 X11 支援的程式。

  • emacs-info:info 格式的線上文件。

  • emacs-el:以 emacs lisp 編寫的未編譯程式庫檔案。執行期間用不到這類檔案。

  • 需要時可安裝多種附加產品套件:emacs-auctex (LaTeX)、psgml (SGML 與 XML)、gnuserv (用戶端與伺服器作業) 以及其他。

25.2 虛擬主控台

Linux 是多重使用者及多工的作業系統。這些功能的優點即使在獨立的個人電腦系統中一樣令人讚賞。在文字模式中,有六個虛擬主控台可用。使用 AltF1AltF6 可以在虛擬主控台之間進行切換。第七個主控台保留給 X 使用,第十個主控台可以顯示核心訊息。

若要在不關閉主控台的情況下,從 X 切換到主控台,請使用 CtrlAlt + F1CtrlAltF6 這些鍵。若要回到 x,請按 Alt F7

25.3 鍵盤對應

若要標準化程式的鍵盤配置,請變更下列的檔案:

/etc/inputrc
/etc/X11/Xmodmap
/etc/skel/.emacs
/etc/skel/.gnu-emacs
/etc/skel/.vimrc
/etc/csh.cshrc
/etc/termcap
/usr/share/terminfo/x/xterm
/usr/share/X11/app-defaults/XTerm
/usr/share/emacs/VERSION/site-lisp/term/*.el

這些變更僅會影響使用 terminfo 項目的應用程式,或其組態檔是被直接變更的應用程式 (viemacs 等等)。未隨附於此系統的應用程式必須相容於這些預設值。

在 X 下,可以按照 /etc/X11/Xmodmap 中的說明啟用組合鍵 (複合鍵)。

使用 X 鍵盤延伸程式 (XKB),可以進行進一步的設定。

提示
提示:更多資訊

XKB 的相關資訊,可參閱 /usr/share/doc/packages/xkeyboard-config 中所列的文件 (xkeyboard-config 套件的一部分)。

25.4 語言與國家專用的設定

本系統已在很大程度上進行了國際化,可以根據當地的需求進行修改。國際化 (I18N) 允許特定的當地語系化 (L10N)。I18N 與 L10N 這兩個縮寫是取首尾兩個字母,兩字母中間再加上省略的字母數量。

設定位於 /etc/sysconfig/language 中所定義的 LC_ 變數。這不僅是指本地語言支援,還包括訊息 (語言)、字元集排序順序時間和日期數字貨幣等類別。這些類別中的每一種都可以使用自己的變數直接定義,或使用 language 檔案中的主變數間接定義 (請參閱 locale man 頁面)。

變數清單
RC_LC_MESSAGESRC_LC_CTYPERC_LC_COLLATERC_LC_TIMERC_LC_NUMERICRC_LC_MONETARY

這些變數會傳送到外圍程序,但不會包含 RC_ 字首,並代表列出的類別。相關外圍程序設定檔會列於下面。目前的設定可以用 locale 指令來顯示。

RC_LC_ALL

此變數 (如果設定) 會覆寫先前所提到的變數值。

RC_LANG

如果沒有設定前面的變數,則此為備用變數。依照預設,只會設定 RC_LANG。這讓使用者更容易輸入自己的值。

ROOT_USES_LANG

此變數可設定為 yesctype (預設值)。如果設定為 yesroot 將使用特定於語言和國家/地區的設定,否則系統管理員將永遠在 POSIX 環境中作業。

變數可以用 YaST sysconfig 編輯器來設定。這樣的變數值中包含語言碼、國碼、編碼及輔助按鍵。個別元件會以特殊字元來連接:

LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]

25.4.1 泛系統地區設定

systemd 會在早期開機時讀取 /etc/locale.conf。除非存在個別設定,否則此檔案中設定的地區設定將由每個服務或使用者繼承。

注意
注意:SUSE Linux Enterprise Server SUSE Linux Enterprise Server 下舊組態檔案的行為

早期版本的 SUSE Linux Enterprise Server 會從 /etc/sysconfig/language/etc/sysconfig/keyboard/etc/sysconfig/console 讀取地區設定。從 SUSE Linux Enterprise Server 15 GA 開始,這些檔案被視為已過時。systemd 不再從這些檔案讀取設定。systemd 改為從 /etc/locale.conf 讀取設定。

不過,仍會使用 /etc/sysconfig/language 中定義的變數。這些變數會覆寫泛系統地區設定,並可用於定義使用者外圍程序的不同地區設定 (請參閱第 25.4.2 節 「一些範例」)。

若要設定泛系統地區設定,您可以採用以下其中一種方式:

  • /etc/locale.conf 中寫入您的設定。每行指定一個環境型變數 (如需變數清單,請參閱 man 5 locale.conf):

    LANG=de_DE.UTF-8

    若要微調設定,可以新增更多的變數 (每行一個變數)。

  • 使用指令 localectl

    root # localectl set-locale LANG=de_DE.UTF-8

    同樣,您也可以在 localectl set-locale 指令後面指定更多變數。

在更新 systemd 套件期間為了與舊系統保留反向相容性,上述所有變數都將從 sysconfig 移轉至其最終目標 (如果尚未在這些目標中定義這些變數)。

25.4.2 一些範例

您必須將語言與國碼一起設定。語言設定必須符合 http://www.evertype.com/standards/iso639/iso639-en.htmlhttp://www.loc.gov/standards/iso639-2/ 中的標準 ISO 639。國碼列在 ISO 3166 中,請參閱 http://en.wikipedia.org/wiki/ISO_3166

只有設定那些可以在 /usr/lib/locale 中找到的可用描述檔案的值,才會有意義。您可以用 localedef 指令從 /usr/share/i18n 中的檔案建立其他描述檔。描述檔包含在 glibc-i18ndata 套件中。en_US.UTF-8 (針對美式英文) 的描述檔可以用以下指令建立:

localedef -i en_US -f UTF-8 en_US.UTF-8
LANG=en_US.UTF-8

如果安裝期間選擇美式英文的話,則此為預設設定。如果您選擇了其他語言,則仍然可以使用該語言,但會以 UTF-8 做為字元編碼。

LANG=en_US.ISO-8859-1

這會將語言設成英文、國家設成美國、字元集設成 ISO-8859-1。此字元集並不支援歐元符號,但有時對於尚未支援 UTF-8 的程式卻非常實用。然後,有些程式將會評估定義字元集的 (此例為 ISO-8859-1) 的字串,像是 Emacs。

LANG=en_IE@euro

上方範例在語言設定中明確包括歐元符號。此項設定現已過時,因為 UTF-8 也涵蓋歐元符號。它只有在應用程式支援 ISO-8859-15 而不支援 UTF-8 時才有用。

/etc/sysconfig/language 所做的變更會透過以下程序鏈來啟用:

  • 對於 Bash:/etc/profile 會讀取 /etc/profile.d/lang.sh,後者會分析 /etc/sysconfig/language

  • 對於 tcsh:在登入時,/etc/csh.login 會讀取 /etc/profile.d/lang.csh,後者會分析 /etc/sysconfig/language

如此可以確保對 /etc/sysconfig/language 的任何變更在下次登入相應的外圍程序時即會生效,而不必手動將其啟用。

使用者可以適當地編輯自己的 ~/.bashrc 來覆寫系統預設值。例如,如果不想對程式訊息使用泛系統 en_US,請加入 LC_MESSAGES=es_ES,這樣訊息將以西班牙語顯示。

25.4.3 ~/.i18n 中的地區設定

如果您對區域設定的系統預設值不滿意,可以根據 Bash 指令碼語法在 ~/.i18n 中變更設定值。~/.i18n 中的項目會覆寫 /etc/sysconfig/language 中的系統預設值。使用相同的變數名稱,但不使用 RC_ 名稱空間字首。例如,使用 LANG 而非 RC_LANG

LANG=cs_CZ.UTF-8
LC_COLLATE=C

25.4.4 語言支援的設定

按照規定,在訊息類別中的檔案僅會儲存於對應的語言目錄中 (像是 en),以便有備用可用。如果您將 LANG 設為 en_US,而且 /usr/share/locale/en_US/LC_MESSAGES 中的訊息檔案不存在的話,則它會回到 /usr/share/locale/en/LC_MESSAGES 中。

您也可以定義備用鍊,例如,不列塔尼文之於法文,或是加里斯亞文之於西班牙文之於葡萄牙文:

LANGUAGE="br_FR:fr_FR"

LANGUAGE="gl_ES:es_ES:pt_PT"

如有需要,請改用挪威文變體 Nynorsk 與 Bokmal (讓其他備用為 no):

LANG="nn_NO"

LANGUAGE="nn_NO:nb_NO:no"

LANG="nb_NO"

LANGUAGE="nb_NO:nn_NO:no"

請注意,在挪威文中,會以不同方式處理 LC_TIME

如果無法適當的辨識界定位數群組的分隔符號,可能會發生問題。如果 LANG 設定為類似 de 的兩個字母的語言碼,但卻使用 /usr/share/lib/de_DE/LC_NUMERIC 中的定義檔 glibc,就會發生這種情形。因此,LC_NUMERIC 必須設定為 de_DE,讓系統能辨識分隔符號定義。

25.4.5 更多資訊

  • The GNU C Library Reference ManualLocales and Internationalization 一章,包含在套件 glibc-info中。

  • Markus Kuhn 所寫的 UTF-8 and Unicode FAQ for Unix/Linux,目前網址如下:https://www.cl.cam.ac.uk/~mgk25/unicode.html

26 使用 NetworkManager

NetworkManager 是筆記型電腦與其他可攜式電腦的理想解決方案。它允許對網路連接使用一流的加密類型和標準,包括連至 802.1X 保護網路的連接。802.1X 是區域網路和都會區網路的 IEEE 標準 — 基於連接埠的網路存取控制。有了 NetworkManager,您在外出時就不必顧慮網路介面的組態設定,以及在有線或無線網路間切換的問題。NetworkManager 可自動連接已知的無線網路,或是同時管理多個網路連接,然後按預設使用速度最快的連接。此外,您還可以手動在可用網路之間切換,並使用系統匣中的 Applet 管理網路連接。

同一時間有多個連接處於使用中狀態,而不僅僅是一個。因此,您可以在將筆記型電腦從乙太網路中斷開後,繼續透過無線網路保持連接狀態。

重要
重要:

只有安裝了 SLED 延伸或 Workstation Extension 的 SUSE 桌面工作負載支援 NetworkManager。透過網路組態工具 wicked 來完成所有伺服器認證,而使用 NetworkManager 可能會使它們無效。SUSE 伺服器工作負載不支援 NetworkManager。

26.1 NetworkManager 的使用案例

NetworkManager 提供了精巧且直觀的使用者介面,可以讓使用者輕鬆切換網路環境。但是 NetworkManager 解決方案不適用於下列情況:

  • 您的電腦會為網路的其他電腦提供網路服務,例如,它是 DHCP 或 DNS 伺服器。

  • 您的電腦為 Xen 伺服器,或您的系統是 Xen 之中的虛擬系統。

26.2 啟用或停用 NetworkManager

對於筆記型電腦,NetworkManager 預設處於啟用狀態。但是您也可以在 YaST 網路設定模組中隨時將其啟用或停用。

  1. 執行 YaST,然後前往系統 ›  網路設定

  2. 此時將開啟「網路設定」對話方塊。前往「全域選項」索引標籤。

  3. 若要使用 NetworkManager 設定和管理網路連接:

    1. 在「網路設定方法」欄位中,選取「使用 NetworkManager 進行使用者控制」。

    2. 按一下「確定」,然後關閉 YaST。

    3. 第 26.3 節 「設定網路連接」中所述使用 NetworkManager 設定您的網路連接。

  4. 停用 NetworkManager 並使用您自己的組態控制網路:

    1. 在「網路設定方法」欄位中,選擇「由 wicked 控制」。

    2. 按一下「確定」

    3. 透過 YaST 使用自動組態 (透過 DHCP 或靜態 IP 位址) 設定您的網路卡。

      如需使用 YaST 設定網路組態的詳細資訊,請參閱第 19.4 節 「使用 YaST 設定網路連接」

26.3 設定網路連接

在 YaST 中啟用 NetworkManager 之後,使用 GNOME 中提供的 NetworkManager 前端設定網路連接。它會顯示所有類型網路連線的索引標籤,如有線、無線、行動寬頻、DSL 及 VPN 連線。

提示
提示:NetworkManager 連接編輯器

在以前的 SUSE Linux Enterprise Server 版本中,透過 NetworkManager 連接編輯器應用程式來設定網路連接。現在預設已不再安裝此應用程式,因為 GNOME 控制中心已完全取代了其組態功能。

如果您仍需使用 NetworkManager 連接編輯器來設定網路連接,請手動安裝 NetworkManager-connection-editor 套件:

tux > sudo zypper install NetworkManager-connection-editor

若要在 GNOME 中開啟網路組態對話方塊,請透過狀態功能表開啟設定功能表,然後按一下「網路」。

注意
注意:選項的可用性

在某些系統設定下,您可能無法設定連接。在安全環境中,某些選項可能會被鎖定,或者需要 root 權限。請向您的系統管理員洽詢詳細資料。

GNOME 網路連接對話方塊
圖 26.1︰ GNOME 網路連接對話方塊
程序 26.1︰ 新增和編輯連接
  1. 開啟 NetworkManager 組態對話方塊。

  2. 新增連線:

    1. 按一下左下角的「+」圖示。

    2. 選取偏好的連線類型並依照指示進行操作。

    3. 完成後,按一下「新增」。

    4. 確認您的變更後,新設定的網路連接即會出現在「狀態功能表」中的可用網路清單內。

  3. 編輯連線:

    1. 選取要編輯的項目。

    2. 按一下齒輪圖示以開啟連接設定對話方塊。

    3. 插入您的變更,然後按一下「套用」以儲存變更。

    4. 若要讓您的連接可用做系統連接,請移至身分索引標籤,選取核取方塊使其可供其他使用者使用。如需使用者和系統連接的詳細資訊,請參閱第 26.4.1 節 「使用者和系統連接」

26.3.1 管理有線網路連接

如果您的電腦連接的是有線網路,請使用 NetworkManager Applet 管理連線。

  1. 開啟「狀態功能表」,然後按一下有線以變更連接的詳細資料或將其關閉。

  2. 若要變更設定,請按一下有線設定,然後按一下齒輪圖示。

  3. 若要關閉所有網路連線,請啟動「飛航模式」設定。

26.3.2 管理無線網路連接

可見無線網路均列在「無線網路」下的 GNOME NetworkManager Applet 功能表中。每個網路的訊號強度也會顯示在功能表中。加密的無線網路以盾牌圖示標明。

程序 26.2︰ 連接至可見無線網路
  1. 若要連接至可見無線網路,請開啟「狀態功能表」,然後按一下「Wi-Fi」。

  2. 按一下「開啟」以啟用。

  3. 按一下「選取網路」,選取您的 Wi-Fi 網路,然後按一下「連線」。

  4. 如果該網路已加密,則會開啟一個組態對話方塊。其中會顯示網路使用的加密類型以及用於輸入登入身分證明的文字方塊。

程序 26.3︰ 連接至不可見無線網路
  1. 若要連接至因未廣播其服務設定識別碼 (SSID 或 ESSID) 而無法自動偵測到的網路,請開啟「狀態功能表」,然後按一下 Wi-Fi

  2. 按一下「Wi-Fi 設定」以開啟詳細設定功能表。

  3. 確定您的 Wi-Fi 處於啟用狀態,然後按一下連接至隱藏網路

  4. 在開啟的對話方塊中,於「網路名稱」內輸入 SSID 或 ESSID,並根據需要設定加密參數。

明確指定的無線網路會儘可能長久地保持連接狀態。如果在此期間插入網路線,則會連接已設定為「儘可能保持連接」的連接,而無線連接仍將延續。

26.3.3 將 Wi-Fi/藍芽卡設定為存取點

如果您的 Wi-Fi/藍芽卡支援存取點模式,您可以使用 NetworkManager 來設定組態。

  1. 開啟「狀態功能表」,然後按一下「Wi-Fi」。

  2. 按一下「Wi-Fi 設定」以開啟詳細設定功能表。

  3. 按一下做為熱點,並依照指示進行操作。

  4. 使用隨後出現的對話方塊中顯示的身分證明連接至遠端機器上的熱點。

26.3.4 NetworkManager 和 VPN

NetworkManager 支援多項虛擬私人網路 (VPN) 技術。對於每種技術,SUSE Linux Enterprise Server 都附帶了可為 NetworkManager 提供一般支援的基礎套件。除此之外,您還需要為 Applet 安裝相應的桌面專屬套件。

OpenVPN

若要使用此 VPN 技術,請安裝:

  • NetworkManager-openvpn

  • NetworkManager-openvpn-gnome

OpenConnect

若要使用此 VPN 技術,請安裝:

  • NetworkManager-openconnect

  • NetworkManager-openconnect-gnome

PPTP (點對點通道通訊協定)

若要使用此 VPN 技術,請安裝:

  • NetworkManager-pptp

  • NetworkManager-pptp-gnome

以下程序介紹如何使用 NetworkManager 將電腦設定為 OpenVPN 用戶端。其他類型的 VPN 的設定方法與此類似。

開始之前,確定套件 NetworkManager-openvpn-gnome 已安裝且所有相依項均已解析。

程序 26.4︰ 使用 NetworkManager 設定 OpenVPN
  1. 按一下面板右側的狀態圖示,然後按一下扳手和螺絲刀圖示,開啟應用程式設定。在視窗全部設定中選擇網路

  2. 按一下 + 圖示。

  3. 依次選取 VPNOpenVPN

  4. 選擇驗證類型。依據 OpenVPN 伺服器的設定,選擇證書 (TLS)藉由證書的密碼 (TLS)

  5. 將必要的值插入相應的文字方塊。範例組態如下所示:

    閘道

    VPN 伺服器的遠端端點

    使用者名稱

    使用者 (僅當選取藉由證書的密碼 (TLS) 時可用)

    密碼

    使用者的密碼 (僅當選取藉由證書的密碼 (TLS) 時可用)

    使用者驗證

    /etc/openvpn/client1.crt

    CA 證書

    /etc/openvpn/ca.crt

    私密金鑰

    /etc/openvpn/client1.key

  6. 按一下新增完成組態。

  7. 若要啟用連接,請在設定應用程式的網路面板中,按一下切換按鈕。或者,按一下面板右側的狀態圖示,然後依次按一下 VPN 的名稱和連接

26.4 NetworkManager 和安全性

NetworkManager 將無線連接分為可信和不可信兩種類型。受信任的連接是過去您明確選取過的任何網路,除此以外的連線都屬於不受信任。受信任的連接以存取點的名稱和 MAC 位址來識別。使用 MAC 位址可確保別的存取點不能使用受信任連接的名稱。

NetworkManager 會定期掃描是否有可用的無線網路。如果找到多個受信任的網路,便自動選取最近使用的那個網路。如果所有網路均不可信,NetworkManager 將等待您做出選擇。

如果加密設定變更,但名稱和 MAC 位址未變,NetworkManager 會嘗試進行連接,但它會先要求您確認新的加密設定並提供所有更新,例如新的金鑰。

如果從使用無線連接切換成離線模式,NetworkManager 會將 SSID 或 ESSID 設為空白。以確保該網路卡斷開連接。

26.4.1 使用者和系統連接

NetworkManager 可識別兩種類型的連接:使用者連接與系統連接。

使用者連接需要在 NetworkManager 中驗證每個使用者,驗證後會將使用者的身分證明儲存在其本地 GNOME 金鑰圈中,因而使用者就不必在每次連接時重新輸入其身分證明。

系統連接自動對所有使用者可用。建立該連接的第一個使用者需輸入所有必要的身分證明,然後,其他所有使用者無需知道身分證明即可擁有存取權。設定的是使用者連接還是系統連接,區別僅在於是否選擇了可供其他使用者使用核取方塊。如需如何使用 NetworkManager 設定使用者連接或系統連接的資訊,請參閱第 26.3 節 「設定網路連接」

26.4.2 儲存密碼和身分證明

如果您不希望每次連接至加密網路時都要重新輸入身分證明,則可以使用 GNOME 鑰匙圈管理員將加密的身分證明儲存在磁碟中,並以主密碼加以保護。

26.4.3 防火牆區域

NetworkManager 中的 firewalld 區域
圖 26.2︰ NetworkManager 中的 firewalld 區域

防火牆區域設定有關允許哪些網路連接的一般規則。若要為有線連接設定 firewalld 的區域,請移至連接設定的身分索引標籤。若要為 WiFi 連接設定 firewalld 的區域,請移至連接設定的安全性索引標籤。

如果您位於家用網路中,請使用 home 區域。如果使用的是公用無線網路,請切換到 public。如果您位於安全的環境中,並想要允許所有連接,請使用 trusted 區域。

如需 firewalld 的詳細資料,請參閱Book “Security and Hardening Guide”, Chapter 23 “Masquerading and firewalls”, Section 23.4 “firewalld

26.5 常見問答集

以下提供了有關使用 NetworkManager 設定特殊網路選項的常見問題。

1. 如何將連接關聯到特定裝置?

依預設,NetworkManager 中的連線是特定於裝置類型的:它們適用於相同類型的所有實體裝置。如果一種連線類型對應多個實體裝置 (例如,您的機器配有兩個乙太網路卡),可以將連線關聯到特定的裝置。

若要在 GNOME 中執行此操作,請先查詢裝置的 MAC 位址 (使用 Applet 中的連接資訊,或者使用 nm-toolwicked show all 等指令行工具的輸出)。然後開啟用於設定網路連接的對話方塊,並選擇要修改的連接。在「有線」或「無線」索引標籤中輸入裝置的「MAC 位址」,並確認您的變更。

2. 在偵測到多個存取點具有相同 ESSID 的的情況下,如何指定特定的存取點?

如果有具有不同無線頻段 (a/b/g/n) 的多個存取點可用,系統預設會自動選擇訊號最強的存取點。要置換此存取點,請在設定無線連接時使用「BSSID」欄位。

基本服務組識別碼 (BSSID) 可唯一識別每個基本服務組。在基礎結構基本服務組中,BSSID 是無線存取點的 MAC 位址。在獨立的 (臨機操作) 基本服務組中,BSSID 是由 46 位元隨機數字產生的本地管理的 MAC 位址。

依照第 26.3 節 「設定網路連接」 中所述啟動用於設定網路連接的對話方塊。選擇要修改的無線連接,然後按一下「編輯」。在「無線」索引標籤中,輸入 BSSID。

3. 如何與其他電腦共用網路連接?

主要裝置 (連接至網際網路的裝置) 不需要任何特殊組態。不過,您需要以如下方式設定連接至本地 Hub 或機器的裝置:

  1. 依照第 26.3 節 「設定網路連接」 中所述啟動用於設定網路連接的對話方塊。選擇要修改的連接,然後按一下「編輯」。切換到 IPv4 設定索引標籤,然後從方法下拉式方塊中,啟用分享給其他電腦。這樣可讓 IP 流量轉遞並會執行裝置上的 DHCP 伺服器。確認您在 NetworkManager 中所做的變更。

  2. 由於 DCHP 伺服器使用連接埠 67,請確定防火牆未封鎖此連接埠:在共用連接的機器上啟動 YaST,然後選取「安全性與使用者 ›  防火牆」。切換到「允許的服務」類別。如果「DCHP 伺服器」尚未顯示為「允許的服務」,則從「要允許的服務」中選取「DCHP 伺服器」,然後按一下「新增」。確認您在 YaST 中所做的變更。

4. 如何使用動態位址 (DHCP、PPP 與 VPN) 提供靜態 DNS 資訊?

如果 DHCP 伺服器提供的 DNS 資訊 (與/或路由) 無效,則可將其置換。依照第 26.3 節 「設定網路連接」 中所述啟動用於設定網路連接的對話方塊。選擇要修改的連接,然後按一下「編輯」。切換到 IPv4 設定索引標籤,然後從方法下拉式方塊中,啟用僅限自動 (DHCP) 位址。在「DNS 伺服器」與「搜尋網域」欄位中輸入 DNS 資訊。若要「忽略自動取得的路由設定」,請按一下「路由」,然後啟用相應的核取方塊。確認您的變更。

5. 如何在使用者登入之前將 NetworkManager 連接到受密碼保護的網路?

定義用於此目的的系統連接。若需更多資訊,請參閱第 26.4.1 節 「使用者和系統連接」

26.6 疑難排解

可能發生連接問題。與 NetworkManager 相關的一些常見問題有:Applet 未啟動或缺少 VPN 選項。解析和預防這些問題的方法會視使用的工具而定。

NetworkManager 桌面 Applet 不啟動

如果設定了 NetworkManager 控制的網路,Applet 會自動啟動。如果 Applet 未啟動,請依第 26.2 節 「啟用或停用 NetworkManager」中所述,檢查 YaST 中是否啟用 NetworkManager。然後,請確定 NetworkManager-gnome 套件亦已安裝。

如果安裝了桌面 Applet,但其由於某些原因並未執行,請使用 nm-applet 指令手動將其啟動。

NetworkManager Applet 未包含 VPN 選項

針對 NetworkManager 的支援、Applet 與適用於 NetworkManager 的 VPN 分佈於獨立套件中。如果您的 NetworkManager Applet 不包含 VPN 選項,請檢查是否安裝了包含 NetworkManager 支援的 VPN 技術套件。如需詳細資訊,請參閱 第 26.3.4 節 「NetworkManager 和 VPN」

沒有可用的網路連接

如果已正確設定網路連接,且網路連接的所有其他元件 (路由器等)也均已設定並正在執行中,有時需要重新啟動電腦的網路介面。若要執行此操作,請以 root 身分登入指令行並執行 systemctl restart wicked

26.7 更多資訊

您可以在下列網站和目錄中找到有關 NetworkManager 的詳細資訊:

NetworkManager 專案頁面

https://gitlab.freedesktop.org/NetworkManager/NetworkManager

套件文件

另請參閱下列目錄中有關 NetworkManager 和 GNOME Applet 的最新資訊:

  • /usr/share/doc/packages/NetworkManager/,

  • /usr/share/doc/packages/NetworkManager-gnome/

27 電源管理

IBM Z IBM Z 上不提供本章所述的功能和硬體,因此本章內容與這些平台不相關。

電源管理對筆記型電腦十分重要,對其他系統也很有用。ACPI (Advanced Configuration and Power Interface,進階組態和電源介面) 可以在所有現代電腦 (筆記型電腦、桌上型電腦和伺服器) 上使用。電源管理技術需要配備合適的硬體與 BIOS 常式。大多數筆記型電腦和許多新式的桌上型電腦及伺服器都符合這些需求。此技術還可以控制 CPU 頻率比例,這有助於省電及降低噪音。

27.1 省電功能

省電功能不僅對於筆記型電腦的行動用途很重要,對於桌上型系統也很重要。主要功能以及在 ACPI 中的用途包括:

待命

不支援。

暫停 (於記憶體)

此模式會將整個系統狀態寫入 RAM 中。接著,除了 RAM 以外,整個系統都會進入睡眠狀態。在此狀態中,電腦所使用的電源極少。此狀態的好處是可以在幾秒內將工作復原到暫停之前的狀態,而不用開機或重新啟動應用程式。此功能等同於 ACPI 狀態 S3

休眠 (暫停寫入到磁碟)

在此操作模式,會將整個系統狀態寫入硬碟,然後關閉系統。至少要有與 RAM 一樣大的交換分割區,才能寫入所有作用中資料。要從此狀況重新啟用需耗時 30 到 90 秒。還原時會回到暫停前的狀態。有些廠商會為此模式提供有用的混合功能,例如 IBM Thinkpad 中的 RediSafe。對應的 ACPI 狀態為 S4。在 Linux 中,暫停寫入到磁碟是由獨立於 ACPI 之外的核心常式來執行。

注意
注意:透過 mkswap 格式化時變更了交換分割區的 UUID

如果可能,請勿使用 mkswap 重新格式化現有的交換分割區。否則,使用 mkswap 重新格式化將變更交換分割區的 UUID 值。請透過 YaST 重新格式化 (如此將更新 /etc/fstab),或者手動調整 /etc/fstab

電池監控

ACPI 會檢查電池充電狀態並提供相關資訊。此外,ACPI 會在電力到達某個關鍵狀態時,協調要執行的動作。

自動關閉電源

關機後,電腦會關閉電源。此功能很重要,尤其是在電池用盡前所執行的自動關機。

處理器速度控制

與 CPU 連結時有三種方式可節省電源:頻率和電壓比例 (也稱為 PowerNow! Speedstep)、調節,以及讓處理器進入睡眠狀態 (C 狀態)。依據電腦的操作模式,也可以合併這些操作方法。

27.2 進階組態和電源介面 (ACPI)

ACPI 主要用於讓作業系統設定和控制個別的硬體元件。ACPI 取代了「電源管理隨插即用 (PnP)」與「進階電源管理 (APM)」。它能提供一些資訊,包括電池、交流電轉接器、溫度、風扇以及關閉蓋子電池電力不足等系統事件。

BIOS 會提供一些表格,內含關於個別元件與硬體的存取方法等資訊。作業系統會使用這此資訊來執行任務,像是指定中斷或啟用和停用元件。因為作業系統將執行 BIOS 中儲存的指令,所以功能取決於 BIOS 實作。journald 中報告了 ACPI 能偵測和載入的表格。如需有關檢視這些日誌記錄訊息的詳細資訊,請參閱第 17 章 「journalctl:查詢 systemd 日誌。請參閱第 27.2.2 節 「疑難排解」,以取得更多有關 ACPI 問題疑難排解的資訊。

27.2.1 控制 CPU 效能

CPU 可以使用三種方式省電:

  • 頻率和電壓比例

  • 調節時鐘頻率 (T 狀態)

  • 使處理器進入睡眠狀態 (C 狀態)

依據電腦的操作模式的不同,這些方法可合併使用。省電也表示能降低系統溫度,減低風扇的使用頻率。

頻率比例及調節只在處理器忙碌時使用,因為在處理器閒置時,必定會套用最經濟的 C 狀態。如果 CPU 正忙碌,頻率比例是建議的省電方法。通常處理器僅有部份的工作負載。在此情況中,可以使用較低的頻率。通常,最佳方法是使用依核心需求調節器來控制動態頻率比例。

調節應做最後手段使用,例如,在高度系統負載下仍要延伸電池操作時間時。不過在調節過多時,有些系統無法運作順暢。此外,當 CPU 要做的事不多時,調節 CPU 是無意義的動作。

如需更多資訊,請參閱Book “System Analysis and Tuning Guide”, Chapter 12 “Power management”

27.2.2 疑難排解

共有兩種不同類型的問題。一方面是核心的 ACPI 程式碼包含無法及時偵測到的錯誤。在這種情況中,將會有可供下載的解決方案。問題通常是因 BIOS 而起。有時,會刻意在 BIOS 中整合與 ACPI 規格不符的技術,以避免在其他常見作業系統中出現 ACPI 實作錯誤。會在黑名單中將那些在 ACPI 實行中有重大錯誤的硬體元件記錄下來,以避免 Linux 核心對這些元件使用 ACPI。

發生問題時要做的第一件事是更新 BIOS。若電腦未開機,以下其中一個開機參數可能有用:

pci=noacpi

不使用 ACPI 來設定 PCI 裝置。

acpi=ht

僅執行一個簡單的資源組態。不將 ACPI 用於其他目的。

acpi=off

關閉 ACPI。

警告
警告:不使用 ACPI 開機會出現問題

有些較新的機器 (尤其是 SMP 系統及 AMD64 系統) 需透過 ACPI 以正確設定硬體。關閉這些機器的 ACPI 會發生隨之而來的問題。

有時,透過 USB 或 FireWire 連接的硬體會另機器混淆。如果機器拒絕開機,則拔除所有不需要的硬體插頭,並再試一次。

開機後,可使用 dmesg -T | grep -2i acpi 指令來監控系統的開機訊息 (或所有訊息,因為也可能是 ACPI 以外的因素所導致的問題)。如果在分析 ACPI 表格時發生問題,可以將最重要的表格 DSDT (Differentiated System Description Table,區分系統描述表) 替換為改良版本。在此情況中,會忽略 BIOS 的錯誤 DSDT。程序在 第 27.4 節 「疑難排解」 中描述。

在核心組態中,有個啟用 ACPI 除錯訊息的切換。如果具有 ACPI 除錯功能的核心已編譯並安裝,則會發出詳細資訊。

如果您曾遇到 BIOS 問題或硬體問題,建議您聯絡廠商。尤其是哪些一直未提供 Linux 支援的廠商,更應該出面解決這些問題。唯有讓廠商得知他們有不少使用 Linux 的客戶,他們才會嚴肅地處理這些問題。

27.2.2.1 更多資訊

27.3 硬碟的休眠

在 Linux 中,可在不需使用硬碟時,讓硬碟完全進入睡眠狀態,或是讓硬碟以更省電、更安靜的方式來運作。在目前的筆記型電腦中,您不用手動關閉硬碟,因為它們會在不用的時候自動進入省電操作模式。不過,如果您想最大限度地省電,可以使用 hdparm 指令嘗試下面的幾種方法。

該指令能修改各種硬碟設定。-y 選項能立即將硬碟切換到待命模式。-Y 會使其進入睡眠狀態。hdparm -S X 會使硬碟在閒置一段時間後執行速度減慢。使用以下值取代 X0 表示停用此機制,會使硬碟持續執行。1240 的值將乘以 5 秒。241251 的值則是以 30 分鐘為一個單位,依序從 30 分鐘的閒置到 11 倍的 330 分鐘的閒置。

可以使用 -B 選項來控制硬碟內部的省電選項。可從 0255 中選取一個值,以最大化省電效果或最大化電力輸出。其結果視硬碟用途而定,難以評估。如果要減少硬碟噪音,請使用 -M 選項。從 128254 中選取一個值,以決定要安靜或快速。

通常,要讓硬碟進入睡眠不是件容易的事。在 Linux 中,會有多個程序寫入硬碟中,因而重複喚醒硬碟。因此,有必要去瞭解 Linux 如何處理那些要寫入硬碟的資料首先,會將所有資料在 RAM 中做緩衝處理。pdflush 精靈會監控此緩衝區。當資料到達特定的時間限制,或當緩衝區已填滿至某一程度時,會將緩衝區的內容注入硬碟。緩衝區的大小則動態地由記憶體地的大小及系統負載來決定。依預設,pdflush 會設成較短的間隔,以最大化資料的完整性。pdflush 每 5 秒檢查一次緩衝區,並將資料寫入硬碟。以下變數較為重要:

/proc/sys/vm/dirty_writeback_centisecs

包含 pdflush 執行緒喚醒前的延遲時間 (以百分之一秒為單位)。

/proc/sys/vm/dirty_expire_centisecs

定義一個時間框架,最遲應在該時間框架之後寫入改動分頁。預設值為 3000,即 30 秒。

/proc/sys/vm/dirty_background_ratio

pdflush 開始寫入改動分頁之前改動分頁的最大百分比。預設值為 5%。

/proc/sys/vm/dirty_ratio

當改動分頁超出總記憶體的此百分比後,將強制程序在其時間間隔期間寫入未寫入緩衝區,而不是繼續寫入。

警告
警告:資料完整性風險

pdflush 精靈設定進行變更可能會損害資料完整性。

除了這些程序之外,BtrfsExt3Ext4 日誌記錄檔案系統及其他檔案系統不經由 pdflush 便將中繼資料寫入硬碟,也會使得硬碟無法減速。

另一個重要因素在於啟動程式的行為方式。例如,好的編輯器會定期為修改中的檔案,將隱藏備份檔寫入硬碟,因而喚醒硬碟。停用這類功能可能會傷害資料的完整性。

在這一點上,postfix 郵件精靈會使用 POSTFIX_LAPTOP 變數。如果將此變數設為 yes,postfix 會減少存取硬碟的頻率。

27.4 疑難排解

所有錯誤訊息和警示均記錄在系統日誌中,您可使用 journalctl 指令來查詢該日誌 (如需詳細資訊,請參閱第 17 章 「journalctl:查詢 systemd 日誌)。下列幾節涵蓋了一些最常見的問題。

27.4.1 CPU 頻率功能不運作

請參閱核心來源以瞭解您的處理器是否受支援。您需要特殊核心模組或模組選項以啟用 CPU 頻率控制。如果 kernel-source 套件已安裝,則此資訊可在 /usr/src/linux/Documentation/cpu-freq/* 中找到。

28 持續性記憶體

本章包含關於使用裝備非揮發性主記憶體的 SUSE Linux Enterprise 的額外資訊。此類記憶體稱做持續性記憶體,由一或多個 NVDIMM 構成。

28.1 簡介

永續性記憶體是一種新型電腦儲存,其速度接近動態 RAM (DRAM),但同時具備 RAM 的逐位元組定址能力,以及固態硬碟 (SSD) 的效能。

SUSE 目前支援在採用 AMD64/Intel 64 和 POWER 架構的機器上,對 SUSE Linux Enterprise Server 使用持續性記憶體。

與傳統的 RAM 一樣,持續性記憶體直接安裝在主機板上的記憶體插槽中。因此,它的實體板型規格與 RAM 相同,以 DIMM 的形式提供。這些記憶體稱做 NVDIMM:非揮發性雙列直插式記憶體模組。

不過,與 RAM 不同,持續性記憶體在多個方面類似於快閃記憶體式 SSD。後兩者採用固態記憶體電路形式,但除此之外,兩者都提供非揮發性儲存:系統斷電或者重新啟動後,記憶體中的內容會得到保留。使用這兩種媒體時,寫入資料的速度比讀取資料要慢;兩者都支援有限的重新寫入週期數。最後,與 SSD 一樣,如果在特定的應用方案中,更適合對持續性記憶體進行磁區層級的存取,則也可以這樣做。

不同的型號使用不同形式的電子儲存媒體 (例如 Intel 3D XPoint),或者將 NAND 快閃記憶體與 DRAM 結合使用。另外,業界正在開發新式的非揮發性 RAM。這意味著,不同的廠商和 NVDIMM 型號會提供不同的效能與持久性特徵。

由於涉及的儲存技術處於早期開發階段,不同廠商的硬體可能存在不同的限制。因此,以下陳述適用於一般性場景。

持續性記憶體的速度最多比 DRAM 要慢 10 倍,但比快閃記憶體要快大約 1000 倍。可在其中逐位元組重新寫入資料,而不像在快閃記憶體中一樣,需要抹除整個磁區,然後重新寫入資料。最後,儘管重新寫入週期數有限,但大部分形式的持續性記憶體可以處理數百萬次重新寫入,相比之下,快閃記憶體只能處理數千個週期。

這會產生兩種重要結果:

  • 使用最新技術無法執行僅包含持續性記憶體的系統,因此無法實現完全非揮發性的主記憶體。必須混合使用傳統的 RAM 和 NVDIMM。作業系統和應用程式將在傳統 RAM 中執行,而 NVDIMM 則可當成速度極快的輔助儲存。

  • 由於不同廠商的持續性記憶體效能特徵不同,程式設計師可能需要考慮到特定伺服器中 NVDIMM 的硬體規格,包括 NVDIMM 的數目,以及它們可以裝入哪些記憶體插槽。顯然,這會對監管程式的使用、不同主機之間的軟體移轉等造成影響。

ACPI 標準版本 6 中定義了此新式儲存子系統。但是,libnvdimm 支援該標準頒佈之前的 NVDIMM,這些記憶體的使用方式相同。

28.2 詞彙

區域

區域是持續性記憶體中可劃分為一或多個名稱空間的區塊。如果不事先將某個區域配置到名稱空間,則您無法存取該區域的持續性記憶體。

名稱空間

非揮發性儲存的單個連續定址範圍,相當於 NVM Express SSD 的名稱空間,或 SCSI 邏輯單位 (LUN)。名稱空間做為獨立區塊裝置顯示在伺服器的 /dev 目錄中。根據所需的存取方法,名稱空間可將多個 NVDIMM 中的儲存合併成較大磁碟區,或者允許將這些儲存分割成較小的磁碟區。

模式

每個名稱空間還具有一種模式,該模式定義要為該名稱空間啟用哪些 NVDIMM 功能。同一父區域的旁支名稱空間一律具有相同的類型,但可將其設定為使用不同的模式。名稱空間模式包括:

devdax

裝置 DAX 模式。建立單字元裝置檔案 (/dev/daxX.Y ).需要建立檔案系統。

fsdax

檔案系統 DAX 模式。如果未指定其他模式,則使用預設值。建立區塊裝置 (/dev/pmemX [.Y]),支援將 DAX 用於 ext4XFS

磁區

適用於不執行中繼資料檢查總數計算的傳統檔案系統。適用於小型開機磁碟區。與其他作業系統相容。

raw

不包含標籤或中繼資料的記憶體磁碟。不支援 DAX。與其他作業系統相容。

注意
注意

SUSE 不支援 raw 模式。無法在 raw 名稱空間中掛接檔案系統。

類型

每個名稱空間和區域都有一種類型,該類型定義如何存取與該名稱空間或區域關聯的持續性記憶體。名稱空間的類型永遠與其父區域的類型相同。有兩種不同的類型:「永續性記憶體」(可使用兩種不同的方式進行設定),以及已廢棄的「區塊模式」。

持續性記憶體 (PMEM)

與 RAM 一樣,PMEM 儲存提供位元組層級的存取。使用 PMEM 時,單個名稱空間可以包含多個交錯式 NVDIMM,使這些 NVDIMM 均可用做單個裝置。

可使用兩種方式來設定 PMEM 名稱空間。

將 PMEM 與 DAX 搭配使用

為 Direct Access (DAX) 設定 PMEM 名稱空間後,存取記憶體時會繞過核心的頁面快取,直接進入媒體。軟體可以分別直接讀取或寫入該名稱空間的每個位元組。

使用區塊轉換表 (BTT) 的 PMEM

與在傳統磁碟機中一樣,將依磁區存取設定為以 BTT 模式執行的 PMEM 名稱空間,而不是像在 RAM 中一樣,採用位元組定址模式。某個轉譯表機制會將存取活動批次處理成磁區大小的單元。

BTT 的優點是具有資料保護功能。該儲存子系統可確保完全寫入基礎媒體的每個磁區。如果無法完全寫入某個磁區 (即,如果寫入操作由於某個原因失敗),整個磁區將會復原到其先前的狀態。因此,無法在給定的磁區中進行部分寫入。

此外,核心會快取對 BTT 名稱空間的存取。

缺點在於,BTT 名稱空間不支援 DAX。

區塊模式 (BLK)

區塊模式儲存將每個 NVDIMM 做為獨立的裝置進行定址。此模式已遭廢棄,且不再受支援。

devdax 名稱空間以外,其他所有類型也必須使用檔案系統格式化,如同使用傳統驅動器一樣。SUSE Linux Enterprise Server 支援將 ext2ext4XFS 檔案系統用於此目的。

直接存取 (DAX)

DAX 允許將永續性記憶體直接對應成程序的位址空間 (例如,使用 mmap 系統呼叫進行對應)。

DIMM 實體位址 (DPA)

在單個 DIMM 的記憶體中用做偏移量的記憶體位址;也就是說,在該 DIMM 中用做最低可定址位元組的從零開始的位址。

標籤

儲存在 NVDIMM 中的中繼資料,例如名稱空間定義。可以使用 DSM 存取這些資料。

裝置特定的方法 (DSM)

用於存取 NVDIMM 中韌體的 ACPI 方法。

28.3 使用案例

28.3.1 將 PMEM 與 DAX 搭配使用

必須注意,這種記憶體存取方式不是交易性的。如果發生斷電或其他系統故障,資料可能不會完全寫入儲存。僅當應用程式可以處理部分寫入資料的情況時,PMEM 儲存才適用。

28.3.1.1 可受益於較大位元組可定址儲存容量的應用程式

如果伺服器代管的某個應用程式可逐位元組直接使用較大的快速儲存容量,則程式設計師可以使用 mmap 系統呼叫,將持續性記憶體區塊直接放入該應用程式的位址空間,而無需使用任何額外的系統 RAM。

28.3.1.2 避免使用核心頁面快取

如果您想要節省用於頁面快取的 RAM,而不希望將 RAM 配置給應用程式,請避免使用核心頁面快取。例如,可以專門使用非揮發性記憶體來儲存虛擬機器 (VM) 影像。由於這些影像不會快取,因此可以減少主機上的快取使用量,從而可在每部主機上設定更多的 VM。

28.3.2 將 PMEM 與 BTT 搭配使用

當您想要使用一組 NVDIMM 中的持續性記憶體做為類似磁碟的極速儲存池時,此方法非常有用。例如,將檔案系統日誌置於使用 BTT 的 PMEM 上,可以提升在發生電源中斷或其他突發性中斷情況後所執行檔案系統復原的可靠性 (請參閱第 28.5.3 節 「建立使用 BTT 的 PMEM 名稱空間」)。

對於應用程式而言,此類裝置僅顯示為極速 SSD,並可像其他任何儲存裝置一樣供您使用。例如,LVM 可以排佈在永續性記憶體的頂層,如往常一樣正常運作。

BTT 的優點在於可以保證磁區寫入的不可部分完成性,因此,即使是依存於資料完整性的複雜應用程式也能保持正常運作。可透過標準的錯誤報告通道來執行媒體錯誤報告。

28.4 用於管理持續性記憶體的工具

若要管理持續性記憶體,必須安裝 ndctl 套件。安裝此套件也會安裝 libndctl 套件,後者提供一組使用者空間庫來設定 NVDIMM。

這些工具透過 libnvdimm 庫執行。該庫支援三種類型的 NVDIMM:

  • PMEM

  • BLK

  • 同步 PMEM 和 BLK。

ndctl 公用程式提供一系列有用的 man 頁面。可使用以下指令存取這些頁面:

tux > ndctl help subcommand

若要查看可用子指令的清單,請使用:

tux > ndctl --list-cmds

可用的子指令包括:

version

顯示 NVDIMM 支援工具的目前版本。

enable-namespace

使指定的名稱空間可供使用。

disable-namespace

防止使用指定的名稱空間。

create-namespace

從指定的儲存裝置建立新名稱空間。

destroy-namespace

移除指定的名稱空間。

enable-region

使指定的區域可供使用。

disable-region

防止使用指定的區域。

zero-labels

抹除裝置中的中繼資料。

read-labels

取回指定裝置的中繼資料。

list

顯示可用的裝置。

help

顯示關於工具用法的資訊。

28.5 設定持續性記憶體

28.5.1 檢視可用的 NVDIMM 儲存

可以使用 ndctl list 指令列出系統中所有可用的 NVDIMM。

在以下範例中,系統包含三個 NVDIMM,這些 NVDIMM 位於單個三通道交錯集內。

root # ndctl list --dimms

[
 {
  "dev":"nmem2",
  "id":"8089-00-0000-12325476"
 },
 {
  "dev":"nmem1",
  "id":"8089-00-0000-11325476"
 },
 {
  "dev":"nmem0",
  "id":"8089-00-0000-10325476"
 }
]

結合不同的參數執行 ndctl list 還可以列出可用的區域。

注意
注意

區域可能不按數字順序顯示。

請注意,儘管只有三個 NVDIMM,但它們卻顯示為四個區域。

root # ndctl list --regions

[
 {
  "dev":"region1",
  "size":68182605824,
  "available_size":68182605824,
  "type":"blk"
 },
 {
  "dev":"region3",
  "size":202937204736,
  "available_size":202937204736,
  "type":"pmem",
  "iset_id":5903239628671731251
  },
  {
   "dev":"region0",
   "size":68182605824,
   "available_size":68182605824,
   "type":"blk"
  },
  {
   "dev":"region2",
   "size":68182605824,
   "available_size":68182605824,
   "type":"blk"
  }
]

空間以兩種不同的形式顯示:三個 BLK 類型的獨立 64 GB 區域,或者一個 PMEM 類型的合併 189 GB 區域,後者將三個交錯式 NVDIMM 中的所有空間表示為單個磁碟區。

請注意,available_size 的顯示值與 size 的顯示值相同。這意味著尚未配置任何空間。

28.5.2 將儲存設定為使用 DAX 的單個 PMEM 名稱空間

第一個範例將三個 NVDIMM 設定為使用 Direct Access (DAX) 的單個 PMEM 名稱空間。

第一個步驟是建立新的名稱空間。

root # ndctl create-namespace --type=pmem --mode=fsdax --map=memory
{
 "dev":"namespace3.0",
 "mode":"memory",
 "size":199764213760,
 "uuid":"dc8ebb84-c564-4248-9e8d-e18543c39b69",
 "blockdev":"pmem3"
}

如此會建立支援 DAX 的區塊裝置 /dev/pmem3。裝置名稱中的 3 承襲自父區域號碼 (在本例中為 region3)。

--map=memory 選項從 NVDIMM 中設定出一部分 PMEM 儲存空間,以便可以使用這些空間來配置內部核心資料結構 (稱做結構頁面)。如此即可將新的 PMEM 名稱空間與 O_DIRECT I/ORDMA 等功能搭配使用。

最終 PMEM 名稱空間的容量之所以小於父 PMEM 區域,是因為有一部分持續性記憶體保留給了核心資料結構。

接下來,我們驗證新的區塊裝置是否可用於作業系統:

root # fdisk -l /dev/pmem3
Disk /dev/pmem3: 186 GiB, 199764213760 bytes, 390164480 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

與其他任何磁碟機一樣,在使用該裝置之前,必須先將其格式化。在此範例中,我們使用 XFS 將其格式化:

root # mkfs.xfs /dev/pmem3
meta-data=/dev/pmem3      isize=256    agcount=4, agsize=12192640 blks
         =                sectsz=4096  attr=2, projid32bit=1
         =                crc=0        finobt=0, sparse=0
data     =                bsize=4096   blocks=48770560, imaxpct=25
         =                sunit=0      swidth=0 blks
naming   =version 2       bsize=4096   ascii-ci=0 ftype=1
log      =internal log    bsize=4096   blocks=23813, version=2
         =                sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none            extsz=4096   blocks=0, rtextents=0

接下來,可將新的磁碟機掛接到某個目錄:

root # mount -o dax /dev/pmem3 /mnt/pmem3

然後,可以驗證是否得到了一個支援 DAX 的裝置:

root # mount | grep dax
/dev/pmem3 on /mnt/pmem3 type xfs (rw,relatime,attr2,dax,inode64,noquota)

結果是,我們已得到一個使用 XFS 檔案系統格式化的,且掛接有 DAX 的 PMEM 名稱空間。

對該檔案系統中的檔案進行任何 mmap() 呼叫,都會傳回直接對應至 NVDIMM 上的持續性記憶體的虛擬位址,並且會完全繞過頁面快取。

對該檔案系統中的檔案進行任何 fsyncmsync 呼叫仍可確定將修改後的資料完全寫入 NVDIMM。這些呼叫會衝洗透過 mmap 對應在使用者空間中修改的任何頁面的關聯處理器快取行。

28.5.2.1 移除名稱空間

在建立使用相同儲存的其他任何磁碟區類型之前,我們必須卸載此 PMEM 磁碟區,然後將其移除。

首先卸載該磁碟區:

root # umount /mnt/pmem3

然後停用名稱空間。

root # ndctl disable-namespace namespace3.0
disabled 1 namespace

然後刪除該磁碟區:

root # ndctl destroy-namespace namespace3.0
destroyed 1 namespace

28.5.3 建立使用 BTT 的 PMEM 名稱空間

BTT 提供不可部分完成性磁區寫入,因此,當您需要資料保護 (例如,為 Ext4 和 XFS 日誌提供資料保護) 時,BTT 會是個不錯的選擇。如果發生電源失敗,日誌將受到保護且可復原。以下範例展示如何建立使用 BTT 的磁區模式 PMEM 名稱空間,以及如何將檔案系統日誌置於此名稱空間。

root # ndctl create-namespace --type=pmem --mode=sector
{
 "dev":"namespace3.0",
 "mode":"sector",
 "uuid":"51ab652d-7f20-44ea-b51d-5670454f8b9b",
 "sector_size":4096,
 "blockdev":"pmem3s"
}

接下來,驗證新裝置是否存在:

root # fdisk -l /dev/pmem3s
Disk /dev/pmem3s: 188.8 GiB, 202738135040 bytes, 49496615 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes

與前面設定的支援 DAX 的 PMEM 名稱空間一樣,這個支援 BTT 的 PMEM 名稱空間也會佔用 NVDIMM 中的所有可用儲存。

注意
注意

裝置名稱 (/dev/pmem3s) 中的後置 s 表示磁區 (sector),可用於輕鬆辨別設定為使用 BTT 的名稱空間。

可依前一範例中所述格式化和掛接磁碟區。

這裡顯示的 PMEM 名稱空間不能使用 DAX。它會使用 BTT 來提供磁區寫入不可部分完成性。每次透過 PMEM 區塊驅動程式進行磁區寫入時,BTT 都會配置一個新的磁區來接收新資料。完全寫入新資料後,BTT 將以不可部分完成性的方式更新其內部對應結構,使新寫入的資料可供應用程式使用。如果在此過程中的任意時點發生電源故障,則寫入內容將會完全遺失,在這種情況下,應用程式可以存取其舊資料,而這些資料仍舊保持不變。如此可以防止出現所謂「磁區撕裂」的情況。

與其他任何標準區塊裝置一樣,可以使用某種檔案系統格式化這個支援 BTT 的 PMEM 名稱空間,並在該檔案系統中使用它。無法將該名稱空間與 DAX 搭配使用。但是,此區塊裝置中檔案的 mmap 對應會使用頁面快取。

28.5.4 將檔案系統日誌置於 PMEM/BTT 上

當您將檔案系統日誌置於一部獨立的裝置上時,該裝置使用的檔案系統區塊大小必須與該檔案系統相同。此大小很有可能是 4096,您可以使用以下指令尋找區塊大小:

root # blockdev --getbsz /dev/sda3

下面的範例會在獨立的 NVDIMM 裝置上建立新的 Ext4 日誌,並在 SATA 裝置上建立檔案系統,然後將新檔案系統關聯到該日誌:

root # mke2fs -b 4096 -O journal_dev /dev/pmem3s
root # mkfs.ext4 -J device=/dev/pmem3s /dev/sda3

下面的範例會在 SATA 磁碟機上建立新的 XFS 檔案系統,並在一部獨立的 NVDIMM 裝置上建立日誌:

root # mkfs.xfs -l logdev=/dev/pmem3s  /dev/sda3

如需選項的詳細資訊,請參閱 man 8 mkfs.ext4man 8 mkfs.ext4

28.6 更多資訊

以下清單中提供了更多關於此主題的資訊:

  • 永續性記憶體 Wiki

    包含關於設定 NVDIMM 系統的指示、關於測試的資訊,以及關於啟用 NVDIMM 的規格連結。隨著 Linux 中 NVDIMM 支援功能的不斷發展,此網站的內容也會不斷擴充。

  • 持續性記憶體程式設計

    關於在 Linux 和其他作業系統中設定、使用非揮發性記憶體,以及對使用此類記憶體的系統進行程式設計的資訊。其中介紹了 NVM 庫 (NVML)。該庫旨在提供有用的 API,以便在使用者空間中進行持續性記憶體程式設計。

  • LIBNVDIMM:非揮發性裝置

    此文件面向核心開發人員,包含在目前 Linux 核心樹狀結構的「文件」資料夾中。其中探討了涉及啟用 NVDIMM 的不同核心模組,列出了關於核心實作的一些技術詳細資料,並介紹了 ndctl 工具使用的 sysfs 核心介面。

  • GitHub:pmem/ndctl

    用於管理 Linux 核心中 libnvdimm 子系統的公用程式庫。此外還包含使用者空間庫,以及單元測試和文件。

第 IV 部分 服務

  • 29 使用 YaST 進行服務管理
  • YaST 提供了一個服務管理員,用於控制預設系統目標和服務、顯示服務狀態,以及讀取記錄檔案。在 SUSE Linux Enterprise Server 15 SP3 中,YaST 支援 Systemd 基於通訊端的服務啟用,此操作會將服務設定為依需求啟動。

  • 30 使用 NTP 同步時間
  • NTP (網路時間協定) 機制是一種協定,用於同步化網路上的系統時間。首先,機器可以從提供可靠時間來源的伺服器取得時間。其次,機器本身在網路中可以做為其他電腦的時間來源。這個目標是雙重的 — 即維護絕對正確的時間,並同步化網路內所有機器的系統時間。

  • 31 網域名稱系統
  • 必須使用 DNS (網域名稱系統) 將網域和主機名稱解析為 IP 位址。例如,藉由這種方式,會給主機名稱 jupiter 指定 IP 位址 192.168.2.100。在設定您自己的名稱伺服器前,請參閱第 19.3 節 「名稱解析」 中有關 DNS 的一般資訊。以下組態範例使用預設 DNS 伺服器 - BIND。

  • 32 DHCP
  • 動態主機組態通訊協定 (DHCP) 的用途是從伺服器集中指定網路設定,這樣就不必在每一個工作站本地分別設定。設定要使用 DHCP 的主機對於自己的靜態位址並沒有控制權。它可以根據伺服器的指示完全且自動地設定自己本身。如果您在用戶端使用 NetworkManager,則不必設定用戶端。這在環境多變、而且一次只使用一個介面的情況下非常有用。絕對不要在執行 DHCP 伺服器的機器上使用 NetworkManager。

  • 33 SLP
  • 要想設定網路用戶端,需要深入瞭解透過網路提供的服務 (例如列印或 LDAP)。為了簡化在網路用戶端上對此類服務的設定,「服務位置通訊協定」 (SLP) 應運而生。SLP 可讓區域網路中的所有用戶端都知道選定服務的可用性和組態資料。支援 SLP 的應用程式可以使用此資訊,以便自動設定。

  • 34 Apache HTTP 伺服器
  • 根據 http://www.netcraft.com/ 的調查表明,Apache HTTP 伺服器 (Apache) 是世界上使用最廣泛的 Web 伺服器。它由 Apache 軟體基金會 (http://www.apache.org/) 研發,可在大部分作業系統上使用。SUSE® Linux Enterprise Server 隨附 Apache 2.4 版本。本章將介紹如何安裝、組態設定與設定 Web 伺服器,如何使用 SSL、CGI 與其他模組,以及如何排解 Apache 疑難。

  • 35 使用 YaST 設定 FTP 伺服器
  • 使用 YaST 的「FTP 伺服器」模組,可以將機器設定為 FTP (檔案傳輸通訊協定) 伺服器。匿名和/或驗證使用者可以連接至您的機器並使用 FTP 通訊協定下載檔案,還可以將檔案上載至 FTP 伺服器 (視組態而定)。YaST 使用 vsftpd (非常安全的 FTP 精靈)。

  • 36 Squid 快取代理伺服器
  • Squid 是廣泛用於 Linux 和 UNIX 平台的快取代理伺服器。這表示它會將要求的網際網路物件 (例如網頁伺服器或 FTP 伺服器上的資料),儲存在比伺服器更接近要求工作站的機器上。您可設定多階層,以確保即使在對終端使用者而言透明的模式下,也能達到最佳的回應速度和較低的頻寬使用量。

  • 37 透過 SFCB 實作的網路企業管理

29 使用 YaST 進行服務管理

YaST 提供了一個服務管理員,用於控制預設系統目標和服務、顯示服務狀態,以及讀取記錄檔案。在 SUSE Linux Enterprise Server 15 SP3 中,YaST 支援 Systemd 基於通訊端的服務啟用,此操作會將服務設定為依需求啟動。

Systemd 支援使用基於通訊端的啟用來啟動服務,適用於依需求啟動服務。這些服務有兩種單位類型:服務和通訊端。例如,CUPS 由 cups.servicecups.socket 控制。YaST 允許您選取要使用的服務啟動類型。

圖形 29.1 「YaST 服務管理員」顯示了「啟動模式」下拉式功能表中的選項:開機時依需求手動。對於基於通訊端的啟用,請選取依需求。如此會開啟一個監聽網路通訊端,並在收到要求時啟動服務。

YaST 服務管理員
圖 29.1︰ YaST 服務管理員

依需求選項只會對支援它的服務可見。目前只有少量服務支援此選項,如 CUPS、dbus、iscsid、iscsiuio、multipathd、pcscd、rpcbind、tftp、virtlockd、virtlogd。如需通訊端啟用工作原理的詳細資訊,請參閱 man 5 systemd.socket

30 使用 NTP 同步時間

NTP (網路時間協定) 機制是一種協定,用於同步化網路上的系統時間。首先,機器可以從提供可靠時間來源的伺服器取得時間。其次,機器本身在網路中可以做為其他電腦的時間來源。這個目標是雙重的 — 即維護絕對正確的時間,並同步化網路內所有機器的系統時間。

維謢精準的系統時間對於許多情況都非重要。內建的硬體時鐘通常無法符合資料庫或叢集等應用程式的要求。手動校正系統時間有可能會造成嚴重的問題,因為,例如時間倒退將可能造成重要應用程式無法正常運作。在網路中,通常需要同步所有機器中的系統時間,而手動調整時間的做法並不可取。NTP 提供了一種用於解決這些問題的機制。NTP 服務會依據網路中可靠的時間伺服器持續調整系統時間。它可以進一步管理本地參考的時鐘,例如收音機控制的時鐘。

SUSE Linux Enterprise Server 15 起,採用 chrony 做為 NTP 的預設實作。chrony 包含兩個部分:chronyd 精靈可在開機時啟動,chronyc 指令行介面程式用於監控 chronyd 的效能,以及在執行時期變更各種操作參數。

SUSE Linux Enterprise Server 15.2 開始,如果不是設定為以精靈的形式執行,適用於 NTP 用戶端組態的 YaST 模組會設定 systemd-timer 而不是 cron 精靈來執行 chrony

30.1 使用 YaST 設定 NTP 用戶端

chrony 套件中隨附的 NTP 精靈 (chronyd) 預先設定為使用本地電腦硬體時鐘做為時間參考。硬體時鐘的精確度極大程度上取決於它的時間來源。例如,原子鐘或 GPS 接收器是非常精確的時間來源,而通用的 RTC 晶片則不是可靠的時間來源。YaST 簡化了 NTP 用戶端的組態。

在 YaST NTP 用戶端組態 (網路服務 › NTP 組態) 視窗中,您可以指定啟動 NTP 精靈的時間、組態來源的類型,以及新增自訂的時間伺服器。

NTP 組態視窗
圖 30.1︰ NTP 組態視窗

30.1.1 NTP 精靈啟動

您可以從下面三個選項中選擇啟動 NTP 精靈的時間:

僅手動

如果您想手動啟動 chrony 精靈,請選取僅手動

同步但不啟動精靈

選取同步但不啟動精靈可定期設定系統時間,而不會永久執行 chrony。您可以設定同步時間間隔(分鐘)

現在和開機時

選取現在和開機時可在系統開機時自動啟動 chronyd。建議您使用此設定。

30.1.2 組態來源的類型

組態來源下拉式方塊中,選取動態靜態。如果伺服器只使用固定的一組 (公用) NTP 伺服器,請設定靜態;如果您的內部網路透過 DHCP 提供 NTP 伺服器,則使用靜態更合適。

30.1.3 設定時間伺服器

供用戶端查詢的時間伺服器列在 NTP 組態視窗的下半部分。修改清單時,可依需要使用「新增」、「編輯」以及「刪除」。

按一下新增可新增新的時間伺服器:

新增時間伺服器
圖 30.2︰ 新增時間伺服器
  1. 位址欄位中,輸入要與機器時間同步的時間伺服器或時間伺服器池的 URL。填寫好 URL 後,按一下測試以驗證該 URL 是否指向有效的時間來源。

  2. 啟用快速初始同步,以便在 chronyd 精靈啟動時透過傳送更多要求來加速時間同步。

  3. 啟用離線啟動,以使自動啟動 chronyd 精靈且開機時可能沒有網際網路連接的系統加快開機速度。例如,對於由 NetworkManager 管理網路連接的筆記型機器,此選項非常實用。

  4. 按一下確定加以確認。

30.2 手動設定網路中的 NTP

chrony/etc/chrony.conf 檔案讀取其組態。若要讓電腦時鐘保持同步,您需要告訴 chrony 使用什麼時間伺服器。您可以使用特定的伺服器名稱或 IP 位址,例如:

server 0.europe.pool.ntp.org
server 1.europe.pool.ntp.org
server 2.europe.pool.ntp.org

還可以指定名稱。池名稱會解析為數個 IP 位址:

pool pool.ntp.org
提示
提示:同一網路中的多部電腦

若要同步同一網路中多部電腦的時間,建議不要透過一部外部伺服器來同步所有電腦。比較好的做法是將其中一部電腦做為時間伺服器 (它與外部時間伺服器同步),其他電腦做為它的用戶端。將 local 指令新增至伺服器的 /etc/chrony.conf,以將其與權威時間伺服器區分開:

local stratum 10

若要啟動 chrony,請執行:

systemctl start chronyd.service

啟始化 chronyd 後,系統需要花費一些時間來穩定時間,以及建立用於校正本地電腦時鐘的偏移檔案。使用漂移檔案,可以在電腦開機時計算硬體時鐘的系統錯誤。它會立即使用校正,使系統時間具有更高的穩定性。

若要啟用 chrony,以便該服務在開機時自動啟動,請執行:

systemctl enable chronyd.service

30.3 在執行時期使用 chronyc 設定 chronyd

在執行時期,您可以使用 chronyc 來變更 chronyd 的行為。它會產生有關 chronyd 操作的狀態報告。

您可以採用互動模式或非互動模式執行 chronyc。若要採用互動模式執行 chronyc,請在指令行上輸入 chronyc。如此會顯示提示符並等待您輸入指令。例如,若要檢查有多少 NTP 來源在線上或離線,請執行:

root # chronyc
chronyc> activity
200 OK
4 sources online
2 sources offline
1 sources doing burst (return to online)
1 sources doing burst (return to offline)
0 sources with unknown address

若要結束 chronyc 的提示符,請輸入 quitexit

如果您不需要使用互動式提示符,請直接輸入指令:

root # chronyc activity
注意
注意:暫時的變更

使用 chronyc 進行的變更不是永久性的。當 chronyd 下次重新啟動時,它們將會遺失。若要進行永久變更,請修改 /etc/chrony.conf

如需 chronyc 指令的完整清單,請參閱它的手冊頁 (man 1 chronyc)。

30.4 執行時期的動態時間同步

儘管 chronyd 通常在開機時沒有網路連接的系統上啟動,但該工具無法解析組態檔案中所指定時間伺服器的 DNS 名稱。

chronyd 會依遞增的時間間隔,不斷嘗試解析由 serverpoolpeer 指令指定的時間伺服器名稱,直到成功為止。

如果啟動 chronyd 時將無法存取時間伺服器,您可以指定 offline 選項:

server server_address offline

如此,chronyd 將不會嘗試輪詢該伺服器,除非使用以下指令啟用它:

root # chronyc online server_address

設定 auto_offline 選項後,如果向時間伺服器傳送了兩個要求,但未接收到任何回應,chronyd 會假設時間伺服器已離線。此選項使 chronyc 在網路連結斷開時,無需執行「離線」指令。

30.5 設定本地參考時鐘

套裝軟體 chrony 依賴於其他程式 (例如 gpsd) 來透過 SHM 或 SOCK 驅動程式存取計時資料。在 /etc/chrony.conf 中使用 refclock 指令可指定要當成時間來源使用的硬體參考時鐘。它有兩個強制參數:驅動程式名稱和驅動程式特定的參數。這兩個參數後面跟著零或多個 refclock 選項。chronyd 包含以下驅動程式:

  • PPS:核心「pulse per second」API 的驅動程式。例如:

    refclock PPS /dev/pps0 lock NMEA refid GPS
  • SHM:NTP 共用記憶體驅動程式。例如:

    refclock SHM 0 poll 3 refid GPS1
    refclock SHM 1:perm=0644 refid GPS2
  • SOCK:Unix 網域通訊端驅動程式。例如:

    refclock SOCK /var/run/chrony.ttyS0.sock
  • PHC:PTP 硬體時鐘驅動程式。例如:

    refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37
    refclock PHC /dev/ptp1:nocrossts poll 3 pps

如需各驅動程式的選項的詳細資訊,請參閱 man 8 chrony.conf

30.6 與外部時間參考 (ETR) 的時鐘同步

支援將時鐘與外部時間參考 (ETR) 同步。外部時間參考每 2**20 (2 的 20 次方) 微秒傳送一次振盪器訊號與同步訊號,以將所有連結伺服器的 TOD 時鐘保持同步。

為了便利,兩個 ETR 裝置可連接到一個機器。如果時鐘偏差超出同步檢查容錯,將會對所有 CPU 執行一次機器檢查,這表示時鐘未同步。如果出現這種狀況,則所有啟用了 DASD I/O 到 XRC 的裝置就會停止運作,直到時鐘重新同步。

ETR 支援透過兩個 sysfs 屬性啟動;請以 root 身分執行下列指令:

echo 1 > /sys/devices/system/etr/etr0/online
echo 1 > /sys/devices/system/etr/etr1/online

31 網域名稱系統

必須使用 DNS (網域名稱系統) 將網域和主機名稱解析為 IP 位址。例如,藉由這種方式,會給主機名稱 jupiter 指定 IP 位址 192.168.2.100。在設定您自己的名稱伺服器前,請參閱第 19.3 節 「名稱解析」 中有關 DNS 的一般資訊。以下組態範例使用預設 DNS 伺服器 - BIND。

31.1 DNS 詞彙

區域

網域名稱空間細分成一個個區域。例如,如果您擁有 example.com,您就擁有 com 網域的 example 區段 (或區域)。

DNS 伺服器

DNS 伺服器是為網域維護名稱和 IP 資訊的伺服器。您可以擁有用於主要區域的主要 DNS 伺服器、用於從屬區域的次要伺服器、或沒有任何區域處理快取功能的從屬伺服器。

主要區域 DNS 伺服器

主要區域包含您網路上的所有主機,而且 DNS 伺服器主要區域會儲存您的網域中所有主機最新的記錄。

從屬區域 DNS 伺服器

從屬區域是主要區域的副本。從屬區域 DNS 伺服器會用區域傳輸作業從其主伺服器取得區域資料。只要從屬區域 DNS 伺服器擁有有效 (未過期) 的區域資料,它就有權代表區域回應。如果從屬無法取得區域資料的新副本,它就會停止代表區域回應。

轉遞者

轉遞者是當您的 DNS 伺服器無法答覆查詢時,它應該將其傳送至的目標 DNS 伺服器。為了在同一個組態中啟用不同的組態來源,系統使用了 netconfig (並請參閱 man 8 netconfig)。

記錄

記錄是有關名稱和 IP 位址的資訊。有關支援的記錄及其語法,請參閱 BIND 文件中的說明。一些特殊的記錄如下:

NS 記錄

NS 記錄會告訴名稱伺服器哪些機器負責管理特定網域區域。

MX 記錄

MX (郵件交換) 記錄會說明在網際網路上傳送郵件時要聯絡的機器。

SOA 記錄

SOA (起始授權) 記錄是區域檔案中的第一筆記錄。SOA 記錄是在使用 DNS 同步化多部電腦之間的資料時使用。

31.2 安裝

若要安裝 DNS 伺服器,請啟動 YaST 並選取「軟體 ›  軟體管理」。選擇「檢視」 › 「模式」,然後選取「DHCP 和 DNS 伺服器」。請確認安裝個別套件,以完成此安裝程序。

或者,在指令行中使用以下指令:

tux > sudo zypper in -t pattern dhcp_dns_server

31.3 利用 YaST 進行組態

使用 YaST DNS 模組可以設定區域網路的 DNS 伺服器。當您第一次啟動模組時,一個精靈會啟動,提示您指定有關伺服器管理的一些設定。完成此初步設定,即會產生基本的伺服器組態。使用進階模式可以處理更進階的組態任務,如設定 ACL、記錄、TSIG 金鑰和其他選項。

31.3.1 精靈組態

精靈包含三個步驟或對話方塊。在對話方塊的適當位置,您可以進入進階組態模式。

  1. 第一次啟動模組時,會開啟圖形 31.1 「DNS 伺服器安裝:轉遞者設定」中所示的「轉遞者設定」對話方塊。「本地 DNS 解析規則」允許設定以下選項:

    • 已停用合併轉遞者

    • 自動合併

    • 已啟用合併轉遞者

    • 自訂組態 — 如果已選取「自訂組態」,則可以指定「自訂規則」;依預設,在已選取「自動合併」的情況下,「自訂規則」將設定為「自動」,但是,您可以在此處設定介面名稱,或者從 STATICSTATIC_FALLBACK 這兩個特殊規則名稱中做出選擇。

    在「本地 DNS 解析轉遞者」中,指定要使用的服務:「使用系統名稱伺服器」、「此名稱伺服器 (bind)」或「本地 dnsmasq 伺服器」。

    如需有關所有這些設定的詳細資訊,請參閱 man 8 netconfig

    DNS 伺服器安裝:轉遞者設定
    圖 31.1︰ DNS 伺服器安裝:轉遞者設定

    轉遞者是指當您的 DNS 伺服器無法答覆查詢時,將查詢傳送至的目標 DNS 伺服器。請輸入它們的 IP 位址,然後按一下「新增」

  2. DNS 區域」對話方塊包含數個部分,負責管理區域檔案,如第 31.6 節 「區域檔案」所述。對於新區域,請在「名稱」中提供其名稱。若要新增反向區域,名稱的結尾必須是 .in-addr.arpa。最後,選取「類型」(主要、從屬或轉遞)。請參閱圖形 31.2 「DNS 伺服器安裝:DNS 區域」。按一下「編輯」可設定現有區域的其他設定值。若要移除區域,按一下「刪除」

    DNS 伺服器安裝:DNS 區域
    圖 31.2︰ DNS 伺服器安裝:DNS 區域
  3. 在最後的對話方塊中,可按一下「在防火牆中開啟埠」,在防火牆中開啟 DNS 連接埠。然後決定是否在開機時啟動 DNS 伺服器 (「開啟」「關閉」)。您亦可啟用 LDAP 支援。請參閱圖形 31.3 「DNS 伺服器安裝:完成精靈」

    DNS 伺服器安裝:完成精靈
    圖 31.3︰ DNS 伺服器安裝:完成精靈

31.3.2 進階組態

啟動模組後,YaST 會開啟顯示數個組態選項的視窗。完成該視窗可讓 DNS 伺服器組態的基本功能就位運作:

31.3.2.1 啟動

「啟動」下,定義是應在系統開機時啟動 DNS 伺服器還是手動啟動。若要立即啟動 DNS 伺服器,請按一下「立即啟動 DNS 伺服器」。若要停止 DNS 伺服器,請按一下「立即停止 DNS 伺服器」。若要儲存目前的設定,請選取「立即儲存設定並重新載入 DNS 伺服器」。您可以使用「在防火牆中開啟埠」開啟防火牆中的 DNS 埠,並使用「防火牆詳細資訊」修改防火牆設定。

若選取「LDAP 主動支援」,區域檔案將由 LDAP 資料庫來管理。DNS 伺服器重新啟動或由系統提示重新載入其組態時,會選用寫入到 LDAP 資料庫的任何區域資料變更。

31.3.2.2 轉遞者

如果您的本地 DNS 伺服器無法答覆要求,它會嘗試將要求轉遞至「轉遞者」(若做此設定)。可手動將此轉遞者新增至「轉遞者清單」。如果轉遞者與撥號連接同樣不是靜態的,則 netconfig 會處理組態。如需 netconfig 的詳細資訊,請參閱 man 8 netconfig

31.3.2.3 基本選項

在此區段中,可設定基本伺服器選項。從「選項」功能表中,選取所需項目,然後在相應的文字方塊中指定值。選取 新增 以包含新項目。

31.3.2.4 記錄

若要設定 DNS 伺服器應記錄的內容和記錄方式,請選取「記錄」。在「記錄類型」下,指定 DNS 伺服器應該寫入記錄資料的位置。選取「系統記錄」來使用泛系統記錄,或選取「檔案」指定不同的檔案。如果使用後一種方式,還需另行指定名稱、最大檔案大小 (以 MB 為單位) 以及要儲存的記錄檔案版本數。

進一步選項可從「其他記錄」下存取。啟用「記錄所有 DNS 查詢」會記錄每個查詢,此選項會讓記錄檔變得非常大。所以,除了偵錯用途外,啟用此選項並不是理想的作法。若要記錄 DHCP 與 DNS 伺服器之間在區域更新期間的資料流量,請啟用「記錄區域更新」。若要記錄從主伺服器到從屬伺服器在區域傳輸期間的資料流量,請啟用「記錄區域轉送」。請參閱圖形 31.4 「DNS 伺服器:記錄」

DNS 伺服器:記錄
圖 31.4︰ DNS 伺服器:記錄

31.3.2.5 ACL

使用此對話方塊可定義 ACL (存取控制清單) 以強制執行存取限制。在名稱下提供獨特名稱後,在下指定 IP 位址 (有或沒有網路遮罩),格式如下:

{ 192.168.1/24; }

組態檔的語法要求位址以分號結尾,而且放置在大括號之間。

31.3.2.6 TSIG 金鑰

TSIG (交易簽章) 的主要目的是保護 DHCP 與 DNS 伺服器之間的通訊。在第 31.8 節 「安全交易」中有所描述。

若要產生 TSIG 金鑰,請在標籤為「金鑰 ID」的欄位中輸入特別的名稱,並指定用來儲存金鑰的檔案 (檔案名稱)。按一下「產生」確認您的選擇。

若要使用之前建立的金鑰,請將「金鑰 ID」欄位保留空白,並在「檔案名稱」下選取儲存金鑰的檔案。接著,以 新增 確認您的選項。

31.3.2.7 DNS 區域 (新增從屬區域)

若要新增從屬區域,請選取「DNS 區域」,選擇「從屬」區域類型,指定新區域的名稱,並按一下「新增」。

「區域編輯器」子對話方塊中,於「主 DNS 伺服器 IP」下指定從屬伺服器應從中提取資料的主伺服器。若要限制對伺服器的存取,可以從清單選取其中一個 ACL。

31.3.2.8 DNS 區域 (新增主要區域)

若要新增主要區域,請選取「DNS 區域」,選擇「主要」區域類型,寫入新區域的名稱,然後按一下「新增」。新增主要區域時,也需要新增反向區域。例如,如果新增指向子網路 192.168.1.0/24 中主機的 example.com 區域,則也應該新增涵蓋該 IP 位址範圍的反向區域。根據定義,該區域應該命名為 1.168.192.in-addr.arpa

31.3.2.9 DNS 區域 (編輯主要區域)

若要編輯主要區域,請選取「DNS 區域」,然後從表中選取主要區域,並按一下「編輯」。對話方塊由幾個頁面組成:基本 (第一個開啟的頁面)、NS 記錄MX 記錄SOA 以及記錄

基本對話方塊 (如圖形 31.5 「DNS 伺服器:區域編輯器 (基本)」所示),可讓您定義動態 DNS 的設定以及到用戶端及從屬名稱伺服器之區域傳輸的存取選項。若要允許動態更新區域,請選取允許動態更新及相應的 TSIG 金鑰。更新動作開始前,必須先定義金鑰。若要啟用區域傳輸,請選取對應的 ACL。必須先行定義 ACL。

「基本」對話方塊中,選擇是否要啟用區域傳輸。使用列出的 ACL 來定義可以下載區域的人員。

DNS 伺服器:區域編輯器 (基本)
圖 31.5︰ DNS 伺服器:區域編輯器 (基本)
區域編輯器 (NS 記錄)

「NS 記錄」對話方塊可讓您為指定的區域定義替代名稱伺服器。請確定您自己的名稱伺服器包含於清單中。若要新增記錄,請在「要新增的名稱伺服器」下輸入其名稱,然後使用「新增」確認動作。請參閱圖形 31.6 「DNS 伺服器:區域編輯器 (NS 記錄)」

DNS 伺服器:區域編輯器 (NS 記錄)
圖 31.6︰ DNS 伺服器:區域編輯器 (NS 記錄)
區域編輯器 (MX 記錄)

若要新增目前區域的郵件伺服器到現有清單,請輸入對應的位址及優先順序值。完成後,選取「新增」確認該動作。請參閱圖形 31.7 「DNS 伺服器:區域編輯器 (MX 記錄)」

DNS 伺服器:區域編輯器 (MX 記錄)
圖 31.7︰ DNS 伺服器:區域編輯器 (MX 記錄)
區域編輯器 (SOA)

此頁允許您建立 SOA (起始授權) 記錄。如需個別選項的說明,請參閱範例 31.6 「/var/lib/named/example.com.zone 檔案」透過 LDAP 管理的動態區域,並不支援變更 SOA 記錄。

DNS 伺服器:區域編輯器 (SOA)
圖 31.8︰ DNS 伺服器:區域編輯器 (SOA)
區域編輯器 (記錄)

此對話方塊可管理名稱解析。在「記錄金鑰」中,輸入主機名稱,然後選取其類型。「A」類型表示主項目。此項目的值應為 IP 位址 (IPv4)。請為 IPv6 位址使用「AAAA」。CNAME 是別名。使用 NSMX 類型,可取得「NS 記錄」與「MX 記錄」標籤提供之資訊的詳細或部分擴充記錄。這三個類型都可以解析成現有的 A 記錄。PTR 是供反向區域所使用。它的內容與 A 記錄相反,例如:

hostname.example.com. IN A 192.168.0.1
1.0.168.192.in-addr.arpa IN PTR hostname.example.com.
31.3.2.9.1 新增反向區域

若要新增反向區域,請遵循以下程序:

  1. 啟動 YaST › DNS 伺服器 › DNS 區域

  2. 如果您尚未新增主要正向區域,現在請新增並對其進行編輯

  3. 記錄索引標籤中,填入相應的記錄金鑰,然後使用新增來新增記錄,並使用確定來確認。如果 YaST 告知某個名稱伺服器的記錄不存在,請在 NS 記錄索引標籤中新增該記錄。

    為主要區域新增記錄
    圖 31.9︰ 為主要區域新增記錄
  4. 回到 DNS 區域視窗,新增一個主要反向區域。

    新增反向區域
    圖 31.10︰ 新增反向區域
  5. 編輯該反向區域,然後在記錄索引標籤中,您可以看到 PTR:反向轉換記錄類型。新增相應的記錄金鑰,然後按一下新增並使用確定來確認。

    新增反向記錄
    圖 31.11︰ 新增反向記錄

    視需要新增名稱伺服器記錄。

提示
提示:編輯反向區域

新增正向區域後,返回到主功能表,然後選取要編輯的反向區域。在「基本」索引標籤中,啟用「自動產生以下區域的記錄」核取方塊,然後選取正向區域。這樣,反向區域中會自動更新正向區域的所有變更。

31.4 啟動 BIND 名稱伺服器

SUSE® Linux Enterprise Server 系統上,已預先設定名稱伺服器 BIND (Berkeley Internet Name Domain,柏克萊網際網路名稱網域),因此在安裝後可以立即啟動此名稱伺服器,不會出現任何問題。一般而言,如果您能連接網際網路,並在 /var/run/netconfig/resolv.conf 中輸入了 127.0.0.1 做為 localhost 的名稱伺服器位址,則表示您已經有可以運作的名稱解析功能,因而無需知道提供者的 DNS。BIND 透過根名稱伺服器執行名稱解析,顯見處理程序較慢。一般而言,應該在 forwarders 下的組態檔 /etc/named.conf 中輸入提供者的 DNS 及其 IP 位址,以確保有效及安全的名稱解析。如果目前此辦法可行,名稱伺服器會當成純粹的「僅快取」名稱伺服器執行。只有在您設定了名稱伺服器自己的區域後,它才會成為真正的 DNS。/usr/share/doc/packages/bind/config 中提供了一個簡單範例。

提示
提示:名稱伺服器資訊的自動調整

在某些類型的網際網路連接或網路連接下,名稱伺服器資訊可自動根據目前的情況進行調整。若要實現此目的,請將 /etc/sysconfig/network/config 檔案中的 NETCONFIG_DNS_POLICY 變數設定為 auto

不過,在相關機構為您指派正式的網域之前,切勿設定網域。即使您有自己的網域而且是由提供者管理,最好也不要使用,否則 BIND 不會轉遞此網域的要求。例如,此網域將無法存取提供者的網頁伺服器。

若要啟動名稱伺服器,請以 root 身分輸入指令 systemctl start named。使用 systemctl status named 來檢查 named (在呼叫名稱伺服器程序時) 是否已成功啟動。使用 hostdig 程式立即測試本地系統上的名稱伺服器,應該會傳回 localhost 做為預設伺服器,位址為 127.0.0.1。如果沒有傳回所需的結果,/var/run/netconfig/resolv.conf 可能包含不正確的名稱伺服器項目,或是檔案不存在。如果是第一次測試,請輸入 host 127.0.0.1,這通常都能成功。如果看到錯誤訊息,請使用 systemctl status named 檢查伺服器是否真的在執行。如果該名稱伺服器未啟動或者出現非預期的行為,請檢查 journalctl -e 的輸出。

若要使用提供者的名稱伺服器或網路上正在執行的名稱伺服器做為轉遞者,請在 forwarders 下的 options 區段中輸入對應的 IP 位址。範例 31.1 「named.conf 中的轉遞選項」中包含的位址只是範例。請根據您自己的設定調整這些項目。

範例 31.1︰ named.conf 中的轉遞選項
options {
        directory "/var/lib/named";
        forwarders { 10.11.12.13; 10.11.12.14; };
        listen-on { 127.0.0.1; 192.168.1.116; };
        allow-query { 127/8; 192.168/16 };
        notify no;
};

options 項目後面跟著區域的項目:localhost 以及 0.0.127.in-addr.arpatype hint 項目 (.下) 應永遠存在。對應的檔案無需修改,而且應該依其原狀運作。另外也請確定每個項目的末尾都有;,且大括號在正確的位置。變更組態檔 /etc/named.conf 或區域檔後,可使用 systemctl reload named 告知 BIND 重新讀取這些檔案。使用 systemctl restart named 停止並重新啟動名稱伺服器可達成相同的效果。任何時候都可透過輸入 systemctl stop named 來停止伺服器。

31.5 /etc/named.conf 組態檔案

BIND 名稱伺服器本身的所有設定都儲存於檔案 /etc/named.conf 中。不過,要處理之網域的區域資料 (包括主機名稱、IP 位址等) 儲存於 /var/lib/named 目錄中各自的檔案中。詳細資訊會在稍後說明 。

/etc/named.conf 粗略分為兩個部分。其中一個是一般設定的 options 區段,另一個則是由個別網域的 zone 項目組成。logging 區段和 acl (存取控制清單) 項目是選擇性的。註解行的開頭是 # 符號或 //。在範例 31.2 「基本的 /etc/named.conf」 中顯示了最基本的 /etc/named.conf

範例 31.2︰ 基本的 /etc/named.conf
options {
        directory "/var/lib/named";
        forwarders { 10.0.0.1; };
        notify no;
};

zone "localhost" in {
       type master;
       file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" in {
        type master;
        file "127.0.0.zone";
};

zone "." in {
        type hint;
        file "root.hint";
};

31.5.1 重要的組態選項

directory "FILENAME";

指定 BIND 可以在其中找尋包含區域資料之檔案的目錄。通常是 /var/lib/named

forwarders { IP-ADDRESS; };

指定無法直接解析 DNS 要求時應該將其轉遞至哪個名稱伺服器 (一般屬於提供者)。以 IP 位址 (例如 192.168.1.116) 取代 IP-ADDRESS

forward first;

將會在嘗試透過根名稱伺服器解析 DNS 要求之前先加以轉遞。除了 forward first,可以寫入 forward only 以轉遞所有要求,且不會有任何要求傳送到根名稱伺服器。這對於防火牆組態是可以理解的。

listen-on port 53 { 127.0.0.1; IP-ADDRESS; };

告知 BIND 在哪個網路介面和連接埠上接受用戶端查詢。不需要明確指定連接埠 53,因為 53 為預設連接埠。輸入 127.0.0.1 將允許來自本地主機的要求。如果完全省略此項目,預設會使用所有介面。

listen-on-v6 port 53 {any; };

告訴 BIND 哪個連接埠應該監聽 IPv6 用戶端要求。除了 any 外只能使用 none。就 IPv6 而言,伺服器僅接受萬用字元位址。

query-source address * port 53;

如果防火牆封鎖 DNS 要求外送,則需要這個項目。這樣會告訴 BIND 從外部的連接埠 53 張貼要求,而不是從任何高於 1024 的連接埠張貼。

query-source-v6 address * port 53;

告訴 BIND 哪個連接埠用於 IPv6 查詢。

allow-query { 127.0.0.1; NET; };

定義用戶端可以張貼 DNS 要求的網路。以位址資訊 (例如 192.168.2.0/24) 取代 NET。尾部的 /24 是網路遮罩的縮寫表示式,在此例中為 255.255.255.0

allow-transfer ! *;;

控制哪些主機可以要求區域傳輸。在範例中,這類要求是使用 ! *.如果沒有這個項目,就可以從任一處要求區域傳輸,沒有限制。

statistics-interval 0;

如果沒有這個項目,BIND 每小時都會在系統的日誌中產生數行統計資訊。指定 0 則完全不會顯示這些統計數字,或設定以分鐘為單位的間隔時間。

cleaning-interval 720;

此選項定義 BIND 清除其快取記憶體的時間間隔。每次清除時觸發系統日誌中一個項目。時間規格單位為分鐘。預設值是 60 分鐘。

interface-interval 0;

BIND 會定期搜尋網路介面,尋找新的或不存在的介面。如果此值設定為 0,就不會執行這個動作,且 BIND 僅會監聽啟動時偵測到的介面。如果不想出現這種情況,請以分鐘為單位定義間隔時間。預設值是 60 分鐘。

notify no;

當變更區域資料或重新啟動名稱伺服器時,no 會防止通知其他名稱伺服器。

如需可用選項的清單,請參閱 man 5 named.conf 的手冊頁。

31.5.2 記錄

記錄的內容、方式及位置皆可在 BIND 中詳細設定。通常預設值已經足夠了。範例 31.3 「停用記錄的項目」顯示了此類項目最簡單的形式,會徹底隱藏所有記錄。

範例 31.3︰ 停用記錄的項目
logging {
        category default { null; };
};

31.5.3 區域項目

範例 31.4︰ example.com 的區域項目
zone "example.com" in {
      type master;
      file "example.com.zone";
      notify no;
};

zone 之後,指定要管理的網域名稱 (example.com),後面跟上 in 以及大括號括住的相關選項區塊,如範例 31.4 「example.com 的區域項目」 中所示。若要定義 slave zone,切換 typeslave 並指定管理此區域的名稱伺服器為 master (也可能成為另一個主要的從屬),如 範例 31.5 「example.net 的區域項目」 中所示。

範例 31.5︰ example.net 的區域項目
zone "example.net" in {
      type slave;
      file "slave/example.net.zone";
      masters { 10.0.0.1; }; 
};

區域選項:

type master;

藉由指定 master,可以告訴 BIND 區域由本地名稱伺服器處理。這假設區域檔案已經以正確格式建立。

type slave;

此區域傳輸自另一部名稱伺服器。必須與 masters 一起使用。

type hint;

區域 . 屬於 hint 類型,可用來設定根名稱伺服器。此區域定義可以維持原狀。

檔案 example.com.zone 或檔案 slave/example.net.zone

此項目可指定網域之區域資料所在的檔案。從屬區域不需要此檔案,因為此資料是從另一個名稱伺服器提取。若要分別主要和從屬檔案,請為從屬檔案使用目錄 slave

masters { SERVER_IP_ADDRESS; };

僅從屬區域需要此項目。它指定應該傳輸區域檔案的名稱伺服器。

allow-update {! *; };

此選項控制外部寫入存取,將允許用戶端產生 DNS 項目,通常由於安全性的緣故不需要此項目。如果沒有此項目,將禁止區域更新。以下項目會產生相同的結果,因為 ! * 可有效地禁止任何這類活動。

31.6 區域檔案

需要兩種類型的區域檔案。一個會給主機名稱指定 IP 位址,另一個的作用恰恰相反:為 IP 位址提供主機名稱。

提示
提示:在區域檔案中使用點 (英文句點)

. 在區域檔案中具有重要意義。如果指定的主機名稱末尾沒有句點 (.),則會附加區域。使用完整網域名稱指定的完整主機名稱必須以句點結尾 (.),這是為了避免再次向它新增網域。「.」遺失或放錯位置可能是導致名稱伺服器組態錯誤的最常見的原因。

第一個要考慮的情況是負責網域 example.com 的區域檔案 example.com.zone,如範例 31.6 「/var/lib/named/example.com.zone 檔案」中所示。

範例 31.6︰ /var/lib/named/example.com.zone 檔案
$TTL 2D 1
example.com. IN SOA      dns  root.example.com. ( 2
             2003072441  ; serial 3
             1D          ; refresh 4
             2H          ; retry 5
             1W          ; expiry 6
             2D )        ; minimum 7

             IN NS       dns 8
             IN MX       10 mail dns 9
gate         IN A        192.168.5.1 10
             IN A        10.0.0.1
dns          IN A        192.168.1.116
mail         IN A        192.168.3.108
jupiter      IN A        192.168.2.100
venus        IN A        192.168.2.101
saturn       IN A        192.168.2.102
mercury      IN A        192.168.2.103
ntp          IN CNAME    dns 11
dns6         IN A6  0    2002:c0a8:174::

1

$TTL 定義應該套用到此檔案中所有項目的預設有效時間。在此範例中,項目的有效時間是兩天 (2 D)。

2

這是 SOA (起始授權) 控制記錄開始的地方:

  • 最前面的 example.com 為要管理的網域名稱。此行以「.」結尾,否則系統會再附加一次該區域。或者,可以在此輸入 @,這樣會從 /etc/named.conf 中的對應項目擷取區域。

  • IN SOA 之後是名稱伺服器的名稱,做為此區域的主伺服器。該名稱會從 dns 擴充為 dns.example.com,因為它沒有以 . 結尾。

  • 後面跟著此名稱伺服器之負責人的電子郵件地址。由於 @ 符號本就有特殊含意,因此此處改為輸入「.」。對於 root@example.com,項目必須讀做 root.example.com.. 必須加在最後,以防止新增區域。

  • ( 會將 ) 前面的所有行都包含在 SOA 記錄中。

3

序號是一個 10 位數的號碼。每次變更此檔案,都必須變更此號碼。通知次要名稱伺服器 (從屬伺服器) 發生變更,這是必要的。為此,日期和執行號碼常採用 10 位數格式,寫法是 YYYYMMDDNN,這已成為習慣格式 (YYYY 表示年份,MM 表示月份,DD 表示日期。NN 是序號,可在給定的日期多次更新)。

4

refresh rate 指定次要名稱伺服器確認區域 serial number 的時間間隔。在此例中,是一天。

5

retry rate 指定在發生錯誤時次要名稱伺服器嘗試再次聯絡主要伺服器的時間間隔。在此例中,是兩小時。

6

expiration time 指定次要名稱伺服器無法重新取得與主要伺服器的聯絡時,在此時間範圍後丟棄快取資料。此例中為一週。

7

SOA 記錄中的最後一個項目指定 negative caching TTL,亦即其他伺服器未解析 DNS 查詢之結果可以快取的時間。

8

IN NS 指定負責此網域的名稱伺服器。dns 會擴充為 dns.example.com,因為它沒有以 . 結尾。可能有數行會像這樣,其中一行是主要名稱伺服器,而每個次要名稱伺服器各一行。如果 /etc/named.conf 中的 notify 不是設定為 no,此處列出的所有名稱伺服器會收到區域資料變更的通知。

9

MX 記錄指定接受、處理和轉寄網域 example.com 之電子郵件的郵件伺服器。在此範例中,其為主機 mail.example.com。主機名稱前的號碼是優先設定值。如果有多個 MX 項目,則優先選用值最小的郵件伺服器。如果將郵件傳送到此伺服器失敗,則會使用值第二小的項目。

10

此行及其後面的行是實際位址記錄,其中的一或多個 IP 位址已指定到主機名稱。此處列出的名稱不含 .,因為它們不包含其網域,所以會將 example.com 新增到所有名稱。系統會將兩個 IP 位址指定給主機 gate,因為它有兩張網路卡。若主機位址是傳統位址 (IPv4),記錄會使用 A 標示。如果位址是 IPv6 位址,則會使用 AAAA 標示該項。

注意
注意:IPv6 語法

IPv6 記錄與 IPv4 的語法稍有不同。因為可以分段,所以必須在位址前提供有關遺漏位元的資訊。若要使用所需的數字}0填寫 IPv6 位址,則在位址的正確位置新增兩個冒號。

pluto     AAAA 2345:00C1:CA11::1234:5678:9ABC:DEF0
pluto     AAAA 2345:00D2:DA11::1234:5678:9ABC:DEF0

11

別名 ntp 可以用來定址 dns (CNAME 表示 canonical name (標準名稱))。

虛擬網域 in-addr.arpa 用來反向查詢 IP 位址到主機名稱。它會以反向標記法附加到位址的網路部分。因此 192.168 會解析為 168.192.in-addr.arpa。請參閱範例 31.7 「反向尋找」

範例 31.7︰ 反向尋找
$TTL 2D 1
168.192.in-addr.arpa.   IN SOA dns.example.com. root.example.com. ( 2
                        2003072441      ; serial
                        1D              ; refresh
                        2H              ; retry
                        1W              ; expiry
                        2D )            ; minimum

                        IN NS           dns.example.com. 3

1.5                     IN PTR          gate.example.com. 4
100.3                   IN PTR          www.example.com.
253.2                   IN PTR          cups.example.com.

1

$TTL 定義套用到此處所有項目的標準 TTL。

2

組態檔應該為網路 192.168 啟用反向查詢。假設區域稱為 168.192.in-addr.arpa,則不應新增到主機名稱。因此輸入的所有主機名稱都使用完整格式 — 附帶網域並以 . 做為結尾。其餘的項目與之前 example.com 範例中所述的項目對應。

如需此記錄中項目的詳細資料,請參閱範例 31.6 「/var/lib/named/example.com.zone 檔案」

3

此行指定負責此區域的名稱伺服器。但這次以完整格式輸入名稱,即包含域且以「. 做為結尾。

4

此行及其後面的行是相關主機上 IP 位址的指標記錄提示。在此行的開頭僅輸入了 IP 位址的最後一部分,不以「. 做為結尾。對此附加區域 (不加上 .in-addr.arpa) 會造成完整 IP 位址變成反向順序。

一般情況下,不同 BIND 版本之間的區域傳輸應該可以順利進行。

31.7 區域資料的動態更新

動態更新」這個詞是指新增、變更或刪除主伺服器的區域檔案項目的作業。RFC 2136 中詳述了此機制。透過新增選擇性 allow-updateupdate-policy 規則,可為每個區域項目個別設定動態更新。動態更新的區域不應該手動修改。

使用指令 nsupdate 將要更新的項目傳送到伺服器。如需此指令的完整語法,請查閱 nsupdate 的手冊頁 (man 8 nsupdate)。為了安全性的緣故,這類更新應該使用 TSIG 金鑰加以執行,如 第 31.8 節 「安全交易」 所述。

31.8 安全交易

透過採用共用秘密金鑰 (也稱為 TSIG 金鑰) 的交易簽章 (TSIG),可以實現安全交易。本節說明如何產生及使用這類金鑰。

不同伺服器之間的通訊,以及區域資料的動態更新,都需要安全交易。讓存取控制依靠金鑰比單純依靠 IP 位址要來得安全許多。

使用下面的指令產生 TSIG 金鑰 (如需詳細資料,請參閱 man tsig-keygen):

tux > sudo tsig-keygen -a hmac-md5 host1-host2 > host1-host2.key

這會建立名為 host1-host2.key 的檔案,其中的內容可能如下所示:

key "host1-host2" {                       |
    algorithm hmac-md5;
    secret "oHpBLgtcZso6wxnRTWdJMA==";
};

必須將此檔案傳輸至遠端主機,最好以安全方式傳輸 (例如,使用 scp)。若要在 host1host2 之間啟用安全通訊,本地和遠端伺服器上的 /etc/named.conf 檔案中均須包含該金鑰。

key host1-host2 {
 algorithm hmac-md5;
 secret "ejIkuCyyGJwwuN3xAteKgg==";
};
警告
警告:etc/named.conf 的檔案權限

請確定 /etc/named.conf 的權限受到適當的限制。此檔案的預設值是 0640,擁有者為 root 及群組 named。另一種方法是,將金鑰移到具有特別限定權限的其他檔案,然後將檔案從 /etc/named.conf 包含進來。若要包含外部檔案,請使用:

include  "filename"

檔案名稱取代為金鑰所在檔案的絕對路徑。

若要讓伺服器 host1 能夠使用 host2 (在此範例中位址為 10.1.2.3) 的金鑰,伺服器的 /etc/named.conf 必須包含以下規則:

server 10.1.2.3 {
  keys { host1-host2. ;};
};

類比項目必須包含於 host2 的組態檔中。

針對為 IP 位址和位址範圍定義的任何 ACL (存取控制清單,切勿與檔案系統 ACL 混淆) 新增 TSIG 金鑰,以確保交易安全性。對應項目應該看起來如下:

allow-update { key host1-host2. ;};

此主題在 update-policy 下的 BIND Administrator Reference Manual 中有詳細討論。

31.9 DNS 安全性

RFC 2535 中對 DNSSEC (或 DNS 安全性) 進行了描述。BIND 手冊中介紹了可用於 DNSSEC 的工具。

與一或多個區域金鑰關聯的區域才是安全區域。這些金鑰是使用 dnssec-keygen 產生,如同主機金鑰一樣。目前是使用 DSA 加密演算法產生這些金鑰。產生的公用金鑰應該包含於套用 $INCLUDE 規則的對應區域檔案中。

使用 dnssec-signzone 指令,可以建立產生的金鑰集 (keyset- 檔案),將金鑰集安全地傳送至父區域,並對其簽名。這樣便會在 /etc/named.conf 中產生每個區域要包含的檔案。

31.10 更多資訊

如需詳細資訊,請參閱安裝於 /usr/share/doc/packages/bind/arm 下的 bind-doc 套件中的 BIND Administrator Reference Manual (BIND 管理員參考手冊)。另外也請參閱手冊參考的 RFC 以及 BIND 隨附的手冊頁。/usr/share/doc/packages/bind/README.SUSE 中包含有關 SUSE Linux Enterprise Server 中 BIND 的最新資訊。

32 DHCP

動態主機組態通訊協定 (DHCP) 的用途是從伺服器集中指定網路設定,這樣就不必在每一個工作站本地分別設定。設定要使用 DHCP 的主機對於自己的靜態位址並沒有控制權。它可以根據伺服器的指示完全且自動地設定自己本身。如果您在用戶端使用 NetworkManager,則不必設定用戶端。這在環境多變、而且一次只使用一個介面的情況下非常有用。絕對不要在執行 DHCP 伺服器的機器上使用 NetworkManager。

提示
提示:IBM Z:DHCP 支援

在 IBM Z 平台上,DHCP 僅可在使用 OSA 和 OSA Express 網路卡的介面上運作。這些網路卡是唯一使用 MAC 的網路卡,是 DHCP 自動組態功能的必要元件。

設定 DHCP 伺服器的其中一種方法是,使用網路卡的硬體位址 (一般應該是固定的) 來識別每個用戶端,然後在用戶端每次連接伺服器時為它提供相同的設定。或者,也可以將 DHCP 設定成從專門設定的位址池,動態指派位址給每個相關用戶端。在後者的情形中,DHCP 伺服器在每次接到請求時會指派相同的位址給用戶端,即使經過較長的時間也是一樣。這只適用於網路用戶端數少於網路位址數的情況。

DHCP 可簡化系統管理員的工作。任何與位址及一般網路組態相關的變更 (包括較大的變更) 都可集中執行,只要編輯伺服器的組態檔。與重新設定眾多的工作站相比,這種方法要便利許多。此外,由於這些機器可以從位址池獲取 IP 位址,因此將機器 (特別是新機器) 整合到網路中也要容易得多。從 DHCP 伺服器擷取適當的網路設定這種方式,對於經常需要在不同網路中使用筆記型電腦的情況特別有用。

在本章中,DHCP 伺服器將在使用 192.168.2.1 做為閘道的工作站 192.168.2.0/24 所在的同一子網路中執行。DHCP 伺服器有固定的 IP 位址 192.168.2.254,提供的位址範圍有兩個:192.168.2.10192.168.2.20 以及 192.168.2.100192.168.2.200

DHCP 伺服器不僅提供 IP 位址和網路遮罩,也提供主機名稱、領域名稱、閘道和名稱伺服器位址供用戶端使用。此外,DHCP 還允許您集中設定一些參數,例如用戶端可以從中輪詢目前時間的時間伺服器,甚至是列印伺服器。

32.1 使用 YaST 設定 DHCP 伺服器

若要安裝 DHCP 伺服器,請啟動 YaST 並選取「軟體 ›  軟體管理」。選擇「過濾器 ›  模式」,然後選取「DHCP 及 DNS 伺服器」。請確認安裝個別套件,以完成此安裝程序。

重要
重要:LDAP 支援

YaST DHCP 模組可以設定成將伺服器組態儲存在本地 (即執行 DHCP 伺服器的主機上),或是由 LDAP 伺服器來管理其組態資料。若要使用 LDAP,請在設定 DHCP 伺服器前設定 LDAP 環境。

如需 LDAP 的詳細資訊,請參閱Book “Security and Hardening Guide”, Chapter 5 “LDAP with 389 Directory Server”

YaST DHCP 模組 (yast2-dhcp-server) 可讓您將自己的 DHCP 伺服器設定用於區域網路。該模組能夠以精靈模式或是進階組態模式執行。

32.1.1 初始組態 (精靈)

首次啟動模組時,會啟動精靈,提示您對伺服器管理進行一些基本設定。完成此初始設定程序後會產生一個非常基本的伺服器組態,能夠發揮其基本功能。進階模式可以處理更多進階設定任務。請執行下列步驟:

  1. 從清單中選取 DHCP 伺服器應監聽的介面,然後依序按一下選取下一步。請參閱圖形 32.1 「DHCP 伺服器:介面卡選項」

    注意
    注意:DHCP 和 firewalld

    請注意,選項開啟選取介面的防火牆 (目前) 不支援 SUSE Linux Enterprise Server 15 SP3 中的 firewalld。若要手動開啟 DHCP 連接埠,請執行

           tux > sudo firewall-cmd --zone=public --permanent --add-service=dhcp
           tux > sudo firewall-cmd --reload
    DHCP 伺服器:介面卡選項
    圖 32.1︰ DHCP 伺服器:介面卡選項
  2. 使用核取方塊決定您的 DHCP 設定是否要由 LDAP 伺服器自動儲存。在文字方塊中提供 DHCP 伺服器應管理的所有用戶端的網路細節。這些細節包括網域名稱、時間伺服器的位址、主要及次要名稱伺服器的位址、列印和 WINS 伺服器的位址 (供同時具有 Windows 與 Linux 用戶端的混和網路使用)、閘道位址以及租用時間。請參閱圖形 32.2 「DHCP 伺服器:全域設定」

    DHCP 伺服器:全域設定
    圖 32.2︰ DHCP 伺服器:全域設定
  3. 設定應該如何將動態 IP 位址指定給用戶端。若要這樣做,指定伺服器可以指派位址給 DHCP 用戶端的 IP 範圍。所有這些位址應該涵蓋在相同的網路遮罩下。另外也指定租用時間,在此時間段內用戶端可以保留其 IP 位址,無需要求延續租用。或者,指定最長出租時間,也就是伺服器保留特定用戶端之 IP 位址的時間。請參閱圖形 32.3 「DHCP 伺服器:動態 DHCP」

    DHCP 伺服器:動態 DHCP
    圖 32.3︰ DHCP 伺服器:動態 DHCP
  4. 定義應該如何啟動 DHCP 伺服器。指定您希望系統開機時自動啟動 DHCP 伺服器,還是在需要時手動啟動 (例如,用於測試目的)。按一下 完成 完成伺服器的組態。請參閱圖形 32.4 「DHCP 伺服器:啟動」

    DHCP 伺服器:啟動
    圖 32.4︰ DHCP 伺服器:啟動
  5. 除了以先前步驟描述的方式使用動態 DHCP 外,您也可以設定伺服器以準靜態方式指定位址。使用下半部所提供的文字方塊,指定要以這種方式進行管理之用戶端的清單。具體而言,就是提供要指定給這類用戶端的「名稱」「IP 位址」,另外還要提供「硬體位址」「網路類型」(記號環或乙太網路)。使用「新增」「編輯」「從清單中刪除」修改顯示於螢幕上半部分的用戶端清單。請參閱圖形 32.5 「DHCP 伺服器:主機管理」

    DHCP 伺服器:主機管理
    圖 32.5︰ DHCP 伺服器:主機管理

32.1.2 DHCP 伺服器組態 (進階)

除了稍早討論的組態方法外,還有進階組態模式,可讓您變更 DHCP 伺服器設定的每個細節。啟動進階組態,方法是在「啟動」對話方塊中按一下「DHCP 伺服器進階組態」(請參閱圖形 32.4 「DHCP 伺服器:啟動」)。

Chroot 環境和宣告

在此第一個對話方塊中,選取「啟動 DHCP 伺服器」讓現有組態可以編輯。DHCP 伺服器行為的一個重要功能是它能夠在 chroot 環境或 chroot jail 中執行,以確保伺服器主機的安全。如果 DHCP 伺服器受到了外部攻擊,攻擊者仍將被封鎖在 chroot jail 中,從而可防止其存取系統的其他部分。對話方塊的下半部顯示已經定義之宣告的樹狀檢視。使用「新增」、「刪除」和「編輯」修改這些宣告。選取「進階」將帶您到其他的進階對話方塊。請參閱圖形 32.6 「DHCP 伺服器:Chroot Jail 和宣告」。選取新增後,定義要新增的宣告類型。在進階中,檢視伺服器的記錄檔案、設定 TSIG 金鑰管理,並依據 DHCP 伺服器設定調整防火牆組態。

DHCP 伺服器:Chroot Jail 和宣告
圖 32.6︰ DHCP 伺服器:Chroot Jail 和宣告
選取宣告類型

DHCP 伺服器的全域選項由數個宣告組成。此對話方塊可讓您設定宣告類型:子網路主機共用網路群組位址池類別。此範例顯示新子網路的選項 (請參閱圖形 32.7 「DHCP 伺服器:選取宣告類型」)。

DHCP 伺服器:選取宣告類型
圖 32.7︰ DHCP 伺服器:選取宣告類型
子網路組態

此對話方塊可讓您使用 IP 位址及網路遮罩來指定新的子網路。在對話方塊的中間部分,使用「新增」、「編輯」和「刪除」修改所選子網路的 DHCP 伺服器啟動選項。若要設定子網路的動態 DNS,選取 動態 DNS

DHCP 伺服器:設定子網路
圖 32.8︰ DHCP 伺服器:設定子網路
TSIG 金鑰管理

如果在上一個對話方塊中選擇設定動態 DNS,現在可以針對安全區域傳輸設定金鑰管理。選取確定 會帶您到另一個對話方塊,讓您設定動態 DNS 的介面 (請參閱 圖形 32.10 「DHCP 伺服器:動態 DNS 的介面組態」)。

DHCP 伺服器:TSIG 組態
圖 32.9︰ DHCP 伺服器:TSIG 組態
動態 DNS:介面組態

選取「啟用此子網路的動態 DNS」,即可啟用子網路的動態 DNS。完成此操作後,使用下拉式方塊啟用正向與反向區域的 TSIG 金鑰 (確定這些金鑰同時也是 DNS 和 DHCP 伺服器使用的金鑰)。使用「更新全域動態 DNS 設定」,來依據動態 DNS 環境自動更新及調整全域 DHCP 伺服器設定。最後,定義每個動態 DNS 的哪些轉遞和反向區域需要更新,為兩個區域都指定主要名稱伺服器的名稱。選取「確定」返回子網路組態對話方塊 (請參閱圖形 32.8 「DHCP 伺服器:設定子網路」)。再次選取「確定」返回最初的進階組態對話方塊。

DHCP 伺服器:動態 DNS 的介面組態
圖 32.10︰ DHCP 伺服器:動態 DNS 的介面組態
注意
注意:ignore client-updates 選項

為區域啟用動態 DNS 後,YaST 會自動新增 ignore client-updates 選項以改善用戶端相容性。如果不需要,可以停用該選項。

網路介面組態

若要定義 DHCP 伺服器應該監聽的介面以及調整防火牆組態,請從進階組態對話方塊中選取「進階」 › 「介面組態」。從顯示的介面清單中,選取一或多個要由 DHCP 伺服器處理的介面。如果所有子網路中的用戶端都必須能與伺服器通訊,並且伺服器主機還要執行防火牆,請對防火牆進行相應的調整。

注意
注意:DHCP 和 firewalld

請注意,選項開啟選取介面的防火牆 (目前) 不支援 SUSE Linux Enterprise Server 15 SP3 中的 firewalld。若要手動開啟 DHCP 連接埠,請執行

        tux > sudo firewall-cmd --zone=public --permanent --add-service=dhcp
        tux > sudo firewall-cmd --reload
DHCP 伺服器:網路介面和防火牆
圖 32.11︰ DHCP 伺服器:網路介面和防火牆

完成所有組態步驟後,按一下「確定」關閉對話方塊。伺服器現在會以新的組態啟動。

32.2 DHCP 軟體套件

SUSE Linux Enterprise Server 可以使用 DHCP 伺服器,也可以使用 DHCP 用戶端。可用的 DHCP 伺服器是 dhcpd (由 Internet Systems Consortium 發佈)。用戶端提供了 dhcp-client (ISC 也有提供) 及 wicked 套件附帶的工具。

依預設,wicked 工具會連同 wickedd-dhcp4wickedd-dhcp6 服務一起安裝。系統每次開機時,會自動啟動它們,以監視 DHCP 伺服器。它們不需要組態檔來執行其工作,而且大部份的標準設定可以直接使用。如果情況較為複雜,請使用 ISC dhcp-client,此程式透過組態檔 /etc/dhclient.conf/etc/dhclient6.conf 來控制。

32.3 DHCP 伺服器 dhcpd

任何 DHCP 系統的核心都是動態主機組態通訊協定精靈。這個伺服器會依照組態檔 /etc/dhcpd.conf 中定義的設定,租用位址並監看其使用情形。藉由變更此檔案中的參數及值,系統管理員可以透過數種方式影響程式的行為。請參閱 範例 32.1 「組態檔案 /etc/dhcpd.conf」 中的 /etc/dhcpd.conf 基本範例檔案。

範例 32.1︰ 組態檔案 /etc/dhcpd.conf
default-lease-time 600;         # 10 minutes
max-lease-time 7200;            # 2  hours

option domain-name "example.com";
option domain-name-servers 192.168.1.116;
option broadcast-address 192.168.2.255;
option routers 192.168.2.1;
option subnet-mask 255.255.255.0;

subnet 192.168.2.0 netmask 255.255.255.0
 {
  range 192.168.2.10 192.168.2.20;
  range 192.168.2.100 192.168.2.200;
 }

這個簡單的組態檔應足以讓 DHCP 伺服器在網路中指派 IP 位址。請確定每行結尾都插入分號,否則不會啟動 dhcpd。

範例檔可以分為三個部分。第一個部分定義要求用戶端預設可租用 IP 位址的秒數 (default-lease-time),此時間過後將需要申請續約。其中還包含機器可以保留 DHCP 伺服器指派之 IP 位址、不申請續約的最長期限的陳述式 (max-lease-time)。

在第二部份中,一些基本網路參數定義於全域層級:

  • option domain-name 定義了您網路的預設網域。

  • 利用 option domain-name-servers 項目,最多可指定三個 DNS 伺服器值,用來將 IP 位址解析為主機名稱,或將主機名稱解析為 IP 位址。最好在設定 DHCP 前先設定機器上或網路上其他位置的名稱伺服器。該名稱伺服器也可以為每個動態位址定義主機名稱,反之亦然。若要瞭解如何設定您自己的名稱伺服器,請參閱 第 31 章 「網域名稱系統

  • option broadcast-address 這一行定義要求用戶端應使用的廣播位址。

  • 利用 option routers,可設定伺服器要將無法傳送至區域網路上之主機的資料封包傳送到什麼地方 (依據提供的來源和目的主機位址及子網路遮罩)。通常情況下,特別是在較小的網路中,此路由與網際網路閘道是完全一樣的。

  • 利用 option subnet-mask,指定指定給用戶端的網路遮罩。

檔案的最後一個部分定義網路,包括子網路遮罩。若要完成設定,請指定 DHCP 精靈用來指派 IP 位址給相關用戶端的位址範圍。在範例 32.1 「組態檔案 /etc/dhcpd.conf」中,用戶端的指定位址可介於 192.168.2.10192.168.2.20 之間或 192.168.2.100192.168.2.200 之間。

編輯這幾行後,便可以使用指令 systemctl start dhcpd 來啟動 DHCP 精靈。該精靈可以立即使用。使用指令 rcdhcpd check-syntax 執行簡短的語法檢查。如果遇到任何組態方面的非預期問題 (例如伺服器因出現錯誤而中止或在啟動時沒有傳回 done),則可以使用指令 journalctl 查詢主系統記錄中的資訊,找出問題所在 (如需更多資訊,請參閱第 17 章 「journalctl:查詢 systemd 日誌)。

在預設的 SUSE Linux Enterprise Server 系統上,出於安全性考量,DHCP 精靈會在 chroot 環境中啟動。組態檔必須複製到 chroot 環境,如此精靈才可以找到這些檔案。通常情況下不需要擔心發生這種情形,因為指令 systemctl start dhcpd 會自動複製檔案。

32.3.1 使用固定 IP 位址的用戶端

DHCP 也可以用來指派預先定義的靜態位址給特定用戶端。明確指派的位址永遠比集區的動態位址優先。當可用位址不足,伺服器必須在用戶端之間重新分配位址時 (舉例而言),動態位址便會過期,靜態位址則不同,它永遠不會過期。

為了識別使用靜態位址設定的用戶端,dhcpd 會使用硬體位址 (硬體位址是全球唯一的固定數字代碼,由六對八位元組組成),用來識別所有網路裝置 (例如,00:30:6E:08:EC:80)。如果相對的行 (如 範例 32.2 「組態檔案中的新增內容」 中所示) 新增到 範例 32.1 「組態檔案 /etc/dhcpd.conf」 的組態檔,DHCP 精靈始終會指定相同的資料集給對應的用戶端。

範例 32.2︰ 組態檔案中的新增內容
host jupiter {
hardware ethernet 00:30:6E:08:EC:80;
fixed-address 192.168.2.100;
}

在第一行中輸入相應用戶端的名稱 (host HOSTNAME,在本例中為 jupiter),在第二行中輸入 MAC 位址。在 Linux 主機上,使用指令 ip link show 並在後面接上網路裝置 (例如,eth0) 可尋找 MAC 位址。輸出應該包含如下內容

link/ether 00:30:6E:08:EC:80

在上述範例中,系統會自動給具有網路卡且 MAC 位址為 00:30:6E:08:EC:80 的用戶端指定 IP 位址 192.168.2.100 及主機名稱 jupiter。幾乎所有情況中輸入的硬體類型會是 ethernet,儘管通常在 IBM 系統上找到的是 token-ring,也是可以支援的。

32.3.2 SUSE Linux Enterprise Server 版本

為了提高安全性,SUSE Linux Enterprise Server 版 ISC DHCP 伺服器在出貨時即套用了 Ari Edelkind 的 non-root/chroot 修補程式。這樣可讓 dhcpd 利用使用者 ID nobody 執行,而且也能在 chroot 環境下 (/var/lib/dhcp) 執行 dhcpd。若要這樣做,組態檔 dhcpd.conf 必須位於 /var/lib/dhcp/etc。init 程序檔啟動時會自動複製檔案到此目錄。

透過檔案 /etc/sysconfig/dhcpd 中的項目,可控制伺服器與此功能相關的行為。若是不要在 chroot 環境下執行 dhcpd,請將 /etc/sysconfig/dhcpd 中的 DHCPD_RUN_CHROOTED 變數設定為 no

若要讓 dhcpd 從 chroot 環境內解析主機名稱,必須也要複製以下其他的組態檔:

  • /etc/localtime

  • /etc/host.conf

  • /etc/hosts

  • /var/run/netconfig/resolv.conf

啟動 init 程序檔時,這些檔案會複製到 /var/lib/dhcp/etc/。如果 /etc/ppp/ip-up 之類的程序檔動態修改了這些檔案,則進行所需變更時,也要考量到這些副本。不過,如果組態檔僅指定 IP 位址 (而不是指定主機名稱) 時,則不需要擔心。

如果組態包含要複製到 chroot 環境的其他檔案,請在檔案 /etc/sysconfig/dhcpd 中的變數 DHCPD_CONF_INCLUDE_FILES 下設定這些檔案。為了確定重新啟動 syslog 精靈後,DHCP 記錄功能仍起作用,/etc/sysconfig/syslog 檔案中還要有另一個項目 SYSLOGD_ADDITIONAL_SOCKET_DHCP

32.4 更多資訊

如需有關 DHCP 的詳細資訊,請參閱 Internet Systems Consortium 的網站 https://www.isc.org/dhcp/。在 dhcpddhcpd.confdhcpd.leasesdhcp-options man 頁面中也可以找到資訊。

33 SLP

要想設定網路用戶端,需要深入瞭解透過網路提供的服務 (例如列印或 LDAP)。為了簡化在網路用戶端上對此類服務的設定,「服務位置通訊協定」 (SLP) 應運而生。SLP 可讓區域網路中的所有用戶端都知道選定服務的可用性和組態資料。支援 SLP 的應用程式可以使用此資訊,以便自動設定。

SUSE® Linux Enterprise Server 支援使用 SLP 所提供的安裝來源進行安裝,並包含許多具有 SLP 整合支援的系統服務。您可以使用 SLP 以提供主要的功能給網路上的用戶端,例如系統上的安裝伺服器、檔案伺服器或是列印伺服器。提供 SLP 支援的服務包括 cupsd、login、ntp、openldap2-client、postfix、rpasswd、rsyncd、saned、sshd (透過 fish)、vnc 和 ypserv。

依預設,系統會安裝在網路用戶端上使用 SLP 服務所需的所有套件。但是,如果要透過 SLP 提供服務,請檢查是否已安裝 openslp-server 套件。

33.1 SLP 前端 slptool

slptool 是一個指令行工具,用於查詢和註冊 SLP 服務。查詢功能對診斷非常有用。下面列出了最重要的 slptool 子指令。slptool --help 會列出所有可用的選項與功能。

findsrvtypes

列出網路上可用的所有服務類型。

tux > slptool findsrvtypes
service:install.suse:nfs
service:install.suse:ftp
service:install.suse:http
service:install.suse:smb
service:ssh
service:fish
service:YaST.installation.suse:vnc
service:smtp
service:domain
service:management-software.IBM:hardware-management-console
service:rsync
service:ntp
service:ypserv
findsrvs SERVICE_TYPE

列出提供 SERVICE_TYPE 的所有伺服器

tux > slptool findsrvs service:ntp
service:ntp://ntp.example.com:123,57810
service:ntp://ntp2.example.com:123,57810
findattrs SERVICE_TYPE//HOST

列出 HOSTSERVICE_TYPE 的屬性

tux > slptool findattrs service:ntp://ntp.example.com
(owner=tux),(email=tux@example.com)
register SERVICE type//HOST:PORT "(ATTRIBUTE=VALUE),(ATTRIBUTE=VALUE)"

HOST 上使用選擇性屬性清單註冊 SERVICE_TYPE

slptool register service:ntp://ntp.example.com:57810 \
"(owner=tux),(email=tux@example.com)"
deregister SERVICE_TYPE//host

HOST 上取消註冊 SERVICE_TYPE

slptool deregister service:ntp://ntp.example.com

如需更多資訊,請執行 slptool --help

33.2 透過 SLP 提供服務

若要提供 SLP 服務,SLP 精靈 (slpd) 必須正在執行。就像 SUSE Linux Enterprise Server 中的大多數系統服務一樣,slpd 透過單獨的啟動程序檔來控制。安裝完成後,依預設此精靈將處於非啟動狀態。若要為目前的工作階段啟用該精靈,請執行 sudo systemctl start slpd。如果 slpd 應在系統啟動時啟動,請執行 sudo systemctl enable slpd

SUSE Linux Enterprise Server 中的許多應用程式透過 libslp 程式庫已經具有整合的 SLP 支援。如果尚未使用 SLP 支援來編譯服務,請使用下列方式之一來透過 SLP 進行編譯:

使用 /etc/slp.reg.d 進行的靜態註冊

針對每個新的服務建立個別的註冊檔。下面的範例會註冊一個掃描器服務:

## Register a saned service on this system
## en means english language
## 65535 disables the timeout, so the service registration does
## not need refreshes
service:scanner.sane://$HOSTNAME:6566,en,65535
watch-port-tcp=6566
description=SANE scanner daemon

在此檔案中最重要的一行為 service URL,它是以 service: 開始。這包含服務類型 (scanner.sane) 以及位址 (可在其中找到伺服器可用的服務)。$HOSTNAME 會以完整的主機名稱自動取代。接著可以找到相關服務的 TCP 埠名稱,它們之間是以冒號分隔。然後輸入服務應該出現的語言以及註冊期間的秒數。這些都應該使用逗號與服務 URL 分隔。在 065535 之間設定註冊期間的值。0 會防止註冊。65535 會移除所有的限制。

註冊檔另外還包含 watch-port-tcpdescription 兩個變數。watch-port-tcp 將 SLP 服務宣告連結至由 slpd 檢查到的服務狀態,即相關服務是否啟用。第二個變數是對顯示在適當瀏覽器中的服務,提供更為精確的描述。

提示
提示:YaST 與 SLP

當您在模組對話方塊中啟動 SLP 時,一些由 YaST 所仲介的服務 (例如安裝伺服器或 YOU 伺服器) 會自動執行此註冊。接著 YaST 就會為這些服務建立註冊檔。

使用 /etc/slp.reg 進行的靜態註冊

此方法與使用 /etc/slp.reg.d 的程序的唯一區別在於所有服務都會在中心檔案內分組。

使用 slptool 進行的動態註冊

如果要動態註冊服務而不使用組態檔案,請使用 slptool 指令行公用程式。該公用程式還可用於取消註冊某個現有服務產品,而無需重新啟動 slpd。如需詳細資料,請參閱第 33.1 節 「SLP 前端 slptool

33.2.1 設定 SLP 安裝伺服器

在網路中透過 SLP 宣告安裝資料可簡化網路安裝,因為透過 SLP 查詢會自動要求提供伺服器 IP 位址或安裝媒體路徑等安裝資料。如需指示,請參閱Book “部署指南 ”, Chapter 16 “設定網路安裝來源”

33.3 更多資訊

RFC 2608、2609、2610

RFC 2608 一般會處理 SLP 的定義。RFC 2609 會處理更加詳細的服務 URL 語法,而 RFC 2610 則會透過 SLP 處理 DHCP。

http://www.openslp.org

OpenSLP 計劃的首頁。

/usr/share/doc/packages/openslp

此目錄包含 openslp-server 套件隨附的 SLP 文件,包括 README.SuSE (含有 SUSE Linux Enterprise Server 詳細資料)、RFC 以及兩個介紹性的 HTML 文件。要使用 SLP 功能的程式設計師可參閱 SUSE 軟體開發套件隨附的 openslp-devel 套件中的《Programmers Guide》(程式設計指南),以瞭解詳細資訊。

34 Apache HTTP 伺服器

根據 http://www.netcraft.com/ 的調查表明,Apache HTTP 伺服器 (Apache) 是世界上使用最廣泛的 Web 伺服器。它由 Apache 軟體基金會 (http://www.apache.org/) 研發,可在大部分作業系統上使用。SUSE® Linux Enterprise Server 隨附 Apache 2.4 版本。本章將介紹如何安裝、組態設定與設定 Web 伺服器,如何使用 SSL、CGI 與其他模組,以及如何排解 Apache 疑難。

34.1 快速入門

本節中的說明可協助您快速設定和啟動 Apache。您必須登入為 root 身分,才能安裝和設定 Apache。

34.1.1 要求

在設定 Apache Web 伺服器之前,請先確定您已符合下列要求:

  1. 此機器的網路已正確設定。如需有關這個主題的詳細資訊,請參閱 第 19 章 「基本網路知識

  2. 此機器的實際系統時間已透過時間伺服器進行同步維護。這是必要動作,因為 HTTP 通訊協定的部分內容會依據正確時間來運作。如需有關這個主題的詳細資訊,請參閱第 30 章 「使用 NTP 同步時間

  3. 已安裝最新的安全性更新。如果不清楚是否已安裝,請執行「YaST 線上更新」。

  4. 防火牆中已開啟預設的 Web 伺服器連接埠 (80)。為此,請將 firewalld 設定為允許在公共區域中使用 http 服務。如需詳細資料,請參閱Book “Security and Hardening Guide”, Chapter 23 “Masquerading and firewalls”, Section 23.4.3 “Configuring the firewall on the command line”

34.1.2 安裝

SUSE Linux Enterprise Server 中的 Apache 預設不會安裝到系統。若要以可直接執行的預先定義標準組態進行安裝,請按照以下步驟操作:

程序 34.1︰ 以預設組態安裝 Apache
  1. 啟動 YaST,然後選取「軟體 ›  軟體管理」。

  2. 選擇 檢視 ›  模式 ,然後選取 Web 與 LAMP 伺服器

  3. 請確認安裝個別套件,以完成此安裝程序。

34.1.3 開始

您可讓 Apache 在開機時自動啟動或者手動將其啟動。

為確定 Apache 會在開機期間於目標 multi-user.targetgraphical.target 中自動啟動,請執行以下指令:

tux > sudo systemctl enable apache2

如需 SUSE Linux Enterprise Serversystemd 目標的詳細資訊,以及 YaST 服務管理員的描述,請參閱第 15.4 節 「使用 YaST 管理服務」

若要使用外圍程序手動啟動 Apache,請執行 systemctl start apache2

程序 34.2︰ 檢查 Apache 是否在執行中

如果您在啟動 Apache 時未接收到錯誤訊息,這通常表示 Web 伺服器正在執行。若要對此進行測試:

  1. 啟動瀏覽器,並開啟 http://localhost/

    如果 Apache 已啟動且正在執行,系統會顯示「正常運作!」的測試頁面。

  2. 如果此頁面沒有出現,請參閱第 34.9 節 「疑難排解」

現在網頁伺服器已經開始執行,您可以加入自己的文件、根據個人需求調整組態,或是安裝模組來新增功能。

34.2 設定 Apache

SUSE Linux Enterprise Server 提供了兩個組態選項:

手動設定組態可以提供較詳細的設定,但是缺乏 YaST GUI 提供的方便性。

重要
重要:在組態變更後重新載入或重新啟動 Apache

大多數組態變更需要重新載入 (有些還需要重新啟動) Apache 才能生效。請使用 systemctl reload apache2 以手動方式重新載入 Apache,或使用第 34.3 節 「啟動和停止 Apache」中所述的其中一個重新啟動選項。

如果使用 YaST 來設定 Apache,依照第 34.2.3.2 節 「HTTP 伺服器組態」中所述將「HTTP 服務」設定為「已啟用」,即可讓上述操作自動完成。

34.2.1 Apache組態檔案

本節提供 Apache 組態檔案的綜覽。如果使用 YaST 進行組態設定,則不需要變更這些檔案,但如果以後要切換到手動組態設定,這些資訊可能非常有用。

您可以在下列兩個不同位置找到 Apache 組態檔案:

34.2.1.1 /etc/sysconfig/apache2

/etc/sysconfig/apache2 可控制部分的 Apache 全域設定,例如要載入的模組、要包含的其他組態檔案、伺服器應該啟動的旗標,以及應該新增至指令行的旗標。此檔案對每個組態選項都進行了詳細說明,因此本文不予以介紹。針對一般用途的網頁伺服器,在 /etc/sysconfig/apache2 中的設定應該可以符合任何組態需求。

34.2.1.2 /etc/apache2/

/etc/apache2/ 代管了 Apache 的所有組態檔案。以下各節將說明每個檔案的用途。每個檔案都包括數個組態選項 (也稱指令)。在這些檔案中的每個組態選項都會詳加說明,因此本文將不予以介紹。

Apache 組態檔案的組織方式如下:

/etc/apache2/
     |
     |- charset.conv
     |- conf.d/
     |   |
     |   |- *.conf
     |
     |- default-server.conf
     |- errors.conf
     |- httpd.conf
     |- listen.conf
     |- magic
     |- mime.types
     |- mod_*.conf
     |- server-tuning.conf
     |- ssl.*
     |- ssl-global.conf
     |- sysconfig.d
     |   |
     |   |- global.conf
     |   |- include.conf
     |   |- loadmodule.conf . .
     |
     |- uid.conf
     |- vhosts.d
     |   |- *.conf
/etc/apache2/ 中的 Apache 組態檔案
charset.conv

指定不同語言所要使用的字元集。請不要編輯此檔案。

conf.d/*.conf

組態檔案由其他模組新增。這些組態檔案可以依實際需要包含至虛擬主機組態。如需範例,請參閱 vhosts.d/vhost.template。若要執行這個動作,您可以為不同的虛擬主機提供不同的模組組合。

default-server.conf

使用合理預設值設定所有虛擬主機的全域組態。這時不是變更組態值,而是採用虛擬主機組態覆寫組態值。

errors.conf

定義 Apache 處理錯誤的方式。若要自訂這些傳送給所有虛擬主機的訊息,請編輯此檔案。另外一種方法是覆寫虛擬主機組態中的這些指示詞。

httpd.conf

主要的 Apache 伺服器組態檔案。請勿變更此檔案。此檔案主要包含 Include 陳述式和全域設定。為此處列出的相關組態檔案覆寫全域設定。變更虛擬主機組態的主機特定設定 (例如文件根目錄)。

listen.conf

繫結 Apache 至特定的 IP 位址與連接埠在此檔案中也可以設定以名稱為基礎的虛擬主機。如需詳細資料,請參閱第 34.2.2.1.1 節 「以名稱為基礎的虛擬主機」

magic

mime_magic 模組的資料,此模組可協助 Apache 自動判斷不明檔案的 MIME 類型。請不要變更此檔案。

mime.types

系統已知的 MIME 類型 (實際上是 /etc/mime.types 的連結)。請不要編輯此檔案。如果您需要新增這裡未列出的 MIME 類型,請將它們新增到 mod_mime-defaults.conf

mod_*.conf

預設已安裝之模組的組態檔案。如需詳細資訊,請參閱第 34.4 節 「安裝、啟用和設定模組」。請注意,選用模組的組態檔案會存放在 conf.d 目錄。

server-tuning.conf

包含不同 MPM 的組態指令 (請參閱第 34.4.4 節 「多處理模組」) 和可控制 Apache 效能的一般組態選項。請在變更此檔案之後為網頁伺服器進行適當測試。

ssl-global.confssl.*

全域 SSL 組態和 SSL 證書資料。如需詳細資訊,請參閱第 34.6 節 「使用 SSL 設定安全的 Web 伺服器」

sysconfig.d/*.conf

自動從 /etc/sysconfig/apache2 產生的組態檔案。請勿改變其中任何檔案 -- 而是編輯 /etc/sysconfig/apache2。請不要將其他組態檔案置於此目錄中。

uid.conf

指定要在哪個使用者和群組 ID 之下執行 Apache。請不要變更此檔案。

vhosts.d/*.conf

您的虛擬主機組態應存放於此處。該目錄包含採用或不採用 SSL 之虛擬主機的樣板檔案。此目錄中以 .conf 結尾的每個檔案都會自動包含在 Apache 組態中。如需詳細資訊,請參閱第 34.2.2.1 節 「虛擬主機組態」

34.2.2 以手動方式設定 Apache

以手動方式設定 Apache 是指以 root 使用者身分來編輯純文字組態檔案。

34.2.2.1 虛擬主機組態

「虛擬主機」一詞,是形容 Apache 從同一部實體機器提供多個通用資源識別字串 (URI,Universal Resource Identifier) 的能力。這是指同時由一部實體電腦的單一網頁伺服器來執行多個領域 (例如,www.example.com 和 www.example.net)。

使用虛擬主機的目的,經常是為了節省管理工作 (只需要維護一部網頁伺服器) 和硬體開銷 (不需要將各個網域安裝在專屬伺服器上)。虛擬主機可以使用名稱、IP 或是連接埠作為基礎。

若要列出所有現有的虛擬主機,請使用指令 apache2ctl -S。該指令將輸出一份清單,顯示預設伺服器和所有虛擬主機,以及它們的 IP 位址和監聽埠。此外,該清單還顯示每個虛擬主機在組態檔案中的位置。

虛擬主機可依照第 34.2.3.1.4 節 「虛擬主機」中所述透過 YaST 設定,或是手動編輯組態檔案來設定。依預設,系統會根據 /etc/apache2/vhosts.d/ 中每部虛擬主機一個組態檔案的設定,為在 SUSE Linux Enterprise Server 中執行的 Apache 做好準備。此目錄中副檔名為 .conf 的所有檔案,都會自動包含至組態中。這個目錄會提供虛擬主機的基本樣板 (vhost.template,或是適用於提供 SSL 支援之虛擬主機的 vhost-ssl.template)。

提示
提示:永遠要建立虛擬主機組態

建議您務必要建立虛擬主機組態檔案,即使網頁伺服器只代管一個網域。如此,您不但可以將網域專屬組態存放在一個檔案中,還可以隨時回復至運作正常的基本組態,只需移動、刪除或重新命名虛擬主機的組態檔案即可。同樣地,您應該也要分別為每個虛擬主機建立組態。

使用名稱型虛擬主機時,建議設定預設組態,以便在網域名稱與虛擬主機組態不相符時使用。系統會首先載入預設虛擬主機的組態。由於組態檔案的順序由檔案名稱決定,因此請在預設虛擬主機組態檔案名稱的開頭使用底線字元 (_),以確定讓該檔案最先載入 (例如:_default_vhost.conf)。

<VirtualHost></VirtualHost> 區塊包含要套用到特定網域的資訊。當 Apache 接收到來自訂義的虛擬主機的用戶端要求時,就會使用本節所包含的指示詞。幾乎所有指示詞都可以用於虛擬主機網路位置。如需更多有關 Apache 組態指示詞的詳細資訊,請參閱http://httpd.apache.org/docs/2.4/mod/quickreference.html

34.2.2.1.1 以名稱為基礎的虛擬主機

使用以名稱為基礎的虛擬主機時,每個 IP 位址可以為數個網站提供服務。Apache 會使用用戶端所傳送之 HTTP 標頭中的主機欄位,將要求連接到與其中一個虛擬主機宣告相符的 ServerName 項目。如果沒有找到相符的 ServerName,就會預設使用第一個指定的虛擬主機。

第一步是為要提供服務的每一個不同的名稱型主機建立 <VirtualHost> 區段。在每個 <VirtualHost> 區塊內部,您至少需要一個 ServerName 指令來指定要為哪個主機提供服務,並需要一個 DocumentRoot 指令來顯示該主機的內容位於檔案系統中的哪個位置。

範例 34.1︰ 基於名稱的 VirtualHost 項目的基本範例
<VirtualHost *:80>
# This first-listed virtual host is also the default for *:80
ServerName www.example.com
ServerAlias example.com
DocumentRoot /srv/www/htdocs/domain
</VirtualHost>

<VirtualHost *:80>
ServerName other.example.com
DocumentRoot /srv/www/htdocs/otherdomain
</VirtualHost>

開啟的 VirtualHost 標籤會將 IP 位址 (或完全合格的網域名稱) 當作名稱型虛擬主機組態的引數。連結埠號碼指令是選填項目。

允許使用萬用字元 * 做為 IP 位址的替代符號。如果是使用 IPv6 位址,該位址就必須用方括號包住。

範例 34.2︰ 基於名稱的 VirtualHost 指令
<VirtualHost 192.168.3.100:80>
  ...
</VirtualHost>

<VirtualHost 192.168.3.100>
  ...
</VirtualHost>

<VirtualHost *:80>
  ...
</VirtualHost>

<VirtualHost *>
  ...
</VirtualHost>

<VirtualHost [2002:c0a8:364::]>
  ...
</VirtualHost>
34.2.2.1.2 以 IP 為基礎的虛擬主機

此虛擬主機組態替代方法需要為一台機器設定多個 IP 位址。一個 Apache 例項可裝載多個網域,每個網域都會指定不同的 IP。

實體伺服器必須為每部以 IP 為基礎的虛擬主機設定一個 IP 位址。當該電腦沒有安裝多張網路卡時,也可以使用虛擬網路介面 (IP 別名)。

以下範例顯示,Apache 正執行於 IP 為 192.168.3.100 的機器上,並負責代管 IP 位址為 192.168.3.101192.168.3.102 的兩個網域。每部虛擬伺服器都必須具備個別的 VirtualHost 區塊。

範例 34.3︰ 基於 IP 的 VirtualHost 指令
<VirtualHost 192.168.3.101>
  ...
</VirtualHost>

<VirtualHost 192.168.3.102>
  ...
</VirtualHost>

這裡出淚的 VirtualHost 指示詞,只能指定給 192.168.3.100 以外的其他介面。如果 192.168.3.100 也有設定 Listen 指示詞,這時就必須建立另一個以 IP 為基礎的虛擬主機,來回應 HTTP 要求給該介面 -- 另一種做法是套用預設伺服器組態 (/etc/apache2/default-server.conf) 所顯示的指示詞。

34.2.2.1.3 基本虛擬主機組態

每個虛擬主機組態中至少要有下列指令,才能設定虛擬主機。如需瞭解更多選項的詳細資訊,請參閱 /etc/apache2/vhosts.d/vhost.template

ServerName

完全合格網域名稱,其下是應該要建立位址的主機。

DocumentRoot

目錄路徑,Apache 會從此路徑為此主機提供檔案。基於安全性考量,存取整個檔案系統是預設禁止的動作,所以您必須明確解除鎖定這個位在 Directory 容器中的目錄。

ServerAdmin

伺服器管理員的電子郵件地址。這個地址可顯示在 Apache 建立的錯誤頁面 (舉例說明)。

ErrorLog

此虛擬主機的錯誤記錄檔案。雖然沒必要為每個虛擬主機分別建立錯誤記錄檔案,但是多數人會這樣做,以便除錯更加容易。/var/log/apache2/ 是 Apache 記錄檔案的預設目錄。

CustomLog

此虛擬主機的存取記錄檔案。雖然沒必要為每個虛擬主機分別建立存取記錄檔案,但是多數人會這樣做,以便分別為每部主機分析存取統計資料。/var/log/apache2/ 是 Apache 記錄檔案的預設目錄。

正如前面所述,存取整個檔案系統已因安全性考量而預設為禁止動作。因此,請將 Apache 要處理之檔案所在的目錄明確解除鎖定 — 例如 DocumentRoot

<Directory "/srv/www/www.example.com/htdocs">
  Require all granted
</Directory>
注意
注意:Require all granted

在先前版本的 Apache 中,陳述式 Require all granted 表達為:

Order allow,deny
Allow from all

mod_access_compat 模組仍然支援這種舊式語法。

此完整組態看起來如下:

範例 34.4︰ 基本 VirtualHost 組態
<VirtualHost 192.168.3.100>
  ServerName www.example.com
  DocumentRoot /srv/www/www.example.com/htdocs
  ServerAdmin webmaster@example.com
  ErrorLog /var/log/apache2/www.example.com_log
  CustomLog /var/log/apache2/www.example.com-access_log common
  <Directory "/srv/www/www.example.com/htdocs">
  Require all granted
  </Directory>
</VirtualHost>

34.2.3 使用 YaST 設定 Apache

若要使用 YaST 來設定您的 Web 伺服器,請啟動 YaST 並選取「網路服務 ›  HTTP 伺服器」。第一次啟動模組時,HTTP 伺服器精靈會啟動,提示您對伺服器管理進行一些基本設定。完成精靈之後,每當您呼叫「HTTP 伺服器」模組時,「HTTP 伺服器組態」對話方塊就會啟動。如需詳細資訊,請參閱 第 34.2.3.2 節 「HTTP 伺服器組態」

34.2.3.1 HTTP 伺服器精靈

HTTP 伺服器精靈包含有五個步驟。在最後一個步驟的對話方塊中,您可以進入進階組態模式以執行更具體的設定。

34.2.3.1.1 網路裝置選擇

在此,您可以指定 Apache 用來監聽內送要求的網路介面和連接埠。您可以選取任何現有網路介面及其 IP 位址的組合。若連接埠 (連接埠隸屬以下三種:已知埠、註冊埠和動態或私人埠) 不供其他服務使用,則皆可供您使用。預設設定為在連接埠 80 上監聽所有網路介面 (IP 位址)。

核取「在防火牆中開啟埠」選項,可在防火牆中開啟 Web 伺服器監聽的連接埠。若要使網頁伺服器在網路 (包括 LAN、WAN 或公用網際網路) 上為可用狀態,請核取此選項。只有在測試時,並且此時不須由外部網路存取 Web 伺服器,才可以關閉該連接埠。如果您有多個網路介面,請按一下防火牆細節以指定應在哪些介面上開啟連接埠。

「下一步」繼續設定組態。

34.2.3.1.2 模組

使用「模組」組態選項,可以啟用或停用 Web 伺服器應支援的程序檔語言。如需有關啟用或停用其他模組的詳細資訊,請參閱第 34.2.3.2.2 節 「伺服器模組」。按一下下一步,繼續進行下一個對話方塊。

34.2.3.1.3 預設主機

此選項與預設網頁伺服器相關。正如第 34.2.2.1 節 「虛擬主機組態」內容所述,Apache 可以在一部實體機器上提供多個虛擬主機。組態檔案中第一個宣告的虛擬主機通常稱為預設主機。每部虛擬主機都會繼承預設主機的組態。

若要編輯主機設定 (又稱為指令),請在表格中選取相應項目,然後按一下「編輯」。若要新增指示詞,請按一下「新增」。若要刪除指示詞,請選取該指示詞,然後按一下刪除

HTTP 伺服器精靈:預設主機
圖 34.1︰ HTTP 伺服器精靈:預設主機

這是伺服器預設值的清單:

Document Root

目錄路徑,Apache 會從此路徑為此主機提供檔案。/srv/www/htdocs 是預設位置。

Alias

使用 Alias 指令可以將 URL 對應到實體檔案系統位置。這表示某個路徑即使不在檔案系統的 Document Root 中,仍可藉由該路徑別名的 URL 進行存取。

預設的 SUSE Linux Enterprise Server Alias /icons 指向 /usr/share/apache2/icons,做為目錄索引檢視中顯示的 Apache 圖示。

ScriptAlias

功能相似於 Alias 指示詞,ScriptAlias 指示詞可以將 URL 映射到檔案系統位置。兩者差別在於 ScriptAlias 可以將目標目錄指定作為 CGI 位置,表示該 CGI 程序檔必須在該位置執行。

Directory

使用 Directory 設定時,您可以指定一組組態選項,只將其中的選項套用到特定目錄。

在此可以設定 /srv/www/htdocs/usr/share/apache2/icons/srv/www/cgi-bin 目錄的存取和顯示選項。其中預設值應該不需要進行改變。

Include

使用 Include 可以指定其他的組態檔案。預先設定的 Include 指示詞有兩個:/etc/apache2/conf.d/ 為外部模組隨附之組態檔所在的目錄。使用此指示詞時,此目錄中所有以 .conf 結尾的檔案都會包含在內。使用第二個指示詞時,/etc/apache2/conf.d/apache2-manual.conf,即 apache2-manual 組態檔將包含在內。

Server Name

這個項目可以指定用戶端用來聯絡網頁伺服器的預設 URL。請使用完全合格的網域名稱 (FQDN) 來連接 http://FQDN/ 的網頁伺服器或其 IP 位址。您不能在此選擇任意名稱 -- 該伺服器必須是已知採用這個名稱。

Server Administrator E-Mail

伺服器管理員的電子郵件地址。這個地址可顯示在 Apache 建立的錯誤頁面 (舉例說明)。

完成設定預設主機步驟後,請按一下下一步,繼續下一個組態步驟。

34.2.3.1.4 虛擬主機

在此步驟中,精靈會顯示已完成設定之虛擬主機的清單 (請參閱第 34.2.2.1 節 「虛擬主機組態」)。如果在啟動 YaST HTTP 精靈之前尚未進行手動變更,則不會顯示虛擬主機。

若要新增主機,請按一下「新增」開啟對應的對話方塊,並在其中輸入主機的基本資訊,例如「伺服器名稱」、「伺服器內容根目錄」」(DocumentRoot) 和「管理員電子郵件」。「伺服器解析」可用來決定主機的識別方式 (以名稱為基礎或是以 IP 為基礎)。透過「變更虛擬主機 ID」指定名稱或 IP 位址

按一下下一步,繼續進入虛擬主機組態對話方塊的第二部分。

在虛擬主機組態對話方塊的第二部分中,您可以指定是否要啟用 CGI 程序檔、以及這些程序檔要使用哪個目錄。您也可以在此啟用 SSL。如果執行了這個動作,您就必須同時指定證書的路徑。如需有關 SSL 和證書的詳細資訊,請參閱第 34.6.2 節 「設定提供 SSL 的 Apache」。使用「目錄索引」選項,可以指定當用戶端要求目錄時要顯示哪個檔案 (預設為 index.html)。新增一或多個檔案名稱 (以空格分隔) 可變更此設定。使用啟用公用 HTML,便可在伺服器的 http://www.example.com/~USER 下存取使用者公用目錄 (~USER/public_html/) 的內容。

重要
重要:建立虛擬主機

您不能在此隨意新增虛擬主機。如果使用以名稱為基礎的虛擬主機,就必須在網路上解析每部主機名稱。如果是使用以 IP 為基礎的虛擬主機,每個可用 IP 位址就只能指派一部主機。

34.2.3.1.5 摘要

這是精靈的最後一個步驟。您可以在此處決定 Apache 伺服器啟動的方式和時間:開機時啟動或手動啟動。同時可檢視目前已完成之組態的簡短摘要。如果您接受目前設定,請按一下「完成」以完成組態設定。若要進行變更,請按一下上一步,直至所需的對話方塊顯示。按一下 HTTP 伺服器進階組態便可開啟第 34.2.3.2 節 「HTTP 伺服器組態」 所介紹的對話方塊。

HTTP 伺服器精靈:摘要
圖 34.2︰ HTTP 伺服器精靈:摘要

34.2.3.2 HTTP 伺服器組態

HTTP 伺服器組態」對話方塊可提供比精靈更多的組態調整 (精靈 只會在第一次設定網頁伺服器時執行)。其中包含下列要介紹的四個索引標籤。在此變更的任何選項都無法立即生效 -- 您必須先按一下「完成」進行確認之後,它們才會生效。按一下「中止」,系統將不變更組態模組,並會捨棄您的變更。

34.2.3.2.1 傾聽埠和位址

在「HTTP 服務」中,選取執行 (啟用) 或停止 (停用) Apache。在「監聽埠」中,「新增」、「編輯」或「刪除」可透過其使用伺服器的位址和連接埠。預設會在連接埠 80 上監聽所有介面。任何情況下都必須核取「在防火牆中開啟埠」,否則將無法從外部連接 Web 伺服器。只有在測試時,並且此時不須由外部網路存取 Web 伺服器,才可以關閉該連接埠。如果您有多個網路介面,請按一下防火牆細節以指定應在哪些介面上開啟連接埠。

使用「記錄檔案」時,可檢視存取記錄檔案或錯誤記錄檔案。測試組態時此選項非常有用。記錄檔案會在另一個視窗中開啟,您也可以在此處重新啟動或重新載入 Web 伺服器。如需詳細資料,請參閱第 34.3 節 「啟動和停止 Apache」。這些指令會立即生效,其記錄訊息也會即刻顯示。

HTTP 伺服器組態:監聽連接埠和位址
圖 34.3︰ HTTP 伺服器組態:監聽連接埠和位址
34.2.3.2.2 伺服器模組

您可以按一下「切換狀態」,變更 Apache2 模組的狀態 (啟用或停用)。按一下「新增模組」,可新增已經安裝但是未列出的新模組。若要更進一步認識模組,請參閱第 34.4 節 「安裝、啟用和設定模組」

HTTP 伺服器組態:伺服器模組
圖 34.4︰ HTTP 伺服器組態:伺服器模組
34.2.3.2.3 主要主機

這些對話方塊相同於前面已介紹過的對話方塊。請參閱第 34.2.3.1.3 節 「預設主機」第 34.2.3.1.4 節 「虛擬主機」

34.3 啟動和停止 Apache

如果已如第 34.2.3 節 「使用 YaST 設定 Apache」中所述使用 YaST 設定,Apache 會在開機時間在 multi-user.targetgraphical.target 中啟動。若要變更此行為,可以使用 YaST 的「服務管理員」或使用 systemctl 指令行工具 (systemctl enablesystemctl disable)。

若要在執行中的系統上啟動、停止或操作 Apache,請依照下方所述使用 systemctlapachectl 指令。

如需 systemctl 指令的一般資訊,請參閱第 15.2.1 節 「管理正在執行系統中的服務」

systemctl status apache2

檢查 Apache 是否已啟動。

systemctl start apache2

啟動尚未執行的 Apache。

systemctl stop apache2

透過終止父處理程序來停止 Apache。

systemctl restart apache2

停止 Apache,然後重新啟動。啟動之前並未在執行中的網頁伺服器。

systemctl try-restart apache2

若 Apache 已在執行中,則將其停止並重新啟動。

systemctl reload apache2

通知所有 Apache 衍生處理程序在關機之前先完成各自的要求,以停止網頁伺服器。每個程序結束後都會被一個新啟動的程序所取代,最終會將 Apache 完全重新啟動

提示
提示:在生產環境中重新啟動 Apache

使用此指令,您無需中斷連接,即可啟用 Apache 組態中的變更。

systemctl stop apache2

GracefulShutdownTimeout 所設定的指定期間後停止 Web 伺服器,以確保系統可以完成現有的要求。

apachectl configtest

在不影響執行中之網頁伺服器的情況下,檢查組態檔案的語法。因為這項檢查會在每次伺服器啟動、重新載入或重新啟動時強制進行,所以通常並不需要明確執行該測試 (如果這時有找到組態錯誤,網頁伺服器就不會完成啟動、重新載入或是重新啟動)。

apachectl statusapachectl fullstatus

分別傾印簡要或完整的狀態畫面。需要啟用 mod_status 模組,並安裝文字型瀏覽器 (例如 linksw3m)。除此之外,必須將 STATUS 新增至 /etc/sysconfig/apache2 檔案的 APACHE_SERVER_FLAGS

提示
提示:其他旗標

如果在指令中指定其他旗標,這些旗標將傳遞到 Web 伺服器。

34.4 安裝、啟用和設定模組

Apache 軟體採用了模組化設計:除了部分核心任務,其餘所有功能皆由模組處理。這方面的發展很快,甚至連 HTTP 都是由模組 (http_core) 處理。

Apache 模組可以在建構時編譯成 Apache 二進位檔案,或在執行時期動態載入。如需瞭解如何動態載入模組的詳細資訊,請參閱第 34.4.2 節 「啟用和停用」

Apache 模組可以分成四種不同類別:

基礎模組

基本模組會依預設編譯到 Apache。SUSE Linux Enterprise Server 的 Apache 中僅編譯了 mod_so (載入其他模組要用到) 與 http_core。所有其他模組均以共用物件的方式提供,即在執行期間加入,而不包含在伺服器二進位檔案中。

延伸模組

一般說來,Apache 軟體套件會包含標示為延伸的模組,但是通常不會使用靜態方式將這些模組編譯到伺服器中。在 SUSE Linux Enterprise Server 中,這類模組以共用物件方式提供,並可在執行時期載入到 Apache。

外部模組

標示為外部的模組不會包含於 Apache 正式發行版本中。不過,SUSE Linux Enterprise Server 提供了其中的幾個模組。

多處理模組 (MPM)

MPM 會負責接收和處理網頁伺服器所收到的要求,因此屬於網頁伺服器軟體的核心部分。

34.4.1 模組安裝

如果您已依照第 34.1.2 節 「安裝」 中所述完成預設安裝,則下列模組此時都已安裝:所有基礎模組與延伸模組、多重處理模組 Prefork MPM 以及外部模組 mod_python

您可以啟動 YaST,然後選擇「軟體 ›  軟體管理」,來安裝其他的外部模組。現在,請選擇檢視 ›  搜尋,然後搜尋 apache。結果清單中除其他套件之外,還會包含所有可用的外部 Apache 模組。

34.4.2 啟用和停用

以手動方式或透過 YaST 啟用或停用特定模組。在 YaST 中,需要使用第 34.2.3.1 節 「HTTP 伺服器精靈」中所述的模組組態來啟用或停用程序檔語言模組 (PHP 5 和 Python)。所有其他模組都可以依據第 34.2.3.2.2 節 「伺服器模組」說明步驟來啟用或停用。

如果您想手動啟用或停用這些模組,請分別使用指令 a2enmod MODULEa2dismod MODULEa2enmod -l 會輸出目前所有使用中的模組清單。

重要
重要:包含外部模組的組態檔案

如果您已經手動啟用外部模組,請確定將其組態檔案載入至所有的虛擬主機組態。外部模組的組態檔案會存放在 /etc/apache2/conf.d/ 之下,而且預設會載入 /etc/apache2/default-server.conf。如需更精細的控制,可以將 /etc/apache2/default-server.conf 中的內容設定為備註,並將其僅新增至特定的虛擬主機。如需範例,請參閱 /etc/apache2/vhosts.d/vhost.template

34.4.3 基礎模組和延伸模組

Apache 說明文件中詳細介紹了所有的基本模組和延伸模組。本文件只提供最重要模組的概要說明。如需關於每個模組的詳細資訊,請參閱 http://httpd.apache.org/docs/2.4/mod/

mod_actions

提供在需要特定 MIME 類型 (例如 application/pdf)、具有特定副檔名的檔案 (例如 .rpm) 或特定要求方法 (例如 GET) 時執行程序檔的方法。這是預設啟用的模組。

mod_alias

提供 AliasRedirect 指令,供您將 URL 對應到特定目錄 (Alias),或將所要求的 URL 重新導向到另一個位置。這是預設啟用的模組。

mod_auth*

驗證模組提供了幾種不同的驗證方式:使用 mod_auth_basic 進行基本驗證,或使用 mod_auth_digest 進行摘要驗證。

mod_auth_basicmod_auth_digest 必須與驗證提供者模組 mod_authn_* (例如適用於以文字檔案為基礎之驗證的 mod_authn_file),以及驗證模組 mod_authz_* (例如適用於使用者驗證的 mod_authz_user) 結合使用。

關於此主題的詳細資訊,請參閱 http://httpd.apache.org/docs/2.4/howto/auth.html 上的 Authentication HOWTO

mod_auth_openidc

在 Apache HTTP 伺服器中使用 OpenID Connect 的唯一認可方式是借助 mod_auth_openidc。(請參閱https://openid.net/developers/certified/)。

mod_autoindex

Autoindex 會在沒有任何索引檔案 (例如,index.html) 出現時產生目錄清單。這些索引的外觀可加以設定。這是預設啟用的模組。然而,目錄清單已預設為停用,經由 Options 指示詞來覆寫虛擬主機組態的這項設定。這個模組的預設組態檔案會存放在 /etc/apache2/mod_autoindex-defaults.conf

mod_cgi

執行 CGI 程序檔時必須使用 mod_cgi。這是預設啟用的模組。

mod_deflate

使用這個模組時,Apache 可以設定成即時壓縮成指定檔案類型之後,再進行傳送。

mod_dir

mod_dir 可提供 DirectoryIndex 指示詞,供您用來設定當要求目錄 (預設是 index.html) 時要自動傳遞哪類檔案。它還提供另一項功能:當目錄要求沒有包含末尾斜線時,就會自動重新導向到正確 URL。這是預設啟用的模組。

mod_env

控制傳遞給 CGI 程序檔或 SSI 頁面的環境。可以在呼叫 httpd 程序的外圍程序中設定、取消設定或傳遞環境變數。這是預設啟用的模組。

mod_expires

使用 mod_expires 時,您可以透過傳送 Expires 標頭,來控制代理和瀏覽器快取重新整理文件的頻率。這是預設啟用的模組。

mod_http2

Apache 可以使用 mod_http2 取得對 HTTP/2 通訊協定的支援。在 VirtualHost 中指定 Protocols h2 http/1.1 即可實現支援。

mod_include

mod_include 可讓您使用 Server Side Include (SSI),這項工具會提供動態產生 HTML 頁面的基本功能。這是預設啟用的模組。

mod_info

可透過 http://localhost/server-info/ 提供伺服器組態的綜合綜覽。基於安全性考量,您應該永遠限制這個 URL 的存取權限。依預設,只有 localhost 允許存取這個 URL。可在 /etc/apache2/mod_info.conf 中設定 mod_info

mod_log_config

使用此模組時,您可以設定 Apache 記錄檔案的外觀。這是預設啟用的模組。

mod_mime

Mime 模組會根據所傳送檔案的副檔名 (例如,HTML 文件的副檔名為 text/html) 來確定檔案是否包含正確的 MIME 標頭。這是預設啟用的模組。

mod_negotiation

內容協商 (Content Negotiation) 所需的模組。如需更多詳細資訊,請參閱 http://httpd.apache.org/docs/2.4/content-negotiation.html。這是預設啟用的模組。

mod_rewrite

可提供 mod_alias 的功能,但具備更多功能和更大的靈活性。使用 mod_rewrite 時,您可以依據多個規則、要求標頭和其他條件來重新導向 URL。

mod_setenvif

根據用戶端的要求設定環境變數,如用戶端傳送的瀏覽器字串或用戶端的 IP 位址。這是預設啟用的模組。

mod_spelling

mod_spelling 會嘗試自動修正 URL 中出現的打字錯誤,例如大小寫錯誤。

mod_ssl

啟用網頁伺服器和用戶端之間的加密連接。如需詳細資料,請參閱第 34.6 節 「使用 SSL 設定安全的 Web 伺服器」。這是預設啟用的模組。

mod_status

可透過 http://localhost/server-status/ 提供有關伺服器活動及效能的資訊。基於安全性考量,您應該永遠限制這個 URL 的存取權限。預設僅允許 localhost 存取此 URL。可在 /etc/apache2/mod_status.conf 中設定 mod_status

mod_suexec

mod_suexec 可讓您以不同使用者和群組身分來執行 CGI 程序檔。這是預設啟用的模組。

mod_userdir

啟用 ~USER/ 下使用者特定的目錄。在組態中必須指定 UserDir 指示詞。這是預設啟用的模組。

34.4.4 多處理模組

SUSE Linux Enterprise Server 提供了兩種不同的多重處理模組 (MPM) 來搭配 Apache 使用。

34.4.4.1 Prefork MPM

Prefork MPM 會實作未產生執行緒、正在進行 Prefork 的 Web 伺服器。這個模組會讓 Web 伺服器以類似 Apache 1.x 版的行為作業。在此版本中,Apache 會透過衍生出獨立的子程序,將各個要求分開處理。這樣發生問題的要求就不會影響其他要求,進而避免網頁伺服器出現鎖定現象。

雖然透過這種以處理程序為主的方法可以提供穩定性,但是比起 Worker MPM,Prefork MPM 會耗用較多的系統資源。Unix 作業系統會將 Prefork MPM 當作預設 MPM。

重要
重要:本文件中的 MPM

本文件會假設 Apache 是使用 Prefork MPM。

34.4.4.2 Worker MPM

Worker MPM 會提供多執行緒 Web 伺服器。執行緒是輕量級的處理程序。執行緒和處理程序相比的優點是,它消耗的資源較少。Worker MPM 不只會衍生子處理程序,它還可使用執行緒和伺服器處理程序,來為要求提供服務。預衍生的子程序具有多重執行緒。這種方法因為耗用比 Prefork MPM 更少的系統資源,因此可以提高 Apache 的執行效能。

一個主要缺點就是 Worker MPM 的穩定性:當某執行緒毀損時,處理程序的所有執行緒都會受到影響。最嚴重的情況下,甚至還會造成伺服器當機。尤其是在負載量高的 Apache 上使用通用閘道介面 (CGI) 時,可能就會因執行緒無法與系統資源進行通訊而產生內部伺服器錯誤。在 Apache 上使用 worker MPM 的另外一點爭議,就是並非所有可用的 Apache 模組都能安全地使用執行緒,這樣就無法配合 worker MPM 使用。

警告
警告:將 PHP 模組與 MPM 配合使用

並非所有可用的 PHP 模組都是安全執行緒。因此最好不要搭配 worker MPM 來使用 mod_php

34.4.5 外部模組

此處提供了 SUSE Linux Enterprise Server 隨附的所有外部模組的清單。在列出目錄中找出模組的說明文件。

mod_apparmor

為 Apache 新增支援,以便對 mod_php5 等模組所處理的個別 CGI 程序檔設定 AppArmor 限制。

套件名稱:apache2-mod_apparmor
詳細資訊: Book “Security and Hardening Guide”
mod_php5

PHP 是一種伺服器端、跨平台式的 HTML 內嵌程序檔語言。

套件名稱:apache2-mod_php5
組態檔案:/etc/apache2/conf.d/php5.conf
更多資訊:/usr/share/doc/packages/apache2-mod_php5
mod_python

mod_python 允許在 Apache HTTP 伺服器中內嵌 Python,以便大幅提高效能和增加網頁應用程式的設計彈性。

套件名稱:apache2-mod_python
更多資訊:/usr/share/doc/packages/apache2-mod_python
mod_security

mod_security 提供 Web 應用程式防火牆,用於保護 Web 應用程式免受各種攻擊。此外,它還支援 HTTP 流量監控和即時分析。

套件名稱:apache2-mod_security2
組態檔案:/etc/apache2/conf.d/mod_security2.conf
更多資訊:/usr/share/doc/packages/apache2-mod_security2
文件: http://modsecurity.org/documentation/

34.4.6 編譯

Apache 允許進階使用者編寫自訂模組進行延伸。若要跚apache2-devel 也包含了 apxs2 工具,這是在編譯 Apache 其他模組時,需要用到的工具。

apxs2 可以從原始程式碼進行模組編譯和安裝 (其中包括必要的組態檔案變更),並建立可於 Runtime 載入 Apache 的動態共用物件 (DSO)。

apxs2 二進位檔案位在 /usr/sbin 下方:

  • /usr/sbin/apxs2 — 適合用來建立可配合任何 MPM 使用的延伸模組。安裝位置是 /usr/lib64/apache2

  • /usr/sbin/apxs2-prefork — 適合用於 prefork MPM 模組。安裝位置是 /usr/lib64/apache2-prefork

  • /usr/sbin/apxs2-worker — 適合用於 worker MPM 模組。安裝位置是 /usr/lib64/apache2-worker

請使用下列指令透過原始碼安裝並啟用模組:

tux > sudo cd /path/to/module/source
tux > sudo apxs2 -cia MODULE.c

其中,-c 用於編譯模組,-i 用於安裝模組,-a 用於啟用模組。如需有關 apxs2 的其他選項資訊,請參閱 apxs2(1) man 頁面。

34.5 啟用 CGI 程序檔

Apache 的通用閘道介面 (CGI) 可讓您使用程式或程序檔 (通常稱 CGI 程序檔) 建立動態內容。CGI 程序檔可以用任何程式設計語言來編寫。通常使用 PHP 之類的程序檔語言。

為了使 Apache 能夠傳遞 CGI 程序檔建立的內容,需要啟用 mod_cgi這時也需要用到 mod_alias 模組。這兩種都是預設啟用的模組。如需啟用模組的詳細資訊,請參閱第 34.4.2 節 「啟用和停用」

警告
警告:CGI 安全性

允許伺服器執行 CGI 程序檔會產生潛在的安全性弱點。請參考第 34.8 節 「避免安全性問題」,以取得其他資訊。

34.5.1 Apache 組態

SUSE Linux Enterprise Server 中,CGI 程序檔只能在 /srv/www/cgi-bin/ 目錄中執行。這個位置已設定用來執行 CGI 程序檔。如果您已經建立虛擬主機組態 (請參閱第 34.2.2.1 節 「虛擬主機組態」) 並想要將程序檔放置到主機特定的目錄,則必須解除鎖定和設定此目錄。

範例 34.5︰ VirtualHost CGI 組態
ScriptAlias /cgi-bin/ "/srv/www/www.example.com/cgi-bin/"1

<Directory "/srv/www/www.example.com/cgi-bin/">
 Options +ExecCGI2
 AddHandler cgi-script .cgi .pl3
 Require all granted4
</Directory>

1

告知 Apache 依照 CGI 程序檔方式來處理位在這個目錄中的所有檔案。

2

啟用 CGI 程序檔執行

3

告知伺服器依照 CGI 程序檔方式來處理包含 .pl 和 .cgi 副檔名的檔案。依據個人需要來加以調整。

4

Require 指令控制預設存取狀態。在此範例中,授予指定目錄的存取權並無限制。如需驗證和授權的詳細資訊,請參閱 http://httpd.apache.org/docs/2.4/howto/auth.html

34.5.2 執行範例程序檔

CGI 程式設計不同於「一般」程式設計;因為 CGI 程式和程序檔的最前面必須是 MIME-Type 標頭,例如 Content-type: text/html。這個標頭會傳送到用戶端,使其瞭解所接收內容的類型。其次,程序檔的輸出必須是用戶端 (通常指網頁瀏覽器) 可了解的內容,例如 HTML (一般情況)、純文字或影像。

Apache 套件會在 /usr/share/doc/packages/apache2/test-cgi 提供簡單的測試程序檔。這個程序檔會以純文字方式輸出部分環境變數的內容。請將這段程序檔複製到 /srv/www/cgi-bin/ 或虛擬主機的程序檔目錄 (/srv/www/www.example.com/cgi-bin/),並將其命名為 test.cgi。編輯檔案,讓 #! /bin/sh 位於第一行。

可由 Web 伺服器存取的檔案應該屬於 root 使用者所有。如需其他資訊,請參閱第 34.8 節 「避免安全性問題」。因為網頁伺服器可由不同使用者身分執行,所以 CGI 程序檔必須具備可供全球執行和可供全球讀取等特性。變更 CGI 目錄和使用 chmod 755 test.cgi 指令,便可套用適當的權限。

現在,請呼叫 http://localhost/cgi-bin/test.cgihttp://www.example.com/cgi-bin/test.cgi。這時應該會顯示 CGI/1.0 測試程序檔報告

34.5.3 CGI 疑難排解

如果這時沒有顯示測試程式的輸出結果,而是出現錯誤訊息,請檢查下列項目:

CGI 疑難排解
  • 您是否有在變更組態之後重新載入伺服器?如果沒有,請使用 systemctl reload apache2 重新載入。

  • 您是否已正確設定自訂的 CGI 目錄 (若有的話)?如果您不確定,請在預設的 CGI 目錄 /srv/www/cgi-bin/ 中測試此程序檔,並使用 http://localhost/cgi-bin/test.cgi 進行呼叫。

  • 檔案權限是否正確?請切換至 CGI 目錄並執行 ls -l test.cgi。輸出將以下面的字串開頭

    -rwxr-xr-x  1 root root
  • 請確定程序檔沒有包含任何程式設計錯誤。如果您未變更過 test.cgi,此情況應該就不會發生,但是如果您是使用自己的程式,請務必確定這些程式中沒有任何程式設計錯誤。

34.6 使用 SSL 設定安全的 Web 伺服器

如果 Web 伺服器和用戶端之間會傳輸信用卡資訊等敏感性資料,最好使用需經過驗證的安全加密連接。mod_ssl 會為用戶端和網頁伺服器之間的 HTTP 通訊,提供使用安全通訊端層 (Secure Sockets Layer, SSL)、以及傳輸層安全性 (Transport Layer Security, TLS) 通訊協定的強式加密。使用 TLS/SSL 時,將在 Web 伺服器與用戶端之間建立私人連接。如此便可確保資料完整性,使用戶端與伺服器可以彼此進行驗證。

為了完成這個目的,伺服器會在回覆任何 URL 要求之前,先傳送可證明伺服器有效身分之相關資訊的 SSL 證書。如此即可確保該伺服器是此通訊的唯一正確端點。此外,該證書會在用戶端和伺服器端建立加密連接,以便在沒有洩漏敏感、純文字內容的風險情況下傳輸資訊。

mod_ssl 自身不會實作 TLS/SSL 通訊協定,而是充當 Apache 和 SSL 庫之間的介面。在 SUSE Linux Enterprise Server 中,使用的是 OpenSSL 程式庫。OpenSSL 會自動隨 Apache 完成安裝。

使用 mod_ssl 搭配 Apache 的最明顯特徵,就是 URL 的字首都會加上 https://,而不是 http://

34.6.1 建立 SSL 證書

若要將 TLS/SSL 與 Web 伺服器搭配使用,您需要建立 SSL 證書。網頁伺服器和用戶端在彼此驗證時要用到這項證書,以便讓任一方可以清楚識別對方。為了確保證書的完整性,其必須由每位使用者信任的一方加以簽章。

您可以建立下列三種類型的證書:僅供測試使用的 虛擬 證書、供已定義信任圈使用者使用的自我簽發證書,以及由獨立、公開的證書授權機構 (CA) 簽發的證書。

證書的建立可分為兩個步驟。首先產生證書授權機構的私密金鑰,接著再使用該金鑰簽發伺服器證書。

提示
提示:更多資訊

若要進一步瞭解 TLS/SSL 的概念和定義,請參閱 http://httpd.apache.org/docs/2.4/ssl/ssl_intro.html

34.6.1.1 建立虛擬證書

若要產生虛構證書,請呼叫程序檔 /usr/bin/gensslcert。此操作會建立或覆寫下列檔案。使用 gensslcert 的可選參數可以微調證書。如需詳細資訊,可呼叫 /usr/bin/gensslcert -h

  • /etc/apache2/ssl.crt/ca.crt

  • /etc/apache2/ssl.crt/server.crt

  • /etc/apache2/ssl.key/server.key

  • /etc/apache2/ssl.csr/server.csr

ca.crt 的複製本也會放在 /srv/www/htdocs/CA.crt 提供下載。

重要
重要:僅用於測試

虛構證書絕對不可用於生產環境系統。這類證書只能用於測試目的。

34.6.1.2 建立自行簽署的證書

如果您要設定一個安全 Web 伺服器供內部網路或已定義的一群使用者圈使用,則透過您自己的證書管理中心 (CA) 簽發證書就可能足以有效符合此時的證書需求。請注意,此類網站的造訪者將看到類似此網站不可信的警告,因為網頁瀏覽器不能識別自行簽署的證書。

重要
重要:自行簽署的證書

僅在供認識您、且信任您為證書管理中心之使用者存取的網頁伺服器上,方可使用自我簽署證書。我們不建議您在公開商店等場所使用此類證書。

首先您需要產生證書簽署要求 (CSR)。然後使用 openssl,並使用 PEM 作為證書格式。在此步驟中,系統會要求您輸入密碼片語並回答若干問題。請記住該密碼片語,日後還將使用。

tux > sudo openssl req -new > new.cert.csr
Generating a 1024 bit RSA private key
..++++++
.........++++++
writing new private key to 'privkey.pem'
Enter PEM pass phrase:1
Verifying - Enter PEM pass phrase:2
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:3
State or Province Name (full name) [Some-State]:4
Locality Name (eg, city) []:5
Organization Name (eg, company) [Internet Widgits Pty Ltd]:6
Organizational Unit Name (eg, section) []:7
Common Name (for example server FQDN, or YOUR name) []:8
Email Address []:9

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:10
An optional company name []:11

1

填寫您的密碼片語。

2

再次填寫密碼片語 (並記住它)。

3

填寫以 2 個字母表示的國家/地區代碼,例如 GBCZ

4

填寫您所在的州/省。

5

填寫城市名稱,例如 Prague

6

填寫您在職的組織機構名稱。

7

填寫您的組織單位,沒有則保留為空白。

8

填寫伺服器的網域名稱,或者您的名字和姓氏。

9

填寫您的辦公電子郵件地址。

10

將挑戰密碼保留空白,否則您每次重新啟動 Apache Web 伺服器時都需要輸入該密碼。

11

填寫選填的公司名稱,或保留為空白。

現在,您可以產生證書。您將再次使用 openssl,並且證書的格式是預設 PEM

程序 34.3︰ 產生證書
  1. 將金鑰的私密部分輸出至 new.cert.key。系統將提示您輸入在建立證書簽署要求 (CSR) 時所輸入的密碼片語。

    tux > sudo openssl rsa -in privkey.pem -out new.cert.key
  2. 根據您在簽署要求中填寫的資訊產生證書的公開部分。-days 選項指定證書到期之前的時間長度。您可以撤銷證書,或在證書到期之前更換證書。

    tux > sudo openssl x509 -in new.cert.csr -out new.cert.cert -req \
    -signkey new.cert.key -days 365
  3. 將證書檔案複製到相關的目錄,以便 Apache 伺服器可以讀取這些檔案。請確定私密金鑰 /etc/apache2/ssl.key/server.key 無法辨識,而公開 PEM 證書 /etc/apache2/ssl.crt/server.crt 則可辨識。

    tux > sudo cp new.cert.cert /etc/apache2/ssl.crt/server.crt
    tux > sudo cp new.cert.key /etc/apache2/ssl.key/server.key
提示
提示:公用證書位置

最後一個步驟是將公用證書檔案從 /etc/apache2/ssl.crt/server.crt 複製到使用者可存取的位置,以便使用者將該檔案納入其網頁瀏覽器已知和信任的 CA 清單中。否則,瀏覽器會報告該證書是由不明授權機構所簽發。

34.6.1.3 獲取官方簽署的證書

目前有多家可簽署證書的官方證書管理中心。這類證書是由值得信任的協力廠商所簽署,因此可以完全信任。對外運作的安全網頁伺服器通常已取得官方簽發證書。最常用的證書管理中心 (CA) 一覽表可參閱 https://en.wikipedia.org/wiki/Certificate_authority#Providers

在要求官方簽署的證書時,您並不需要向 CA 傳送證書,而只需傳送證書簽署要求 (Certificate Signing Request, CSR)。若要建立 CSR,請執行以下指令:

tux > openssl req -new -newkey rsa:2048 -nodes -keyout newkey.pem -out newreq.pem

系統會要求您輸入可辨識名稱。這時系統會要求您回答一些問題,例如國家/地區名或組織名稱。請輸入有效資料 -- 您在此時輸入的每項資料將來都會顯示在證書中並用於檢查。您不需要回答每個問題。如果有不適用的問題或是您希望保留空白,請使用 .。一般名稱是指 CA 本身的名稱 -- 請選擇明顯的名稱,例如 My company CA。最後,必須輸入挑戰密碼和替用的公司名稱。

從您呼叫程序檔的目錄中找出此 CSR。這個檔案名稱是 newreq.pem

34.6.2 設定提供 SSL 的 Apache

在 Web 伺服器一端,TLS/SSL 要求的預設連接埠為 443。監聽連接埠 80 的一般Apache 與監聽連接埠 443 且支援 TLS/SSL 的 Apache 之間沒有衝突。事實上,HTTP 和 HTTPS 可以執行相同的 Apache 例項。通常這時會使用不同的虛擬主機,將連接埠 80 和連接埠 443 的要求分派到不同的虛擬伺服器。

重要
重要:防火牆組態

請不要忘記為連接埠 443 上已啟用 SSL 的 Apache 開啟防火牆。可依Book “Security and Hardening Guide”, Chapter 23 “Masquerading and firewalls”, Section 23.4.3 “Configuring the firewall on the command line”中所述透過 firewalld 執行此操作。

在全域伺服器組態中,預設會啟用 SSL 模組。如果主機上停用了該模組,請使用 a2enmod ssl 指令將其啟用。若最終要啟用 SSL,需使用旗標 SSL 啟動伺服器。為此,請呼叫 a2enflag SSL (區分大小寫!)。如果選擇使用密碼來加密伺服器證書,您還需要提高 /etc/sysconfig/apache2APACHE_TIMEOUT 的設定值,以便您在啟動 Apache 時有足夠的時間輸入該密碼片語。請重新啟動伺服器來確保這些變更生效。只是重新載入並無法保證變更生效。

虛擬主機組態目錄包含了樣板 /etc/apache2/vhosts.d/vhost-ssl.template 和 SSL 特定指示詞 (將提供詳細文件說明)。如需一般虛擬主機組態的詳細資訊,請參閱第 34.2.2.1 節 「虛擬主機組態」

若要開始設定組態,請將範本複製到 /etc/apache2/vhosts.d/mySSL-host.conf,並對其進行編輯。充分調整下列指示詞的值:

  • DocumentRoot

  • ServerName

  • ServerAdmin

  • ErrorLog

  • TransferLog

34.6.2.1 基於名稱的虛擬主機和 SSL

依預設,在只有一個 IP 位址的伺服器上,無法同時執行多個啟用了 SSL 的虛擬主機。以名稱為基礎的虛擬主機需要 Apache 瞭解所要求的伺服器名稱。使用 SSL 連接的問題在於,此類要求只能在使用預設虛擬主機建立了 SSL 連接後才能讀取。如此一來,使用者將會收到證書與伺服器名稱不符的警告訊息。

SUSE Linux Enterprise Server 提供了一項 SSL 通訊協定的延伸:伺服器名稱指示 (Server Name Indication,SNI)。該項延伸會在 SSL 協議中傳送虛擬網域的名稱,以此解決這個問題。這可讓伺服器早些切換至正確的虛擬網域,並在瀏覽器中顯示正確的證書。

SUSE Linux Enterprise Server 中預設會啟用 SNI。若要針對 SSL 啟用以名稱為基礎的虛擬主機,請依照第 34.2.2.1.1 節 「以名稱為基礎的虛擬主機」中所述設定伺服器 (請注意,您需要對 SSL 使用連接埠 443 而非 80)。

重要
重要:SNI 瀏覽器支援

用戶端上也必須支援 SNI。不過,只有大部分瀏覽器支援 SNI,某些較舊的瀏覽器不支援。如需詳細資訊,請參閱 https://en.wikipedia.org/wiki/Server_Name_Indication#Support

若要設定對不支援 SNI 的瀏覽器的處理方式,請使用指令 SSLStrictSNIVHostCheck。若在伺服器組態中設定為 on,則不支援 SNI 的瀏覽器對所有虛擬主機的存取都會遭到拒絕。如果 VirtualHost 指令中設定為 on,將拒絕存取此特定主機。

若在伺服器組態中設定為 off,則伺服器將表現為不支援 SNI。將由定義的第一個虛擬主機 (連接埠 443) 來處理 SSL 要求。

34.7 在同一部伺服器上執行多個 Apache 例項

相較於執行多個虛擬主機 (請參閱第 34.2.2.1 節 「虛擬主機組態」),在同一部伺服器上執行多個 Apache 例項具有以下優勢:

  • 如果需要將虛擬主機停用一段時間,您需要變更 Web 伺服器組態並將其重新啟動才能使變更生效。

  • 如果一個虛擬主機出現問題,您需要重新啟動所有的虛擬主機。

您可以照常執行預設的 Apache 例項:

tux > sudo systemctl start apache2

它將會讀取預設的 /etc/sysconfig/apache2 檔案。如果該檔案不存在,或者存在但未設定 APACHE_HTTPD_CONF 變數,則該例項將會讀取 /etc/apache2/httpd.conf

若要啟動另一個 Apache 例項,請執行:

tux > sudo systemctl start apache2@INSTANCE_NAME

例如:

tux > sudo systemctl start apache2@example_web.org

依預設,例項會使用 /etc/apache2@example_web.org/httpd.conf 做為主要組態檔案,您可以透過設定 /etc/sysconfig/apache2@example_web.org 中的 APACHE_HTTPD_CONF 予以覆寫。

下面顯示了一個設定更多 Apache 例項的範例。請注意,您需要以 root 身分執行所有指令。

程序 34.4︰ 設定其他 Apache 例項
  1. 依據 /etc/sysconfig/apache2 建立一個新的組態檔案,例如 /etc/sysconfig/apache2@example_web.org

    tux > sudo cp /etc/sysconfig/apache2 /etc/sysconfig/apache2@example_web.org
  2. 編輯檔案 /etc/sysconfig/apache2@example_web.org,將包含以下內容的行

    APACHE_HTTPD_CONF

    針對

    APACHE_HTTPD_CONF="/etc/apache2/httpd@example_web.org.conf"
  3. 依據 /etc/apache2/httpd.conf 建立檔案 /etc/apache2/httpd@example_web.org.conf

    tux > sudo cp /etc/apache2/httpd.conf /etc/apache2/httpd@example_web.org.conf
  4. 編輯 /etc/apache2/httpd@example_web.org.conf,將

    Include /etc/apache2/listen.conf

    針對

    Include /etc/apache2/listen@example_web.org.conf

    檢閱所有指令,並視需要予以變更。您可能需要變更

    Include /etc/apache2/global.conf

    並為每個例項建立新的 global@example_web.org.conf。建議將

    ErrorLog /var/log/apache2/error_log

    針對

    ErrorLog /var/log/apache2/error@example_web.org_log

    以便每個例項都有個別的記錄。

  5. 依據 /etc/apache2/listen.conf 建立 /etc/apache2/listen@example_web.org.conf

    tux > sudo cp /etc/apache2/listen.conf /etc/apache2/listen@example_web.org.conf
  6. 編輯 /etc/apache2/listen@example_web.org.conf,將

    Listen 80

    變更為要執行新例項的埠號,例如 82:

    Listen 82

    若要透過安全通訊協定 (請參閱第 34.6 節 「使用 SSL 設定安全的 Web 伺服器」) 執行新的 Apache 例項,還需將下面一行

    Listen 443

    (範例) 變更為

    Listen 445
  7. 啟動新的 Apache 例項:

    tux > sudo systemctl start apache2@example_web.org
  8. 在網頁瀏覽器中開啟 http://server_name:82,檢查伺服器是否正在執行中。如果先前變更了新例項的錯誤記錄檔案名稱,您可以檢查這項變更:

    tux > sudo tail -f /var/log/apache2/error@example_web.org_log

下面是在同一部伺服器上設定多個 Apache 例項時要注意的幾點:

  • /etc/sysconfig/apache2@INSTANCE_NAME 檔案可以包含與 /etc/sysconfig/apache2 相同的變數,包括模組載入和 MPM 設定。

  • 當有其他例項正在執行時,不需要執行預設的 Apache 例項。

  • 如果未使用 HTTPD_INSTANCE 環境變數另行指定,Apache 輔助程式公用程式 a2enmoda2dismodapachectl 將在預設的 Apache 例項上執行。以下範例

    tux > sudo export HTTPD_INSTANCE=example_web.org
    tux > sudo a2enmod access_compat
    tux > sudo a2enmod status
    tux > sudo apachectl start

    會將 access_compatstatus 模組新增到 /etc/sysconfig/apache2@example_web.orgAPACHE_MODULES 變數,然後啟動 example_web.org 例項。

34.8 避免安全性問題

向公用網際網路公開的網頁伺服器,必須持續進行系統管理。軟體和意外的錯誤設定不可避免地會產生安全性問題。下面是可用來處理這些問題的幾項秘訣。

34.8.1 最新軟體

SUSE 會在發現 Apache 軟體弱點時,發出安全性建議事項。其中包含弱點修正指示,應盡可能套用。請由下列位置取得 SUSE 安全性公告:

34.8.2 DocumentRoot 權限

依預設,在 SUSE Linux Enterprise Server 中,DocumentRoot 目錄 /srv/www/htdocs 與 CGI 目錄 /srv/www/cgi-bin 的所有權屬於 root 使用者和群組。這些權限不可變更。如果目錄對所有人開放寫入權限,則任何使用者都可以將檔案放入其中。然後,這些檔案可能會由具有 wwwrun 權限的 Apache 執行,而這種情況可能會造成使用者取得非預期的檔案系統資源存取權限。使用 /srv/www 子目錄來存放虛擬主機的 DocumentRoot 和 CGI 目錄,並確定這些目錄所有權屬於 root 使用者和群組。

34.8.3 檔案系統存取

依預設,/etc/apache2/httpd.conf 已設定成拒絕存取整個檔案系統。切勿覆寫這些指示詞,不過您可以特別啟用 Apache 應當能夠讀取之所有目錄的存取權限。如需詳細資料,請參閱第 34.2.2.1.3 節 「基本虛擬主機組態」。如果要執行這個動作,請確保沒有任何重要檔案 (例如密碼或系統組態檔案) 可由外界進行讀取。

34.8.4 CGI 程序檔

使用 HP、SSI 或任何其他程式設計語言的互動式程序檔基本上可以執行任意指令,因此一般會存在安全性問題。將從伺服器執行的程序檔,只能由伺服器管理員信任的來源進行安裝 -- 通常最好不要讓使用者執行自己的程序檔。同時建議您為所有程序檔進行安全性稽核。

為了盡可能簡化程序檔的管理工作,通常建議您限制 CGI 程序檔在特定目錄中執行,而不是全域性開放執行。您可以使用 ScriptAliasOption ExecCGI 指示詞來進行組態設定。SUSE Linux Enterprise Server 的預設組態不允許隨處執行 CGI 程序檔。

所有 CGI 程序檔都是以相同使用者身分執行,所以不同的程序檔彼此之間可能會產生衝突。module suEXEC 可讓您以不同使用者和群組身分來執行 CGI 程序檔。

34.8.5 使用者目錄

在啟用使用者目錄 (使用 mod_userdirmod_rewrite) 時,您應該審慎考慮不要允許覆寫 .htaccess 檔案,因為這會允許使用者覆寫安全性設定。至少您應該使用 AllowOverRide 指示詞來限制使用者的應用範圍。在 SUSE Linux Enterprise Server 中,.htaccess 檔案預設處於啟用狀態,但使用者在使用 mod_userdir (請參閱 /etc/apache2/mod_userdir.conf 組態檔案) 時不允許覆寫任何 Option 指令。

34.9 疑難排解

如果 Apache 未啟動,網頁就無法存取,或者使用者無法連接網頁伺服器,因此找出問題的根源是很重要的工作。下面是您可在其中尋找錯誤原因的幾個常見位置以及需要檢查的重點:

apache2.service 子指令的輸出:

不要使用 /usr/sbin/apache2ctl 二進位檔案來啟動和停止 Web 伺服器,而應使用 systemctl 指令 (如第 34.3 節 「啟動和停止 Apache」中所述)。systemctl status apache2 詳細描述了錯誤,甚至還提供了修復組態錯誤的提示。

記錄檔案和詳細層級

無論發生了嚴重錯誤還是非嚴重錯誤,都可以檢查 Apache 記錄檔案尋找原因,主要檢查預設位於 /var/log/apache2/error_log 的錯誤記錄檔案。此外,如果需要檢視記錄檔案中更多的詳細資訊,還可以透過 LogLevel 指示詞來控制記錄訊息的詳細程度。

提示
提示:一個簡單的測試

使用 tail -F /var/log/apache2/MY_ERROR_LOG 指令檢視 Apache 記錄訊息。然後執行 systemctl restart apache2。現在,請嘗試連接到瀏覽器,並檢查輸出結果。

防火牆和連接埠

一個常見的錯誤是,沒有在伺服器的防火牆組態中開啟 Apache 的連接埠。如果是使用 YaST 來設定 Apache,就要透過其他選項來檢查這個特定問題 (請參閱第 34.2.3 節 「使用 YaST 設定 Apache」)。如果您要手動設定 Apache,請透過 YaST 防火牆模組來跚

如果無法透過這些功能來查出錯誤原因,則請查閱 http://httpd.apache.org/bug_report.html 中的線上 Apache 錯誤資料庫。此外,也可以從 http://httpd.apache.org/userslist.html 取得可用的郵件清單,聯絡 Apache 使用者社群。

34.10 更多資訊

apache2-doc 套件在許多位置包含了完整的 Apache 手冊,用於本地安裝及作為參考文件。這個套件不是預設安裝選項 — 安裝此套件最快的方式就是使用 zypper in apache2-doc 指令。完成安裝之後,http://localhost/manual/ 中將會有 Apach 手冊可供使用。您也可以從 http://httpd.apache.org/docs-2.4/ 網站位置來存取這份手冊。/usr/share/doc/packages/apache2/README.* 目錄會提供 SUSE 特定組態秘訣資訊。

34.10.1 Apache 2.4

如需 Apache 2.4 最新功能的清單,請參閱 http://httpd.apache.org/docs/2.4/new_features_2_4.html。如需從 2.2 升級至 2.4 版的資訊,請參閱下列網址資訊:http://httpd.apache.org/docs-2.4/upgrading.html

34.10.2 Apache 模組

有關第 34.4.5 節 「外部模組」 中簡要介紹的外部 Apache 模組的詳細資訊,可在以下位置找到:

34.10.3 開發

如需更多有關開發 Apache 模組或是參與 Apache 網頁伺服器計畫的詳細資訊,請參閱下列主題內容:

Apache 開發人員資訊

http://httpd.apache.org/dev/

Apache 開發人員文件

http://httpd.apache.org/docs/2.4/developer/

34.10.4 其他來源

如果您在 SUSE Linux Enterprise Server 中遇到與 Apache 有關的問題,請查閱「技術資訊搜尋」,網址為:https://www.suse.com/support。關於 Apache 的歷程,請參閱 https://httpd.apache.org/ABOUT_APACHE.html。此頁面也說明稱伺服器為 Apache 的原因。

35 使用 YaST 設定 FTP 伺服器

使用 YaST 的「FTP 伺服器」模組,可以將機器設定為 FTP (檔案傳輸通訊協定) 伺服器。匿名和/或驗證使用者可以連接至您的機器並使用 FTP 通訊協定下載檔案,還可以將檔案上載至 FTP 伺服器 (視組態而定)。YaST 使用 vsftpd (非常安全的 FTP 精靈)。

如果 YaST FTP 伺服器模組在您的系統中不可用,請安裝 yast2-ftp-server 套件。(如需如何從指令行管理 FTP 伺服器,請參閱第 4.4.3.7 節 「yast ftp-server」。)

若要使用 YaST 設定 FTP 伺服器,請執行以下步驟:

  1. 開啟 YaST 控制中心並選擇「網路服務 ›  FTP 伺服器」,或以 root 身分執行 yast2 ftp-server 指令。

  2. 如果系統中未安裝任何 FTP 伺服器,系統將在「YaST FTP 伺服器」模組啟動時詢問您要安裝哪個伺服器。選擇 vsftpd 伺服器,然後確認對話方塊。

  3. 「啟動」對話方塊中,設定啟動 FTP 伺服器的相關選項。如需詳細資訊,請參閱 第 35.1 節 「啟動 FTP 伺服器」

    一般對話方塊中,設定 FTP 目錄、歡迎訊息、檔案建立遮罩和其他參數。如需詳細資訊,請參閱 第 35.2 節 「FTP 一般設定」

    在「效能」對話方塊中,設定會影響 FTP 伺服器負載的參數。如需詳細資訊,請參閱 第 35.3 節 「FTP 效能設定」

    在「驗證」對話方塊中,設定匿名和/或已驗證的使用者是否可使用 FTP 伺服器。如需詳細資訊,請參閱 第 35.4 節 「驗證」

    在「進階設定」對話方塊中,設定 FTP 伺服器的操作模式、SSL 連接與防火牆設定。如需詳細資訊,請參閱 第 35.5 節 「精靈設定」

  4. 按一下完成以儲存組態。

35.1 啟動 FTP 伺服器

在「FTP 啟動」對話方塊的「服務啟動」框架中,可以設定 FTP 伺服器的啟動方式。您可以選擇在系統開機時自動啟動伺服器,或是手動啟動伺服器。如果 FTP 伺服器應該在收到 FTP 連接要求後才啟動,請選取透過通訊端

FTP 伺服器的目前狀態將顯示在「FTP 啟動」對話方塊的「開啟與關閉」框架中。按一下「立即啟動 FTP」可以啟動 FTP 伺服器。若要停止伺服器,可按一下「立即停止 FTP」。變更伺服器的設定後,請按一下「儲存設定並立即重新啟動 FTP」。如果按一下「完成」離開組態模組,組態將儲存。

FTP 伺服器組態 — 啟動
圖 35.1︰ FTP 伺服器組態 — 啟動

35.2 FTP 一般設定

在「FTP 一般設定」對話方塊的「一般設定」框架中,您可以設定連接至 FTP 伺服器後將會顯示的「歡迎訊息」。

如果核取「Chroot 每一個」選項,則所有本地使用者登入後都將進入其主目錄中的 Chroot Jail。此選項含安全性要求,特別是當使用者具有上載權限或外圍程序存取權限時,因此啟用此選項時請務必小心。

如果核取「詳細記錄」選項,則將記錄所有 FTP 請求與回應。

您可以透過 Umask 對由匿名和/或已驗證的使用者建立之檔案的權限加以限制。請在「匿名使用者 Umask」中為匿名使用者設定檔案建立遮罩,並在「已驗證使用者 Umask」中為已驗證的使用者設定檔案建立遮罩。應以八進位數字 (前面加零) 輸入遮罩。如需有關 umask 的詳細資訊,請參閱 umask 的 man 頁面 (man 1p umask)。

在「FTP 目錄」框架中設定用於匿名使用者與已驗證使用者的目錄。按一下「瀏覽」可從本地檔案系統選取要使用的目錄。對於匿名使用者,預設 FTP 目錄為 /srv/ftp。請注意,vsftpd 不允許所有使用者都可以寫入此目錄,而會為匿名使用者建立具有寫入權限的子目錄 upload

35.3 FTP 效能設定

在「效能」對話方塊中,設定會影響 FTP 伺服器負載的參數。「最大閒置時間」表示遠端用戶端在兩個 FTP 指令之間等待的最長時間 (以分鐘計)。如果發生了更長時間的閒置,將中斷遠端用戶端的連接。「同一個 IP 最大用戶端數」決定可從單一 IP 位址連接的最大用戶端數量。「最大用戶端數」決定可以連接的最大用戶端數量。任何額外用戶端都將收到一則錯誤訊息。

可在「最大本地速率」和「最大匿名速率」中分別為本地已驗證的使用者及匿名用戶端設定最大資料傳輸速率。速率設定的預設值為 0,表示資料傳輸速率無限制。

35.4 驗證

驗證對話方塊的啟用/停用匿名使用者和本地使用者框架中,您可以設定允許存取 FTP 伺服器的使用者。您還可以從以下選項中進行選擇:僅授予匿名使用者存取權限、僅授予驗證使用者 (擁有系統帳戶) 存取權限,或者同時授予這兩類使用者存取權限。

若要允許使用者將檔案上傳到 FTP 伺服器,請核取驗證對話方塊的上傳框架中的啟用上傳。在此處核取對應的方塊,您就可以允許包括匿名使用者在內的使用者上傳或建立目錄。

注意
注意:vsftp — 允許匿名使用者上傳檔案

如果使用的是 vsftpd 伺服器而您希望匿名使用者能夠上載檔案或建立目錄,則需要在匿名 FTP 目錄中為所有使用者建立具有寫入權限的子目錄。

35.5 精靈設定

FTP 伺服器既可以在主動模式中執行,也可以在被動模式中執行。依預設伺服器在被動模式中執行。若要切換至主動模式,請取消選取進階設定對話方塊中的啟用被動模式選項。您還可以調整「被動模式的最小連接埠」與「被動模式的最大連接埠」選項來變更伺服器上用於資料流的連接埠範圍。

若要在用戶端與伺服器之間使用加密通訊,可以選取「啟用 SSL」。檢查要支援的通訊協定版本,並指定用於 SSL 加密連接的 RSA 證書。

如果系統受防火牆保護,請核取「在防火牆中開啟埠」以啟用到 FTP 伺服器的連接。

35.6 更多資訊

如需 FTP 伺服器的詳細資訊,請參閱 vsftpdvsftpd.conf 的手冊頁。

36 Squid 快取代理伺服器

Squid 是廣泛用於 Linux 和 UNIX 平台的快取代理伺服器。這表示它會將要求的網際網路物件 (例如網頁伺服器或 FTP 伺服器上的資料),儲存在比伺服器更接近要求工作站的機器上。您可設定多階層,以確保即使在對終端使用者而言透明的模式下,也能達到最佳的回應速度和較低的頻寬使用量。

Squid 充當快取代理伺服器。它會將物件要求從用戶端 (在此例中是從網頁瀏覽器) 重新導向至伺服器。當從伺服器而來的要求物件到達時,它會將物件傳送到用戶端,並在硬碟快取記憶體中保留物件的副本。快取的其中一個優點是,當有數個用戶端要求相同的物件時,可以從硬碟快取來提供該物件。這可讓用戶端比從網際網路更快地擷取資料。此程序還可以減少網路流量。

除實際的快取外,Squid 還提供眾多其他功能:

  • 在代理伺服器的互通階層之間分配負載

  • 為所有存取代理伺服器的用戶端定義嚴格的存取控制清單

  • 允許或拒絕使用其他應用程式存取特定網頁

  • 針對頻繁造訪的網頁產生統計資料,用於評估網頁瀏覽習慣

Squid 不是一般的代理伺服器。一般而言,它只會代理 HTTP 連接。它支援 FTP、Gopher、SSL 以及 WAIS 通訊協定,但不支援其他網際網路通訊協定,例如針對新聞或視訊會議的通訊協定。因為 Squid 只支援將 UDP 通訊協定用於在不同快取之間提供通訊功能,許多多媒體程式並不受支援。

36.1 一些關於代理伺服器的說明

做為快取代理伺服器,Squid 有數種使用方式。若與防火牆合併,它有助於提高安全性。多個代理可一起使用。它也可以判斷應該快取物件類型和持續的時間長短。

36.1.1 Squid 和安全性

Squid 可與防火牆配合使用,來防止內部網路遭受外部攻擊。防火牆將會拒絕所有的用戶端存取 Squid 以外的外部服務。所有的網路連接都必須由代理伺服器來建立。藉由這種組態方式,Squid 可完全控制網頁存取。

如果防火牆組態中包含非受保護區域 (DMZ),代理伺服器應在此區域內操作。第 36.6 節 「設定透明代理」介紹如何實作透明代理。如此可簡化用戶端的組態,因為在這種情況下,它們不需要有關代理伺服器的任何資訊。

36.1.2 多個快取

經過設定之後,可在多個 Squid 例項之間交換物件。這可減少系統的總負荷,並可增加在區域網路中取回物件的機會。您也可以設定快取階層,使快取可以將物件要求轉送至旁支快取或上層快取,如此其便可從區域網路中的另一個快取或直接從來源要求物件。

為快取記憶體階層選擇適當的拓樸是非常重要的,因為這樣它就不會增加網路的整體流量。就大型網路而言,理想的做法是:為每個子網路設定一個代理伺服器,並將它們與上層代理伺服器連接,再連接至 ISP 的快取代理伺服器。

這些通訊都是由在 UDP 通訊協定最上層執行的 ICP (網際網路快取通訊協定) 所處理。在快取之間的資料傳輸是使用以 TCP 為基礎的 HTTP (超文字傳輸通訊協定,Hypertext Transmission Protocol) 來處理。

為了找到最適合向其要求物件的伺服器,一個快取會將 ICP 要求傳送到所有旁支代理。旁支代理會透過 ICP 回應答覆這些要求。若偵測到物件,它們會使用代碼 HIT,若未偵測到,則使用 MISS

如果發現多個 HIT 回應,代理伺服器會依據哪個快取傳送回覆的速度最快或哪部伺服器較近等因素來決定要從哪部伺服器下載。如果沒有收到滿意的回應,則會將要求傳送到上層快取。

注意
注意:Squid 如何避免物件重複

為了避免網路上不同的快取記憶體中出現物件重複,系統會使用其他 ICP 通訊協定。例如 CARP (快取陣列路由通訊協定) 或 HTCP (超文字快取通訊協定)。在網路中維護的物件愈多,找到所需物件的機會就愈大。

36.1.3 快取網際網路物件

網路中提供的很多物件都不是靜態的,例如動態產生的頁面和 TLS/SSL 加密內容。此類物件是不會被快取的,因為每次存取這些物件時,它們都會改變。

為確定物件在快取中應保留的時間,系統會為物件指定其中一種狀態。網頁以及代理伺服器會藉由新增標頭至這些物件來找出物件的狀態,例如上一次修改到期以及對應的日期。也可使用指定不得快取的物件的其他標題。

快取中的物件通常會因缺少可用磁碟空間而透過 LRU (最久未用) 之類的演算法進行替換。這表示代理會刪除那些最久沒有被要求的物件。

36.2 系統要求

系統要求主要取決於該系統必須承擔的最大網路負載。因此請檢查負載尖峰值,因為在這些時段,負載可能會達到日平均值的四倍以上。若不能確定,請稍稍高估系統要求。若 Squid 的工作負荷臨近其處理能力上限,可能會嚴重影響服務品質。接下來的幾節將依重要程度依次指出系統因素:

  1. RAM 大小

  2. CPU 速度/實體 CPU 核心

  3. 磁碟快取的大小

  4. 硬碟/SSD 及其架構

36.2.1 RAM

Squid 所需的記憶體 (RAM) 容量與快取中的物件數量有直接的關係。隨機存取記憶體的速度比硬碟/SSD 快很多。因此,請務必讓 Squid 程序擁有充足的記憶體,因為若使用交換磁碟,系統效能會大幅降低。

Squid 也會將快取記憶體物件的參照以及常要求的物件儲存在主記憶體中以加速此資料的擷取速度。除此之外,Squid 需要在記憶體中保留其他的資料,例如所有已處理 IP 位址的表格、精確的網域名稱快取、最常要求的物件、存取控制清單、緩衝區等等。

36.2.2 CPU

Squid 已經過優化,在處理器核心數量較少 (4 - 8 個實體核心) 的情況下工作狀態最好,這樣每個核心都能提供出色的效能。像超執行緒這類提供虛擬核心的技術會影響效能。

要充分利用多個 CPU 核心,必須設定多個寫入不同快取裝置的工作執行緒。預設情況下,多核心支援通常都處於停用狀態。

36.2.3 磁碟快取的大小

在小的快取中,HIT (發現要求的物件已在該處) 的機率比較小,因為快取很容易就會填滿,所以較少要求的物件會替換為新的物件。例如,如果快取的可用空間為 1 GB,而使用者一天僅瀏覽 10 MB,則需要 100 多天才會將快取填滿。

確定所需快取大小的最簡易方法是考量連接的最大傳輸速率。1 Mbit/s 連接的最大傳輸速率為 128 KB/s。如果所有流量都流向快取,一個小時內這些量會達到 460 MB。假設所有流量都是在 8 小時工作時間產生,則一天內會達到 3.6 GB。由於連接一般都不會用到其容量上限,因此可以假設快取記憶體所處理的總資料容量大約為 2 GB。因此在本例中,Squid 需要 2 GB 磁碟空間來存放一天內快取的資料瀏覽量。

36.2.4 硬碟/SSD 架構

速度在快取處理過程中扮演很重要的角色,因此應該特別注意這個因素。對於硬碟/SSD,此參數稱為隨機搜尋時間隨機讀取效能,按毫秒計算。因為 Squid 從硬碟/SSD 讀取或寫入其中的資料區塊通常都很小,所以硬碟/SSD 的搜尋時間/讀取效能比其資料輸送量更重要。

如果要充當代理伺服器,高轉速硬碟或 SSD 會是最好的選擇。使用硬碟時,採用多個較小硬碟的效果可能更佳,因為每個硬碟都有單獨的快取目錄,可避免讀取次數過多。

如果采用 RAID 系統,可以犧牲速度來提升可靠性。但是基於效能考量,請避免使用 (軟體) RAID5 及類似設定。

檔案系統的選擇通常無關緊要。但是,使用掛接選項 noatime 可提升效能 - Squid 提供自己的時戳,因此無需檔案系統追蹤存取時間。

36.3 Squid 的基本用法

如果尚未安裝套件 squid 。預設情況下,SUSE® Linux Enterprise Server 上不會安裝 squid 套件。

Squid 在 SUSE® Linux Enterprise Server 中已經過預先設定,可在安裝後直接啟動。為了確保啟動更平順,應該將網路設定為至少使用一部名稱伺服器,而且可連接網際網路。如果撥號連接是使用動態 DNS 組態,就有可能產生問題。在此情況下,至少應指定名稱伺服器,因為如果 Squid 在 /var/run/netconfig/resolv.conf 中未偵測到 DNS 伺服器,就不會啟動。

36.3.1 啟動 Squid

若要啟動 Squid,請使用:

tux > sudo systemctl start squid

若要讓 Squid 隨系統開機一起啟動,請使用 systemctl enable squid 啟用該服務。

36.3.2 檢查 Squid 是否正在運作

若要檢查 Squid 是否正在執行,請選擇下列其中一種方式:

  • 使用 systemctl

    tux > systemctl status squid

    此指令的輸出應指出 Squid 已載入在使用中 (執行中)

  • 使用 Squid 自身:

    tux > sudo squid -k check | echo $?

    此指令的輸出應當為 0,但也可能包含其他警告或訊息。

若要測試 Squid 在本地系統上的功能,請選擇下列其中一種方式:

  • 若要進行測試,您可以使用指令行工具 squidclient,它可向 Web 要求輸出回應,類似於 wgetcurl

    與這些工具不同的是,squidclient 會自動連接至 Squid 的預設代理設定 localhost:3128。不過,如果您變更過 Squid 的組態,則需要透過指令行選項將 squidclient 設定為使用其他設定。如需詳細資訊,請參閱 squidclient --help

    範例 36.1︰ 使用 squidclient 提交的要求
    tux > squidclient http://www.example.org
    HTTP/1.1 200 OK
    Cache-Control: max-age=604800
    Content-Type: text/html
    Date: Fri, 22 Jun 2016 12:00:00 GMT
    Expires: Fri, 29 Jun 2016 12:00:00 GMT
    Last-Modified: Fri, 09 Aug 2013 23:54:35 GMT
    Server: ECS (iad/182A)
    Vary: Accept-Encoding
    X-Cache: HIT
    x-ec-custom-error: 1
    Content-Length: 1270
    X-Cache: MISS from moon1
    X-Cache-Lookup: MISS from moon:3128
    Via: 1.1 moon (squid/3.5.16)2
    Connection: close
    
    <!doctype html>
    <html>
    <head>
        <title>Example domain</title>
    [...]
    </body>
    </html>

    範例 36.1 「使用 squidclient 提交的要求」中顯示的輸出可以分成兩個部分:

    1. 回應的通訊協定標題:空白行前面的幾行。

    2. 回應的實際內容:空白行後面的幾行。

    若要驗證是否使用了 Squid,請參閱所選的標題行:

    1

    標題 X-Cache 的值指明所要求的文件不在電腦 moon 的 Squid 快取中 (MISS)。

    上面的範例包含兩行 X-Cache。您可以忽略第一個 X-Cache 標題,因為它是由來源 Web 伺服器的內部快取軟體產生。

    2

    標題 Via 的值指明 HTTP 版本、電腦名稱和正在使用的 Squid 的版本。

  • 使用瀏覽器:將代理設定為 localhost,連接埠設定為 3128。然後,您可以載入一個頁面,並在瀏覽器的審查器開發人員工具網路面板中檢查回應標題。該標題應該會以範例 36.1 「使用 squidclient 提交的要求」中所述的類似方式再次產生。

若要允許本地系統和其他系統的使用者存取 Squid 和網際網路,請將 /etc/squid/squid.conf 組態檔中的 http_access deny all 項目變更為 http_access allow all。然而,當您這麼做時,請考量到此動作將使 Squid 可供任何人完全存取。因此,需定義用於控制對代理伺服器的存取權限的 ACL (存取控制清單)。修改組態檔案後,必須重新載入或重新啟動 Squid。如需 ACL 的詳細資訊,請參閱第 36.5.2 節 「存取控制選項」

如果 Squid 在成功啟動後不久就結束,請檢查名稱伺服器項目是否有誤,或者是否缺少 /var/run/netconfig/resolv.conf 檔案。Squid 會在 /var/log/squid/cache.log 檔案中記錄啟動失敗的原因。

36.3.3 停止、重新載入和重新啟動 Squid

若要重新載入 Squid,請選擇以下其中一種方法:

  • 使用 systemctl

    tux > sudo systemctl reload squid

    tux > sudo systemctl restart squid
  • 使用 YaST:

    在 Squid 模組中,按一下儲存設定並立即重新啟動 Squid 按鈕。

若要停止 Squid,請選擇以下其中一種方法:

  • 使用 systemctl

    tux > sudo systemctl stop squid
  • 使用 YaST

    在 Squid 模組中,按一下立即停止 Squid。按鈕.

關閉 Squid 可能需要一些時間,因為 Squid 會等待最長半分鐘時間,來中斷與用戶端的連接並將其資料寫入磁碟 (請參閱 /etc/squid/squid.conf 中的 shutdown_lifetime 選項)。

警告
警告:終止 Squid

使用 killkillall 來終止 Squid 有可能會損毀快取。若要能夠重新啟動 Squid,必須刪除損毀的快取。

36.3.4 移除 Squid

從系統中移除 Squid 並不會移除快取階層與記錄檔案。若要移除這些階層,請手動刪除 /var/cache/squid 目錄。

36.3.5 本地 DNS 伺服器

即使本地 DNS 伺服器不管理自己的網域,也可以設定本地 DNS 伺服器。它可以做為僅供快取的名稱伺服器,也可以透過根 名稱伺服器來解析 DNS 要求,而不需任何特殊的組態 (請參閱第 31.4 節 「啟動 BIND 名稱伺服器」)。如何達成此目的,端視您在設定網際網路連線的組態時,是否選擇動態的 DNS 而定。

動態 DNS

一般而言,使用動態 DNS 時,會由提供者在建立網際網路連線期間設定 DNS 伺服器,且 /var/run/netconfig/resolv.conf 本地檔案會自動進行調整。可以使用以下 sysconfig 變數在檔案 /etc/sysconfig/network/config 中控制此行為: NETCONFIG_DNS_POLICY 。設定 NETCONFIG_DNS_POLICY 針對 "" (使用 YaST sysconfig 編輯器)。

然後在 /var/run/netconfig/resolv.conf 檔案中新增本地 DNS 伺服器,並將 localhost 的 IP 位址設定為 127.0.0.1。這樣,Squid 每次啟動時就能找到本地名稱伺服器。

為了使提供者的名稱伺服器可供存取,請在 /etc/named.conf 組態檔案中的 forwarders 下指定該名稱伺服器及其 IP 位址。若使用動態 DNS,則可在建立連接時自動完成上述操作,方法是將 sysconfig 變數 NETCONFIG_DNS_POLICY 針對 auto

靜態 DNS

若使用靜態 DNS,建立連接時將不會執行任何自動的 DNS 調整,所以不必變更任何 sysconfig 變數。但是您必須依照動態 DNS中所述在 /var/run/netconfig/resolv.conf 檔案中指定本地 DNS 伺服器。除此之外,還必須在 /etc/named.conf 檔案中的 forwarders 下手動指定提供者的靜態名稱伺服器及其 IP 位址。

提示
提示:DNS 與防火牆

如果您有執行防火牆,請確定 DNS 要求可以通過防火牆。

36.4 YaST Squid 模組

YaST Squid 模組包含以下索引標籤:

啟動

指定啟動 Squid 的方式,以及在哪些介面上開啟哪個防火牆連接埠。

HTTP 連接埠

定義 Squid 將用來監聽用戶端 HTTP 要求的連接埠。

重新整理模式

定義 Squid 如何處理快取中的物件。

快取記憶體設定

定義有關快取記憶體、最大和最小物件大小等的設定。

快取目錄

定義 Squid 用來儲存所有快取交換檔案的頂層目錄。

存取控制

透過 ACL 群組控制對 Squid 伺服器的存取。

記錄和逾時

定義用於存取、快取和快取儲存記錄檔案的路徑,以及連接逾時和用戶端存留期。

雜項

設定管理員的語言和電子郵件地址。

36.5 Squid 組態檔案

所有的 Squid 代理伺服器的設定值都是在 /etc/squid/squid.conf 檔案中設定。在第一次啟動 Squid 時,此檔案不需做任何變更,但是外部用戶端一開始為拒絕存取。代理可供 localhost 使用。預設的連接埠是 3128。預先安裝的 /etc/squid/squid.conf 組態檔可提供關於選項及許多範例的詳細資訊。

許多項目標有備註,因此以備註字元 # 開頭。相關規格請見行尾。給定值一般與預設值相關聯,因此僅移除備註符號而不變更任何參數通常毫無效果。若有可能,請保留原始的備註行,在該行的下方插入選項以及修改過的值。如此一來,就可以輕易復原預設值,並與變更做比較。

提示
提示:更新後調整組態檔案

如果您是從較早的 Squid 版本更新,建議您編輯新的 /etc/squid/squid.conf,並且只套用在舊檔案中所做的變更。

有時候,該檔案中會新增、移除或修改 Squid 選項。因此,如果您嘗試使用舊的 squid.conf,Squid 可能會無法正常運作。

36.5.1 一般組態選項

下面列出了 Squid 的一些組態選項,但並不詳盡。/etc/squid/squid.conf.documented 中列出了 Squid 套件的完整選項清單,其中僅做了簡單記錄。

http_port 連接埠

這是 Squid 監聽用戶端要求所用的連接埠。預設的連接埠是 3128,但是 8080 也是常用的連接埠。

cache_peer 主機名稱 類型 代理連接埠 ICP 連接埠

此選項允許建立協同工作的快取網路。快取對等是一台同樣代管網路快取且與您自己的電腦有某種關係的電腦。類型指定關係的類型。類型可以是 parentsibling

對於 HOST_NAME,請指定要使用的代理伺服器的名稱或 IP 位址。對於代理連接埠,請指定瀏覽器中要使用的連接埠號碼 (通常為 8080)。將 ICP 連接埠設定為 7,如果上層的 ICP 連接埠未知且其用途與提供者無關,則設定為 0

若要讓 Squid 以網頁瀏覽器而非代理伺服器的方式工作,請禁止使用 ICP 通訊協定。您可以附加選項 defaultno-query 來實現此目的。

cache_mem 大小

此選項定義 Squid 可用於常用回覆的記憶體容量。預設值為 8 MB。這不指定 Squid 的記憶體使用量,而且可以超過。

cache_dir 儲存類型 快取目錄 快取大小 層級 1 目錄 層級 2 目錄

選項 cache_dir 定義磁碟快取的目錄。在 SUSE Linux Enterprise Server 上的預設組態中,Squid 不會建立磁碟快取。

預留位置儲存類型可以是下列其中一種:

  • 目錄式儲存類型:ufsaufs (預設類型)、diskd。這三類都是 ufs 儲存形式的變體。不過,雖然 ufs 是做為核心 Squid 執行緒的一部分執行,但 aufs 是在單獨的執行緒中執行,而 diskd 則使用單獨的程序。這表示後兩種類型可避免因磁碟 I/O 而封鎖 Squid。

  • 資料庫式儲存系統:rock。此儲存形式依賴於單一資料庫檔案,在此檔案中,每個物件佔用固定大小的一或多個記憶體單位 (插槽)。

下文將只介紹基於 ufs 的儲存類型的參數。rock 的參數有些不同。

快取目錄是磁碟快取的目錄,預設為 /var/cache/squid快取大小是該目錄的最大大小 (以 MB 為單位),預設設定為 100 MB。請將其設定為介於可用磁碟空間的 50% 和最大 80% 之間的值。

最後兩個值層級 1 目錄層級 2 目錄指定快取目錄中建立的子目錄數。預設情況下,在快取目錄下的第一層級會建立 16 個子目錄,其中每個子目錄下又有 256 個子目錄。提高這些值時請務必謹慎,因為建立太多目錄會導致效能問題。

如果您有數個共用一個快取的磁碟,請指定數行 cache_dir

cache_access_log 記錄檔案, cache_log 記錄檔案, cache_store_log 記錄檔案

這三個選項指定 Squid 記錄其所有動作的路徑。一般情況下,無需變更此處的任何設定。如果 Squid 負荷過重,則可能需要將快取與記錄檔案分散到數個磁碟上。

client_netmask 網路遮罩

此選項允許透過套用子網路遮罩在記錄檔案中遮罩用戶端的 IP 位址。例如,若要將 IP 位址的最後一位設定為 0,請指定 255.255.255.0

ftp_user 電子郵件

此選項允許設定 Squid 應該用於匿名 FTP 登入的密碼。請在此處指定有效的電子郵件地址,因為一些 FTP 伺服器會檢查這些資料的有效性。

cache_mgr 電子郵件

如果 Squid 意外當機,將會向此電子郵件地址傳送一封郵件。預設值為網站管理員

logfile_rotate

如果您執行 squid -k rotatesquid 可以輪替記錄檔案。在此程序中會計算檔案的數量,而且在到達指定的值後,就會覆寫最舊的檔案。預設值為 10,表示輪替編號為 0 到 9 的記錄檔案。

但是,在 SUSE Linux Enterprise Server 上,記錄檔案的輪替是透過使用 logrotate 和組態檔案 /etc/logrotate.d/squid 自動執行的。

append_domain 網域

使用 append_domain 可指定當未指定網域時自動附加的網域。通常可在此處指定您自己的網域,因此在瀏覽器中指定 www 將存取您自己的 Web 伺服器。

forwarded_for 狀態

如果此選項設定為 on,則會將如下所示的一行新增至標題:

X-Forwarded-For: 192.168.0.1

如果您將選項設定為 off,則 Squid 會從 HTTP 要求中移除用戶端的 IP 位址及系統名稱。

negative_ttl 時間, negative_dns_ttl 時間

如果設定了這些選項,Squid 將快取某些類型的失敗,例如 404 回應。之後,它將拒絕發出新要求,即使當時資源可供使用。

預設情況下,negative_ttl 設定為 0negative_dns_ttl 設定為 1 minute。這表示預設情況下不會快取對 Web 要求的負面回應,但會將 DNS 要求的負面回應快取 1 分鐘。

never_direct allow ACL 名稱

為了防止 Squid 接受直接來自網際網路的要求,請使用選項 never_direct 以強制連接連到另一個代理伺服器。事先必須已在 cache_peer 中指定該代理。如果將 ACL 名稱指定為 all,則所有要求將直接轉送至 parent。有時這可能是必要的,例如,您所使用的提供者規定了其代理的使用方式或拒絕其防火牆直接存取網際網路時。

36.5.2 存取控制選項

Squid 會提供一個精細化系統來控制對代理伺服器的存取。這些存取控制清單 (ACL) 都是包含依順序處理的規則的清單。在使用 ACL 前必須先進行定義。某些預設的 ACL,例如 alllocalhost 已經存在。然而,僅定義 ACL 並不代表實際上會套用。僅當存在對應的 http_access 規則時才會套用。

選項 acl 的語法如下所示:

acl ACL_NAME TYPE DATA

此語法中的預留位置含義如下所示:

  • 名稱 ACL_NAME 可以隨意選擇。

  • 對於 TYPE/etc/squid/squid.conf 檔案的 ACCESS CONTROLS 區段中提供了多個不同的選項,您可以從中選取。

  • DATA 的規格取決於單個 ACL 類型 (例如主機名稱、IP 位址或 URL),也可以從檔案中讀取。

若要在 YaST Squid 模組中新增規則,請開啟該模組,然後按一下存取控制索引標籤。在「ACL 群組」清單下按一下新增,然後輸入規則的名稱、類型及其參數。

如需 ACL 規則類型的詳細資訊,請參閱 http://www.squid-cache.org/Versions/v3/3.5/cfgman/acl.html 上的 Squid 文件。

範例 36.2︰ 定義 ACL 規則
acl mysurfers srcdomain .example.com 1
acl teachers src 192.168.1.0/255.255.255.0 2
acl students src 192.168.7.0-192.168.9.0/255.255.255.0 3
acl lunch time MTWHF 12:00-15:00 4

1

此 ACL 將 mysurfers 定義為來自 .example.com 中的所有使用者 (由 IP 的反向查詢確定)。

2

此 ACL 將 teachers 定義為其電腦 IP 位址以 192.168.1. 開頭的使用者。

3

此 ACL 將 students 定義為其電腦 IP 位址以 192.168.7.192.168.8.192.168.9. 開頭的使用者。

4

此 ACL 將 lunch 定義為星期一至星期五的中午到下午 3 點之間的某個時間。

http_access allow ACL 名稱

http_access 定義誰可以使用代理伺服器,以及誰能夠存取網際網路上的哪些內容。為此必須定義 ACL。上文中已經定義了 localhostall,您可以透過 denyallow 拒絕或允許對它們的存取。可以建立包含任意多個 http_access 項目的清單,並依自上而下的順序處理這些項目。依據哪個項目先發生,系統會允許或拒絕存取相應的 URL。最後一個項目應該永遠為 http_access deny all。在下面的範例中,localhost 可隨意存取任何內容,而所有其他的主機則完全被拒絕存取:

http_access allow localhost
http_access deny all

在另一個使用這些規則的範例中,teachers 群組永遠具有網際網路的存取權。群組 students 僅在星期一至星期五的午餐時間才有存取權:

http_access deny localhost
http_access allow teachers
http_access allow students lunch time
http_access deny all

基於可讀性考量,請在組態檔案 /etc/squid/squid.conf 中將所有 http_access 選項指定在一個區塊中。

url_rewrite_program 路徑

此選項可用於指定 URL 重寫器。

auth_param basic program 路徑

如果必須在代理伺服器上對使用者進行驗證,請設定對應的程式,如 /usr/sbin/pam_auth。當第一次存取 pam_auth 時,使用者會看到需要其指定使用者名稱與密碼的登入視窗。此外,您還需要一個 ACL,以便僅讓具備有效登入的用戶端使用網際網路:

acl password proxy_auth REQUIRED

http_access allow password
http_access deny all

acl proxy_auth 選項中,使用 REQUIRED 表示接受所有有效的使用者名稱。REQUIRED 還可以替換為允許的使用者名稱清單。

ident_lookup_access allow ACL 名稱

藉由此選項,可以執行 ident 要求,以便為類型為 src 的 ACL 定義的所有用戶端確定每個使用者的身分。或者,可以針對所有用戶端使用此選項,對於 ACL 名稱,則套用預先定義的 ACL all

ident_lookup_access 涵蓋的所有用戶端都必須執行 ident 精靈。在 Linux 上,您可以將 pidentd ( pidentd 套件) 用做 ident 精靈。對於其他作業系統,通常有免費的軟體可供使用。若要確保只有 ident 查閱成功的用戶端才有權存取,請定義對應的 ACL:

acl identhosts ident REQUIRED

http_access allow identhosts
http_access deny all

acl identhosts ident 選項中,使用 REQUIRED 表示接受所有有效的使用者名稱。REQUIRED 還可以替換為允許的使用者名稱清單。

使用 ident 會延緩存取時間,因為對每個要求都要重複 ident 查閱。

36.6 設定透明代理

透明代理會攔截並回應網頁瀏覽器的要求,因此網頁瀏覽器可收到所要求的頁面,但並不知道它們來自何處。顧名思義,整個過程對於使用者而言是透明的。

使用代理伺服器的一般方式如下:網頁瀏覽器向代理伺服器的某個連接埠傳送要求,代理永遠都會提供要求的這些物件,而不論它們是否在其快取中。不過,在某些情況下,Squid 的透明代理模式很有效:

  • 若出於安全原因,建議所有用戶端都使用代理伺服器來瀏覽網際網路。

  • 若所有用戶端都必須使用代理伺服器,不論它們是否清楚這一點。

  • 若網路上的代理伺服器已轉移,但現有用戶端需要保留其原有的組態。

程序 36.1︰ Squid 充當透明代理伺服器 (指令行)
  1. /etc/squid/squid.conf 的選項 http_port 所在行中新增參數 transparent。此時應該有 2 行:

    http_port 3128
    http_port 3128 transparent
  2. 重新啟動 Squid:

    tux > sudo systemctl restart squid
  3. 設定防火牆,以便將 HTTP 流量重新導向至 http_proxy 中指定的連接埠。在上例中為連接埠 3128。然後重新載入防火牆組態。此操作假設已將區域 internal 指定給您的 LAN 介面。

    tux > sudo firewall-cmd --permanent --zone=internal \
        --add-forward-port=port=80:proto=tcp:toport=3128:toaddr=LAN_IP
    tux > sudo firewall-cmd --permanent --zone=internal --add-port=3128/tcp
    tux > sudo firewall-cmd --reload

    以您 LAN 介面或 Squid 所監聽介面的 IP 位址取代 LAN_IP

  4. 若要確認一切正常,請查看 /var/log/squid/access.log 中的 Squid 記錄檔案。

36.7 使用 Squid 快取管理員 CGI 介面 (cachemgr.cgi)

Squid 快取管理員 CGI 介面 (cachemgr.cgi) 是一種 CGI 公用程式,用來顯示執行中 Squid 程序的記憶體使用量統計資料。您也可以用它來方便地管理快取和檢視統計資料,因為不需要登入伺服器。

程序 36.2︰ 設定 cachemgr.cgi
  1. 確定 Apache Web 伺服器正在系統上執行。依第 34 章 「Apache HTTP 伺服器 中所述方式設定 Apache。請著重參閱第 34.5 節 「啟用 CGI 程序檔」。若要檢查 Apache 是否已在執行中,請使用:

    tux > sudo systemctl status apache2

    若顯示 inactive,您可以使用 SUSE Linux Enterprise Server 預設設定啟動 Apache:

    tux > sudo systemctl start apache2
  2. 現在,在 Apache 中啟用 cachemgr.cgi。為此,請為 ScriptAlias 建立一份組態檔案。

    在目錄 /etc/apache2/conf.d 中建立該檔案,並將其命名為 cachemgr.conf。在該檔案中新增下列內容:

    ScriptAlias /squid/cgi-bin/ /usr/lib64/squid/
    
    <Directory "/usr/lib64/squid/">
    Options +ExecCGI
    AddHandler cgi-script .cgi
    Require host HOST_NAME
    </Directory>

    HOST_NAME 替換為您要用於存取 cachemgr.cgi 的電腦的主機名稱。這樣可限制只有您的電腦方可存取 cachemgr.cgi。若要允許從任何位置存取該檔案,請改用 Require all granted

    • 如果 Squid 與您的 Apache Web 伺服器在同一台電腦上執行,則無需對 /etc/squid/squid.conf 進行任何變更,但需驗證 /etc/squid/squid.conf 是否包含以下幾行:

      http_access allow manager localhost
      http_access deny manager

      這幾行允許您從自己的電腦 (localhost) 存取管理員介面,但不允許從其他位置存取。

    • 如果 Squid 與您的 Apache Web 伺服器不在同一台電腦上執行,您需要新增其他規則,以便允許從 Squid 的 CGI 程序檔存取。為您的伺服器定義 ACL (將 WEB_SERVER_IP 替換為您的 Web 伺服器的 IP 位址):

      acl webserver src WEB_SERVER_IP/255.255.255.255

      確定下列規則都包含在組態檔案中。與預設組態相比,只有中間的規則是新增的。不過,這些規則的前後順序非常重要。

      http_access allow manager localhost
      http_access allow manager webserver
      http_access deny manager
  3. (選擇性) 或者,您也可以為 cachemgr.cgi 設定一或多個密碼。這樣還可允許執行更多動作,例如在遠端關閉快取,或者檢視有關快取的詳細資訊。為此,請使用管理員的一或多個密碼以及允許的動作清單設定選項 cache_mgrcachemgr_passwd

    例如,若要明確允許在未經驗證的情況下檢視索引頁面、功能表、60 分鐘計數器的平均值,允許使用密碼 secretpassword 切換離線模式,以及完全停用任何其他功能,請使用以下組態:

    cache_mgr user
    cachemgr_passwd none index menu 60min
    cachemgr_passwd secretpassword offline_toggle
    cachemgr_passwd disable all

    cache_mgr 定義使用者名稱。cache_mgr 定義使用哪個密碼允許哪些動作。

    nonedisable 是特殊關鍵字:none 表示無需使用密碼,disable 會徹底停用功能。

    登入 cachemgr.cgi 之後,便可全面查看完整的動作清單。若要瞭解在組態檔案中需如何參考操作,請查看動作頁面 URL 中 &operation= 後面的字串。all 是特殊關鍵字,表示所有動作。

  4. 在組態檔案變更後重新載入 Squid 和 Apache:

    tux > sudo systemctl reload squid
  5. 若要檢視統計資料,請移至先前設定的 cachemgr.cgi 頁面。例如 http://webserver.example.org/squid/cgi-bin/cachemgr.cgi

    選擇適當的伺服器,若已設定,請指定使用者名稱和密碼。然後按一下繼續並瀏覽不同的統計資料。

36.8 使用 Calamaris 產生快取報告

Calamaris 是一種 Perl 程序檔,用來產生 ASCII 或 HTML 格式的快取記憶體活動報告。它使用原生的 Squid 存取記錄檔。Calamaris 的首頁網址為 http://cord.de/calamaris-english。此工具不屬於 SUSE Linux Enterprise Server 預設安裝範圍,若想使用它,可以安裝 calamaris 套件。

root 身分登入,然後輸入:

root # cat access1.log [access2.log access3.log] | calamaris OPTIONS > reportfile

如果使用的記錄檔案不止一個,請確定它們依時間順序排列,時間越早的檔案越靠前。為此,您可以如上例一般逐個列出檔案,也可以使用 access{1..3}.log

calamaris 可使用下列選項:

-a

輸出所有可用的報告

-w

以 HTML 報告輸出

-l

在報告標題中包含訊息或標誌

在程式的手冊頁中,使用 man calamaris 可以找到各種選項的詳細資訊。

以下是典型的範例:

root # cat access.log.{10..1} access.log | calamaris -a -w \
> /usr/local/httpd/htdocs/Squid/squidreport.html

這會將報告放在網頁伺服器的目錄中。需要有 Apache 才能檢視報告。

36.9 更多資訊

請瀏覽 Squid 的首頁,網址為 http://www.squid-cache.org/。此處可以找到Squid 使用者指南(Squid User Guide) 以及有關 Squid 常見問題集 (FAQ) 的豐富資訊。

除此之外,還可以在 http://www.squid-cache.org/Support/mailing-lists.html 中找到 Squid 的郵件清單。

37 透過 SFCB 實作的網路企業管理

37.1 簡介和基本概念

SUSE® Linux Enterprise Server (SLES) 提供一系列基於開放式標準的工具,用於統一管理不同的計算系統和環境。我們的企業解決方案執行 Distributed Management Task Force 所建議的標準。以下段落將介紹其基本元件。

Distributed Management Task Force, Inc (DMTF) 是業內一個引領企業和網際網路環境管理標準開發的組織。該組織的目標是統一管理標準與計劃,並制定整合性更強、更為經濟有效且更具互通性的管理解決方案。DMTF 標準為實施控制和通訊提供了通用的系統管理元件。它們的解決方案與平台和技術無關。Web 架構企業管理通用訊息模型是其中的兩個關鍵技術。

網路企業管理 (WBEM) 是一套管理和網際網路標準技術。開發 WBEM 是為了統一管理企業計算環境。它能夠讓整個行業使用 Web 技術提供一系列整合性極強的管理工具。WBEM 包含以下標準:

  • 資料模型:標準的通用資訊模型 (CIM)

  • 編碼規格:CIM-XML 編碼規格

  • 輸送機制:透過 HTTP 的 CIM 操作

通用訊息模型是一個概念性的資訊模型,對系統管理進行了描述。該模型並非限於某種實作,而且可以實現管理系統、網路、服務與應用程式之間管理資訊的交換。CIM 由兩個部分組成 — CIM 規格與 CIM 綱要。

  • CIM 規格描述語言、命名和中繼綱要。中繼綱要是正式的模型定義。它定義了用來表達此模型的詞彙,以及這些詞彙的使用和語意。中繼綱要包含類別 (class)、內容 (property) 和方法 (method) 這幾個元素。它還允許將指示關聯做為類別的類型,將參考做為內容的類型。

  • CIM 綱要提供實際的模型描述。它提供一組類別,這些類別包含的屬性和關聯可提供完整解讀的概念框架,使用者可運用此框架來組織關於受管理環境的可用資訊。

共用資訊模型物件管理員 (Common Information Model Object Manager, CIMOM) 就是 CIM 物件管理員,更詳細說來,就是指根據 CIM 標準管理物件的應用程式。CIMOM 會管理 CIMOM 提供者與 CIM 用戶端之間的通訊,而管理員則會管理系統。

CIMOM 提供者是指透過 CIMOM 來執行用戶端應用程式所要求之特定工作的軟體。每個提供者都會執行 CIMOM 綱要的一項或多項範疇工作。這些提供者會直接與硬體互動。

Standards Based Linux Instrumentation for Manageability (SBLIM) 是為實現網路企業管理 (WBEM) 而設計的一系列工具。SUSE® Linux Enterprise Server 使用 SBLIM 專案 Small Footprint CIM Broker 的開放原始碼 CIMOM (或 CIM 伺服器)。

Small Footprint CIM Broker 是一款適用於資源受限或內嵌式環境的 CIM 伺服器,可同時實現模組化與輕量化。它基於開放式標準,並支援 CMPI 提供者、CIM-XML 編碼和受管理物件格式 (MOF)。這款伺服器不僅設定自由度高,而且在提供者當機時仍能穩定運作。此外,它還支援各種傳輸通訊協定 (例如 HTTP、HTTPS、Unix Domain Socket、服務位置通訊協定 (SLP) 和 Java 資料庫連接 (JDBC)),因此存取方便。

37.2 設定 SFCB

若要設定 Small Footprint CIM Broker (SFCB) 環境,請務必在 SUSE Linux Enterprise Server 安裝期間選取 YaST 中的網路企業管理模式。或者,也可以選擇將其做為一個元件,安裝於目前正在執行的伺服器上。請確定系統上已安裝下列套件:

cim-schema,通用訊息模型 (CIM) 綱要

包含 Common Information Model (CIM)。CIM 是描述網路或企業環境內所有管理資訊的模型。CIM 由規格和綱要所組成。其中的規格定義了與其他管理模型整合的詳細資訊。而綱要則會提供實際的模型描述。

python2-pywbem

包含 Python 模組,用於透過 WBEM 通訊協定進行 CIM 操作呼叫,以查詢及更新受管理物件。

cmpi-provider-register,與 CIMOM 無關的提供者註冊公用程式

包含一個公用程式,無論 CIMOM 在系統中執行何種操作,都可讓 CMPI 提供者套件進行註冊。

sblim-sfcb,小規模 CIM 仲介

包含 Small Footprint CIM Broker。這是一個 CIM 伺服器,執行透過 HTTP 通訊協定的 CIM 操作。這款伺服器功能全,資源佔用率低,因此特別適合內嵌式環境以及資源受限的環境。SFCB 允許透過通用管理程式介面 (CMPI) 寫入提供者。

sblim-sfcc

包含 Small Footprint CIM Client Library 執行時期程式庫。

sblim-wbemcli

包含 WBEM 指令行介面。它是一個獨立的指令行 WBEM 用戶端,特別適合基本系統管理任務。

37.2.1 啟動、停止 SFCB 和檢查其狀態

CIM 伺服器 sfcbd 精靈隨網路企業管理軟體一起安裝,並且預設會在系統啟動時啟動。下表將說明如何啟動、停止和檢查 sfcbd 的狀態。

表 37.1︰ 用於管理 sfcbd 的指令

任務

Linux 指令

啟動 sfcbd

在指令行中以 root 身分輸入 systemctl start sfcb

停止 sfcbd

在指令行中以 root 身分輸入 systemctl stop sfcb

檢查 sfcbd 狀態

在指令行中以 root 身分輸入 systemctl status sfcb

37.2.2 確保安全存取

SFCB 的預設設定相當安全。不過,仍須檢查 SFCB 元件存取的安全級別是否符合您組織的要求。

37.2.2.1 證書

安全通訊端層 (SSL) 傳輸必須使用證書,才能執行安全的通訊服務。安裝 SFCB 時,會產生自行簽署的證書。

您可以透過變更 /etc/sfcb/sfcb.cfg 中的 sslCertificateFilePath: PATH_FILENAME 設定,以商用證書或自行簽署的證書的路徑取代預設證書的路徑。該檔案必須為 PEM 格式。

依預設,SFCB 要求在以下位置提供一個伺服器證書:

/etc/sfcb/server.pem

若要產生新證書,請執行以下指令:

tux > sudo sh /usr/share/sfcb/genSslCert.sh
Generating SSL certificates in .
Generating a 2048 bit RSA private key
...................................................................+++
.+++
writing new private key to '/var/tmp/sfcb.0Bjt69/key.pem'
-----

預設情況下,程序檔會在目前的工作目錄下產生證書 client.pemfile.pemserver.pem。若要讓程序檔在 /etc/sfcb 目錄中產生證書,則需要在指令中附加該路徑。如果這些檔案已存在,系統將顯示一則警告訊息,而不會覆寫舊證書。

tux > sudo sh /usr/share/sfcb/genSslCert.sh /etc/sfcb
Generating SSL certificates in .
WARNING: server.pem SSL Certificate file already exists.
         old file will be kept intact.
WARNING: client.pem SSL Certificate trust store already exists.
         old file will be kept intact.

必須從檔案系統中移除舊證書,然後再次執行指令。

若要變更 SFCB 使用證書的方式,請參閱第 37.2.2.3 節 「驗證」

37.2.2.2

預設情況下,SFCB 設定為接受所有透過安全連接埠 5989 傳輸的通訊。以下段落將介紹通訊連接埠設定以及建議的組態。

連接埠 5989 (安全)

SFCB 通訊使用的安全連接埠,提供 HTTPS 服務。這是預設值。如果使用這項設定,當透過網際網路在伺服器和工作站之間傳送時,所有 CIMOM 和用戶端應用程式之間的通訊都會進行加密。使用者必須使用用戶端應用程式進行驗證才能連接 SFCB 伺服器。建議您保留此設定。如果用戶端應用程式和受監控的節點之間存在路由器和防火牆,則必須在這些路由器和防火牆上開啟此連接埠,SFCB CIMOM 才能與必要的應用程式進行通訊。

連接埠 5988 (不安全)

SFCB 通訊使用的非安全連接埠,提供 HTTP 服務。這項設定已預設為停用。使用這項設定時,所有 CIMOM 和用戶端應用程式之間的通訊,在透過網際網路在伺服器和工作站之間傳送時都會開放,任何人無須經過任何驗證即可檢視。建議您只在嘗試為 CIMOM 相關問題除錯時使用這項設定。在解決問題後,請再次停用非安全連接埠選項。如果 SFCB CIMOM 要與需要進行不安全存取的必要應用程式進行通訊,則必須在用戶端應用程式與受監控節點之間的路由器和防火牆上開啟此連接埠。

若要變更預設連接埠指定,請參閱第 37.2.2.2 節 「埠」

37.2.2.3 驗證

SFCB 支援 HTTP 基本驗證和基於用戶端證書的驗證 (HTTP over SSL 連接)。在 SFCB 組態檔案 (預設為 /etc/sfcb/sfcb.cfg) 中指定 doBasicAuth =true,可啟用基本 HTTP 驗證。SFCB 的 SUSE® Linux Enterprise Server 安裝支援可插入驗證模組 (PAM) 方法,因此本地 root 使用者可以使用本地 root 使用者身分證明向 SFCB CIMOM 進行驗證。

如果 sslClientCertificate 組態內容設為 acceptrequire,則 SFCB HTTP 介面卡會在用戶端透過 HTTP over SSL (HTTPS) 連接時要求其提供證書。如果指定 require,則用戶端必須提供有效的證書 (依據透過 sslClientTrustStore 指定的用戶端信任儲存區)。如果用戶端無法提供有效證書,CIM 伺服器會拒絕連接。

sslClientCertificate =accept 設定產生的作用可能並不明顯。不過,當要同時允許基本驗證與用戶端證書驗證時,此設定非常有用。如果用戶端能夠提供有效的證書,HTTPS 連接便會建立,並且不再執行基本驗證程序。如果此功能無法驗證該證書,則會執行 HTTP 基本驗證。

37.3 SFCB CIMOM 組態

SFCB 是 CIM 伺服器的輕量化實作,但設定的自由度很高。有多個選項可控制其行為。控制 SFCB 伺服器的方法有三種:

  • 設定相應的環境變數

  • 使用指令行選項

  • 變更其組態檔案

37.3.1 環境變數

有多個環境變數會直接影響 SFCB 的行為。您需要透過 systemctl restart sfcb 重新啟動 SFCB 精靈,才能讓上述變更生效。

PATH

指定 sfcbd 精靈及公用程式的路徑。

LD_LIBRARY_PATH

指定 sfcb 執行時期程式庫的路徑。或者,您也可以將此路徑新增至泛系統動態載入程式組態檔案 /etc/ld.so.conf

SFCB_PAUSE_PROVIDER

指定提供者名稱。SFCB 伺服器會在首次載入提供者後暫停。此時,您可以將執行時期除錯程式附加至提供者的程序,以進行除錯。

SFCB_PAUSE_CODEC

指定 SFCB 轉碼器的名稱 (目前僅支援 http)。SFCB 伺服器會在首次載入轉碼器後暫停。此時,您可以將執行時期除錯程式附加至程序。

SFCB_TRACE

為 SFCB 指定除錯訊息的等級。有效值為 0 (無除錯訊息),或 1 (重要除錯訊息) 至 4 (所有除錯訊息)。預設值為 1。

SFCB_TRACE_FILE

SFCB 預設會將其除錯訊息輸出至標準錯誤輸出 (STDERR)。若要將除錯訊息改寫到指定的檔案,可以設定此變數。

SBLIM_TRACE

為 SBLIM 提供者指定除錯訊息的等級。有效值為 0 (無除錯訊息),或 1 (重要除錯訊息) 至 4 (所有除錯訊息)。

SBLIM_TRACE_FILE

SBLIM 提供者預設會將其追蹤訊息輸出至 STDERR。若要將追蹤訊息改寫到指定的檔案,可以設定此變數。

37.3.2 指令行選項

SFCB 精靈 sfcbd 有多個指令行選項,可開啟或關閉特定的執行時期功能。請在 SFCB 精靈啟動時輸入這些選項。

-c、--config-file=檔案

SFCB 精靈啟動時,預設會從 /etc/sfcb/sfcb.cfg 中讀取組態。借助此選項,可以指定替代的組態檔案。

-d、--daemon

強制 sfcbd 及其子程序在背景執行。

-s、--collect-stats

開啟執行時期的統計資料收集。各種 sfcbd 執行時期統計資料將被寫入到目前工作目錄下的 sfcbStat 檔案。預設情況下,不會收集任何統計資料。

-l、--syslog-level=記錄層級

指定系統記錄機能的詳細度。記錄層級可以是 LOG_INFO、LOG_DEBUG 或 LOG_ERR,預設為 LOG_ERR。

-k、--color-trace=記錄層級

使用不同的色彩列印各程序的追蹤輸出,以方便您除錯。

-t、--trace-components=數字

啟動元件層級的訊息追蹤,其中數字為使用 OR 指定的位元遮罩整數,用於定義要追蹤的元件。如果指定 -t ? ,會列出所有元件及其關聯的整數位元遮罩:

tux > sfcbd -t ?
---   Traceable Components:     Int       Hex
---            providerMgr:          1  0x0000001
---            providerDrv:          2  0x0000002
---             cimxmlProc:          4  0x0000004
---             httpDaemon:          8  0x0000008
---                upCalls:         16  0x0000010
---               encCalls:         32  0x0000020
---        ProviderInstMgr:         64  0x0000040
---       providerAssocMgr:        128  0x0000080
---              providers:        256  0x0000100
---            indProvider:        512  0x0000200
---       internalProvider:       1024  0x0000400
---             objectImpl:       2048  0x0000800
---                  xmlIn:       4096  0x0001000
---                 xmlOut:       8192  0x0002000
---                sockets:      16384  0x0004000
---              memoryMgr:      32768  0x0008000
---               msgQueue:      65536  0x0010000
---             xmlParsing:     131072  0x0020000
---         responseTiming:     262144  0x0040000
---              dbpdaemon:     524288  0x0080000
---                    slp:    1048576  0x0100000

-t 2019 會顯示 sfcbd 的內部函數,但不會產生過多訊息,因此很有用。

37.3.3 SFCB 組態檔案

SFCB 會在啟動後從組態檔案 /etc/sfcb/sfcb.cfg 讀取其執行時期組態。若想覆寫啟動時的這一行為,可以使用 -c 選項。

組態檔案包含多組 option : VALUE,每行一組。變更此檔案時,可以使用以所用環境原生格式儲存檔案的任何文字編輯器。

如果設定中包含以數字符號 (#) 設為備註的選項,則該設定會使用預設設定。

下面的選項清單可能不完整。如需完整的清單,請參閱 /etc/sfcb/sfcb.cfg/usr/share/doc/packages/sblim-sfcb/README 中的相關內容。

37.3.3.1 httpPort

用途

指定 sfcbd 監聽來自 CIM 用戶端之 HTTP (不安全) 請求的本地連接埠值。預設值為 5988

語法

httpPort: PORT_NUMBER

37.3.3.2 enableHttp

用途

指定 SFCB 是否應接受 HTTP 用戶端連接。預設值為 false

語法

enableHttp: OPTION

選項

描述

true

啟用 HTTP 連接。

false

停用 HTTP 連接。

37.3.3.3 httpProcs

用途

指定可同時建立之 HTTP 用戶端連接的最大數量。達到該數量後,所有新的內送 HTTP 請求都將遭到阻擋。預設值為 8

語法

httpProcs: MAX_NUMBER_OF_CONNECTIONS

37.3.3.4 httpUserSFCB、httpUser

用途

這些選項可控制 HTTP 伺服器將以何使用者的身分執行。如果 httpUserSFCBtrue,HTTP 將以 SFCB 主程序所用的相同使用者身分執行。如果為 false,將使用為 httpUser 指定的使用者名稱。此設定用於 HTTP 和 HTTPS 兩種伺服器。若 httpUserSFCB 設定為 false,就必須指定 httpUser。預設值為 true

語法

httpUserSFCB: true

37.3.3.5 httpLocalOnly

用途

指定是否將 HTTP 要求局限於本地主機。預設值為 false

語法

httpLocalOnly: false

37.3.3.6 httpsPort

用途

指定 sfcbd 監聽來自 CIM 用戶端之 HTTPS 請求的本地連接埠值。預設值為 5989

語法

httpsPort: port_number

37.3.3.7 enableHttps

用途

指定 SFCB 是否接受 HTTPS 用戶端連接。預設值為 true

語法

enableHttps: option

選項

描述

true

啟用 HTTPS 連接。

false

停用 HTTPS 連接。

37.3.3.8 httpsProcs

用途

指定可同時建立之 HTTPS 用戶端連接的最大數量。達到該數量後,所有新的內送 HTTPS 請求都將遭到阻擋。預設值為 8

語法

httpsProcs: MAX_NUMBER_OF_CONNECTIONS

37.3.3.9 enableInterOp

用途

指定 SFCB 是否提供 interop 名稱空間,用於指示支援。預設值為 true

語法

enableInterOp: OPTION

選項

描述

true

啟用 interop 名稱空間。

false

停用 interop 名稱空間。

37.3.3.10 provProcs

用途

指定可同時執行之提供者程序的最大數量。達到該數量之後,如果有新的內送請求要求載入新提供者,則會先自動卸載某個現有的提供者。預設值為 32

語法

provProcs: MAX_NUMBER_OF_PROCS

37.3.3.11 doBasicAuth

用途

接受請求之前,依據用戶端使用者識別碼開啟或關閉基本驗證。預設值為 true,表示系統會執行基本用戶端驗證。

語法

doBasicAuth: OPTION

選項

描述

true

啟用基本驗證。

false

停用基本驗證。

37.3.3.12 basicAuthLib

用途

指定本地程式庫名稱。SFCB 伺服器會載入程式庫,以驗證用戶端使用者識別碼。預設值為 sfcBasicPAMAuthentication

語法

provProcs: MAX_NUMBER_OF_PROCS

37.3.3.13 useChunking

用途

此選項可啟用或停用 HTTP/HTTPS區塊化功能。如果啟用,伺服器將透過多個較小的區塊將大量回應資料傳回用戶端,而不是緩衝資料並集中在一個區塊中全部送回。預設值為 true

語法

useChunking: OPTION

選項

描述

true

啟用 HTTP/HTTPS 資料區塊化功能。

false

停用 HTTP/HTTPS 資料區塊化功能。

37.3.3.14 keepaliveTimeout

用途

指定 SFCB HTTP 程序在同一個連接上兩次請求間的最長等待時間 (秒)。達到此時間後,程序將終止。如果將其設定為 0,則會停用 HTTP 保持連線功能。預設值為 0

語法

keepaliveTimeout: SECS

37.3.3.15 keepaliveMaxRequest

用途

指定一個連接上連續請求的最大數量。如果將其設定為 0,則會停用 HTTP 保持連線功能。預設值為 10

語法

keepaliveMaxRequest: NUMBER_OF_CONNECTIONS

37.3.3.16 registrationDir

用途

指定註冊目錄,其中包含提供者註冊資料、階段區域和靜態儲存庫。預設值為 /var/lib/sfcb/registration

語法

registrationDir: DIR

37.3.3.17 providerDirs

用途

指定 SFCB 從中搜尋提供者程式庫的目錄清單,以空格分隔。預設值為 /usr/lib64 /usr/lib64 /usr/lib64/cmpi

語法

providerDirs: DIR

37.3.3.18 providerSampleInterval

用途

指定提供者管理員檢查閒置提供者的間隔 (秒)。預設值為 30

語法

providerSampleInterval: SECS

37.3.3.19 providerTimeoutInterval

用途

指定提供者在閒置多少時間 (秒) 後由提供者管理員卸載。預設值為 60

語法

providerTimeoutInterval: SECS

37.3.3.20 providerAutoGroup

用途

如果提供者註冊檔案未指定其他任何群組,並且該選項設定為 true,則同一個共用程式庫中的所有提供者都會在同一個程序中執行。

語法

providerAutoGroup: OPTION

選項

描述

true

啟用提供者分組。

false

停用提供者分組。

37.3.3.21 sslCertificateFilePath

用途

指定包含伺服器證書的檔案名稱。檔案必須為 PEM (隱私增強郵件,採用 RFC 1421 與 RFC 1424 標準) 格式。不過,此檔案僅在 enableHttps 設定為 true 時才要求使用。預設值為 /etc/sfcb/server.pem

語法

sslCertificateFilePath: PATH

37.3.3.22 sslKeyFilePath

用途

指定包含伺服器證書之私密金鑰的檔案名稱。該檔案必須為 PEM 格式,可以不含密碼片語保護。不過,此檔案僅在 enableHttps 設定為 true 時才要求使用。預設值為 /etc/sfcb/file.pem

語法

sslKeyFilePath: PATH

37.3.3.23 sslClientTrustStore

用途

指定包含 CA 或自行簽署之客戶端證書的檔案名稱。此檔必須為 PEM 格式,不過僅在 sslClientCertificate 設定為 acceptrequire 時才要求使用。預設值為 /etc/sfcb/client.pem

語法

sslClientTrustStore: PATH

37.3.3.24 sslClientCertificate

用途

指定 SFCB 處理用戶端證書驗證的方式。如果設定為 ignore,則不會要求用戶端提供證書。如果設定為 accept,則會要求用戶端提供證書,不過即使用戶端不提供,操作也不會失敗。如果設定為 require,則會在客戶端不提供證書時拒絕客戶端連接。預設值為 ignore

語法

sslClientCertificate: OPTION

選項

描述

ignore

停用用戶端證書的請求。

accept

停用用戶端證書的請求。

即使不提供證書,也不會失敗。

require

如果沒有有效的證書,便拒絕用戶端連接。

37.3.3.25 certificateAuthLib

用途

指定本地程式庫的名稱,以便請求基於用戶端證書的使用者驗證。僅當 sslClientCertificate 未設定為 ignore 時才需要指定。預設值為 sfcCertificateAuthentication

語法

certificateAuthLib: FILE

37.3.3.26 traceLevel

用途

指定 SFCB 的追蹤層級。您可以透過設定環境變數 SFCB_TRACE_LEVEL 的方式對其進行覆寫。預設值為 0

語法

traceLevel: NUM_LEVEL

37.3.3.27 traceMask

用途

指定 SFCB 的追蹤遮罩。您可以透過指令行選項 --trace-components 對其進行覆寫。預設值為 0

語法

traceMask: MASK

37.3.3.28 traceFile

用途

指定 SFCB 的追蹤檔案。您可以透過設定環境變數 SFCB_TRACE_FILE 的方式對其進行覆寫。預設值為 stderr (標準錯誤輸出)。

語法

traceFile: OUTPUT

37.4 進階 SFCB 任務

本章介紹有關 SFCB 使用的更多進階主題。為了便於理解,您需要先掌握 Linux 檔案系統的基本知識,並具備 Linux 指令行的操作經驗。本章包括以下任務:

  • 安裝 CMPI 提供者

  • 測試 SFCB

  • 使用 wbemcli CIM 用戶端

37.4.1 安裝 CMPI 提供者

若要安裝 CMPI 提供者,需要確定其共用程式庫複製到 providerDirs 組態選項指定的其中一個目錄,請參閱第 37.3.3.17 節 「providerDirs」。還必須使用 sfcbstagesfcbrepos 指令正確註冊提供者。

系統通常會為 SFCB 準備提供者套件,以便安裝程序能夠正確進行註冊。此外,還為 SFCB 準備了大多數 SBLIM 提供者。

37.4.1.1 類別儲存庫

類別儲存庫是 SFCB 儲存 CIM 類別之相關資訊的位置。它通常由包含名稱空間元件的目錄樹組成。常見的 CIM 名稱空間為 root/cimv2root/interop,它們會分別轉譯為檔案系統上的類別儲存庫目錄路徑

/var/lib/sfcb/registration/repository/root/cimv2

/var/lib/sfcb/registration/repository/root/interop

每個名稱空間目錄都包含檔案 classSchemas。該檔案內有所有在該名稱空間下註冊之 CIM 類別的編譯二進位表示。同時還包含有關其 CIM 超類別的必要資訊。

此外,每個名稱空間目錄可能會包含檔案 qualifiers,內有該命名空間的所有修飾詞。Sfcbd 重新啟動時,類別提供者會掃描目錄 /var/lib/sfcb/registration/repository/ 及其所有子目錄,以確定註冊的名稱空間。然後解碼 classSchemas 檔案,並建立每個名稱空間的類別階層。

37.4.1.2 新增新類別

SFCB 無法執行線上 CIM 類別操作。您需要在離線模式下新增、變更或移除類別,然後使用 systemctl restart sfcb 重新啟動 SFCB 服務以註冊變更。

儲存提供者類別和註冊資訊時,SFCB 會使用一個稱為階段區域的位置。在 SUSE® Linux Enterprise Server 系統中,即 /var/lib/sfcb/stage/ 下的目錄結構。

若要新增提供者,需要:

  • 將提供者類別定義檔案複製到階段區域目錄 (/var/lib/sfcb/stage/mofs) 下的 ./mofs 子目錄。

  • 將包含類別名稱或提供者類型,以及可執行程式庫檔案名稱的註冊檔案複製到 ./regs 子目錄。

階段目錄中有兩個預設 mof (類別定義) 檔案:indication.mofinterop.mof。執行 sfcbrepos 指令後,根階段目錄 /var/lib/sfcb/stage/mofs 下的 MOF 檔案將複製到每個名稱空間中。interop.mof 只會編譯至 interop 名稱空間。

目錄配置可能如下例所示:

tux > ls /var/lib/sfcb/stage
default.reg  mofs  regs
tux > ls /var/lib/sfcb/stage/mofs
indication.mof  root
tux > ls /var/lib/sfcb/stage/mofs/root
cimv2  interop  suse  virt
tux > ls -1 /var/lib/sfcb/stage/mofs/root/cimv2 | less
Linux_ABIParameter.mof
Linux_BaseIndication.mof
Linux_Base.mof
Linux_DHCPElementConformsToProfile.mof
Linux_DHCPEntity.mof
[..]
OMC_StorageSettingWithHints.mof
OMC_StorageVolumeDevice.mof
OMC_StorageVolume.mof
OMC_StorageVolumeStorageSynchronized.mof
OMC_SystemStorageCapabilities.mof
tux > ls -1 /var/lib/sfcb/stage/mofs/root/interop
ComputerSystem.mof
ElementConformsToProfile.mof
HostSystem.mof
interop.mof
Linux_DHCPElementConformsToProfile.mof
[..]
OMC_SMIElementSoftwareIdentity.mof
OMC_SMISubProfileRequiresProfile.mof
OMC_SMIVolumeManagementSoftware.mof
ReferencedProfile.mof
RegisteredProfile.mof
tux > ls -1 /var/lib/sfcb/stage/regs
AllocationCapabilities.reg
Linux_ABIParameter.reg
Linux_BaseIndication.reg
Linux_DHCPGlobal.reg
Linux_DHCPRegisteredProfile.reg
[..]
OMC_Base.sfcb.reg
OMC_CopyServices.sfcb.reg
OMC_PowerManagement.sfcb.reg
OMC_Server.sfcb.reg
RegisteredProfile.reg
tux > cat /var/lib/sfcb/stage/regs/Linux_DHCPRegisteredProfile.reg
[Linux_DHCPRegisteredProfile]
   provider: Linux_DHCPRegisteredProfileProvider
   location: cmpiLinux_DHCPRegisteredProfile
   type: instance
   namespace: root/interop
#
[Linux_DHCPElementConformsToProfile]
   provider: Linux_DHCPElementConformsToProfileProvider
   location: cmpiLinux_DHCPElementConformsToProfile
   type: instance association
   namespace: root/cimv2
#
[Linux_DHCPElementConformsToProfile]
   provider: Linux_DHCPElementConformsToProfileProvider
   location: cmpiLinux_DHCPElementConformsToProfile
   type: instance association
   namespace: root/interop

SFCB 會對每個提供者使用一個自定的提供者註冊檔案。

注意
注意:SBLIM 提供者註冊檔案

SBLIM 網站上的所有 SBLIM 提供者都已包含用於產生 SFCB 之 .reg 檔案的註冊檔案。

SFCB 註冊檔案的格式如下:

[<class-name>]
   provider: <provide-name>
   location: <library-name>
   type: [instance] [association] [method] [indication]
   group: <group-name>
   unload: never
   namespace: <namespace-for-class> ...

其中,

<class-name>

CIM 類別名稱 (必要)

<provider-name>

CMPI 提供者名稱 (必要)

<location-name>

提供者程式庫名稱 (必要)

type

提供者類型 (必要)可以是 instanceassociationmethodindication 的任意組合。

<group-name>

可以將多個提供者組合在一起,在單一程序下執行,以便進一步減少對執行時期資源的佔用。在相同 <group-name> 下註冊的所有提供者會在同一程序下執行。預設情況下,每個提供者會做為獨立的程序執行。

unload

指定提供者的卸載規則。目前唯一支援的選項為 never,即不監控提供者的閒置時間,也不卸載提供者。預設情況下,當提供者的閒置時間超過組態檔案中指定的值時,就會被卸載。

namespace

可以執行此提供者之名稱空間的清單。這是必要選項,雖然對大多數提供者而言,此值均為 root/cimv2

在階段區域中儲存所有類別定義和提供者註冊檔案後,需要使用指令 sfcbrepos -f 重建 SFCB 類別儲存庫。

您可以使用此方式新增、變更或移除類別。重建類別儲存庫後,使用指令 systemctl restart sfcb 重新啟動 SFCB。

此外,SFCB 套件還包含一個公用程式,會將提供者類別 mof 檔案和註冊檔案複製到階段區域中的正確位置。

sfcbstage -r [provider.reg] [class1.mof] [class2.mof] ...

執行此指令行後,仍需重建類別儲存庫並重新啟動 SFCB 服務。

37.4.2 測試 SFCB

SFCB 套件包含兩個測試程序檔:wbemcatxmltest

wbemcat 會透過 HTTP 通訊協定將原始 CIM-XML 資料傳送至在連接埠 5988 上監聽的指定 SFCB 主機 (預設為 localhost)。然後顯示傳回的結果。以下檔案包含標準 EnumerateClasses 請求的 CIM-XML 表示:

<?xml version="1.0" encoding="utf-8"?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
  <MESSAGE ID="4711" PROTOCOLVERSION="1.0">
    <SIMPLEREQ>
      <IMETHODCALL NAME="EnumerateClasses">
        <LOCALNAMESPACEPATH>
          <NAMESPACE NAME="root"/>
          <NAMESPACE NAME="cimv2"/>
        </LOCALNAMESPACEPATH>
        <IPARAMVALUE NAME="ClassName">
          <CLASSNAME NAME=""/>
        </IPARAMVALUE>
        <IPARAMVALUE NAME="DeepInheritance">
          <VALUE>TRUE</VALUE>
        </IPARAMVALUE>
        <IPARAMVALUE NAME="LocalOnly">
          <VALUE>FALSE</VALUE>
        </IPARAMVALUE>
        <IPARAMVALUE NAME="IncludeQualifiers">
          <VALUE>FALSE</VALUE>
        </IPARAMVALUE>
        <IPARAMVALUE NAME="IncludeClassOrigin">
          <VALUE>TRUE</VALUE>
        </IPARAMVALUE>
      </IMETHODCALL>
    </SIMPLEREQ>
  </MESSAGE>
</CIM>

將此請求傳送至 SFCB CIMOM 會傳回有註冊提供者之所有支援類別的清單。假設將檔案儲存為 cim_xml_test.xml

tux > wbemcat cim_xml_test.xml | less
HTTP/1.1 200 OK
Content-Type: application/xml; charset="utf-8"
Content-Length: 337565
Cache-Control: no-cache
CIMOperation: MethodResponse

<?xml version="1.0" encoding="utf-8" ?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4711" PROTOCOLVERSION="1.0">
<SIMPLERSP>
<IMETHODRESPONSE NAME="EnumerateClasses">
[..]
<CLASS NAME="Linux_DHCPParamsForEntity" SUPERCLASS="CIM_Component">
<PROPERTY.REFERENCE NAME="GroupComponent" REFERENCECLASS="Linux_DHCPEntity">
</PROPERTY.REFERENCE>
<PROPERTY.REFERENCE NAME="PartComponent" REFERENCECLASS="Linux_DHCPParams">
</PROPERTY.REFERENCE>
</CLASS>
</IRETURNVALUE>
</IMETHODRESPONSE>
</SIMPLERSP>
</MESSAGE>
</CIM>

列出的類別會視系統上安裝的提供者而有所不同。

第二個程序檔 xmltest 也用於將原始 CIM-XML 測試檔案傳送至 SFCB CIMOM。傳送之後,它會將傳回的結果與之前儲存的OK結果檔案進行比較。如果不存在對應的OK檔案,則會予以建立,供後續使用。

tux > xmltest cim_xml_test.xml
Running test cim_xml_test.xml ... OK
        Saving response as cim_xml_test.OK
root # xmltest cim_xml_test.xml
Running test cim_xml_test.xml ... Passed

37.4.3 指令行 CIM 用戶端:wbemcli

除了 wbemcatxmltest 外,SBLIM 專案還包含更進階的指令行 CIM 用戶端 wbemcli。該用戶端用於向 SFCB 伺服器傳送 CIM 請求,並顯示傳回的結果。它不依賴 CIMOM 程式庫,並可用於所有與 WBEM 相容的實作。

例如,如果需要列出由註冊到您 SFCB 的 SBLIM 提供者執行的所有類別,可向 SFCB 傳送 EnumerateClasses (ec) 要求:

tux > wbemcli -dx ec http://localhost/root/cimv2
To server: <?xml version="1.0" encoding="utf-8" ?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4711" PROTOCOLVERSION="1.0"><SIMPLEREQ><IMETHODCALL \
    NAME="EnumerateClasses"><LOCALNAMESPACEPATH><NAMESPACE NAME="root"> \
    </NAMESPACE><NAMESPACE NAME="cimv2"></NAMESPACE> \
    </LOCALNAMESPACEPATH>
<IPARAMVALUE NAME="DeepInheritance"><VALUE>TRUE</VALUE> \
    </IPARAMVALUE>
<IPARAMVALUE NAME="LocalOnly"><VALUE>FALSE</VALUE></IPARAMVALUE>
<IPARAMVALUE NAME="IncludeQualifiers"><VALUE>FALSE</VALUE> \
    </IPARAMVALUE>
<IPARAMVALUE NAME="IncludeClassOrigin"><VALUE>TRUE</VALUE> \
    </IPARAMVALUE>
</IMETHODCALL></SIMPLEREQ>
</MESSAGE></CIM>
From server: Content-Type: application/xml; charset="utf-8"
From server: Content-Length: 337565
From server: Cache-Control: no-cache
From server: CIMOperation: MethodResponse
From server: <?xml version="1.0" encoding="utf-8" ?>
<CIM CIMVERSION="2.0" DTDVERSION="2.0">
<MESSAGE ID="4711" PROTOCOLVERSION="1.0">
<SIMPLERSP>
<IMETHODRESPONSE NAME="EnumerateClasses">
<IRETURNVALUE>
<CLASS NAME="CIM_ResourcePool" SUPERCLASS="CIM_LogicalElement">
<PROPERTY NAME="Generation" TYPE="uint64">
</PROPERTY>
<PROPERTY NAME="ElementName" TYPE="string">
</PROPERTY>
<PROPERTY NAME="Description" TYPE="string">
</PROPERTY>
<PROPERTY NAME="Caption" TYPE="string">
</PROPERTY>
<PROPERTY NAME="InstallDate" TYPE="datetime">
</PROPERTY>
[..]
<CLASS NAME="Linux_Ext4FileSystem" SUPERCLASS="CIM_UnixLocalFileSystem">
<PROPERTY NAME="FSReservedCapacity" TYPE="uint64">
</PROPERTY>
<PROPERTY NAME="TotalInodes" TYPE="uint64">
</PROPERTY>
<PROPERTY NAME="FreeInodes" TYPE="uint64">
</PROPERTY>
<PROPERTY NAME="ResizeIncrement" TYPE="uint64">
<VALUE>0</VALUE>
</PROPERTY>
<PROPERTY NAME="IsFixedSize" TYPE="uint16">
<VALUE>0</VALUE>
</PROPERTY>
[..]

-dx 選項會顯示由 wbemcli 傳送至 SFCB 的實際 XML,以及實際收到的 XML。在上例中,傳回的眾多類別中的第一個類別是 CIM_ResourcePool,接著是 Linux_Ext4FileSystem。所有其他註冊類別也會顯示類似的項目。

如果省略 -dx 選項,則 wbemcli 只會顯示傳回資料的精簡表示:

tux > wbemcli ec http://localhost/root/cimv2
localhost:5988/root/cimv2:CIM_ResourcePool Generation=,ElementName=, \
    Description=,Caption=,InstallDate=,Name=,OperationalStatus=, \
    StatusDescriptions=,Status=,HealthState=,PrimaryStatus=, \
    DetailedStatus=,OperatingStatus=,CommunicationStatus=,InstanceID=, \
    PoolID=,Primordial=,Capacity=,Reserved=,ResourceType=, \
    OtherResourceType=,ResourceSubType=, \AllocationUnits=
localhost:5988/root/cimv2:Linux_Ext4FileSystem FSReservedCapacity=, \
    TotalInodes=,FreeInodes=,ResizeIncrement=,IsFixedSize=,NumberOfFiles=, \
    OtherPersistenceType=,PersistenceType=,FileSystemType=,ClusterSize=, \
    MaxFileNameLength=,CodeSet=,CasePreserved=,CaseSensitive=, \
    CompressionMethod=,EncryptionMethod=,ReadOnly=,AvailableSpace=, \
    FileSystemSize=,BlockSize=,Root=,Name=,CreationClassName=,CSName=, \
    CSCreationClassName=,Generation=,ElementName=,Description=,Caption=, \
    InstanceID=,InstallDate=,OperationalStatus=,StatusDescriptions=, \
    Status=,HealthState=,PrimaryStatus=,DetailedStatus=,OperatingStatus= \
    ,CommunicationStatus=,EnabledState=,OtherEnabledState=,RequestedState= \
    ,EnabledDefault=,TimeOfLastStateChange=,AvailableRequestedStates=, \
    TransitioningToState=,PercentageSpaceUse=
    [..]

37.5 更多資訊

如需有關 WBEM 和 SFCB 的詳細資料,請參閱以下來源:
https://www.dmtf.org

Distributed Management Task Force 網站

https://www.dmtf.org/standards/wbem/

網路企業管理 (WBEM) 網站

https://www.dmtf.org/standards/cim/

Common Information Model (CIM) 網站

http://sblim.sourceforge.net/wiki/index.php/Main_Page

Standards Based Linux Instrumentation (SBLIM) 網站

第 V 部分 疑難排解

  • 38 說明和文件
  • SUSE® Linux Enterprise Server 隨附了各種來源的資訊和文件,其中有許多已整合到安裝的系統中。

  • 39 收集系統資訊以供支援所用
  • 為了讓使用者快速綜覽機器的所有相關系統資訊,SUSE Linux Enterprise Server 提供了 hostinfo 套件。該套件還可以協助系統管理員檢查污染的 (不受支援的) 核心,或者機器上安裝的任何協力廠商套件。

    出現問題時,可以使用 supportconfig 指令行工具或 YaST 支援模組建立詳細的系統報告。這兩種方法都會收集系統的相關資訊,包括目前的核心版本、硬體、已安裝套件、分割區設定及其他資訊。最後會產生一個包含多個檔案的 TAR 歸檔。在建立服務要求 (SR) 後,您可以將該 TAR 歸檔上傳至全球技術支援。該歸檔有助於找出您所報告的問題,並可以協助您解決問題。

    此外,您可以分析 supportconfig 輸出來發現已知問題,以協助快速解決問題。為此,SUSE Linux Enterprise Server 提供了一個裝置和一個指令行工具用於進行 Supportconfig 分析 (SCA)。

  • 40 常見問題及其解決方案
  • 本章介紹一些可能會發生的問題及其解決方案。即使這裡沒有與您完全相同的情況,或許可以從類似情況中獲得一些提示,來解決您遇到的問題。

38 說明和文件

SUSE® Linux Enterprise Server 隨附了各種來源的資訊和文件,其中有許多已整合到安裝的系統中。

/usr/share/doc 中的文件

這是傳統的說明目錄,包含系統的各種文件檔案及版本說明。子目錄 packages 中還提供了所安裝套件的相關資訊。如需詳細資訊,請參閱第 38.1 節 「文件目錄」

外圍程序指令的 man 頁面和資訊頁

使用外圍程序時,不需要記住指令的選項。一般而言,外圍程序會以 man 頁面與資訊頁的方式提供整合式說明。如需詳細資訊,請參閱第 38.2 節 「man 頁面」第 38.3 節 「資訊頁」

桌面說明中心

GNOME 桌面的說明中心 (說明) 以可搜尋的方式提供了對系統上最重要的文件資源的集中存取途徑。這些資源包括已安裝之應用程式的線上說明、man 頁面、資訊頁以及產品隨附的 SUSE 手冊。

某些應用程式的獨立說明套件

使用 YaST 安裝新軟體時,通常會自動安裝軟體文件,而且會顯示在桌面的說明中心內。不過,有些應用程式 (例如 GIMP) 可能具有不同的線上說明套件,它們可以使用 YaST 獨立安裝,但不會整合到說明中心內。

38.1 文件目錄

在安裝的 Linux 系統上用來尋找文件的目錄一直以來都是 /usr/share/doc。該目錄通常包含系統上已安裝之套件的相關資訊,以及版本說明和手冊等。

注意
注意:內容取決於所安裝的套件

在 Linux 系統中,有許多手冊及其他類型的文件都可以像軟體一樣以套件的形式獲取。/usr/share/docs 中包含的資訊量和類型也取決於所安裝的 (文件) 套件。如果找不到此處提及的子目錄,請檢查您的系統中是否已安裝相應的套件,並根據需要使用 YaST 予以新增。

38.1.1 SUSE 手冊

我們提供不同語言的 HTML 和 PDF 版本的書籍。在 manual 子目錄下,可以找到您產品適用的大多數 HTML 版 SUSE 手冊。如需您產品適用的所有文件的綜覽,請參閱手冊的序。

如果安裝了多種語言,/usr/share/doc/manual 可能會包含不同語言版本的手冊。HTML 版本的 SUSE 手冊也可以在兩種桌面系統的說明中心內找到。若想瞭解 PDF 和 HTML 版手冊在安裝媒體上的位置,請參閱 SUSE Linux Enterprise Server 的版本說明。這些手冊位於所安裝系統的 /usr/share/doc/release-notes/ 目錄內,也可以在 https://www.suse.com/releasenotes// 中產品特定的網頁內找到其線上版本。

38.1.2 套件文件

packages 下面,可找到系統上已安裝之軟體套件中所包含的文件。對每個套件都會建立子目錄 /usr/share/doc/packages/PACKAGENAME。其中通常包含套件的讀我檔案,有時還包含範例、組態檔案或其他程序檔。以下清單介紹了 /usr/share/doc/packages 下包含的一般檔案。以下每個項目不一定都存在,許多套件可能只包含其中的一部分。

AUTHORS

主要開發者清單。

BUGS

已知錯誤或異常狀況。可能還包含 Bugzilla 網頁的連結,透過該網頁可以搜尋所有錯誤。

CHANGES , ChangeLog

版本之間的變更摘要。因為它非常詳盡,所以對於開發人員而言通常很有幫助。

COPYING , LICENSE

授權資訊。

FAQ

自郵寄清單或新聞群組所收集的問題與解答。

INSTALL

在系統上安裝此套件的方法。由於在您讀取此檔案時已安裝套件,因此可以安心地忽略此檔案的內容。

READMEREADME.*

有關軟體的一般資訊。例如用途和使用方法。

TODO

尚未執行但可能會在未來執行的項目。

MANIFEST

具有簡短摘要的檔案清單。

NEWS

說明此版本的新功能。

38.2 man 頁面

man 頁面 Linux 系統的重要部分。它們提供指令用法以及所有可用選項與參數的說明。man 頁面可以使用 man 後接指令名稱的方式進行存取,例如 man ls

man 頁面會直接在外圍程序中顯示。若要導覽這些頁面,請使用 Page ↑Page ↓ 上移和下移。使用 HomeEnd,在文件的開頭和結尾之間移動。按 Q 結束此檢視模式。使用 man man,可詳細瞭解 man 指令本身的資訊。如 表格 38.1 「man 頁面 - 類別和描述」 (取自 man 本身的 man 頁面) 所示,man 頁面會依類別儲存。

表 38.1︰ man 頁面 - 類別和描述

數字

描述

1

執行程式或外圍程序指令

2

系統呼叫 (核心提供的函數)

3

程式庫呼叫 (程式庫中的函數)

4

特殊檔案 (通常位於 /dev 中)

5

檔案格式和慣例 (/etc/fstab)

6

遊戲

7

其他 (包括巨集套件與慣例),例如,man(7)、groff(7)

8

系統管理指令 (通常只適用於 root)

9

核心常式 (非標準)

每一個線上文件由標籤為 NAMESYNOPSISDESCRIPTIONSEE ALSOLICENSING 以及 AUTHOR 等的許多部份組成。視指令的類型,可能還包括其他可用區段。

38.3 資訊頁

Info 頁面是您系統上另一個重要的資訊來源。它們所提供的資訊通常比 man 頁面更為詳盡。這些頁面中的內容不止指令行選項,有時還包含完整的教學課程或參考文件。若要檢視特定指令的資訊頁面,請輸入 info,後接指令名稱,例如 info ls。您可以直接在外圍程序中使用檢視器瀏覽資訊頁面,並可顯示不同的區段 (稱為「節點」)。使用 Space<— 分別可以向前和向後移動。在節點內,您也可以使用 Page ↑Page ↓ 進行瀏覽,但要前往上一個或下一個節點,只能使用 Space<—。按 Q 可以結束檢視模式。並不是所有指令都隨附資訊頁面,反之亦然。

38.4 線上資源

除了 /usr/share/doc 下所安裝之 SUSE 手冊的線上版本外,您還可以在 Web 上存取產品專屬的手冊與文件。如需關於 SUSE Linux Enterprise Server 所有可用文件的綜覽,請查看產品專屬文件網頁 https://documentation.suse.com/

如果您要搜尋其他產品相關的資訊,也可以造訪下列網站:

SUSE 技術支援

如果您有疑問或需要一些解決方案來解決技術問題,可在 https://www.suse.com/support/ 中找到 SUSE 技術支援。

SUSE 論壇

Novell 提供了多個論壇,您可以進入其中套論有關 SUSE 產品的話題。請參閱 https://forums.suse.com/ 以取得論壇清單。

SUSE 部落格

SUSE 部落格提供了相關文章、提示和問答:https://www.suse.com/c/blog/

GNOME 文件

https://library.gnome.org/ 上提供了適用於 GNOME 使用者、管理員以及開發人員的文件。

The Linux documentation project

The Linux Documentation Project (TLDP) 由志願者組成的團體運營,該團體負責撰寫 Linux 相關文件 (請參閱 https://www.tldp.org)。TLDP 或許是能夠提供最全面的 Linux 相關文件的資源了。這組文件包含入門者的教學課程,但主要是針對有經驗的使用者和專業系統管理員。TLDP 已免費公開發行 HOWTO、常見問題集以及指南 (手冊)。SUSE Linux Enterprise Server 中也隨附了一部分來自 TLDP 的文件

您還可以嘗試通用搜尋引擎。例如,如果您在燒錄 CD 或進行 LibreOffice 檔案轉換時遇到問題,則可以使用搜尋片語 Linux CD-RW 說明OpenOffice 檔案轉換問題

39 收集系統資訊以供支援所用

為了讓使用者快速綜覽機器的所有相關系統資訊,SUSE Linux Enterprise Server 提供了 hostinfo 套件。該套件還可以協助系統管理員檢查污染的 (不受支援的) 核心,或者機器上安裝的任何協力廠商套件。

出現問題時,可以使用 supportconfig 指令行工具或 YaST 支援模組建立詳細的系統報告。這兩種方法都會收集系統的相關資訊,包括目前的核心版本、硬體、已安裝套件、分割區設定及其他資訊。最後會產生一個包含多個檔案的 TAR 歸檔。在建立服務要求 (SR) 後,您可以將該 TAR 歸檔上傳至全球技術支援。該歸檔有助於找出您所報告的問題,並可以協助您解決問題。

此外,您可以分析 supportconfig 輸出來發現已知問題,以協助快速解決問題。為此,SUSE Linux Enterprise Server 提供了一個裝置和一個指令行工具用於進行 Supportconfig 分析 (SCA)。

39.1 顯示目前系統資訊

在登入伺服器時,要想快速方便地綜覽所有相關系統資訊,請使用套件 hostinfo。機器上安裝該套件後,控制台將會向登入此機器的任何 root 使用者顯示以下資訊:

範例 39.1︰ root 身分登入時的 hostinfo 輸出
Welcome to SUSE Linux Enterprise Server 15 SP2 Snapshot8 (x86_64) - Kernel \r (\l).


Distribution:             SUSE Linux Enterprise Server 15 SP2
Current As Of:            Wed 25 Mar 2020 12:09:20 PM PDT
Hostname:                 localhost
Kernel Version:           5.3.18-8-default
 Architecture:            x86_64
 Installed:               Thu 19 Mar 2020 11:25:13 AM PDT
 Status:                  Not Tainted
Last Installed Package:   Wed 25 Mar 2020 11:42:24 AM PDT
 Patches Needed:          0
 Security:                0
 3rd Party Packages:      219
Network Interfaces
 eth0:                    192.168.2/24 2002:c0a8:20a::/64
Memory
 Total/Free/Avail:        7.4Gi/6.4Gi/6.8Gi (91% Avail)
CPU Load Average:         7 (3%) with 2 CPUs

如果輸出顯示 tainted 核心狀態,請參閱第 39.6 節 「核心模組支援」以瞭解更多詳細資料。

39.2 使用 Supportconfig 收集系統資訊

若要建立包含詳細系統資訊的 TAR 歸檔,以提交給全球技術支援,請使用:

  • supportconfig 指令,或者

  • YaST 支援模組。

該指令行工具由預設安裝的套件 supportutils 提供。YaST 支援模組也以該指令行工具為基礎。

系統上的一些套件整合了 Supportconfig 外掛程式,具體視系統上安裝的套件而定。執行 Supportconfig 時,還會執行所有外掛程式,並建立該歸檔的一或多個結果檔案。這樣做的好處是只檢查包含特定外掛程式的主題。Supportconfig 外掛程式儲存在 /usr/lib/supportconfig/plugins/ 目錄中。

39.2.1 建立服務要求號碼

系統隨時都可以產生 Supportconfig 歸檔。但是,要將 Supportconfig 資料提交給全球技術支援,首先需要產生一個服務要求號碼。上傳歸檔以獲得支援時,您需要使用此號碼。

若要建立服務要求,請造訪 https://scc.suse.com/support/requests 並依照螢幕上的指示執行操作。記下服務要求號碼。

注意
注意:隱私權聲明

SUSE 將系統報告視為機密資料。關於我們在隱私方面所做承諾的詳細資訊,請參閱 https://www.suse.com/company/policies/privacy/

39.2.2 上傳目標

建立服務要求號碼後,可以依照程序 39.1 「使用 YaST 向支援部門提交資訊」程序 39.2 「從指令行向支援部門提交資訊」中所述將 Supportconfig 歸檔上傳到全球技術支援網站。使用下列上傳目標之一:

或者,可以使用以下服務要求 URL 手動將該 TAR 歸檔附加到您的服務要求:https://scc.suse.com/support/requests

39.2.3 使用 YaST 建立 supportconfig 歸檔

若要使用 YaST 收集系統資訊,請執行以下步驟:

  1. 啟動 YaST 並開啟「支援」模組。

    Image
  2. 按一下「建立報告 Tar 聚合檔」。

  3. 在隨後出現的視窗中,從選項圓鈕清單中選取一個 Supportconfig 選項。依預設,系統會預先選取使用自訂 (進階) 設定。如果要先測試報告功能,請使用「僅收集最少量的資訊」。如需其他選項的更多資訊,請參閱 supportconfig 的 man 頁面。

    按「下一步」。

  4. 輸入您的聯絡人資訊。此資訊將儲存在 basic-environment.txt 檔案中,並會包含在建立的歸檔中。

  5. 若要將歸檔提交到全球技術支援,請提供所需的上載資訊。YaST 會自動推薦一個上載伺服器。若要修改該伺服器,請參閱第 39.2.2 節 「上傳目標」,以詳細瞭解可以使用哪些上載伺服器。

    若要日後再提交歸檔,請將上載資訊保留空白。

  6. 下一步啟動資訊收集程序。

    Image

    該程序完成後,按下一步

  7. 若要檢視已收集的資料,請從檔案名稱中選取所需的檔案,以在 YaST 中檢視其內容。在將 TAR 歸檔提交到支援部門之前,若要移除該歸檔中的某個檔案,請使用從資料移除。按「下一步」。

  8. 儲存該 TAR 歸檔。如果您以 root 使用者身分啟動了 YaST 模組,則 YaST 會提示您將該歸檔儲存到 /var/log (否則將儲存到您的主目錄)。檔案名稱格式為 scc_HOST_DATE_TIME.tbz

  9. 如果要直接將該歸檔上載到支援部門,請務必啟用將記錄檔案 Tar 聚合檔上載到 URL。這裡顯示的上載目標步驟 5 中 YaST 建議的上載目標。若要修改上載目標,請在第 39.2.2 節 「上傳目標」中查看有哪些可用的上載伺服器。

  10. 如果要跳過上載步驟,請停用將記錄檔案 Tar 聚合檔上載到 URL

  11. 確認變更以關閉 YaST 模組。

39.2.4 從指令行建立 supportconfig 歸檔

下面的程序顯示如何建立 Supportconfig 歸檔,但不將它直接提交給支援人員。要上傳該歸檔,需要依照程序 39.2 「從指令行向支援部門提交資訊」中所述,結合某些選項執行指令。

  1. 開啟外圍程序,切換為 root 身分。

  2. 執行 supportconfig。一般而言,不帶任何選項執行此工具就足以符合需要。下面的清單中顯示了一些十分常用的選項:

    -E MAIL, -N NAME, -O COMPANY, -P PHONE

    設定您的聯絡資料:電子郵件地址 (-E)、公司名稱 (-O)、您的姓名 (-N) 和電話號碼 (-P)。

    -i KEYWORDS, -F

    限制檢查的功能。KEYWORDS 預留位置是區分大小寫的關鍵字清單 (以逗號分隔)。使用 supportconfig -F 可獲得所有關鍵字清單。

    -r SRNUMBER

    定義上傳產生的 TAR 歸檔時所用的服務要求號碼。

  3. 等待工具完成操作。

  4. 預設的歸檔位置為 /var/log,檔案名稱格式為 scc_HOST_DATE_TIME.tbz

39.2.5 瞭解 supportconfig 的輸出

無論您是透過 YaST 還是直接執行 supportconfig,該程序檔都會顯示其所執行操作的摘要。

                     Support Utilities - Supportconfig
                          Script Version: 3.0-98 
                          Script Date: 2017 06 01
[...]
Gathering system information
  Data Directory:    /var/log/scc_d251_180201_1525 1

  Basic Server Health Check...                 Done 2
  RPM Database...                              Done 2
  Basic Environment...                         Done 2
  System Modules...                            Done 2
[...]
  File System List...                          Skipped 3
[...]
  Command History...                           Excluded 4
[...]
  Supportconfig Plugins:                       1 5
    Plugin: pstree...                          Done
[...]
Creating Tar Ball

==[ DONE ]===================================================================
  Log file tar ball: /var/log/scc_d251_180201_1525.txz 6
  Log file size:     732K
  Log file md5sum:   bf23e0e15e9382c49f92cbce46000d8b
=============================================================================

1

用於儲存結果的暫存資料目錄。系統會將此目錄歸檔為 tar 檔案,請參閱6

2

已成功啟用 (預設或手動選取) 並執行該功能。結果儲存在檔案中 (請參閱表格 39.1 「TAR 歸檔中的功能和檔案名稱對照」)。

3

已跳過該功能,因為一或多個 RPM 套件的部分檔案有變更。

4

已排除該功能,因為已透過 -x 選項將其取消選取。

5

程序檔找到了一個外掛程式,並執行該外掛程式 pstree。該外掛程式位於 /usr/lib/supportconfig/plugins/ 目錄中。如需詳細資料,請參閱 man 頁面。

6

歸檔的 Tar 檔案名稱,預設使用 xz 壓縮。

39.2.6 常用的 supportconfig 選項

呼叫 supportconfig 公用程式時通常不會顯示任何選項。請使用 supportconfig -h 顯示所有選項的清單,或參閱 man 頁面。下面的清單簡要概述了一些常見的使用案例:

減少所收集資訊的大小

使用最少量選項 (-m):

tux > sudo supportconfig -m
將資訊限制為特定的主題

如果已確定問題所在,並發現該問題僅與特定的區域或功能集相關,您在下次執行 supportconfig 時,應限制針對特定的區域收集資訊。例如,如果您偵測到 LVM 出現問題,並想要測試最近對 LVM 組態所做的變更。此時,合適的做法是僅收集有關 LVM 的最少量 Supportconfig 資訊:

tux > sudo supportconfig -i LVM

可透過逗號分隔額外的關鍵字。例如,額外的磁碟測試:

tux > sudo supportconfig -i LVM,DISK

要查看可用來將收集之資訊限制為特定區域的功能關鍵字的完整清單,請執行:

tux > sudo supportconfig -F
在輸出中包含其他聯絡資訊:
tux > sudo supportconfig -E tux@example.org -N "Tux Penguin" -O "Penguin Inc." ...

(在一行中輸入所有指令)

收集已輪替的記錄檔案
tux > sudo supportconfig -l

這對記錄量較大的環境,或在重新開機後 syslog 輪替記錄檔案時核心發生當機的情況特別實用。

39.2.7 歸檔內容綜覽

TAR 歸檔包含各功能的所有結果。根據所選的內容 (所有功能或只有一小部分功能) 而定,歸檔包含的檔案可能有多有少。您可透過 -i 選項來限制功能集 (請參閱第 39.2.6 節 「常用的 supportconfig 選項」)。

若要列出歸檔的內容,請使用以下 tar 指令:

root # tar xf /var/log/scc_earth_180131_1545.tbz

TAR 歸檔中永遠包含以下檔案名稱:

歸檔中一定會包含的檔案
basic-environment.txt

包含執行此程序檔的日期和系統資訊 (如套裝作業系統版本)、監管程式資訊等。

basic-health-check.txt

包含一些基本的狀態檢查,如運作時間、虛擬記憶體統計資料、可用記憶體和硬碟、殭屍程序檢查等。

hardware.txt

包含基本硬體檢查 (如有關 CPU 架構的資訊)、所有已連接硬體的清單、中斷、I/O 連接埠、核心開機訊息等。

messages.txt

包含系統日誌中的記錄訊息。

rpm.txt

包含所有已安裝的 RPM 套件、名稱、來源及其版本的清單。

summary.xml

包含 XML 格式的一些資訊,如套裝作業系統、版本和產品特定的片段。

supportconfig.txt

包含有關 supportconfig 程序檔自身的資訊。

y2log.txt

包含 YaST 特定的資訊,如特定的套件、組態檔案和記錄檔案。

表格 39.1 「TAR 歸檔中的功能和檔案名稱對照」列出了所有可用的功能及其檔案名稱。後續的 Service Pack 或外掛程式將會補充到清單中。

表 39.1︰ TAR 歸檔中的功能和檔案名稱對照
特性檔案名稱
APPARMORsecurity-apparmor.txt
AUDITsecurity-audit.txt
AUTOFSfs-autofs.txt
BOOTboot.txt
BTRFSfs-btrfs.txt
DAEMONSsystemd.txt
CIMOMcimom.txt
CRASHcrash.txt
CRONcron.txt
DHCPdhcp.txt
DISKfs-diskio.txt
DNSdns.txt
DOCKERdocker.txt
DRBDdrbd.txt
ENVenv.txt
ETCetc.txt
HAha.txt
HAPROXYhaproxy.txt
HISTORYshell_history.txt
IBib.txt
IMANnovell-iman.txt
ISCSIfs-iscsi.txt
LDAPldap.txt
LIVEPATCHkernel-livepatch.txt
LVMlvm.txt
MEMmemory.txt
MODmodules.txt
MPIOmpio.txt
NETnetwork-*.txt
NFSnfs.txt
NTPntp.txt
NVMEnvme.txt
OCFS2ocfs2.txt
OFILESopen-files.txt
PRINTprint.txt
PROCproc.txt
SARsar.txt
SLERTslert.txt
SLPslp.txt
SMTsmt.txt
SMARTfs-smartmon.txt
SMBsamba.txt
SRAIDfs-softraid.txt
SSHssh.txt
SSSDsssd.txt
SYSCONFIGsysconfig.txt
SYSFSsysfs.txt
TRANSACTIONALtransactional-update.txt
TUNEDtuned.txt
UDEVudev.txt
UFILESfs-files-additional.txt
UPupdates.txt
WEBweb.txt
Xx.txt

39.3 將資訊提交至全球技術支援部門

可以使用 YaST 支援模組或 supportconfig 指令行公用程式向全球技術支援提交系統資訊。如果您遇到伺服器問題,想要獲得支援人員的協助,則首先需要建立一個服務要求。如需詳細資料,請參閱第 39.2.1 節 「建立服務要求號碼」

以下範例使用 12345678901 做為服務要求號碼的預留位置。請以您在第 39.2.1 節 「建立服務要求號碼」中建立的服務要求號碼取代 12345678901

程序 39.1︰ 使用 YaST 向支援部門提交資訊

下面的程序假設您已建立某個 Supportconfig 歸檔,但尚未將其上傳。請確定已按第 39.2.3 節 「使用 YaST 建立 supportconfig 歸檔」步驟 4所述,在歸檔中包含了您的聯絡資訊。如需如何透過一個步驟產生並提交 Supportconfig 歸檔的說明,請參閱第 39.2.3 節 「使用 YaST 建立 supportconfig 歸檔」

  1. 啟動 YaST 並開啟「支援」模組。

  2. 按一下「上傳」。

  3. 含記錄檔案的套件中,指定現有 Supportconfig 歸檔的路徑,或者按一下瀏覽找到該歸檔。

  4. YaST 會自動推薦一個上傳伺服器。如果要修改該伺服器,請參閱第 39.2.2 節 「上傳目標」,以詳細瞭解可以使用哪些上傳伺服器。

    Image

    繼續以繼續。

  5. 按一下 Finish (完成)。

程序 39.2︰ 從指令行向支援部門提交資訊

下面的程序假設您已建立某個 Supportconfig 歸檔,但尚未將其上傳。如需如何透過一個步驟產生並提交 Supportconfig 歸檔的說明,請參閱第 39.2.3 節 「使用 YaST 建立 supportconfig 歸檔」

  1. 伺服器連接至網際網路:

    1. 要使用預設上載目標,請執行:

      tux > sudo supportconfig -ur 12345678901
    2. 對於安全上傳目標,請使用以下指令:

      tux > sudo supportconfig -ar 12345678901
  2. 伺服器連接至網際網路

    1. 執行以下指令:

      tux > sudo supportconfig -r 12345678901
    2. /var/log/scc_SR12345678901*tbz 歸檔,並手動上載到我們的 FTP 伺服器之一。要使用哪個伺服器取決於您所在的位置。如需綜覽,請參閱第 39.2.2 節 「上傳目標」

  3. TAR 歸檔傳輸到我們 FTP 伺服器的內送目錄後,會自動附加到您的服務要求中。

39.4 分析系統資訊

您可以分析使用 supportconfig 建立的系統報告來發現已知問題,以幫助快速解決問題。為此,SUSE Linux Enterprise Server 提供了一個裝置和一個指令行工具用於進行 Supportconfig 分析 (SCA)。SCA 裝置是一個非互動式伺服器端工具。SCA 工具 (scatool) 由套件 sca-server-report提供,它在用戶端執行,並透過指令列執行。這兩個工具都能分析來自受影響伺服器的 Supportconfig 歸檔。初始伺服器分析在 SCA 裝置或執行 scatool 的工作站上進行。線上伺服器上不會發生任何分析週期。

此外,該裝置和指令行工具還需要產品特定的模式,這樣它們才能分析關聯產品的 Supportconfig 輸出。每個模式就是一個程序檔,用於針對某個已知問題分析和評估 Supportconfig 歸檔。模式以 RPM 套件的形式提供。

您也可以依照第 39.4.3 節 「開發自訂分析模式」中的簡要描述開發自己的模式。

39.4.1 SCA 指令行工具

SCA 指令行工具讓您既可使用 supportconfig,又可使用本地機器上安裝的特定產品的分析模式來分析該機器。該工具將建立一份顯示分析結果的 HTML 報告。如需取得範例說明,請參閱圖形 39.1 「SCA 工具產生的 HTML 報告」

SCA 工具產生的 HTML 報告
圖 39.1︰ SCA 工具產生的 HTML 報告

scatool 指令由 sca-server-report 套件。系統上預設不會安裝該套件。此外,您還需要 sca-patterns-base 套件和任何產品特定的 sca-patterns-* 套件,它們需與要執行 scatool 指令的機器上所安裝的產品相符。

root 使用者身分或者結合 sudo 執行 scatool 指令。在呼叫 SCA 工具時,可以分析現有的 supportconfig TAR 歸檔,或者透過一步即讓該工具產生並分析新的歸檔。該工具還提供具有 Tab 補齊功能的互動式主控台。您可以在外部機器上執行 supportconfig,並在本地機器上執行後續分析。

下面提供了一些範例指令:

sudo scatool -s

呼叫 supportconfig,並在本地機器上產生新的 Supportconfig 歸檔。透過套用與所安裝產品相符的 SCA 分析模式來分析歸檔,以發現已知問題。顯示基於分析結果產生之 HTML 報告的路徑。通常,該報告會寫入到 Supportconfig 歸檔所在的同一目錄中。

sudo scatool -s -o /opt/sca/reports/ 

sudo scatool -s 類似,唯一的差別在於,HTML 報告會寫入 -o 選項指定的路徑。

sudo scatool -a PATH_TO_TARBALL_OR_DIR 

分析指定的 Supportconfig 歸檔檔案 (或者指定用於存放解壓縮 Supportconfig 歸檔的目錄)。產生的 HTML 報告儲存在 Supportconfig 歸檔或目錄所在的位置。

sudo scatool -a SLES_SERVER.COMPANY.COM 

與外部伺服器 SLES_SERVER.COMPANY.COM 建立 SSH 連接,並在該伺服器上執行 supportconfig。系統隨後將 Supportconfig 歸檔複製回本地機器,並在該處進行分析。產生的 HTML 報告儲存在預設的 /var/log 目錄中。(SLES_SERVER.COMPANY.COM 上只建立 Supportconfig 歸檔)。

sudo scatool -c

啟動 scatool 的互動式控制台。按 →| 兩次可查看可用指令。

關於其他選項和資訊,請執行 sudo scatool -h 或參閱 scatool 的 man 頁面。

39.4.2 SCA 裝置

如果您決定使用 SCA 裝置來分析 Supportconfig 歸檔,請設定一部伺服器 (或虛擬機器) 做為專屬的 SCA 裝置伺服器。然後,可以使用該 SCA 裝置伺服器,對企業中執行 SUSE Linux Enterprise Server 或 SUSE Linux Enterprise Desktop 的所有機器上的 Supportconfig 歸檔進行分析。您只需將 Supportconfig 歸檔上傳到裝置伺服器,等待它執行分析。此程序無需任何互動。在 MariaDB 資料庫中,SCA 裝置會追蹤已分析的所有 Supportconfig 歸檔。您可以直接從裝置 Web 介面閱讀 SCA 報告。或者,可以讓裝置透過電子郵件將 HTML 報告傳送給任何管理使用者。如需詳細資料,請參閱第 39.4.2.5.4 節 「透過電子郵件傳送 SCA 報告」

39.4.2.1 安裝快速入門

若要透過指令行快速安裝和設定 SCA 裝置,請依照此處的指示操作。該程序適用於進階使用者,並主要針對純安裝與指令的設定。如需詳細資訊,請參閱第 39.4.2.2 節 「先決條件」第 39.4.2.3 節 「安裝與基本設定」中的詳細描述。

先決條件
  • Web 與 LAMP 模式

  • Web 與程序檔模組 (您必須註冊機器才能選取此模組)。

注意
注意:需要 root 權限

以下程序中的所有指令必須以 root 身分執行。

程序 39.3︰ 使用匿名 FTP 進行上傳的安裝

設定並執行裝置後,將不再需要人工互動。因此,對於透過 cron 工作建立和上傳 Supportconfig 歸檔的情形,非常適合使用這種方法來設定裝置。

  1. 在要安裝裝置的機器上,登入主控台並執行以下指令 (確定接受推薦的套件):

    tux > sudo zypper install sca-appliance-* sca-patterns-* \
    vsftpd yast2 yast2-ftp-server
    tux > sudo systemctl enable apache2
    tux > sudo systemctl start apache2
    tux > sudo systemctl enable vsftpd
    tux > sudo systemctl start vsftpd
    tux > sudo yast ftp-server
  2. 在 YaST FTP 伺服器中,選取「驗證 ›  啟用上載 ›  匿名使用者可上載 ›  完成 › 」,以建立 /srv/ftp/upload

  3. 執行以下指令:

    tux > sudo systemctl enable mysql
    tux > sudo systemctl start mysql
    tux > sudo mysql_secure_installation
    tux > sudo setup-sca -f

    mysql_secure_installation 將建立一個 MariaDB root 密碼。

程序 39.4︰ 使用 SCP/tmp 進行上傳的安裝

這種設定裝置的方法需要在輸入 SSH 密碼時進行人工互動。

  1. 在要安裝裝置的機器上,登入控制台。

  2. 執行以下指令:

    tux > sudo zypper install sca-appliance-* sca-patterns-*
    tux > sudo systemctl enable apache2
    tux > sudo systemctl start apache2
    tux > sudo sudo systemctl enable mysql
    tux > sudo systemctl start mysql
    tux > sudo mysql_secure_installation
    tux > sudo setup-sca

39.4.2.2 先決條件

若要執行 SCA 裝置伺服器,需要滿足以下先決條件:

  • 安裝所有 sca-appliance-* 套件。

  • 安裝 sca-patterns-base 套件。此外,需要針對您要使用該裝置分析的 Supportconfig 歸檔類型,安裝產品特定的 sca-patterns-*

  • Apache

  • PHP

  • MariaDB

  • 匿名 FTP 伺服器 (選擇性)

39.4.2.3 安裝與基本設定

第 39.4.2.2 節 「先決條件」中所列,SCA 裝置與其他套件存在若干相依性。因此,在安裝和設定 SCA 裝置伺服器之前,需要做一些準備工作:

  1. 對於 Apache 和 MariaDB,需安裝 WebLAMP 安裝模式。

  2. 設定 Apache 和 MariaDB,並視需要設定一個匿名 FTP 伺服器。如需詳細資訊,請參閱 第 34 章 「Apache HTTP 伺服器第 35 章 「使用 YaST 設定 FTP 伺服器

  3. 將 Apache 和 MariaDB 設定為在開機時啟動:

    tux > sudo systemctl enable apache2 mysql
  4. 啟動這兩個服務:

    tux > sudo systemctl start apache2 mysql

現在,您便可以依照程序 39.5 「安裝和設定 SCA 裝置」中所述安裝和設定 SCA 裝置。

程序 39.5︰ 安裝和設定 SCA 裝置

安裝這些套件後,可以使用 setup-sca 程序檔來對 SCA 裝置使用的 MariaDB 管理與報告資料庫進行基本設定。

使用該程序檔可以設定以下選項,以便將 Supportconfig 歸檔從您的機器上傳到 SCA 裝置:

  • scp

  • 匿名 FTP 伺服器

  1. 安裝裝置和 SCA 基本模式程式庫:

    tux > sudo zypper install sca-appliance-* sca-patterns-base
  2. 此外,請針對您要分析的 Supportconfig 歸檔類型安裝模式套件。例如,如果您的環境中安裝了 SUSE Linux Enterprise Server 12 和 SUSE Linux Enterprise Server 15 伺服器,請安裝 sca-patterns-sle12sca-patterns-sle15 這兩個套件。

    若要安裝所有可用模式:

    tux > sudo zypper install sca-patterns-*
  3. 若要對 SCA 裝置進行基本設定,請使用 setup-sca 程序檔。如何呼叫該指令取決於您要如何將 Supportconfig 歸檔上傳到 SCA 裝置伺服器:

    • 如果您設定了使用 /srv/ftp/upload 目錄的匿名 FTP 伺服器,請結合 -f 選項執行設定程序檔。依照螢幕上的說明執行操作:

      tux > sudo setup-sca -f
      注意
      注意:使用其他目錄的 FTP 伺服器

      如果 FTP 伺服器使用的目錄不是 /srv/ftp/upload,請先調整以下組態檔案,使其指向正確的目錄:/etc/sca/sdagent.conf/etc/sca/sdbroker.conf

    • 如果您想透過 scp 將 Supportconfig 檔案上傳到 SCA 裝置伺服器的 /tmp 目錄,請不帶任何參數呼叫該設定程序檔。依照螢幕上的說明執行操作:

      tux > sudo setup-sca

    該設定程序檔將會依據它的要求執行一些檢查,並設定所需的元件。它會提示您輸入兩個密碼:您設定之 MariaDB 的 MySQL root 密碼,以及用於登入 SCA 裝置 Web 介面的 Web 使用者密碼。

  4. 輸入現有的 MariaDB root 密碼。SCA 裝置將使用該密碼連接到 MariaDB。

  5. 定義 Web 使用者的密碼。該密碼將寫入 /srv/www/htdocs/sca/web-config.php,並設定為使用者 scdiag 的密碼。以後,您可隨時變更使用者名稱和密碼,請參閱第 39.4.2.5.1 節 「Web 介面的密碼」

在成功完成安裝和設定後,便可以開始使用 SCA 裝置,請參閱第 39.4.2.4 節 「使用 SCA 裝置」。但是,您應修改部分選項,如變更 Web 介面的密碼、變更 SCA 模式更新來源、啟用歸檔模式,或者設定電子郵件通知。如需相關的詳細資訊,請參閱第 39.4.2.5 節 「自訂 SCA 裝置」

警告
警告:資料保護

由於 SCA 裝置伺服器上的報告包含安全相關資訊,因此,請務必保護好 SCA 裝置伺服器上的資料,以防未經授權的人員存取。

39.4.2.4 使用 SCA 裝置

您可以將現有的 Supportconfig 歸檔手動上傳到 SCA 裝置,也可以一步即完成建立新 Supportconfig 歸檔並上傳到 SCA 裝置的操作。可以透過 FTP 或 SCP 來上傳。對於這兩種上傳方式,您需要知道可用來存取 SCA 裝置的 URL。要透過 FTP 上傳,需要為 SCA 裝置設定一台 FTP 伺服器,請參閱程序 39.5 「安裝和設定 SCA 裝置」

39.4.2.4.1 將 supportconfig 歸檔上傳到 SCA 裝置
  • 若要建立 Supportconfig 歸檔並透過 (匿名) FTP 上傳:

    tux > sudo supportconfig -U “ftp://SCA-APPLIANCE.COMPANY.COM/upload”
  • 若要建立 Supportconfig 歸檔並透過 SCP 上傳:

    tux > sudo supportconfig -U “scp://SCA-APPLIANCE.COMPANY.COM/tmp”

    系統將提示您輸入執行 SCA 裝置之伺服器的 root 使用者密碼。

  • 如果要手動上載一或多個歸檔,請將現有的歸檔檔案 (通常位於 /var/log/scc_*.tbz) 複製到 SCA 裝置中。對於目標,請使用裝置伺服器的 /tmp 目錄或 /srv/ftp/upload 目錄 (如果為 SCA 裝置伺服器設定了 FTP)。

39.4.2.4.2 檢視 SCA 報告

可以在裝有瀏覽器並能存取 SCA 裝置之報告索引頁面的任何機器上檢視 SCA 報告。

  1. 啟動網頁瀏覽器並確定 JavaScript 和 Cookie 已啟用。

  2. 輸入 SCA 裝置的報告索引頁面做為 URL。

    https://sca-appliance.company.com/sca

    如有疑問,請諮詢您的系統管理員。

  3. 系統將提示您輸入用於登入的使用者名稱和密碼。

    SCA 裝置產生的 HTML 報告
    圖 39.2︰ SCA 裝置產生的 HTML 報告
  4. 登入後,按一下您要閱讀之報告的日期。

  5. 首先按一下「基本狀態」類別將其展開。

  6. 在「訊息」欄中按一下個別項目。SUSE 知識庫中的相應文章即會開啟。閱讀建議的解決方案,並遵循所述的指示操作。

  7. 如果 Supportconfig 分析報告的「解決方案」欄顯示了其他項目,請按一下這些項目。閱讀建議的解決方案,並遵循所述的指示操作。

  8. 請查看 SUSE 知識庫 (https://www.suse.com/support/kb/),以瞭解與 SCA 發現的問題直接相關的結果。設法解決這些問題。

  9. 檢查有無可前瞻性處理的結果,以免將來發生問題。

39.4.2.5 自訂 SCA 裝置

以下幾節顯示了如何變更 Web 介面的密碼、變更 SCA 模式更新來源、啟用歸檔模式,以及設定電子郵件通知。

39.4.2.5.1 Web 介面的密碼

SCA 裝置 Web 介面要求提供使用者名稱和密碼才能登入。預設的使用者名稱為 scdiag,預設的密碼為 linux (如果未做其他指定,請參閱程序 39.5 「安裝和設定 SCA 裝置」)。請儘早將預設密碼變更為一個較為安全的密碼。您也可以修改使用者名稱。

程序 39.6︰ 變更 Web 介面的使用者名稱或密碼
  1. 在 SCA 裝置伺服器的系統控制台上以 root 使用者身分登入。

  2. 在編輯器中開啟 /srv/www/htdocs/sca/web-config.php

  3. 視需要變更 $username$password 的值。

  4. 儲存檔案並離開。

39.4.2.5.2 SCA 模式的更新

依預設,所有 sca-patterns-* 套件將由一個 root cron 工作來定期更新,該工作將在夜間執行 sdagent-patterns 程序檔,而該程序檔又會執行 zypper update sca-patterns-*。定期的系統更新將會更新所有 SCA 裝置套件和模式套件。若要手動更新 SCA 裝置和模式,請執行:

tux > sudo zypper update sca-*

系統預設從 SUSE Linux Enterprise 15 SP3 更新儲存庫安裝更新。如果需要,您可以將更新來源變更為某部 RMT 伺服器。當 sdagent-patterns 執行 zypper update sca-patterns-* 時,將從目前設定的更新通道中取得更新。如果該通道在 RMT 伺服器上,將從該伺服器提取套件。

程序 39.7︰ 停用 SCA 模式的自動更新
  1. 在 SCA 裝置伺服器的系統控制台上以 root 使用者身分登入。

  2. 在編輯器中開啟 /etc/sca/sdagent-patterns.conf

  3. 將項目

    UPDATE_FROM_PATTERN_REPO=1

    針對

    UPDATE_FROM_PATTERN_REPO=0
  4. 儲存檔案並離開。機器無需重新啟動就能套用變更。

39.4.2.5.3 歸檔模式

系統在分析了 Supportconfig 歸檔並將其結果儲存在 MariaDB 資料庫中後,會從 SCA 裝置中刪除所有這些歸檔。但是,如果要進行疑難排解,在機器中保留 Supportconfig 歸檔的副本可能會比較有用。依預設,歸檔模式處於停用狀態。

程序 39.8︰ 在 SCA 裝置中啟用歸檔模式
  1. 在 SCA 裝置伺服器的系統控制台上以 root 使用者身分登入。

  2. 在編輯器中開啟 /etc/sca/sdagent.conf

  3. 將項目

    ARCHIVE_MODE=0

    針對

    ARCHIVE_MODE=1
  4. 儲存檔案並離開。機器無需重新啟動就能套用變更。

啟用歸檔模式後,SCA 裝置會將 Supportconfig 檔案儲存至 /var/log/archives/saved 目錄,而不會將其刪除。

39.4.2.5.4 透過電子郵件傳送 SCA 報告

SCA 裝置可透過電子郵件傳送所分析的每個 Supportconfig 的 HTML 報告檔案。預設此功能是停用的。如果啟用此功能,您便可以定義應將報告傳送到的電子郵件地址清單。定義觸發報告傳送的狀態訊息層級 (STATUS_NOTIFY_LEVEL)。

STATUS_NOTIFY_LEVEL 的可能值
$STATUS_OFF

停用傳送 HTML 報告功能。

$STATUS_CRITICAL

僅傳送包含「關鍵」狀態的 SCA 報告。

$STATUS_WARNING

僅傳送包含「警告」或「關鍵」狀態的 SCA 報告。

$STATUS_RECOMMEND

僅傳送包含「建議」、「警告」或「關鍵」狀態的 SCA 報告。

$STATUS_SUCCESS

傳送包含「成功」、「建議」、「警告」或「關鍵」狀態的 SCA 報告。

程序 39.9︰ 為 SCA 報告設定電子郵件通知
  1. 在 SCA 裝置伺服器的系統控制台上以 root 使用者身分登入。

  2. 在編輯器中開啟 /etc/sca/sdagent.conf

  3. 搜尋 STATUS_NOTIFY_LEVEL 項目。該項目預設設定為 $STATUS_OFF (停用電子郵件通知)。

  4. 若要啟用電子郵件通知,請將 $STATUS_OFF 變更為要針對其產生電子郵件報告的狀態訊息層級,例如:

    STATUS_NOTIFY_LEVEL=$STATUS_SUCCESS

    如需詳細資料,請參閱STATUS_NOTIFY_LEVEL 的可能值

  5. 若要定義要將報告傳送到的收件人清單:

    1. 搜尋 EMAIL_REPORT='root' 項目。

    2. 請使用您要向其傳送 SCA 報告的電子郵件地址清單取代 root。各電子郵件地址必須以空格分隔。例如:

      EMAIL_REPORT='tux@my.company.com wilber@your.company.com'
  6. 儲存檔案並離開。機器無需重新啟動就能套用變更。以後產生的所有 SCA 報告都將透過電子郵件傳送到指定地址。

39.4.2.6 備份和還原資料庫

若要備份和還原儲存 SCA 報告的 MariaDB 資料庫,請依照如下所述使用 scadb 指令。scadb 由以下套件提供: sca-appliance-broker

程序 39.10︰ 備份資料庫
  1. 在執行 SCA 裝置之伺服器的系統控制台上,以 root 使用者身分登入。

  2. 執行以下指令以將裝置置於維護模式:

    root # scadb maint
  3. 使用以下指令啟動備份程序:

    root # scadb backup

    資料將儲存到 TAR 歸檔 sca-backup-*sql.gz 中。

  4. 如果您正在使用模式建立資料庫開發自己的模式 (參閱第 39.4.3 節 「開發自訂分析模式」),則還要備份以下資料:

    root # sdpdb backup

    資料將儲存到 TAR 歸檔 sdp-backup-*sql.gz 中。

  5. 將以下資料複製到另一台機器或外部儲存媒體中:

    • sca-backup-*sql.gz

    • sdp-backup-*sql.gz

    • /usr/lib/sca/patterns/local (僅當您已建立自訂模式時才需要複製該資料)

  6. 使用以下指令重新啟動 SCA 裝置:

    root # scadb reset agents
程序 39.11︰ 還原資料庫

若要基於您的備份還原資料庫,請按如下所述執行操作:

  1. 在執行 SCA 裝置之伺服器的系統控制台上,以 root 使用者身分登入。

  2. 將最新的 sca-backup-*sql.gzsdp-backup-*sql.gz TAR 歸檔複製到 SCA 裝置伺服器。

  3. 若要解壓縮檔案,請執行:

    root # gzip -d *-backup-*sql.gz
  4. 若要將資料輸入資料庫,請執行:

    root # scadb import sca-backup-*sql
  5. 如果您正在使用模式建立資料庫建立自己的模式,則還要透過以下指令輸入以下資料:

    root # sdpdb import sdp-backup-*sql
  6. 如果您正在使用自訂模式,則還要基於備份資料還原 /usr/lib/sca/patterns/local

  7. 使用以下指令重新啟動 SCA 裝置:

    root # scadb reset agents
  8. 使用以下指令更新資料庫中的模式模組:

    root # sdagent-patterns -u

39.4.3 開發自訂分析模式

SCA 裝置隨附了一個完整的模式開發環境 (SCA 模式資料庫),可讓您開發自己的自訂模式。模式可用任何程式設計語言編寫。若要使這些模式可用於 Supportconfig 分析程序,需要將其儲存到 /usr/lib/sca/patterns/local,並使其可執行。然後,SCA 裝置和 SCA 工具將會針對做為分析報告一部分的新 Supportconfig 歸檔執行這些自訂模式。關於如何建立 (和測試) 自己模式的詳細指示,請參閱https://www.suse.com/c/blog/sca-pattern-development/

39.5 在安裝期間收集資訊

安裝期間無法使用 supportconfig。不過,您可以使用 save_y2logs 從 YaST 收集記錄檔案。此指令將在 /tmp 目錄下建立 .tar.xz 歸檔。

如果在安裝之初便出現問題,可以透過 linuxrc 建立的記錄檔案收集資訊。linuxrc 是在 YaST 啟動之前執行的小指令。此記錄檔案位於 /var/log/linuxrc.log

重要
重要:在安裝的系統中無法使用安裝記錄檔案

安裝期間可用的記錄檔案在安裝後的系統中已不再可用。您可以在安裝程式執行期間妥善儲存安裝記錄檔案。

39.6 核心模組支援

對於任何企業作業系統,一個重要的要求就是您獲得的環境方面的支援層級。核心模組是硬體 (控制器) 與作業系統之間最為相關的連接器。SUSE Linux Enterprise 中的每個核心模組都有一個 supported 旗標,該旗標可使用以下三個值:

  • yes,相當於 supported

  • external,相當於 supported

  • (空白,未設定),相當於 unsupported

以下規則適用:

  • 依預設,自我重新編譯的核心的所有模組都會標示為 unsupported。

  • SUSE 合作夥伴支援的核心模組以及使用 SUSE SolidDriver 程式提供的核心模組會標示為 external

  • 如果未設定 supported 旗標,載入此模組便會污染該核心。系統不支援污染的核心。不受支援的核心模組放在額外的 RPM 套件 (kernel-FLAVOR-extra) 中。該套件僅可在 SUSE Linux Enterprise Desktop 和 SUSE Linux Enterprise Workstation Extension 上使用。預設不會載入這些核心 (FLAVOR=default|xen|...)。此外,安裝程式中將不提供這些不受支援的模組,並且 kernel-FLAVOR-extra 套件也不會包含在 SUSE Linux Enterprise 媒體中。

  • 不是依據與 Linux 核心授權相容的授權提供的核心模組也會污染核心。如需詳細資訊,請參閱 /usr/src/linux/Documentation/sysctl/kernel.txt/proc/sys/kernel/tainted 的狀態。

39.6.1 技術背景

  • Linux 核心:在 SUSE Linux Enterprise 15 SP3 上,/proc/sys/kernel/unsupported 的值預設設為 2 (載入不受支援的模組時,syslog 中不發出警告)。安裝程式以及已安裝的系統中均使用此預設值。如需詳細資訊,請參閱 /usr/src/linux/Documentation/sysctl/kernel.txt

  • modprobe:用於檢查模組相依性及載入模組的 modprobe 公用程式會相應地檢查 supported 旗標的值。如果該值為 yesexternal,則會載入該模組,否則不會載入。關於如何覆寫此行為的資訊,請參閱第 39.6.2 節 「使用不受支援的模組」

    注意
    注意:支援

    SUSE 一般不支援透過 modprobe -r 移除儲存模組。

39.6.2 使用不受支援的模組

雖然普遍的支援能力很重要,但在有些情況下可能需要載入不受支援的模組。例如,為了測試或除錯目的,或者如果您的硬體廠商提供了 HotFix。

  • 若要覆寫預設行為,請編輯 /etc/modprobe.d/10-unsupported-modules.conf,將變數 allow_unsupported_modules 的值變更為 1。如果 initrd 中需要一個不受支援的模組,則請記得執行 dracut -f 以更新 initrd。

    如果只想嘗試載入模組一次,可將 --allow-unsupported-modules 選項與 modprobe 結合使用。如需詳細資訊,請參閱 modprobe 的 man 頁面。

  • 在安裝期間,可透過驅動程式更新磁碟新增不受支援的模組,這樣便會載入這些模組。若要在開機期間以及開機後強制載入不受支援的模組,請使用核心指令行選項 oem-modules。安裝和啟始化 suse-module-tools 套件時,系統將評估核心旗標 TAINT_NO_SUPPORT (/proc/sys/kernel/tainted)。如果核心已污染,將啟用 allow_unsupported_modules。這可以防止不受支援的模組在正在安裝的系統中載入失敗。如果安裝期間沒有任何不受支援的模組,並且未使用其他特殊的核心指令行選項 (oem-modules=1),則預設行為仍是禁止不受支援的模組。

請記住,載入和執行不受支援的模組會導致 SUSE 不支援該核心和整個系統。

39.7 更多資訊

40 常見問題及其解決方案

本章介紹一些可能會發生的問題及其解決方案。即使這裡沒有與您完全相同的情況,或許可以從類似情況中獲得一些提示,來解決您遇到的問題。

40.1 尋找並收集資訊

Linux 會非常詳細地報告事件。當系統發生問題時,可以從幾個地方查看相關資訊,主要是 Linux 系統的標準記錄檔案,也有與 SUSE Linux Enterprise Server 系統相關的記錄檔案。大部分記錄檔案都可以透過 YaST (「其他 ›  檢視開機記錄 」) 進行檢視。

使用 YaST 可以收集支援團隊所需的所有系統資訊。使用「其他」 › 「支援」,然後選取問題類別。在收集到所有資訊之後,將此份資訊連結到您的支援要求。

以下是最常查看的記錄檔案清單,以及它們各自的一般用途。包含 ~ 的路徑表示目前使用者的主目錄。

表 40.1︰ 記錄檔

記錄檔案

描述

~/.xsession-errors

來自目前執行中桌上應用程式的訊息。

/var/log/apparmor/

來自 AppArmor 的記錄檔案,請參閱Book “Security and Hardening Guide” 以獲得詳細資訊。

/var/log/audit/audit.log

來自 Audit 的記錄檔案,可追蹤對檔案、目錄或系統資源的存取,並追蹤系統呼叫。請參閱Book “Security and Hardening Guide”以獲得詳細資訊。

/var/log/mail.*

來自郵件系統的訊息。

/var/log/NetworkManager

NetworkManager 中的記錄檔案,用於收集網路連接性的問題

/var/log/samba/

目錄包含 Samba 伺服器和用戶端記錄訊息。

/var/log/warn

來自核心和系統記錄精靈的所有訊息,均為警告或以上等級。

/var/log/wtmp

二進位檔案包含使用者對於目前機器工作階段的登入記錄。請以 last 檢視。

/var/log/Xorg.*.log

來自 X Window System 的多種啟動和執行時期記錄檔案。對於 X 啟動失敗的除錯非常實用。

/var/log/YaST2/

目錄包含 YaST 的動作和其結果。

/var/log/zypper.log

Zypper 的記錄檔案。

與記錄檔不同的是,您的機器亦提供您執行中系統的資訊。請參閱表格 40.2: /proc 檔案系統的系統資訊

表 40.2︰ /proc 檔案系統的系統資訊

檔案

描述

/proc/cpuinfo

包含處理器資訊,如類型、廠商、型號與效能。

/proc/dma

顯示目前使用的 DMA 頻道。

/proc/interrupts

顯示使用中的岔斷,以及每種岔斷正在使用的數量。

/proc/iomem

顯示 I/O (輸入/輸出) 記憶體的狀態。

/proc/ioports

顯示此時正在使用的 I/O 連接埠。

/proc/meminfo

顯示記憶體狀態。

/proc/modules

顯示個別模組。

/proc/mounts

顯示目前掛接的裝置。

/proc/partitions

顯示所有硬碟的分割區。

/proc/version

顯示目前的 Linux 版本。

除了 /proc 檔案系統,Linux 核心還會輸出 sysfs 模組 (記憶體內檔案系統) 的相關資訊。此模組代表核心物件及其屬性和關係。如需有關 sysfs 的詳細資訊,請參閱第 24 章 「使用 udev 進行動態核心裝置管理 中 udev 的相關內容。表格 40.3 提供了 /sys 下最常用目錄的綜覽。

表 40.3︰ /sys 檔案系統的系統資訊

檔案

描述

/sys/block

包含系統中探查到之每個區塊裝置的子目錄。一般情況下,大部分裝置都是磁碟類型的裝置。

/sys/bus

包含每種實體匯流排類型的子目錄。

/sys/class

包含組合為功能型裝置 (如圖形、網路和印表機等) 的多個子目錄

/sys/device

包含全域裝置階層。

Linux 隨附多種工具可進行系統分析和監控。請參閱Book “System Analysis and Tuning Guide”, Chapter 2 “System monitoring utilities”以取得用於系統診斷最重要的選項。

下面的每種情境所採用的編排順序是,先在標題中描述問題,隨後用一兩個段落提供建議的解決方案、詳細解決方案的參考資料,以及對其他相關情境的交叉參照。

40.2 開機問題

開機問題指的是您的系統無法正常開機的狀況 (無法開機進入預期的目標和登入螢幕)。

40.2.1 GRUB 2 開機載入程式無法載入

若硬體運作正常,則可能是開機載入程式已損毀,Linux 無法在機器上啟動。若是這樣的話,必須修復開機載入程式。為此,您需要依第 40.5.2 節 「使用救援系統」中所述啟動救援系統,然後遵照第 40.5.2.4 節 「修改和重新安裝開機載入程式」中的指示。

此外,您可以依照以下方式使用救援系統來修復開機載入程式。從安裝媒體將機器開機。在開機螢幕中,選擇更多 › 將 Linux 系統開機。使用預設核心選項選取包含所安裝系統和核心的磁碟。

系統開機後,啟動 YaST 並切換到系統 › 開機載入程式。確定啟用了將一般開機碼寫入 MBR 選項,然後按一下確定。如此會透過重寫來修復損毀的開機載入程式,或者安裝缺失的開機載入程式。

另一個機器無法開機的原因可能跟 BIOS 有關:

BIOS 設定

檢查與您硬碟相關的 BIOS 設定。若在目前的 BIOS 設定下找不到硬碟本身,則可能只是未啟動 GRUB 2。

BIOS 開機順序

檢查您系統的開機順序是否包含硬碟。若未啟用硬碟選項,您的系統可能已正確安裝,但在需要存取硬碟時無法開機。

40.2.2 無圖形登入

如果機器能啟動,但無法開機進入圖形登入管理員,則問題可能出在預設的 systemd 目標選項或 X Window System 的組態上。若要檢查目前的 systemd 預設目標,請執行指令 sudo systemctl get-default。如果傳回的值為 not graphical.target,請執行指令 sudo systemctl isolate graphical.target。如果圖形登入螢幕已啟動,請登入並啟動「YaST ›  系統 ›  服務管理員」,然後將「預設系統目標」設定為「圖形介面」。此後,系統應該能夠開機進入圖形登入螢幕。

如果即使已開機或者切換到圖形目標,圖形登入螢幕也不啟動,則原因可能是您的桌面或 X Window 軟體設定錯誤或者已毀損。檢查位於 /var/log/Xorg.*.log 的記錄檔案,以取得 X 伺服器嘗試啟動時所傳送的詳細訊息。如果啟動期間桌面發生錯誤,可能會在系統日誌中記錄錯誤訊息,您可以使用指令 journalctl 查詢該日誌 (如需詳細資訊,請參閱第 17 章 「journalctl:查詢 systemd 日誌)。若這些錯誤訊息指出 X 伺服器中有組態問題,請嘗試修復這些問題。若仍然未出現圖形系統,請考慮重新安裝圖形桌面。

40.2.3 無法掛接 Btrfs 根分割區

如果 btrfs 根分割區已毀損,請嘗試以下選項:

  • 使用 -o recovery 選項掛接該分割區。

  • 如果不起作用,請在您的根分割區上執行 btrfs-zero-log

40.2.4 強制檢查根分割區

如果根分割區已損毀,請在開機提示字元中使用參數 forcefsck 。如此即可將選項 -f (force) 傳遞給 fsck 指令。

40.2.5 停用交換以啟用開機

當某個交換裝置不可用且系統在開機期間無法啟用該裝置時,開機可能會失敗。透過將以下選項附加到核心指令行,來嘗試停用所有交換裝置:

systemd.device_wants_unit=off systemd.mask=swap.target

您也可以嘗試停用特定的交換裝置:

systemd.mask=dev-sda1.swap

40.2.6 GRUB 2 在雙重開機系統上重新開機時失敗

如果 GRUB 2 在重新開機期間失敗,請停用 BIOS 中的快速開機設定。

40.3 登入問題

登入問題是指機器雖然開機到預期的歡迎畫面或登入提示畫面,卻拒絕接受使用者名稱和密碼,或者雖然接受了使用者名稱和密碼,但是行為異常 (無法啟動圖形桌面、發生錯誤或轉到了指令行等)。

40.3.1 有效的使用者名稱和密碼組合失敗

這種情形常發生於系統設定為使用網路驗證或目錄服務時,且基於某些原因,會無法從其所設定的伺服器取得結果。身為唯一的本地使用者,使用者是唯一仍可登入這些機器的使用者。下面是機器看似運作良好卻無法正確執行登入的一些常見原因:

  • 網路未作用。如須對此情況的進一步指示,請參閱第 40.4 節 「網路問題」

  • DNS 此時未運作(這樣會阻礙 GNOME 運作,也會妨礙系統驗證安全伺服器的要求)。若機器花費過久的時間回應任何動作的話,表示可能是這種情況。如需此主題的詳細資訊,請參閱第 40.4 節 「網路問題」

  • 若系統設定為使用 Kerberos,則系統的本地時間有可能超過了 Kerberos 伺服器時間所容許的時間差 (一般為 300 秒)。若 NTP (網路時間協定) 未正確運作,或本地 NTP 伺服器未運作,則 Kerberos 驗證會停止作用,因為它必須仰賴網路上同步的共同時脈才可運作。

  • 系統的驗證組態設定錯誤。請檢查 PAM 組態檔案是否有錯字或指示詞順序錯誤。如需關於 PAM 和所包含組態檔案語法的其他背景資料,請參閱Book “Security and Hardening Guide”, Chapter 2 “Authentication with PAM”

  • 主分割區已加密。如需此主題的詳細資訊,請參閱第 40.3.3 節 「登入至加密的主分割區失敗」

對於所有非外部網路造成的問題,解決方案就是重新開機進入單一使用者模式,並修復組態後再次開機進入操作模式,以嘗試重新登入。若要開機進入單一使用者模式:

  1. 重新啟動系統。會出現開機畫面及提示。

  2. Esc 離開開頭顯示畫面,並前往 GRUB 2 文字式功能表。

  3. B 進入 GRUB 2 編輯器。

  4. 將以下參數新增到包含核心參數的行中:

    systemd.unit=rescue.target
  5. 「F10」

  6. 輸入 root 的使用者名稱與密碼。

  7. 進行必要的所有變更。

  8. 在指令行中輸入 systemctl isolate graphical.target,開機進入完整多重使用者及網路模式。

40.3.2 有效的使用者名稱和密碼不被接受

這顯然是使用者最常遇到的問題,其發生的原因有很多。根據您使用本地使用者管理和驗證,或使用網路驗證,會有不同原因造成登入失敗。

本地使用者管理可能因為下列原因而失敗:

  • 使用者輸入的密碼有誤。

  • 使用者包含桌面組態檔的主目錄損毀或有防寫保護。

  • X Window System 可能無法驗證此特定使用者,尤其是在安裝目前版本的 Linux 之前,此使用者的主目錄已用於其他 Linux 版本的情況下。

若要找出本地登入失敗的原因,請執行下列步驟:

  1. 進行整個驗證機制的除錯之前,請先確認使用者所記的密碼正確無誤。如果使用者記錯了密碼,請使用「YaST 使用者管理」模組變更其密碼。請注意 Caps Lock 鍵的使用,並根據需要進行切換。

  2. root 身分登入,並使用 journalctl -e 檢查系統日誌,找出登入程序和 PAM 的錯誤訊息。

  3. 嘗試從主控台登入 (使用 CtrlAltF1)。如果成功,表示問題不在 PAM,因為它能夠在此機器上驗證此使用者。嘗試找出 X Window System 或 GNOME 桌面的任何問題。若需更多資訊,請參閱第 40.3.4 節 「GNOME 桌面有問題」

  4. 若使用者的主目錄已由其他 Linux 版本使用,請移除使用者主目錄中的 Xauthority 檔案。使用主控台透過 CtrlAltF1 登入,並以此使用者身份執行 rm .Xauthority。這樣應可排除此使用者的 X 驗證問題。重新嘗試圖形登入。

  5. 若由於組態檔案毀損導致桌面無法啟動,請繼續執行第 40.3.4 節 「GNOME 桌面有問題」

下面列出了特定使用者在特定機器上網路驗證失敗的一些常見原因:

  • 使用者輸入的密碼有誤。

  • 機器的本地驗證檔案中已存在使用者名稱,但網路驗證系統也提供了,兩者產生了衝突。

  • 主目錄是存在的,但損毀或無法使用。或許此目錄設為防止寫入,或位於此時無法存取的伺服器上。

  • 使用者沒有登入驗證系統特定主機的許可。

  • 機器的主機名稱已因某種原因而變更,而使用者沒有登入該主機的許可。

  • 機器無法聯繫驗證伺服器,或是含有使用者資訊的目錄伺服器。

  • X Window System 可能無法驗證此特定使用者,尤其是在安裝目前版本的 Linux 之前,此使用者的主目錄已用於其他 Linux 版本的情況下。

若要找出登入發生網路驗證失敗的原因,請執行下列步驟:

  1. 進行整個驗證機制的除錯之前,請先確認使用者所記的密碼正確無誤。

  2. 確定機器賴以進行驗證的目錄伺服器,並確定該伺服器已啟動且正在執行,而且能夠與其他機器正常進行通訊。

  3. 確定使用者的使用者名稱和密碼可以在其他機器上使用,以確定其驗證資料存在,而且已正確配送。

  4. 再看看在運作不正常的機器上,可否讓其他使用者登入。若其他使用者可以正常登入,或 root 可以登入的話,請登入並使用 journalctl -e> 檔案檢驗系統日誌。找出嘗試登入所對應的時間戳記,並判斷 PAM 是否已產生任何錯誤訊息。

  5. 嘗試從主控台登入 (使用 CtrlAltF1)。若是成功,說明問題不是出在 PAM 或使用者主目錄所在的目錄伺服器,因為能夠在此機器上驗證此使用者。嘗試找出 X Window System 或 GNOME 桌面的任何問題。若需更多資訊,請參閱第 40.3.4 節 「GNOME 桌面有問題」

  6. 若使用者的主目錄已由其他 Linux 版本使用,請移除使用者主目錄中的 Xauthority 檔案。使用主控台透過 CtrlAltF1 登入,並以此使用者身份執行 rm .Xauthority。這樣應可排除此使用者的 X 驗證問題。重新嘗試圖形登入。

  7. 若由於組態檔案毀損導致桌面無法啟動,請繼續執行第 40.3.4 節 「GNOME 桌面有問題」

40.3.3 登入至加密的主分割區失敗

建議對筆記型電腦使用加密的主分割區。如果無法登入您的筆記型電腦,通常只是因為無法解除鎖定您的分割區。

開機期間,您需要輸入密碼片語以解除鎖定加密的分割區。如果不輸入密碼片語,則開機程序會繼續,但分割區將處於鎖定狀態。

若要解除鎖定加密的分割區,請執行以下步驟:

  1. CtrlAltF1 切換到文字主控台。

  2. root 使用者身分登入。

  3. 使用以下指令重新啟動解除鎖定程序:

    root # systemctl restart home.mount
  4. 輸入可解除鎖定加密分割區的密碼片語。

  5. AltF7 離開文字主控台並切換回登入畫面。

  6. 像往常一樣登入。

40.3.4 GNOME 桌面有問題

如果您遇到 GNOME 桌面問題,可以使用幾種方法對行為異常的圖形桌面環境進行疑難排解。下面所述的建議程序提供了修復損壞的 GNOME 桌面的最安全選項。

程序 40.1︰ GNOME 疑難排解
  1. 啟動 YaST 並切換到保全性與使用者

  2. 開啟使用者和組管理對話方塊並按一下新增

  3. 填寫必要欄位,然後按一下確定以建立新使用者。

  4. 登出並以新使用者身分登入。這將為您提供一個全新的 GNOME 環境。

  5. 將舊使用者帳戶的 ~/.local/~/.config/ 目錄中的個別子目錄複製到新使用者帳戶的相應目錄。

    每次複製操作之後,登出並以新使用者身分再次登入,以檢查 GNOME 是否仍正常工作。

  6. 重複上一步,直至找到損壞 GNOME 的組態檔案。

  7. 以舊使用者身分登入,並將有問題的組態檔案移到其他位置。登出並以舊使用者身分再次登入。

  8. 刪除之前建立的使用者。

40.4 網路問題

您系統的許多問題可能都與網路有關,但可能一開始看不出來。例如,系統不允許使用者登入,可能就是某種網路問題所致。本節會介紹簡單的檢查清單,可讓您用來辨識所遇到網路問題的原因。

程序 40.2︰ 如何識別網路問題

檢查機器網路連接時,請如下執行:

  1. 若使用乙太網路連線,請先檢查硬體。確認您的網路線正確插在電腦和路由器 (或集線器等) 上。正常情況下,乙太網路連接器旁的兩個控制燈都會亮起。

    若連接失敗,請檢查網路線在其他機器上可否使用。若可以的話,就是您的網路卡造成的問題。若您的網路設定中包含集線器或交換器,也可能是這些裝置的問題。

  2. 若使用無線連接的話,請檢查可否由其他機器建立無線連結。若無法建立,請聯絡無線網路管理員。

  3. 完成對基本網路連接性的檢查後,請嘗試找出無回應的服務。收集您設定中所需所有網路伺服器的位址資訊。您可在適當的 YaST 模組中查詢,或詢問您的系統管理員。下列清單提供了設定中所包含的一些基本的網路伺服器,以及其故障的症狀。

    DNS (名稱服務)

    名稱服務損壞或故障會從許多方面影響網路的運作。如果本地機器依賴任意網路伺服器進行驗證,而這些伺服器由於名稱解析問題而無法找到,則使用者甚至還不能登入。網路中由故障名稱伺服管理的機器將無法看到彼此,也不能相互通訊。

    NTP (時間服務)

    NTP 服務的損壞或完全故障會影響 Kerberos 驗證以及 X 伺服器的功能。

    NFS (檔案服務)

    若應用程式所需的資料儲存於掛接 NFS 的目錄中,萬一此服務關閉或設定錯誤,該應用程式將無法啟動或無法正常運作。最糟糕的情況是,如果因 NFS 伺服器出現故障,而找不到包含 .gconf 子目錄的使用者主目錄,則使用者的個人桌面組態將無法起作用。

    Samba (檔案服務)

    若應用程式所需的資料儲存於出現故障之 Samba 伺服器的目錄中,該應用程式將無法啟動或無法正常運作。

    NIS (使用者管理)

    若您的 SUSE Linux Enterprise Server 系統依賴出現故障之 NIS 伺服器提供使用者資料,使用者將無法登入這部機器。

    LDAP (使用者管理)

    若您的 SUSE Linux Enterprise Server 系統依賴出現故障之 LDAP 伺服器提供使用者資料,使用者將無法登入這部機器。

    Kerberos (驗證)

    不進行驗證,也無法登入任何機器。

    CUPS (網路列印)

    使用者無法列印。

  4. 請檢查網路伺服器是否運作,且您的網路設定可否讓您建立連接:

    重要
    重要:限制

    下述偵錯程序只適用於不涉及任何內部路由的簡易網路伺服器/用戶端設定。假設伺服器和用戶端都是相同子網路的成員,不需要其他路由。

    1. 使用 ping IP_ADDRESS/HOSTNAME (以伺服器的主機名稱或 IP 位址取代該項) 來檢查各伺服器是否在正常運作,且能夠回應網路。若此指令成功的話,就會告知您的主機您正在尋找並執行它,且您網路的名稱服務設定是正確的。

      若 ping 的結果失敗且傳回 destination host unreachable (無法聯繫目的地主機),則您的系統或想找的伺服器可能設定錯誤或故障。從另一部機器執行 ping IP addressYOUR_HOSTNAME 指令,以檢查是否可連接您的系統。如果您可以從另一台機器存取您的機器,可能是伺服器未執行或設定錯誤。

      若 ping 失敗且傳回 unknown host,則是名稱服務設定錯誤,或使用的主機名稱不正確。如須對此問題做進一步檢查,請參閱步驟 4.b。若 ping 仍然失敗,則是您的網路卡未設定正確,或網路硬體故障。

    2. 請使用 host HOSTNAME 來檢查您嘗試連接的伺服器的主機名稱是否正確地轉譯為 IP 位址,反之亦然。若此指令傳回主機的 IP 位址,則名稱服務是啟動且執行中的。如果 host 指令失敗,請在您的主機上檢查所有與名稱及位址解析有關的網路組態檔案:

      /var/run/netconfig/resolv.conf

      此檔案用於追蹤您目前使用的名稱伺服器與領域。它是 /run/netconfig/resolv.conf 的符號連結,YaST 或 DHCP 通常會自動對其進行調整。請確定此檔案的結構如下,且所有的網路位址與網域名稱均正確:

      search FULLY_QUALIFIED_DOMAIN_NAME
      nameserver IPADDRESS_OF_NAMESERVER

      此檔案會包含多個名稱伺服器位址,其中至少有一個必須是正確的,才能為您的主機提供名稱解析。需要時,請使用 YaST 的「網路設定」模組 (「主機名稱/DNS」索引標籤) 調整此檔案。

      若您是透過 DHCP 處理網路連接的,請在 YaST 的「網路設定」模組 (「主機名稱/DNS」索引標籤) 中選取透過 DHCP 設定主機名稱 (可針對所有介面全域設定,也可以逐個介面設定) 和透過 DHCP 更新名稱伺服器和搜尋清單,以允許 DHCP 變更主機名稱和名稱服務資訊。

      /etc/nsswitch.conf

      此檔案會告知 Linux 何處可找到名稱服務資訊。其內容如下:

       ...
      hosts: files dns
      networks: files dns
      ...

      dns 項目是必備的。這會告訴 Linux 使用外部名稱伺服器。正常情況下,YaST 會自動管理這些項目,但檢查很謹慎。

      若主機上所有相關的項目都正確的話,請要求您的系統管理員檢查 DNS 伺服器組態是否具備正確的時區資訊。如需關於 DNS 的詳細資訊,請參閱第 31 章 「網域名稱系統若您確定主機和 DNS 伺服器的 DNS 組態正確物誤,請繼續檢查網路組態和網路裝置。

    3. 若您的系統無法建立與網路伺服器的連接,且您已經從問題可能原因清單中排除名稱服務的問題,則請檢查網路卡的組態。

      使用 ip addr show NETWORK_DEVICE 指令來檢查是否已正確設定此裝置。確定已正確設定帶有網路遮罩 (/MASK) 的 inet address。IP 位址有錯誤或網路遮罩有位元遺失的話,都可能造成網路組態無法使用。必要的話,請一併於伺服器上執行此檢查。

    4. 如果已正確設定且正在執行名稱服務和網路硬體,但有些外部網路連接仍然長時間逾時或完全失敗,請使用 traceroute FULLY_QUALIFIED_DOMAIN_NAME 指令 (以 root 使用者的身分執行) 來追蹤這些要求所採用的網路路由。此指令會列出請求從您機器傳送到其目的地所經的所有閘道 (躍程)。其會列出各躍程的回應時間,以及是否可連接此躍程。請使用 traceroute 加上 ping 找出問題的原因,並告知管理員。

當您確定了網路故障的原因後,便可自行解決 (如果問題出在您自己的機器上),或告訴網路系統管理員您的發現,以便其重新設定服務或修復必要的系統。

40.4.1 NetworkManager 問題

若您有網路連接的問題,請依程序 40.2 「如何識別網路問題」所述將範圍調窄。若 NetworkManager 似乎有問題,請執行下列步驟,取得 NetworkManager 故障原因的提示記錄:

  1. 開啟外圍程序並以 root 身份登入。

  2. 重新啟動 NetworkManager:

    tux > sudo systemctl restart NetworkManager
  3. 以一般使用者身分開啟網頁,例如 http://www.opensuse.org,看看是否可以連接。

  4. /var/log/NetworkManager 中收集 NetworkManager 狀態的所有相關資訊。

如需關於 NetworkManager 的詳細資訊,請參閱第 26 章 「使用 NetworkManager

40.5 資料問題

資料問題是指,機器或許可以 (或無法) 正確開機,但系統上有著明顯的資料損毀,且需要修復。遇到這些情況時,需要用到您重要資料的備份檔案,以讓您的系統回復到故障前的狀態。

40.5.1 管理分割區影像

有時,您需要對整個分割區甚至是硬碟執行備份。Linux 附帶 dd 工具,可為磁碟建立完全一致的副本。結合 gzip,還能為您節省一些空間。

程序 40.3︰ 備份和還原硬碟
  1. root 使用者身分啟動外圍程序。

  2. 選取來源裝置。一般類似 /dev/sda (標示為 SOURCE)。

  3. 決定要儲存影像 (標示為 BACKUP_PATH) 的位置。此位置必須不同於來源裝置的位置。換言之,如果您對 /dev/sda 進行備份,就不能將影像檔案儲存在 /dev/sda 下。

  4. 執行以下指令建立壓縮影像檔:

    root # dd if=/dev/SOURCE | gzip > /BACKUP_PATH/image.gz
  5. 使用以下指令還原硬碟:

    root # gzip -dc /BACKUP_PATH/image.gz | dd of=/dev/SOURCE

如果您只需備份分割區,請使用各個分割區取代指令中預留的 SOURCE。如此,您的影像檔便會存放於同一個硬碟的不同分割區中。

40.5.2 使用救援系統

系統無法啟動並正常運作的原因可能有幾種。最常見的原因是系統當機後檔案系統損毀、組態檔案損毀,或開機載入程式組態損毀。

為了幫助您解決這些狀況,SUSE Linux Enterprise Server 包含可以開機的救援系統。救援系統是一個小型的 Linux 系統,可以載入到 RAM 磁碟上並裝載為根目錄檔案系統,好讓您從外部存取 Linux 分割區。藉由此救援系統,您可以復原或修改任何重要的系統項目。

  • 操作任何類型的組態檔案。

  • 檢查檔案系統有無缺失並啟動自動修復程序。

  • 變更根目錄環境中存取已安裝的系統.

  • 檢查、修改和重新安裝開機載入程式組態。

  • 從錯誤安裝的裝置驅動程式或無法使用的核心復原。

  • 使用 Parted 指令來調整分割區大小。如需此工具的詳細資訊,請造訪 GNU Parted 網站 http://www.gnu.org/software/parted/parted.html

救援系統可以從各種來源與位置載入。最簡單的方法就是從原始安裝媒體將救援系統開機。

注意
注意:IBM Z:啟動救援系統

在 IBM Z 上,可將安裝系統用於救援目的。若要啟動救援系統,請遵照第 40.6 節 「IBM Z:使用 initrd 做為救援系統」中的指示。

  1. 將安裝媒體插入 DVD 光碟機。

  2. 重新啟動系統。

  3. 在開機畫面中按 F4,然後選擇「DVD-ROM」。之後從主功能表中選擇「救援系統」。

  4. Rescue: 提示輸入 root。無須輸入密碼。

如果硬體設定沒有包含 DVD 光碟機,您可以從網路來源將救援系統開機。以下範例適用於遠端開機案例 — 如果使用其他開機媒體 (例如 DVD),請相應修改 info 檔案,並按照一般安裝方式開機。

  1. 進入 PXE 開機設定的組態中,新增下面的行:install=PROTOCOL://INSTSOURCErescue=1。如果需要啟動系統修復,請使用 repair=1。與正常安裝一樣,PROTOCOL 表示任何受支援的網路通訊協定 (NFS、HTTP、FTP 等),INSTSOURCE 表示網路安裝來源的路徑。

  2. 依照Book “部署指南 ”, Chapter 17 “準備網路開機環境”, Section 17.5 “使用網路喚醒進行遠端喚醒” 中的說明,使用網路喚醒啟動系統。

  3. Rescue: 提示輸入 root。無須輸入密碼。

進入該救援系統後,可透過 AltF1AltF6 鍵來使用虛擬主控台。

/bin 目錄中提供了一個外圍程序和其他有用的公用程式,如 mount 程式。/sbin 目錄中包含重要的檔案與網路公用程式,以便檢視及修復檔案系統。此目錄中也有最重要的二進位系統維護程式,例如 fdiskmkfsmkswapmountshutdown,以及維護網路的 ipss。目錄 /usr/bin 包含 vi 編輯器、find、less 和 SSH。

若要檢視系統訊息,請使用指令 dmesg,或者使用 journalctl 來檢視系統記錄。

40.5.2.1 檢查和操作組態檔案

為了舉例說明使用救援系統如何修正組態檔案,請想像系統由於組態檔案損毀而無法正常開機。您可以使用救援系統來解決這個問題。

若要操作組態檔案,請執行下列步驟:

  1. 使用上述的其中一個方法啟動救援系統。

  2. 若要將 /dev/sda6 下的開機檔案系統裝載到救援系統,請使用下列指令:

    tux > sudo mount /dev/sda6 /mnt

    系統的所有目錄現在都存放在 /mnt

  3. 將此目錄變更到裝載的開機檔案系統中:

    tux > sudo cd /mnt
  4. 在 vi 編輯器中開啟有問題的組態檔案。調整並儲存設定。

  5. 從救援系統解除裝載開機檔案系統:

    tux > sudo umount /mnt
  6. 重新開機。

40.5.2.2 修復和檢查檔案系統

一般而言,檔案系統無法在執行中的系統上修復。如果發生了嚴重的問題,您可能甚至無法裝載開機檔案,而且系統可能會因為核心異常而無法開機。在此情況下,唯一的方法就是從外部修復系統。該系統包含的公用程式可檢查並修復 btrfsext2ext3ext4xfsdosfsvfat 檔案系統。尋找指令 fsck.FILESYSTEM。例如,如果需要對 btrfs 進行檔案系統檢查,請使用 fsck.btrfs

40.5.2.3 存取已安裝系統

如果需要從救援系統存取已安裝的系統,您需要在變更根目錄環境中執行此操作。例如,若要修改開機載入程式組態或執行硬體組態公用程式。

若要根據已安裝的系統設定變更根目錄環境,請執行下列步驟:

  1. 提示
    提示:輸入 LVM 磁碟區群組

    如果您使用的是 LVM 設定 (如需更多一般性詳細資料,請參閱Book “儲存管理指南),請輸入所有現有的磁碟區群組,以便能夠尋找和掛接裝置:

    rootvgimport -a

    執行 lsblk 以檢查哪個節點對應於根分割區。在本例中,該節點為 /dev/sda2

    tux > lsblk
    NAME        MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    sda           8:0    0 149,1G  0 disk
    ├─sda1        8:1    0     2G  0 part  [SWAP]
    ├─sda2        8:2    0    20G  0 part  /
    └─sda3        8:3    0   127G  0 part
      └─cr_home 254:0    0   127G  0 crypt /home
  2. 從安裝的系統掛接根分割區:

    tux > sudo mount /dev/sda2 /mnt
  3. 掛接 /proc/dev/sys 分割區:

    tux > sudo mount -t proc none /mnt/proc
    tux > sudo mount --rbind /dev /mnt/dev
    tux > sudo mount --rbind /sys /mnt/sys
  4. 現在可以變更根分割區為新的環境,並保留 bash 外圍程序:

    tux > chroot /mnt /bin/bash
  5. 最後,從已安裝的系統裝載其餘分割區:

    tux > mount -a
  6. 現在您可以存取已安裝的系統。重新啟動系統之前,請先使用 umount -a 來解除裝載分割區,並以 exit 離開變更根目錄環境。

警告
警告:限制

雖然您可以完全存取已安裝系統的檔案和應用程式,但必須遵守某些限制。執行中的核心是使用救援系統啟動的核心,而不是使用變更根目錄環境啟動的核心。它只支援基本硬體,而且無法從已安裝系統新增核心模組,除非核心版本完全一致。一律使用 uname -r 檢查目前執行的 (救援) 核心,然後確定變更根目錄環境的 /lib/modules 目錄中是否有相符的子目錄。如果有,您便可以使用已安裝的模組,否則,需要在其他媒體 (例如快閃磁碟機) 上提供模組的正確版本。多數情況下,救援核心版本與已安裝的版本並不相同,因此,舉例來說,您便不能像平常一樣存取聲卡。您也無法啟動圖形使用者介面。

另外請注意,當您使用 F1AltF6 來切換主控台時,將會離開Alt變更根目錄環境。

40.5.2.4 修改和重新安裝開機載入程式

有時候系統無法開機是因為開機載入程式組態已損毀。譬如說,開機載入程式若未執行,啟動常式便無法將實體磁碟機轉譯為 Linux 檔案系統中的實際位置。

若要檢查開機載入程式組態和重新安裝開機載入程式,請執行下列步驟:

  1. 執行存取已安裝系統所需的必要步驟,如 第 40.5.2.3 節 「存取已安裝系統」 所述。

  2. 檢查系統上是否已安裝 GRUB 2 開機載入程式。如果未安裝,請安裝 grub2 套件並執行

    tux > sudo grub2-install /dev/sda
  3. 根據第 14 章 「開機載入程式 GRUB 2中概述的 GRUB 2 組態原則,檢查下列檔案是否正確設定,並在必要時加以修正。

    • /etc/default/grub

    • /boot/grub2/device.map (選用檔案,手動建立後才存在)

    • /boot/grub2/grub.cfg (此檔案是產生的,不要編輯)

    • /etc/sysconfig/bootloader

  4. 依序使用下列指令來重新安裝開機載入程式:

    tux > sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  5. 解除裝載分割區,從變更根目錄環境登出,並重新啟動系統:

    tux > umount -a
    exit
    reboot

40.5.2.5 修復核心安裝

核心更新可能會帶來新的錯誤,進而會影響系統作業。例如,系統中某個硬體的驅動程式可能有錯誤,致使您無法存取和使用系統。在這種情況下,請復原至上回正常運作的核心 (如果系統中提供的話),或者從安裝媒體安裝原始核心。

提示
提示:如何在更新後保留最後幾個核心

為了防止在錯誤的核心更新後無法開機,請使用核心多版本功能,並告知 libzypp 您要在更新後保留哪些核心。

例如,若要永遠保留最後兩個核心和目前執行中的核心,請新增

multiversion.kernels = latest,latest-1,running

/etc/zypp/zypp.conf 檔案。如需詳細資訊,請參閱Book “部署指南 ”, Chapter 23 “安裝多個核心版本”

另一個類似的情況是,當您需要重新安裝或更新 SUSE Linux Enterprise Server 不支援之裝置的已損毀驅動程式時。例如,當硬體廠商使用特定裝置時,比如使用硬體 RAID 控制器,這就要求作業系統能夠識別二進位驅動程式。廠商一般會發行「驅動程式更新磁碟」(DUD),內含所需驅動程式的修復或更新版本。

在這兩種情況下,您都需要以救援模式存取安裝的系統,並修正與核心相關的問題,否則系統可能無法正常開機:

  1. SUSE Linux Enterprise Server 安裝媒體開機。

  2. 如果您要在錯誤的核心更新之後復原,請跳過此步驟。如果需要使用驅動程式更新磁碟 (DUD),請在開機功能表出現之後按 F6 以載入驅動程式更新,並選擇驅動程式更新的路徑或 URL,然後按一下「是」確認。

  3. 從開機功能表中選擇「救援系統」,然後按 Enter。如果您之前選擇使用 DUD,系統將會要求您指定儲存驅動程式更新的位置。

  4. Rescue: 提示輸入 root。無須輸入密碼。

  5. 手動將目標系統和變更根目錄掛接至新環境:如需詳細資訊,請參閱 第 40.5.2.3 節 「存取已安裝系統」

  6. 如果使用 DUD,請安裝/重新安裝/更新錯誤的裝置驅動程式套件。請務必確定已安裝的核心版本與要安裝的驅動程式版本完全相符。

    如果要修正錯誤的核心更新安裝,可以按照以下程序從安裝媒體安裝原始核心。

    1. 使用 hwinfo --cdrom 識別 DVD 裝置,並使用 mount /dev/sr0 /mnt 掛接裝置。

    2. 導覽到 DVD 上儲存核心檔案的目錄,例如 cd /mnt/suse/x86_64/

    3. 使用 rpm -i 指令安裝您的產品類別所需的 kernel-*kernel-*-base 以及 kernel-*-extra 套件。

  7. 根據需要更新組態檔,然後重新啟動開機載入程式。如需詳細資訊,請參閱 第 40.5.2.4 節 「修改和重新安裝開機載入程式」

  8. 從系統磁碟機中取出任何可開機的媒體,然後重新開機。

40.6 IBM Z:使用 initrd 做為救援系統

如果升級或修改了 SUSE® Linux Enterprise Server for IBM Z 的核心,可能會意外地將系統重新開機為不一致的狀態,這樣會使已安裝系統的標準 IPL 程序失敗。在這種情況下,您可以使用安裝系統來提供救援。

Book “部署指南 ”, Chapter 5 “IBM Z 和 LinuxONE 上的安裝”, Section 5.3 “安裝準備工作”中所述,對 SUSE Linux Enterprise Server for IBM Z 安裝系統執行 IPL。選擇「開始安裝」,然後輸入所有需要的參數。載入安裝系統後,系統會詢問您要使用哪個顯示類型來控制安裝,此時請選取 SSH。現在,您可以不輸入密碼直接以 root 身分透過 SSH 登入系統。

在此狀態下,尚未設定任何磁碟。您必須先設定磁碟,才能繼續。

程序 40.4︰ 設定 DASD
  1. 使用下列指令來設定 DASD:

    dasd_configure 0.0.0150 1 0

    0.0.0150 是連接 DASD 的通道。1 表示啟用磁碟 (此處的 0 會停用磁碟)。0 表示磁碟的無 DIAG 模式 (此處的 1 會啟用磁碟的 DAIG 存取)。

  2. 現在 DASD 已經上線 (請使用 cat /proc/partitions 來檢查),而且可以用於後續指令。

程序 40.5︰ 設定 zFCP 磁碟
  1. 若要設定 zFCP 磁碟,您必須先設定 zFCP 介面卡。使用下列指令來執行此動作:

    zfcp_host_configure 0.0.4000 1

    0.0.4000 是連接介面卡的通道,而 1 表示啟動 (此處的 0 會停用介面卡)。

  2. 啟用介面卡之後,便可以設定磁碟。使用下列指令來執行此動作:

    zfcp_disk_configure 0.0.4000 1234567887654321 8765432100000000  1

    0.0.4000 是之前使用的通道 ID,1234567887654321 是 WWPN (全球連接埠號碼),而 8765432100000000 則是 LUN (邏輯單元編號)。1 表示啟用磁碟 (此處的 0 會停用磁碟)。

  3. 現在 zFCP 磁碟已經上線 (請使用 cat /proc/partitions 來檢查),而且可以用於後續指令。

現在,救援系統已完全設定好,您可以開始修復安裝的系統。如需關於如何解決最常見問題的指示,請參閱第 40.5.2 節 「使用救援系統」

A 範例網路

此網路範例會貫穿 SUSE® Linux Enterprise Server 文件中所有與網路相關的章節。

Image