PXE+Kickstart+DHCP+TFTP實現無人值守安裝操作系統
Linux安裝大致可以分為2個階段
- 第一階段:anaconda;
- 第二階段:安裝階段系統會按照anaconda階段設定的參數自動安裝。
anaconda階段是Linux的預安裝環境,提供linux安裝選項的一個接口,可以將它比作是window中的PE環境。
anaconda有兩種模式:
- 交互式:和普通安裝一樣,按照提示選擇選項一步步的安裝;
- 非交互式:通過讀取kickstart文件(ks.cfg)的配置,進行自動安裝。
PXE + Kickstart
使用PXE + KickStart可以通過非交互模式完成無人值守安裝操作系統。
PXE+Kickstart 無人值守安裝操作系統完整過程如下:
PXE的工作流程及配置文件
在使用ks.cfg之前,需要先通過PXE引導啟動環境。
PXE Client從DHCP服務器獲取到PXE Server的位置后,會到PXE Server上按照“MAC->具體IP->IP的C段(前24位)->IP的B段(前16位)->IP的A段(前8位)->default”的順序匹配PXE配置文件,然后再從PXE配置文件中獲取vmlinuz、initrd.img、ks.cfg、系統鏡像等文件所在的服務器和位置信息。
PXE的工作流程:
在操作系統安裝鏡像的isolinux目錄下,都包含了一個isolinux.cfg文件,可以在該文件的基礎上進行修改,並生產PXE配置文件,用來引導該操作系統的安裝。
PXE配置文件示例如下:
# 默認啟動的是 'label linux' 中標記的內核
default linux
# 顯示 'boot: ' 提示符。
# 為 '0' 時則不提示,將會直接啟動 'default' 參數中指定的內容。
prompt 1
# 在用戶輸入之前的超時時間,單位為 1/10 秒。
timeout 600
# 顯示某個文件的內容,注意文件的路徑。默認是在 /tftpboot 目錄下。
# 也可以指定位類似 'install/rhel4.4-inst/boot.msg' 這樣的,路徑+文件名。
display boot.msg
# 按下 'F1' 這樣的鍵后顯示的文件。注意路徑。默認是 /tftpboot。
# 注:syslinux 官方網站上說目前只能使用 F1-F10。
F1 install/rhel4.4-inst/boot.msg
F2 install/rhel4.4-inst/options.msg
#...
F10 install/rhel4.4-inst/snake.msg
# 'label' 指定你在 'boot:' 提示符下輸入的關鍵字。
# kernel 參數指定要啟動的內核。同樣要注意路徑,默認是 /tftpboot 目錄。
# append 指定追加給內核的參數,能夠在 gurb 里使用的追加給內核的參數,在這里也都可以使用。
label linux
kernel install/rhel4.4-inst/vmlinuz
append initrd=install/rhel4.4-inst/initrd.img ramdisk_size=8192
label text
kernel vmlinuz
append initrd=install/rhel4.4-inst/initrd.img text ramdisk_size=8192
label expert
kernel vmlinuz
append expert initrd=install/rhel4.4-inst/initrd.img ramdisk_size=8192
# 使用 kickstart 安裝。
# 可以在 ks 參數后直接指定 kickstart 文件的位置。
label ks basic
kernel install/rhel4.4-inst/vmlinuz
append ks=ftp://192.168.10.251/install/rhel4.4_basic.cfg initrd=install/rhel4.4-inst/initrd.img ramdisk_size=8192
label lowres
kernel vmlinuz
append initrd=install/rhel4.4-inst/initrd.img lowres ramdisk_size=8192
label local
localboot 1
label memtest86
kernel memtest
append -
安裝linux過程中,獲取ks.cfg文件的方式有多種,如直接在cdrom中獲取,常見的形式還有http,ftp,nfs等方式
格式有三種:
1.cdrom和硬盤
ks=cdrom:/dir/ks.cfg(硬盤的話把cdrom換成hd即可,下面的類似)
2.http和ftp
ks=http://domain.com/dir/ks.cfg
3.NFS
ks=nfs:domain.com:/dir/ks.cfg
三種格式主要區分在於后面的斜杠,這里要注意區分
Kickstart的配置文件
ks.cfg文件組成大致分為3段:
1.命令段:
鍵盤類型,語言,安裝方式等系統的配置,有必選項和可選項,如果缺少某項必選項,安裝時會中斷並提示用戶選擇此項的選項
2.軟件包段:
%packages
@groupname:指定安裝的包組
package_name:指定安裝的包
-package_name:指定不安裝的包
在安裝過程中默認安裝的軟件包,安裝軟件時會自動分析依賴關系。
3.腳本段(可選):
%pre:預安裝腳本(由於只依賴於啟動鏡像,支持的命令很少)
%post:后安裝腳本(基本支持所有命令)
具體的ks.cfg文件配置,可以在已經安裝好的linux的root目錄下找到anaconda_ks.cfg,這個ks文件是在安裝linux后,根據用戶的安裝選項自動生成的。
如果不想手工以文本方式配置ks.cfg,也可以在linux系統中使用system-config-kickstart來生成ks.cfg文件,或者再安裝x-window來使用圖形化工具制作ks.cfg文件。
ks.cfg樣例(系統是CentOS-6.2-i386-minimal,所以配置樣例比較精簡):
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install #表示是安裝,而不是升級
text #文本方式安裝
cdrom #安裝方式,如果是網絡安裝的話可以寫成 url ––url ftp://192.168.1.254/dir 或者 nfs --server=192.168.0.241 --dir=/centosinstall
key –skip #這是另外添加的,如果是redhat的系統,會要求輸入key,這里配置為跳過,如果不配置安裝時會停在那里要求用戶輸入key
lang en_US.UTF-8 #語言
keyboard us #鍵盤樣式
network --onboot no --device eth0 --noipv4 --noipv6 #網絡配置 配置具體參數樣例:network –onboot yes --bootproto=static --ip=192.168.1.1 --netmask=255.255.255.0 其他網關,DNS等格式和ifcfg-ethx的方式一樣
rootpw --iscrypted $6$PEJ49S7OkrNra3UM #管理員密碼,是加密過的 要是使用不加密的方式則這樣寫:rootpw 123456
firewall --service=ssh #開啟防火牆,並打開ssh端口
authconfig --enableshadow --passalgo=sha512 #用戶認證和密碼加密方式
selinux --enforcing #強制打開selinux
timezone --utc Etc/GMT+8 #時區設置
zerombr yes #清空磁盤的mbr
bootloader --location=mbr --driveorder=sda #引導程序相關參數
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart –all –initlabel #初始化磁盤
part / --fstype=ext4 --size=18000 #開始分區
part swap --grow --size=1024
repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
reboot #重啟機器
%packages --nobase #安裝的軟件包,這里由於安裝的是最小mini版,所以只安裝了核心軟件包組
@core
%post #后安裝腳本(這是另外添加的)
id lustlost &>; /dev/null || useradd lustlost #檢查是否有lustlost用戶,如果沒有則添加
echo 123456 | passwd –stdin lustlost #配置密碼
cat >> /etc/yum.repos.d/base.repo << eof
[base]
name=baseserver
baseurl=http://192.168.1.254/yum
gpgcheck=0
enable=1
eof #這里在安裝系統成功后執行腳本自動配置一個yum源,其他腳本可以按照需要定義
%end
參考資料:
http://www.linuxidc.com/Linux/2014-06/103633p2.htm
http://www.syslinux.org/wiki/index.php/PXELINUX
http://www.syslinux.org/wiki/index.php/SYSLINUX
http://blog.csdn.net/taiyang1987912/article/details/42176709