PXE + Kickstart無人值守批量安裝OS

weixin_34391445發表於2017-02-21

PXE作用: 引導裝機
Kickstart作用: 將安裝系統的過程中寫入ks.cfg檔案中,實現無人值守自動安裝
TFTP: PXE Client中從server端下載pxelinux.0檔案(最先下載)、vmlinuz、initrd.img
DHCP: PXE引導過程中獲取IP地址。一共兩次使用到DHCP,第一次是使用TFTP傳檔案時,第二次是使用HTTP傳檔案時
HTTP: 用於下載ks.cfg以及映象檔案

準備工作:
1.關閉防火牆 (這個比較暴力==,建議還是寫iptables吧)
2.關閉selinux
3.準備好系統映象檔案並掛載
4.各伺服器規劃:
TFTP / DHCP / HTTP IP: 10.1.1.69
即所有服務位於同一臺伺服器上(如果需要安裝的伺服器較多,則注意將這幾個服務拆開,以此減輕網路傳輸壓力,尤其是對於異地IDC裝機時,VPN簡直的速度不能忍)

一、安裝HTTP服務並將相關檔案放入httpd根目錄中

1.1 安裝Web服務

#yum install httpd -y

備註:如果有http服務如Nginx,可直接使用,但是要主要相關檔案必須放在Nginx的root目錄下。

1.2 將映象檔案掛載進httpd服務的根目錄中

#mount -o loop xxx.iso  /var/www/html/iso
#有的時候版本多,可以改下目錄名,以版本命名
#mv /var/www/html/iso /var/www/html/centos6.6

1.3 生成ks.cfg檔案並將其放入/var/www/html/ 目錄

具體生成這裡不做說明,實際上就是用kicstart工具模擬一次裝系統的步驟==

生成後的檔案如下。

cat /var/www/html/ks.cfg

# Kickstart file automatically generated by anaconda.
#mody 20140311
#version=DEVEL
install
#cdrom
url --url http://10.1.1.69/centos6.6
lang en_US.UTF-8
keyboard us
rootpw  --iscrypted $6$Ldc0ppq9soXeP34h$/2Z9DVOUPzEh4gcFMPkd/gf3.Is6rlKfgBht0oQs5tjHN8DL.hp18gftjoNzGZ6SQ69hJYw7zkX24ryMXll0E/
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda,sdb,sdc
# 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 --none
clearpart --all --initlabel --drives=sda
zerombr
part / --fstype=ext4 --size=70000 --ondisk=sda
part swap --size=20480 --ondisk=sda
part /usr/local --fstype ext4 --size=1 --grow   --ondisk=sda

reboot
#repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100
%packages
@additional-devel
@base
@chinese-support
@compat-libraries
@console-internet
@core
@debugging
@development
@directory-client
@hardware-monitoring
@large-systems
@legacy-unix
@network-file-system-client
@performance
@perl-runtime
@server-platform
@server-platform-devel
@server-policy
@system-management
@system-admin-tools
@workstation-policy
libgcrypt-devel
libXinerama-devel
xorg-x11-proto-devel
startup-notification-devel
libgnomeui-devel
libbonobo-devel
libXau-devel
libXrandr-devel
popt-devel
libxslt-devel
libglade2-devel
gnutls-devel
mtools
pax
oddjob
sgpio
device-mapper-persistent-data
systemtap-client
jpackage-utils
samba-winbind
certmonger
pam_krb5
krb5-workstation
tcp_wrappers
perl-DBD-SQLite
ipmitool
OpenIPMI
screen
tree
lsscsi
%end

注意:/var/www/html/ 目錄下的檔案許可權應該為 755,否則無法下載,會出現如下錯誤:

[root@minion ~]# wget http://10.1.1.69/yantao
--2017-02-21 05:09:24--  http://10.1.1.69 /yantao
Connecting to 10.1.1.69 :80... failed: Connection refused.

修改許可權後方可下載。

二、安裝與配置TFTP服務

2.1 安裝與配置

#yum install tftp-server -y
#vim /etc/xinetd.d/tftp
service tftp
{
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /tftpboot/ -c
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

#mkdir /tftpboot/
#/etc/init.d/xinetd restart
#netstat -anutp | grep ":69"
udp        0      0 0.0.0.0:69                  0.0.0.0:*                               3551/xinetd      

此時TFTP已經安裝結束了,為了驗證TFTP是否安裝成功,可以做如下測試:
服務端(10.1.1.69)

#touch /tftpboot/testfile

客戶端(10.1.1.101)

#yum install tftp -y
#tftp 10.1.1.69
tftp>get yantao
tftp>

get檔案時返回正常,表示服務端TFTP已配置成功。

備註:我在測試時 get /tftpboot/yantao時一直提示“Error code 1: File not found”錯誤,這是因為我使用了全路徑,這裡其實是不需要全路徑的,/tftpboot本身就是根目錄了。

2.2 將PXE引導過程中需要的檔案放入TFTP的根目錄,並配置default檔案

**PXE引導所需檔案:pxelinux.0,initrd.img,vmlinuz,boot.msg **。此外,isolinux.cfg對應default檔案,具體如下:

(1)將pxelinux.0拷入/tftpboot中

#cp /usr/share/syslinux/pxelinux.0  /tftpboot

備註:有的機器沒有syslinux/這個目錄,因此沒有pxelinux.0這個檔案,解決方法是安裝syslinux這個工具:

#yum install syslinux -y

(2)掛載映象,複製相關檔案進入/tftpboot目錄中

#cp /var/www/html/centos6.6/images/pxeboot/{initrd.img,vmlinuz} /tftpboot/
#cp /var/www/html/centos6.6/isolinux/*.msg /tftpboot

#mkdir /tftpboot/pxelinux.cfg
#cp /var/www/html/centos6.6/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default

配置default檔案

#cat /tftpboot/pxelinux.cfg/default
default ks
prompt 1
timeout 600

display /tftpboot/boot.msg

menu title Welcome to CentOS 6.6!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000

label linux
  kernel vmlinuz
  append initrd=initrd.img
  
label text
  kernel vmlinuz

label ks
  kernel vmlinuz
  append initrd=initrd.img ks=http://10.1.1.69/ks.cfg ksdevice=em1
  
label yantao
  kernel vmlinuz
  append ks=http://10.1.1.69:80/ks.cfg ksdevice=em1 ip=10.1.1.3 netmask=255.255.255.0 initrd=initrd.img
  

label memtest86
  kernel memtest
  append -

注意點:

  • label名。該檔案開頭寫了default ks,表示PXE預設使用ks這個label下的配置;但是有時候我們會需要手動輸入label,所以default後的label名可以任意寫一個不存在的,這樣其實就加了一層安全措施,以免在某個IDC裝機時,剛好有其他的伺服器重啟,不知情的情況下,那就悲劇了。
  • ks.cfg路徑。ks.cfg位於HTTP服務的根目錄下面,比如這裡的檔案路徑就是:/var/www/html/ ks.cfg。default檔案中用如下方法表示:
ks=http://10.1.1.69/ks.cfg
  • 可以在default檔案中配置好IP地址,子網掩碼等,這個IP是在系統裝好後依然會保留的。如下:
ip=10.1.1.3 netmask=255.255.255.0

那麼最後/tftp目錄的整體結構如下:

[root@localhost tftpboot]# pwd
/tftpboot
[root@localhost tftpboot]# tree
.
├── boot.msg
├── initrd.img
├── pxelinux.0
├── pxelinux.cfg
│   └── default
└── vmlinuz

三、安裝配置DHCP服務

3.1 安裝

#yum -y install dhcp

3.2 DHCP配置檔案:/etc/dhcp/dhcpd.conf

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample
#   see 'man 5 dhcpd.conf'
#
ddns-update-style interim;

allow booting;
allow bootp;
next-server 10.1.1.69;
filename "pxelinux.0";

ignore client-updates;
set vendorclass = option vendor-class-identifier;

option pxe-system-type code 93 = unsigned integer 16;

subnet 10.1.1.0 netmask 255.255.255.0 {
     option routers             10.1.1.69;
     option subnet-mask         255.255.255.0;
     range dynamic-bootp        10.1.1.1 10.1.1.254;
     default-lease-time         21600;
     max-lease-time             43200;
}

# group for Cobbler DHCP tag: default
group {
}

重點:filename "pxelinux.0";這一語句是必須的,這個表示在DHCP中開啟PXE引導功能。
現在可以自動安裝了。安裝時直接將引導設定為PXE啟動即可。

相關文章