歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux 基礎教程:Linux Kickstart 自動安裝

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

日期:2017/2/28 14:01:24   编辑:Linux教程

從系統安裝說起

在 RHEL,CentOS,Fedora 等系統中,安裝系統使用的程序名叫 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

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

Copyright © Linux教程網 All Rights Reserved