2. Rocky Linux 高階安裝選項

在第一章中,我們討論瞭如何在物理硬體上和虛擬機器中安裝 Rocky Linux,並最終完成了安裝。在本章中,我們將繼續討論安裝作業系統的相關話題。本章內容主要包括:使用 Anaconda 實現自動化安裝作業系統、在公有云平臺上安裝作業系統 (本文以阿里雲平臺為例,其他雲平臺的操作幾乎相同)、Rocky Linux 系統安裝的最佳實踐介紹。

透過本章,你不僅能學習如何在雲上安裝作業系統,還可以瞭解到最佳部署,並能夠以自動化的方式執行安裝。

之所以要介紹最佳部署,是因為作業系統處於最底層。越是底層,就越要牢固可靠,因為底層的東西通常被深度依賴,不僅影響上層應用的狀態,修改起來也是牽一髮而動全身。在執行一段時間後,你如果覺得某個系統安裝的有些瑕疵,想重灌系統,那麼就得先遷移其上執行的應用和儲存的資料。這種複雜程度,往往不像表面上看起來的簡單。即使要重啟某個作業系統,也要考慮在重啟過程中,其上的應用中斷服務會不會對使用者產生影響,重啟後的資料一致性能不能保持。所以,遵循最佳實踐,安裝一步到位的作業系統,能夠讓我們從一開始,就避免掉很多長期問題。

首先,我們討論 Anaconda 的自動安裝過程。這需要用到我們第一章中安裝完成的 Rocky Linux。

2。1 使用 Anaconda 自動部署 Rocky Linux

在安裝完成 Rocky Linux 後,我們可以使用 root 使用者登入主機,並列出 root 使用者家目錄中的檔案:

你會看到 “anaconda-ks。cfg” 檔案,該檔案被稱為 Kickstart 檔案,裡面的內容很重要,包含了在安裝過程中為安裝程式 Anaconda 提供的配置資訊。在雲映象中,沒有 anaconda-ks。cfg 檔案的。我們使用

cat

命令檢視 anaconda-ks。cfg 檔案的內容:

可以重複使用 anaconda-ks。cfg 檔案來安裝其他系統,這些系統的選項與我們在本次安裝中使用的選項相同。讓我們透過 anaconda-ks。cfg 檔案回顧一下在之前的安裝中新增、設定的選項。

以 開頭的行是註釋,對安裝過程沒有影響。

指定正在使用的版本的註釋如下:

接著指定了安裝的型別,安裝型別有兩種:graphical 和 text。該檔案中,指定的是 graphical。text 型別通常用於 headless system 的安裝:

Repo 用來指定安裝程式包的軟體源,我們使用的是 ISO 映象,被掛載到了指定的位置:

使用 定義一個塊的開始,在 “packages” 塊中定義了要安裝的軟體包列表,使用 定義塊的結束。有兩種指定軟體的方式:一個是由 開頭的軟體包組 (示例中的 minimal-environment),另一個是不需要任何字首的軟體包名稱 (該示例中是 kexec-tools,是實現 Kdump 的工具):

“Keyboard layouts” 指定了鍵盤佈局,這正是我們在安裝過程中選擇和新增的鍵盤佈局。

對於作業系統語言,我們添加了美式英語 (en_US) 和中文 (zh_CN)。在作業系統中,有多種方法管理、儲存和表示文字。最常用的是 “UTF-8“,它在單一標準下能夠展示多種字符集 (包括中文),這也是為什麼系統語言中附加了 的原因:

更多 UTF-8 內容請檢視百科。

現在,我們需要定義安裝介質。在本例中,我們使用一個模擬的 CDROM/DVD,裝載了我們下載的ISO映象檔案:

“firstboot” 選項預設是開啟的。在這個示例中,安裝不包括圖形介面,所以它並沒有執行,但是被新增到 kickstart 檔案中。我們可以安全的刪除該選項:

接著是配置磁碟的選項,為了安全起見,我們指定了安裝器忽略所有的磁碟,除了目標磁碟 “nvme0n1”。“nvme0n1” 是我們在本次示例中選定的磁碟:

磁碟的名稱可能不同,取決你所執行的平臺。通常有 vda、xda 或 sda 以及示例中的 nvme0n1。

指定了磁碟之後,開始對磁碟進行分割槽,本示例是自動分割槽:

作業系統使用的空間必須宣告,在本例中,我們將初始化整個磁碟:

作業系統時區我們選擇的是亞洲、上海:

設定 root 使用者的密碼,及建立 aiops 使用者。為了安全起見,密碼已經被加密了:

配置 kdump 的預留記憶體:

指定將用於安裝的密碼策略:

有了這些,一個可重複使用安裝作業系統的 Kickstart 檔案就準備好了。

要想使用 Kickstart 檔案,需要我們將其放到一個可以被安裝器訪問的位置,這個位置可以是網路的,也可以是本地的,如 FTP、隨身碟、HTTP 等。在本示例中,我們使用 HTTP 的方式提供 anaconda-ks。cfg 檔案。在安裝好的系統上執行以下命令,這些命令在以後的章節都會有詳細介紹,在本章如果你對這些命令還不太熟悉,沒有關係,按照文件操作就可以。

2。1。1 修改 DNF 源

DNF 是 Rocky Linux 的包管理器,也是 Centos 8、RHEL 8 的包管理,用來在作業系統中安裝軟體。預設的 DNF 源是官方源,伺服器在國外,如果我們直接使用官方源,網路質量較差,安裝軟體的速度和成功率會低很多。所以我們先把 DNF 源修改成國內的。目前國內比較優質的 DNF 源,是南京大學提供的。執行以下命令把 Rocky Linux 官方映象源替換為南京大學的映象源:

2。1。2 關閉防火牆和 SELinux

防火牆和 SELinux 都是為了增強系統安全的,但在學習初期,我們先關閉這兩個服務。關閉防火牆和 SELinux 在生產系統中是不推薦的,我們會在後續章節介紹它們的用法。現在,為了方便,我們先關閉它們。

關閉防火牆:

關閉 SELinux:

2。1。3 安裝並配置 Nginx

Nginx 是一個高效能的、主流的 Web 伺服器,我們使用 Nginx 提供 “anaconda-ks。cfg” 檔案的下載。使用 DNF 命令安裝 Nginx 只需要一條命令:

Nginx 安裝完成後,我們把 “anaconda-ks。cfg” 檔案複製到 Nginx 的 ROOT 目錄中:

Nginx 預設是以 nginx 使用者啟動的,我們把 Nginx ROOT 目錄的許可權設定為 nginx:

接著啟動 Nginx,Nginx 預設監聽在 80 埠,對外提供 HTTP 服務:

現在,我們就可以透過 http://hostip/anaconda-ks。cfg 的方式訪問 “anaconda-ks。cfg” 檔案了。

“hostip” 需要替換為你主機的真實 IP,可以透過以下命令獲取:

圖2-1 獲取主機的 IP 地址

我本機的 IP 地址為 192。168。226。128,這樣我就可以從外部訪問 Nginx Web 服務了。我們的 Nginx 地址就是本機的 IP 地址,埠號就是 Web 預設的 80 埠。現在可以透過 http://192。168。226。128/anaconda-ks。cfg (你的 IP 地址不一定是這個,填寫正確的 IP 地址) 訪問 Kickstart 檔案了。

2。1。4 指定 Kickstart 檔案

有了提供 Kickstart 檔案的 HTTP 服務,我們就可以將它傳遞給安裝器了。方法很簡單:在安裝前編輯核心引數,方式和修改網絡卡名稱為 eth0 類似。

在引導過程中,我們選擇 “Install Rocky Linux 8” ,並按下 鍵。從 vmlinuz 開始的引導行將出現在螢幕底部。輸入 “Tab” 鍵後,刪除 字串,然後新增以下內容:

2. Rocky Linux 高階安裝選項

圖2-2 指定 Kickstart 檔案的位置

它的三部分內容如下:

http:Kickstart 檔案是透過 http 的形式提供的 192。168。226。128:http web 伺服器的 IP 地址 /anaconda-ks。cfg:anaconda-ks。cfg 在 web 伺服器上的路徑

net。ifnames=0 biosdevname=0:把網絡卡名稱修改為 eth0,這個引數和指定 Kickstart 檔案沒有關係

有了這個,我們就可以重複之前完成的完整安裝了。正如你所看到的,建立一個 Kickstart 檔案並自動化 Rocky Linux 的安裝是非常容易的。

接下來,我們討論如何在雲平臺安裝 Rocky Linux。

2。2 在雲上安裝 Rocky Linux

隨著 Rocky Linux 8。5 的釋出 (8。5 是生產可用版),主流雲廠商開始提供 Rocky Linux 的映象,這也簡化了我們在雲平臺上安裝 Rocky Linux 的難度。但在雲上安裝 Rocky Linux 與我們之前所做的安裝有一些不同。主要區別如下:

不再使用 ISO 映象或 Anaconda 來執行安裝,而是使用預先配置的映象,這些映象通常由雲廠商提供。我們也可以自定義映象以滿足特殊需求。我會在“OpenStack 最佳實踐” 系列篇章中介紹如何為雲平臺提供自定義的映象。 在安裝期間,不能選擇系統的配置細節(例如時區),但可以在安裝後配置。 提供 Cloud-init,能夠對新建立主機資訊進行自定義設定,例如配置網路、建立使用者和證書。

我們通常使用 SSH 協議和生成的 SSH 秘鑰遠端訪問作業系統,我會在 “遠端管理作業系統” 一章對此詳細介紹。

在不同雲平臺上透過控制檯建立雲主機的方式差別不大,本章示例是在阿里雲上完成的。透過雲廠商提供的控制檯建立主機資源的方式低效且不可重複,不適合在大規模部署中使用。我會在 “IaC” 系列篇章中介紹 Terraform 和 Pulumi,它們是基礎設施即程式碼的主流工具,可以用它們宣告式的、可重複使用的程式碼段,在雲平臺上自動建立資源。這能很好地提高我們的工作效率和工作穩定性。

要完成本章的操作,你需要執行以下步驟:

1。在 https://www。aliyun。com/ 頁面登入阿里雲平臺。如果還沒有賬號,可以透過頁面上的 “立即註冊” 按鈕註冊新賬號。

2。登入後,點選頂欄的 “產品”,找到 “彈性計算”,“雲伺服器”,點選“雲伺服器 ECS”。

3。點選”立即購買“按鈕,當然,我們並不需要真正購買,只是體驗一下安裝過程。

4。在彈出的“自定義購買”頁面,可以根據網站的介紹瞭解各選項,我們在這裡需要關注的是“映象”部分,選擇“公共映象”,從公共映象中選擇我們需要的 “Rocky Linux”,然後選擇版本。目前版本只有一個,就是 “8。5”。以後版本更新,會有更多的版本選擇,我們選擇最新的版本即可。

5。“基礎配置”完成後,進入“系統配置”,設定 root 賬號的秘鑰對,然後設定例項名 (這個名稱可以理解為我們第一章安裝 Rocky 時設定的在 VM 上顯示名稱) 和主機名 (作業系統名稱)。

6。安裝過程基本就完成了。

我們之前已經擁有了一臺可以在本書中使用的主機,所以不需要繼續“訂單確認”了。

現在我們知道了如何使用 Anaconda 自動重新安裝 vm,以及如何在雲中安裝例項,接下來我們討論在執行安裝時需要考慮的一些最佳實踐。

2。3 最佳安裝實踐

Rocky Linux 安裝有許多可供選擇的選項,你應該根據具體的場景進行定製。然而,我還是有一些適用任何場景的用例分享給大家。

2。3。1 映象

標準化核心安裝,併為其建立映象。 映象應最小化,可作為基礎安裝或者其他映象的基礎。 需要時為常見案例構建映象 儘量使用自動化平臺擴充套件系統 (常用的自動化工具我會在“配置管理工具”系列篇章介紹)。 映象應適用於應用場景。

2。3。2 軟體

軟體安裝地越少,受攻擊面就越小。儘量選擇 “Minimal Install” 軟體包集,使系統能夠執行和操作即可 (也就是說,儘量不要給伺服器新增圖形使用者介面)。 標準化安裝的應用程式,以便在緊急情況下能夠快速處理。 使用包管理器,對第三方應用程式的生命週期進行管理 (無論是用 RPM 還是用容器)。 建立補丁計劃。

2。3。3 網路

在虛擬機器中,儘量不要過度新增網路介面。 在物理機中,儘量對網路介面使用 bonding。使用 VLAN 對網路進行分割。

2。3。4 儲存

對於伺服器,儘可能使用邏輯卷管理 (LVM,除了 /boot)。 使用預設的 xfs 檔案系統。 對磁碟進行分割槽: 保持 boot 分割槽的預設大小。如果要修改它,也僅能調的更大,不能減小,因為在升級過程中可能需要這些空間。 對 swap 分割槽沒有要求的話 (會有一些軟體要求執行的作業系統關閉 swap 分割槽),保留預設的 swap 分割槽是比較安全的選擇。 對於長期使用的系統,至少要為 /、/var、/usr、/tmp、/home 劃分單獨的分割槽。

2。3。5 安全性

不要關閉 SELinux,新版 SELinux 已經有了很大改進,不會干擾你的系統。你可以把它設定為 permissive,而不是 disable。 不要關閉防火牆。用服務部署自動開啟埠。 儘可能將日誌重定向到一箇中央位置。 將安裝的安全工具和配置標準化,以檢查系統的完整性和審計。 檢查軟體安裝 (RPM) 的GPG 秘鑰,以及 ISO 映象,確保完整性。 儘量避免使用密碼 (尤其是 root 使用者),一定要使用密碼時,請使用強密碼。 用 OpenSCAP 檢查你的系統的安全性。

2。3。6 其他

保持系統的時間同步。 檢查 logrotate 策略,避免因日誌寫入導致的磁碟被寫滿的錯誤。

遵循這些最佳實踐可幫助你避免一些問題,並使安裝的系統更易於管理。這樣,你就可以以一種結構化的、可重複的方式安裝 Rocky Linux 作業系統,同時可以快速的、可定製的方式向其他團隊提供服務。

2。4 小結

在第一章中,我們提到了如何準備一臺我們可以在本書中使用的機器。另一種選擇是使用雲實例,我們可以透過雲實例從共有云平臺購買虛擬機器例項。

當你以專業人員的身份使用 Linux 時,理解標準化環境的必要性和這樣做的影響也很重要。從一開始就遵循最佳實踐 (自動化安裝、管理已安裝軟體的生命週期、減少攻擊面,等等) 是非常重要的。

在下一章中,我會介紹 Rocky Linux 系統的基礎知識,以增強我們在使用該系統時的自信心。

TAG: 安裝RockyLinux映象我們