工作中我們如果安裝一台操作系統,我們可以做一個U啟動來安裝我們所需要的操作系統,但是如果我們如果要給幾十台server 安裝操作系統,我們在用U啟動安裝效率太低,這時候我們可以采用pxe + kickstart 來批量安裝系統大大節省我們的時間。
PXE 交換的原理
Client向PXE Server上的DHCP發送IP地址請求消息,DHCP檢測Client是否合法(主要是檢測Client的網卡MAC地址),如果合法則返回Client的IP地址,同時將啟動文件pxelinux.0的位置信息一並傳送給Client
Client向PXE Server上的TFTP發送獲取pxelinux.0請求消息,TFTP接收到消息之后再向Client發送pxelinux.0大小信息,試探Client是否滿意,當TFTP收到Client發回的同意大小信息之后,正式向Client發送pxelinux.0 Client執行接收到的pxelinux.0文件
Client向TFTP Server發送針對本機的配置信息文件(在TFTP 服務的pxelinux.cfg目錄下),TFTP將配置文件發回Client,繼而Client根據配置文件執行后續操作。
Client向TFTP發送Linux內核請求信息,TFTP接收到消息之后將內核文件發送給Client
Client向TFTP發送根文件請求信息,TFTP接收到消息之后返回Linux根文件系統
Client啟動Linux內核
Client下載安裝源文件,讀取自動化安裝腳本
我以ubuntu 14.04系統為例演示一下怎么實現pxe和kickstart 來實現批量部署系統
環境系統: ubuntu14.04
1. 軟件安裝及配置,首先需要安裝 apache tftpserver kickstart dhcp 配置工具
apt-get install -y system-config-kickstart tftpd-hpa tftp-hpa apache2 isc-dhcp-server
2.將ubuntu-14.04 鏡像上傳,在apache2 網站上創建掛載目錄,將鏡像掛載在目錄上。
我們安裝完apache2 后在apache2 的網站目錄(/var/www/html/) 上創建掛載的目錄 (在哪里掛載沒有關系只需要將掛載目錄上的數據都放在網站目錄下)
mkdir -p /var/www/html/ubuntu-1404/
網站默認目錄是/var/www/html/ 如果想要掛載指定位置需要修改 /etc/apache2/sites-available/000-default.conf 文件中默認根目錄,修改完記得要重啟服務
掛載鏡像到目錄上,掛載后的目錄是由數據。
mount -t iso9660 ubuntu-14.04.6-server-amd64.iso /opt/tftp/ubuntu-1404
永久掛載需要寫在開機自動掛載的fstab 里
/root/ubuntu-14.04.6-server-amd64.iso /var/www/html/ubuntu-1404 iso9660 ro,loop,defaults 0 0
將掛載目錄的啟動文件cp 到我們tftp 共享目錄中(/var/lib/tftpboot/ 初始的目錄是為空)與網站目錄中
cp -arf /var/www/html/ubuntu-1404/install/netboot/* /var/lib/tftpboot/
cp /var/www/html/ubuntu-1404/preseed/ubuntu-server.seed /var/www/html/
在網站目錄創建ks
mkdir -p /var/www/html/ks/
生成ks.cfg 文件 (需要支持圖形界面如果不是圖形界面apt-get install ubuntu-desktop 安裝一下)
system-config-kickstart (選擇一些關鍵的就可以,其他保持默認根據需求來配置----自己可以百度一下kickstart 詳細配置說明) 配置完后在file 中save file
保存文件后會有一個ks.cfg 文件存在
修改/var/www/html/ubuntu-server.seed 文件追加一條 (因為在ubuntu12.10版本以后,安裝一些包會依賴於預配置的文件系統,會導致使用kickstart方式無法成功安裝)
vim /var/www/html/ubuntu-server.seed
d-i live-installer/net-image string http://192.168.1.128/ubuntu-1404/install/filesystem.squashfs
添加 ks.cfg 文路徑,在install標簽下的append 添加ks
vim /var/lib/tftpboot/ubuntu-installer/amd64/boot-screens/txt.cfg
default install
label install
menu label ^Install
menu default
kernel ubuntu-installer/amd64/linux
append ks=http://192.168.1.128/ks/ks.cfg preseed/url=http://192.168.1.128/ubuntu-server.seed vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet
label cli
menu label ^Command-line install
kernel ubuntu-installer/amd64/linux
append tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=788 initrd=ubuntu-installer/amd64/initrd.gz --- quiet
~
配置dhcp
/etc/dhcp/dhcpd.conf
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.50 192.168.1.60; #地址分配范圍
option routers 192.168.1.1; #網關
option domain-name-servers 192.168.1.1; #dns (/etc/resolv.conf 可以查看到)
default-lease-time 6000; #默認租期
max-lease-time 7200; #最大租期
filename "pxelinux.0"; #pxe啟動文件名稱,注意文件最后是數字0,不是字母o
next-server 192.168.1.128; #tftp 地址
}
3.重啟各個服務
service isc-dhcp-server restart
service tftpd-hpa restart
service apache2 restart
4. 驗證
起一個虛機設置網絡啟動 (這個虛機需要和pxe server 在同一個vlan 里) 裝好后的虛機
附ks.cfg
#Generated by Kickstart Configurator
#platform=x86
#System language
lang en_US
#Language modules to install
langsupport en_US
#System keyboard
keyboard us
#System mouse
mouse
#System timezone
timezone Asia/Shanghai
#Root password
rootpw --iscrypted $1$FMLT9HTQ$A9NJbHTiSiCsPq9Qg3h1m0
#Initial user
user test --fullname "" --iscrypted --password $1$MWbigjvn$C5HPkUqvo9PBnu0YnfaoE/
#Reboot after installation
reboot
#Use text mode install
text
#Install OS instead of upgrade
install
#Use Web installation
url --url http://192.168.1.128/ubuntu-1404
#System bootloader configuration
bootloader --location=mbr
#Clear the Master Boot Record
zerombr yes
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part /boot --fstype xfs --size 500
part swap --size 500
part / --fstype ext4 --size 1 --grow
#System authorization infomation
auth --useshadow --enablemd5
#Network information
network --bootproto=dhcp --device=eth0
#Firewall configuration
firewall --disabled
#Do not configure the X Window System
skipx