PXE+Kickstart自動化裝機
1.實驗環境
centos6.9操作系統;vmware 12.0+虛擬化平臺;
生產環境centos7.3-1611
本機IP地址:10.10.10.11
防火牆、selinux都處於關閉狀態
2.實驗步驟
2.1 配置安裝服務器yum倉庫爲本地,安裝dhcp服務tftp並配置:
yum源採用阿里的(爲什麼會特意提到yum源?另有深意,客官且往下看,不必糾結於此)。此處需要注意,爲了避免干擾,將所有的yum源改名爲repo.bak(執行以下命令:rename repo repo.bak /etc/yum.repo.d/*),只留下一個阿里的yum源即可
# cat /etc/yum.repos.d/aliBase.repo
[aliBase]
#[development]
name=aliBase
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-$releasever
# cat /etc/yum.repos.d/aliEpel.repo
#[aliEpel]
#name=aliEpel
#baseurl=https://mirrors.aliyun.com/epel/$releasever\Server/$basearch/
#enabled=1
#gpgcheck=0
1、安裝dhcpd服務
yum -y install dhcp
用rpm -ql dhcp查看有關於dhcpd的文件有哪些
[root@node1 ksdir]# rpm -ql dhcp
/etc/NetworkManager
/etc/NetworkManager/dispatcher.d
/etc/NetworkManager/dispatcher.d/12-dhcpd
/etc/dhcp/dhcpd.conf
/etc/dhcp/dhcpd6.conf
/etc/dhcp/scripts
/etc/dhcp/scripts/README.scripts
/etc/openldap/schema/dhcp.schema
/etc/sysconfig/dhcpd
/usr/bin/omshell
/usr/lib/systemd/system/dhcpd.service
/usr/lib/systemd/system/dhcpd6.service
/usr/lib/systemd/system/dhcrelay.service
/usr/sbin/dhcpd
/usr/sbin/dhcrelay
/usr/share/doc/dhcp-4.2.5
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
/usr/share/doc/dhcp-4.2.5/dhcpd6.conf.example
/usr/share/doc/dhcp-4.2.5/ldap
/usr/share/doc/dhcp-4.2.5/ldap/README.ldap
/usr/share/doc/dhcp-4.2.5/ldap/dhcp.schema
/usr/share/doc/dhcp-4.2.5/ldap/dhcpd-conf-to-ldap
/usr/share/man/man1/omshell.1.gz
/usr/share/man/man5/dhcpd.conf.5.gz
/usr/share/man/man5/dhcpd.leases.5.gz
/usr/share/man/man8/dhcpd.8.gz
/usr/share/man/man8/dhcrelay.8.gz
/usr/share/systemtap/tapset/dhcpd.stp
/var/lib/dhcpd
/var/lib/dhcpd/dhcpd.leases
/var/lib/dhcpd/dhcpd6.leases
2、執行以下命令,將默認的dhcp配置文件拷貝到/etc/dhcp/dhcpd.conf,並修改配置文件:
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf /etc/dhcp/dhcpd.conf
option routers 10.10.10.11; #網關
option domain-name-servers 10.10.10.11; #DNS服務器地址
subnet 10.10.10.0 netmask 255.255.255.0 {
range 10.10.10.200 10.10.10.250; #IP地址段
option subnet-mask 255.255.255.0; #掩碼
option domain-name "magedu.org"; #本機對應的域名解析地址,/etc/hosts下面對應的有一句,10.10.10.11 magedu.org,與上面的DNS服務器地址相對應
next-server 10.10.10.11; # 就是TFTP的位置
filename "pxelinux.0"; # 告知得從TFTP根目錄下載的boot loader文件名
}
centos7同樣按上述方式操作
啓動dhcp服務:service dhcpd start
centos7:systemctl start dhcpd
3、 安裝並配置TFTP服務
yum -y install tftp-server
在centos6下,tftp服務受xinetd管理,配置文件路徑默認:/etc/xinetd.d/tftp
將disable tftp改爲no即可。
啓動tftp服務:service xinetd start
centos7: yum -y install xinetd tftp-server
編輯/etc/xinetd.d/tftp,將disable tftp改爲no
vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
systemctl start xinetd
4、 安裝pxe模式下的syslinux包,並將相關文件拷貝至tftp服務的文件存放路徑 /var/lib/tftpboot/
yum -y install syslinux
cp -a /usr/share/syslinux/{menu.c32,vesamenu.c32,pxelinux.0} /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg
ls -l /var/lib/tftpboot/
-rw-r--r-- 1 root root 61796 Oct 16 2014 menu.c32 # 提供圖形化菜單功能
-rw-r--r-- 1 root root 26759 Oct 16 2014 pxelinux.0 # boot loader文件
drwxr-xr-x 2 root root 4096 Feb 24 20:02 pxelinux.cfg # 開機的菜單設定在這裏
-rw-r--r-- 1 root root 163728 Oct 16 2014 vesamenu.c32 # 也是提供圖形化菜單功能,但界面和menu.c32不同
pxelinux.cfg是個目錄,可以放置默認的開機選項,也可以針對不同的客戶端主機提供不同的開機選項。一般來說,可以在pxelinux.cfg目錄內建立一個名爲default的文件來提供默認選項。
5、 從鏡像中獲取Linux內核文件,因爲此前已將所有鏡像文件做了拷貝(yum本地倉庫配置),直接執行:
cp /app/rhel6/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7
cp /app/rhel6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
編輯default文件,修改timeout值爲10(此項改動會使等待時間縮短爲1s)
centos7配置同樣按上述操作進行
6、 通過HTTP服務提供安裝文件
yum -y install httpd
mkdir /var/www/html/centos6
mount /dev/cdrom /var/www/html/centos6
servive httpd start
centos7:
yum -y install httpd
mkdir /var/www/html/centos7
mount ./CentOS-7.3-x86_64-Everything-1611.iso /var/www/html/centos7
systemctl start httpd
7、 安裝system-config-kickstart工具,生成ks.cfg文件。注意此項操作應藉助X-Manager或其他工具實現(建議使用X Shell配置)
yum -y install system-config-kickstart
system-config-kickstart
按照需求進行配置,注意在配置安裝方式時,選擇HTTP安裝,第一行寫server的IP,第二行寫按安裝文件目錄,本例爲/centos6(/centos7)。最後將ks.cfg文件保存在http服務Rootdocument默認目錄/var/www/html下。
配置kickstatrt文件是PXE批量部署的關鍵所在!圖文模式配置請參考以下博客:https://www.linuxidc.com/Linux/2019-11/161255.htm
(1)如果你在編輯ks文件的時候,如果出現這種情況:
那麼你需要將yum源的倉庫名做一下修改,修改之後再編輯ks文件就不會出現這種情況了。將yum倉庫名修改爲development,如下:
# cat /etc/yum.repos.d/aliBase.repo
#[aliBase]
[development]
name=aliBase
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/RPM-GPG-KEY-CentOS-$releasever
# cat /etc/yum.repos.d/aliEpel.repo
#[aliEpel]
#name=aliEpel
#baseurl=https://mirrors.aliyun.com/epel/$releasever\Server/$basearch/
#enabled=1
#gpgcheck=0
這時候再重新編輯ks文件就不會出現上述問題!
在這裏我只給大家展示一下自己的kickstart文件
[root@node1 ksdir]# cat ks7.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$UKr4gbXz$ZsWz9rO3mnf9V/cy.SLew/
# Use network installation
url --url="http://10.10.10.11/centos/7/os/x86_64"
# System language
lang en_US
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled
# Network information
network --bootproto=dhcp --device=ens33
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part / --fstype="xfs" --size=10000
part swap --fstype="swap" --size=1000
part /boot --fstype="xfs" --size=400
%packages
%end
8、 編輯/var/lib/tftpboot/pxelinux.cfg目錄下的default文件,在第一個標籤append下添加一條ks記錄:
centos7:
[root@node1 pxelinux.cfg]# cat /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 10
menu title auto install CentOS
label centos7_Desktop
menu label Install CenOS 7.6
kernel centos7/vmlinuz
menu default
append initrd=centos7/initrd.img ks=http://10.10.10.11/ksdir/ks7.cfg
至此,自動化裝機server端配置完成。
寫在最後:
1、安裝虛擬機的時候要注意,非最小化安裝,至少給虛擬機分配2G的內存,否則會報錯
2、虛擬機實驗的話需要使用同一塊網卡,否則無法使用dhcp服務。
3、用虛擬機給實際的服務器用pxe安裝系統的話,要用橋接網絡
4、這裏寫一個我自己遇到的一個奇怪的問題:
虛擬機安裝完畢之後,它提示機器要重啓,然後就開始重啓,先出現以下界面:
然後,奇怪的事情發生了!它一直卡在了下一個界面:
就這樣一直卡着不動,按ESC鍵和F8、F10都沒有反應!
問題排查的思路:httpd沒問題,selinux沒問題,防火牆沒問題,tftp也沒問題,那我就想到了只有一種可能:ks文件寫的有問題。果不其然,我打開ks文件,發現有一項配置他沒有生效:
我們選的是第一項,當我保存了文件之後,他給我修改成了第二項!奇怪的很,當我再打開文件,無論怎麼修改,再打開它始終變成了第二項!所以我只好手動修改配置文件來解決這個問題了!
在生產環境下,BIOS中服務器的默認啓動方式可能爲UEFI,在pxe+kickstart模式下,這種啓動模式並不十分適用,實際調試過程中將UEFI改爲Legacy後,才順利進入自動安裝過程。如果覆蓋安裝原有的操作系統,需要手動將啓動順序調整爲網絡啓動,且安裝結束更改爲本地硬盤啓動。
利用工具system-config-kickstart進行ks文件生成時,LVM無法支持,如果確實要配置,建議在宿主機完成裝機後,利用該工具打開/root下的anaconda-ks.cfg,在此基礎上修改並保存爲我們需要的ks文件。
U盤裝linux系統:
在利用工具刻錄好U盤後,裝機過程出現dracut-initqueue[600]: 字樣;原因是利用工具UltroISO在Window下寫入U盤的安裝文件路徑,沒有被linux安裝程序識別
解決辦法:
dracut:/# cd /dev
dracut:/dev# ls
找到安裝文件所在的位置,即U盤的設備號 (sdb4 類似)
重啓在安裝界面按下Tab鍵,修改啓動配置
vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet
改爲:
vmlinuz initrd=initrd.img inst.stage2=hd:/dev/sdb4 quiet (前面找到的U盤的設備號)
如還有疑問,可加QQ:1930818140 PXE批量部署大咖羣:884844262
大家一起探討,共同進步!