PXE+Kickstart+DHCP+TFTP實現無人值守安裝操作系統


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 ClientDHCP服務器獲取到PXE Server的位置后,會到PXE Server上按照“MAC->具體IP->IPC段(前24位)->IPB段(前16位)->IPA段(前8位)->default”的順序匹配PXE配置文件,然后再從PXE配置文件中獲取vmlinuzinitrd.imgks.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中獲取,常見的形式還有httpftpnfs等方式
格式有三種:
1.cdrom
和硬盤
ks=cdrom:/dir/ks.cfg
(硬盤的話把cdrom換成hd即可,下面的類似)

2.httpftp
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文件配置,可以在已經安裝好的linuxroot目錄下找到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://www.07net01.com/linux/linuxanzhuangxiangjie_peizhiks_cfgshixianzidonganzhuangguocheng_5112_1340790041.html

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7-Beta/html/Installation_Guide/sect-kickstart-examples.html#sect-kickstart-partitioning-example

http://blog.csdn.net/taiyang1987912/article/details/42176709

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM