使用PXE+kickstart无人值守安装服务

549 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

使用PXE+kickstart无人值守安装服务

使用光盘镜像来安装Linux系统的方法,该方法适用于只安装少量Linux系统的情况。如果生产环境中有数百台服务器都需要安装系统,这种方式就不合时宜了。这时,我们就需要使用PXE + TFTP + vsftpd + DHCP + Kickstart服务搭建出一个无人值守安装系统。这种无人值守安装系统可以自动地为数十台服务器安装系统,这一方面将运维人员从重复性的工作中解救出来,也大大提升了系统安装的效率。

PXE(Preboot eXecute Environment,预启动执行环境)是由Intel公司开发的技术,可以让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持PXE技术),主要用于在无人值守安装系统中引导客户端主机安装Linux操作系统。Kickstart是一种无人值守的安装方式,其工作原理是预先把原本需要运维人员手工填写的参数保存成一个ks.cfg文件,当安装过程中需要填写参数时则自动匹配Kickstart生成的文件。所以只要Kickstart文件包含了安装过程中需要人工填写的所有参数,那么从理论上来讲完全不需要运维人员的干预。

服务端ip:

pex-server192.168.159.142

所需配置服务及安装包

DHCP        #获取IP地址,并提供pxelinux.0文件位置
TFTP            #支持PXE下载内核引导文件
vsftpd        #下载ks.cfg以及系统镜像文件
Syslinux        #提供引导文件
[root@pex-server ~]# systemctl stop firewalld #关闭防火墙selinux
[root@pex-server ~]# setenforce 0

配置DHCP服务

[root@pex-server ~]# yum -y install dhcp 
[root@pex-server ~]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.159.0 netmask 255.255.255.0 {
range 192.168.159.100 192.168.159.199;
option subnet-mask 255.255.255.0;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.159.142;
filename "/pxelinux.0";
}
[root@pex-server ~]# systemctl restart dhcpd        ##启动dhcp服务
[root@pex-server ~]# systemctl enable dhcpd         ##开机自启动
[root@pex-server ~]# netstat -lntup|grep dhcpd      ##查看有无端口
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2418/dhcpd 

配置TFTP服务

[root@pex-server ~]# yum -y install tftp-server
[root@pex-server ~]# 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   #此处由yes 改为no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
[root@pex-server ~]# systemctl restart tftp
[root@pex-server ~]# systemctl enable tftp

配置vsftpd服务

[root@pex-server ~]# yum -y install vsftpd
[root@pex-server ~]# systemctl restart vsftpd
[root@pex-server ~]# systemctl enable vsftpd
#创建挂载点
[root@pex-server ~]# mkdir -p /media/cdrom
[root@pex-server ~]# mount /dev/cdrom /media/cdrom
[root@pex-server ~]# cp -r /media/cdrom/*  /var/ftp 
## 挂载CentOS7光盘,也可以上传iso镜像,
## iso镜像可以用mount挂载里面的内容
## mkdir -p /media/cdrom
## mount -t iso9660  -o loop /CentOS-7-x86_64-Minimal-2009.iso  /media/cdrom
## cp -r /media/cdrom/*  /var/ftp 

ftp访问,进行测试。

配置SYSLinux服务

[root@pex-server ~]# yum -y install syslinux
[root@pex-server ~]# cd /var/lib/tftpboot
[root@pex-server tftpboot]# cp /usr/share/syslinux/pxelinux.0 .
[root@pex-server tftpboot]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} .
[root@pex-server tftpboot]# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg} .
[root@pex-server tftpboot]# mkdir pxelinux.cfg
[root@pex-server tftpboot]# cp /media/cdrom/isolinux/isolinux.cfg pxelinux.cfg/default
[root@pex-server tftpboot]# vim pxelinux.cfg/default #修改内容与行数如下
1行,换成:  default linux
第64行,换成: append initrd=initrd.img inst.stage2=ftp://192.168.159.142 ks=ftp://192.168.159.142/pub/ks.cfg quiet

ftp://192.168.159.142 为server的ip地址
[root@pex-server ~]# systemctl enable tftp
[root@pex-server ~]# systemctl restart tftp

配置kickstart的 ks.cfg文件

[root@pex-server ~]# cp ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
[root@pex-server ~]# chmod +r /var/ftp/pub/ks.cfg
[root@pex-server ~]# vim /var/ftp/pub/ks.cfg
#Kickstart Configurator for CentOS 7 by Mine
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
#cdrom
# Install OS instead of upgrade
install
# Use network installation
url --url=ftp://192.168.159.142
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
#ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=cn --xlayouts='cn'
# System language
lang zh_CN.UTF-8
# Network information
#network  --bootproto=static --device=eth0 --gateway=10.0.0.254 --ip=10.0.0.100 --nameserver=223.5.5.5 --netmask=255.255.255.0 --activate 
#network  --bootproto=static --device=eth1 --ip=172.16.1.100 --netmask=255.255.255.0 --activate
network  --bootproto=dhcp --device=eth0 --onboot=off --ipv6=auto
network  --hostname=hostname

# Root password
rootpw --iscrypted $1$$GmbL3iXOMZR57QuGDLv.L1
#perl -e 'print crypt("123",q($1$)),"\n"' 使用的密码为123
# System timezone
timezone Asia/Shanghai --isUtc
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=lvm
# Partition clearing information
clearpart --all --initlabel
#clearpart --all --initlabel  擦除系统上原有所有分区;
#clearpart --none --initlabel  不移除任何分区		根据自己需求更改,还有其他参数




%packages
@^minimal
@core
kexec-tools
%end
selinux --disabled
%post
yum -y install wget
wget -r -c -nH -np ftp://192.168.1.168/jingshuo /jingshuo   #安装完成后要拷贝的文件
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
reboot
如果觉得系统默认自带的应答文件参数较少,不能满足生产环境的需求,则可以通过Yum软件仓库来安装system-config-kickstart软件包。这是一款图形化的Kickstart应答文件生成工具,可以根据自己的需求生成自定义的应答文件,然后将生成的文件放到/var/ftp/pub目录中并将名字修改为ks.cfg即可。

失败原因:

IP地址、路径错误——每次更换网络,需要更改IP地址,需要更改以下几个文件
每次更换网络,需要更改IP地址,需要更改以下几个文件
每次更换网络,需要更改IP地址,需要更改以下几个文件
每次更换网络,需要更改IP地址,需要更改以下几个文件
vim /etc/dhcp/dhcpd.conf
vim /var/lib/tftpboot/pxelinux.cfg/default
vim /var/ftp/pub/ks.cfg

虚拟机内存不足

服务未启动——每次修改配置文件,重启相应的服务

防火墙未关闭/或者未开启相应端口,建议关闭防火墙

下面是未关闭防火墙开放端口的策略
firewall-cmd --permanent --add-port=69/udp
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload 
setsebool -P ftpd_connect_all_unreserved=on

client客户端BIOS需要开启网卡唤醒功能

图形界面安装ks.cfg

[root@localhost  ]# yum install system-config-kickstart #下载自动安装软件
[root@localhost  ]# system-config-kickstart   #设置自动安装的选择
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$DhXSvWKU$SxZbvsr3MNKiisB8Pt9hw/
# System language
lang en_US
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text
firstboot --disable
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx


# Firewall configuration
firewall --disabled
# Network information
network  --bootproto=static --device=ens33 --gateway=192.168.1.1 --ip=192.168.1.10 --nameserver=192.168.1.1 --netmask=255.255.255.0
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="ftp://192.168.1.136/"
# System bootloader configuration
bootloader --location=none
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel

# Disk partitioning information
part / --fstype="ext4" --grow --size=1