首頁 > 軟體

Linux 基礎教學:Linux Kickstart 自動安裝

2020-06-16 17:59:48

從系統安裝說起

在 RHEL,CentOSFedora 等系統中,安裝系統使用的程式名叫 anaconda,它屬於 FedoraProject,由 Python 開發,能夠提供圖形或者文字介面用於系統安裝。

在安裝系統之前,計算機的硬體上可能是沒有作業系統的,因此為了能夠執行安裝程式,需要一個臨時的作業系統,引導開機,啟動安裝程式,在使用光碟安裝操作 Linux 系統(這裡特指 RHEL 系列的系統)時,一共有兩個階段,分別為引導和安裝。
 
Stage 1

使用光碟引導時,系統啟動過程為 POST(加電自檢) ---> BIOS 進行硬體檢測並載入光碟的 MBR ---> 光碟的載入程式為 isolinux.bin,它根據 isolinux.cfg 生成一個選單。當使用者選擇安裝作業系統後,載入程式載入核心(vmlinuz)和 initrd.img 檔案,initrd.img 會在記憶體中生成一個臨時的作業系統,為安裝過程提供一個安裝環境。當系統切換至 initrd 檔案系統後,initrd.img 中的 init 進程呼叫 /sbin/loader 程式,loader 探測安裝媒介,載入光碟 /images/stage2.img (在 RHEL6 中叫 install.img ),切換到 stage2,stage2.img 的檔案系統型別是 suqashfs,安裝系統的程式 anaconda 就包含其中。

Stage 2

stage2.img 是 SquashFS 型別檔案系統,其中包含了安裝程式 anaconda 和它的組態檔。anaconda 提供了安裝過程的設定介面,它可以提供文字、圖形等安裝管理方式,並支援 kickstart 等指令碼提供自動安裝的功能。在安裝系統之後會自動生成 /root/anaconda-ks.cfg 的設定資訊,其中記錄了安裝系統所選取選項自動生成的,方便以後自動安裝。
 
下面是 CentOS 6 安裝時 stage 1 的選單介面:

這個選單中的選項都是由光碟中的 /isolinux/isolinux.cfg 檔案設定的。在選單介面按 Esc 鍵,可以進入命令列模式,輸入 linux,效果等同於選單的第一個選項,即安裝 Linux 作業系統。

在命令列介面下,還可以使用其他一些命令:
網路相關設定:
ip=IPADDR
netmask=MASK
gateway=GATEWAY
dns=DNS_IP
ifname=NAME:MAC_ADDR

指明 kickstart 檔案路徑
ks=cdrom:/path/to/ks.cfg
ks=http://server/path/ks.cfg
ks=ftp://server/path/ks.cfg
ks=nfs:server:/path/ks.cfg

dd:載入需要的驅動

這裡的 ks 指令可以指定一個 kickstart 組態檔的路徑,anaconda 可以根據 kickstart 檔案的設定完成自動化安裝作業系統。

Kickstart

在常規系統安裝中的需要手動選定系統安裝的各種選項,kickstart 檔案定義了這些系統安裝需要選擇的選項,anaconda 讀取 kickstart 檔案後,就可以根據檔案的設定來進行系統安裝,而不需要人為的選擇安裝設定了。

Kickstart 檔案可以在安裝時通過網路獲取,它支援 http,ftp,nfs 等協定,還可以將 kickstart 檔案存放在安裝媒介中(如光碟映象),在安裝時從光碟中讀取。

建立一個 kickstart 檔案

在常規的系統安裝結束後,anaconda 會根據本次系統安裝的設定,生成一個與本次安裝設定相同的 kickstart 檔案,這個檔案位於 /root/anaconda-ks.cfg,可以對這個檔案進行修改供以後使用。

RHEL 系系統還提供了一個圖形化設定 kickstart 檔案的工具 system-config-kickstart,能夠在圖形介面下選擇安裝選項並將結果儲存為 kickstart 檔案。

kickstart 檔案有三部分組成:

命令段

命令段分為必備命令和可選命令。

必選命令
keyboard us                                # 鍵盤型別設定
lang en_US                                  # 語言設定
timezone [--utc] Asia/Shanghai              # 時區選擇
reboot | poweroff | halt                        # 系統安裝完成後的操作(重新啟動或關機)
selinux --disabled | --permissive              # 是否啟用 selinux
authconfig --useshadow --passalgo=sha512    # 系統的認證方式,這裡選擇密碼認證,加密演算法為 sha512
rootpw --iscrypted ....                    # 加密後的 root 密碼
bootloader --location=mbr --driveorder=sda  # bootloader 的安裝位置,這裡選擇安裝至 mbr 中

可選命令
install | upgrade                              # 安裝/升級 作業系統
url --url=....                                  # 指明通過遠端主機的 FTP 或 HTTP 路徑來安裝系統
firewall --disabled | --enabled            # 是否開啟防火牆
firstboot --disabled | --enabled                # 系統第一次啟動後是否進行使用者設定
text | graphical                                # 安裝介面為 文字/圖形
clearpart --linux | --all                      # 安裝前清除系統的哪些分割區,--all 表示清除所有分割區
zerombr                                # 使用 clearpart --all 時,需要加上這個選項,否則安裝過程會被暫停,需要手動選擇
part                                            # 分割區設定
part swap --size=2048                      # 對 swap 進行分割區的範例
part /boot --fstype ext4 --size=100000      # 對 /boot 進行分割區的範例
part pv.<id> --size=...                    # 建立一個 PV
volgroup vgname pvname                  # 建立 VG
logval /home --fstype ext4 --name=home --vgname=vgname --size=1024      # 建立一個邏輯卷的範例
%include                                    # 可以將其他檔案的內容包含進 kickstart 檔案中來,包含的檔案必須是安裝系統過程中能夠存取的

軟體包選擇段

這裡定義安裝系統需要安裝的軟體包,@開頭的表示包組,也可以指定單個包名,如:
%packages
@Base
@Core
@base
@basic-desktop
@chinese-support
@client-mgmt-tools
@core
@desktop-platform
@fonts
@general-desktop
@graphical-admin-tools
@legacy-x
@network-file-system-client
@perl-runtime
@remote-desktop-clients
@x11
lftp
tree
%end

指令碼段

指令碼分配安裝前指令碼和安裝後指令碼

%pre 表示安裝前指令碼,此時的 Linux 系統環境為微縮版環境,指令碼應盡可能簡單

這裡的指令碼通常用於查詢一些系統資訊,然後根據這些資訊動態的設定安裝設定,例如使用下面的指令碼
%pre
# 設定分割區的設定,設定 swap 大小為和 記憶體大小一樣
#!/bin/sh
act_mem=`cat /proc/meminfo | grep MemTotal | awk '{printf("%d",$2/1024)}'`
echo "" > /tmp/partition.ks
echo "clearpart --all --initlabel" >> /tmp/partition.ks
echo "part /boot --fstype=ext3 --asprimary --size=200" >> /tmp/partition.ks
echo "part swap --fstype=swap --size=${act_mem}" >> /tmp/partition.ks
echo "part / --fstype=ext3 --grow --size=1" >> /tmp/partition.ks
%end

這個指令碼在安裝系統之前執行,它查詢了系統的記憶體大小,並根據記憶體大小生成分割區指令,存放在 /tmp/partitoin.ks 檔案中。

然後在 kickstart 檔案中包含這個 partition.ks 檔案,就可以動態的設定分割區大小了:
%include /tmp/partitions.ks

%post 表示安裝後指令碼,此時的 Linux 系統環境為已經安裝完成的系統。

這裡的指令碼可以進行一些系統安裝後設定,如公鑰注入,倉庫設定,第三方軟體安裝,系統服務組態檔修改等等。

製作一個引導光碟

前面說過,系統的安裝分為引導和安裝兩布。在 CentOS 6 的安裝光碟中,/isolinux 目錄中存放的是用於引導的載入程式,它負責引導系統,載入一個核心,進入臨時系統,啟動 anaconda 安裝程式。隨後安裝程式會對系統進行一些初始設定,安裝使用者程式軟體包。

那麼,可以製作這樣一個引導光碟,它僅負責系統引導,而安裝系統所需的安裝樹全部放在遠端主機中,光碟中還可以內建一個 kickstart 檔案,並修改引導選單的選項使其安裝時自動使用 kickstart 檔案安裝。

製作過程如下:
1.準備工作目錄,如 /tmp/iso
2.將系統安裝光碟中的 /isolinux 目錄複製至 /tmp/iso 目錄中
3.將預先製作好的 kickstart 檔案也放入 /tmp/iso 目錄中

4.編輯 /tmp/iso/isolinux/isolinux.cfg 檔案,使其在安裝時直接使用 kickstart 組態檔

在檔案中找到 label linux 選單項,在 append 指令後附加 ks 設定,如:
 label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks.cfg


5.建立 iso 映象:
 mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table
 -V "CentOS 6.6 X86_64 boot disk" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso cdrom/

然後就可以使用 boot.iso 這個映象來安裝作業系統了,當然安裝時需要能夠通過網路存取到存有安裝樹的遠端主機。

-----------------------------分割線-----------------------------

使用PXE+DHCP+Apache+Kickstart無人值守安裝CentOS5.8 x86_64 http://www.linuxidc.com/Linux/2012-12/76913p4.htm

Linux PXE無人值守安裝出現 PXE-E32:TFTP OPen timeout的解決辦法 http://www.linuxidc.com/Linux/2014-03/98986.htm

使用PXE結合kickstart 自動安裝Linux系統 http://www.linuxidc.com/Linux/2014-03/98014.htm

RHCE認證之無人值守安裝Linux系統(FTP+TFTP+DHCP+Kickstart+PXE) http://www.linuxidc.com/Linux/2013-10/91013.htm

PXE網路裝機(有人值守與無人值守安裝) http://www.linuxidc.com/Linux/2013-07/87456.htm

-----------------------------分割線-----------------------------

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-05/117877.htm


IT145.com E-mail:sddin#qq.com