本文已参与「新人创作礼」活动,一起开启掘金创作之路。
使用PXE+kickstart无人值守安装服务
使用光盘镜像来安装Linux系统的方法,该方法适用于只安装少量Linux系统的情况。如果生产环境中有数百台服务器都需要安装系统,这种方式就不合时宜了。这时,我们就需要使用PXE + TFTP + vsftpd + DHCP + Kickstart服务搭建出一个无人值守安装系统。这种无人值守安装系统可以自动地为数十台服务器安装系统,这一方面将运维人员从重复性的工作中解救出来,也大大提升了系统安装的效率。
PXE(Preboot eXecute Environment,预启动执行环境)是由Intel公司开发的技术,可以让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持PXE技术),主要用于在无人值守安装系统中引导客户端主机安装Linux操作系统。Kickstart是一种无人值守的安装方式,其工作原理是预先把原本需要运维人员手工填写的参数保存成一个ks.cfg文件,当安装过程中需要填写参数时则自动匹配Kickstart生成的文件。所以只要Kickstart文件包含了安装过程中需要人工填写的所有参数,那么从理论上来讲完全不需要运维人员的干预。
服务端ip:
pex-server:192.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