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
大家一起探讨,共同进步!