Centos7如何实现PXE网络批量无人值守安装
PXE网络无人值守详细版
原理
客户端开机后会通过网络向DHCP服务器请求IP地址,并在获取IP地址的同时得到引导服务器的地址和tftp服务器地址。它会通过tftp服务向引导服务器发出请求,获取引导文件、菜单文件、内核驱动等文件并通过网络下载至本地内存展开成一个临时的装机系统,在装机时,会利用http共享的软件仓库并通过装机脚本来自动安装操作系统,将数据写入硬盘。在装机完成后,系统会自动重启。
1. 环境组成
操作系统:CentOS Linux release 7.6.1810
服务器端需要
dhcp:配置网络参数,tftp服务器地址,引导文件名称
TFTP:引导文件,菜单文件,内核和驱动文件系统
fttpd:系统镜像放到软件仓库中,和装机模块(装机脚本)kickstart
客户端需要 2个g以上的内存
2. 防护关闭
#关闭SELinux和Firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
systemctl stop firewalld.service
systemctl disable firewalld.service
3. 软件安装
安装软件:httpd、dhcp、tftp-server、syslinux、system-config-kickstart(图形界面安装需要)
yum -y install httpd dhcp tftp-server syslinux system-config-kickstart
4. 客户端问题总结和详细步骤
1. DHCP服务配置
客户端找不到dhcp
到dhcp主配置文件中
将next-server IP 下一步到这个主机中 IP为本机IP或需要到那个主机上获取的
filename “pxelinux.0” 获取文件到的引导文件
cp -a /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
subnet 192.168.00.0 netmask 255.255.255.0 {
range 192.168.00.00 192.168.00.00;
option domain-name-servers 8.8.8.8;
option routers 192.168.00.2;
default-lease-time 600;
max-lease-time 7200;
next-server 192.168.00.00; #填写tftp服务器IP地址
filename "pxelinux.0"; #填写引导文件名称
}
systemctl start dhcpd
systemctl enable --now dhcpd #开启开机自启动
2. http服务配置(利用http实现光盘共享)
在http的网页共享目录下创建新目录,并将光盘挂载到此目录,实现光盘内容共享,主要目的是操作系统安装的最后一个步骤需要安装软件。
mkdir /var/www/html/centos7
mount /dev/sr0 /var/www/html/centos7/
#启动httpd服务,并设置开启自启动
systemctl enable --now httpd
3. tftp服务配置
客户端显示
PXE-E32: TFTP open timeout
为没有服务器端没有TFTP
yum -y install tftp-server ##安装tftp
#配置xinetd服务下的tftp服务
vim /etc/xinetd.d/tftp ##在7版本中虽然将管理权限交还给了systemd但是配置文件还是在这里
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot 这里为共享目录位置
disable = no ##设置为no时可以开机自启动
per_source = 11
cps = 100 2
fiags = IPV4
}
systemctl start tftp.socket
systemctl enable --now tftp.socket #开启开机自启动 这里tftp.socket会去启动tftp.service
4. 编写引导安装相关文件,放到指定位置
找不到引导文件 PXE-E53: No hoot filename received
找不到菜单文件 导入必要文件到指定位置(内核文件、引导菜单文件)
找不到启动图形化菜单文件
4.1 tftp需要共享的文件
- 引导文件 - pxelinux.0
- 引导菜单 - default{isolinux.cfg} – 开机后选择启动项的菜单文{该文件存放在一个叫:pxelinux.cfg的目录下}
- 内核文件 - vmlinuz initrd.img
4.2 导入必要文件到指定位置(内核文件、引导菜单文件)
yum -y install syslinux ##安装这个可以有pxelinux.0这个文件
cp -a /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #引导文件
cp -a /var/www/html/centso7/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/
#用来辅助完成菜单的显示
cp -a /var/www/html/centso7/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
#用来预加载的内核和驱动文件,然后使用预加载内核进行系统安装
ls /var/lib/tftpboot/ #查看文件
4.3 复制并编写引导菜单文件
mkdir /var/lib/tftpboot/pxelinux.cfg/
find / -name "isolinux" #查找isolinux
cp -a /var/www/html/centso7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
#引导菜单文件,复制并改名产生
vim /var/lib/tftpboot/pxelinux.cfg/default
#修改如下配置文件
default vesamenu.c32
timeout 300
display boot.msg
menu background splash.png
label linux
menu label install CentOS 7 by Kickstart
menu default #设置默认菜单
kernel vmlinuz ##内核
append initrd=initrd.img inst.repo=http://192.168.88.110/centos7 inst.ks=http://192.168.88.110/ks_config/centos7.cfg
#软件仓库地址
menu end
4.4 创建并编写无人值守安装脚本文件
mkdir /var/www/html/ks_config
vim /var/www/html/ks_config/centos7.cfg
#装机脚本(需要修改)
#version=DEVEL
auth --enableshadow --passalgo=sha512
url --url=http://192.168.88.110/centos7/
graphical
firstboot --enable
ignoredisk --only-use=sda
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network --bootproto=dhcp --device=ens33 --onboot=on --ipv6=auto --no-activate
network --hostname=localhost.localdomain
rootpw --iscrypted $6$LO0oxqvmJfQOFW7p$cgV.4sVUp7UgEDSwUToHSIhRCmX4ETF2S/CoRmhnf.NHkCJvS1.Or8HENDSPkCrfnCgUlnVdxNWR0iK20GZF70
firewall --disabled
selinux --disabled
services --disabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
clearpart --none --initlabel
part /boot --fstype="xfs" --ondisk=sda --size=1024
part swap --fstype="swap" --ondisk=sda --size=2048
part / --fstype="xfs" --ondisk=sda --grow --size=1
%packages
@^web-server-environment
@base
@core
@web-server
kexec-tools
gcc
lrzsz
mariadb-server
mariadb
%end
reboot
脚本文件解释
#version=DEVEL
auth --enableshadow --passalgo=sha512 ##加密算法
url --url=http://192.168.88.110/centos7/ ##安装使用的安装介质
graphical ##图形化安装,不是安装图形化
firstboot --enable ##忽略掉磁盘上的数据
ignoredisk --only-use=sda
keyboard --vckeymap=us --xlayouts='us' ##设置键盘类型
lang en_US.UTF-8
network --bootproto=dhcp --device=ens33 --onboot=on --ipv6=auto --no-activate ##IP地址的获取方式
network --hostname=localhost.localdomain ##主机名
rootpw --iscrypted $6$LO0oxqvmJfQOFW7p$cgV.4sVUp7UgEDSwUToHSIhRCmX4ETF2S/CoRmhnf.NHkCJvS1.Or8HENDSPkCrfnCgUlnVdxNWR0iK20GZF70 ##root用户的密码
firewall --disabled
selinux --disabled
services --disabled="chronyd"
xconfig --startxonboot ##安装图形化的界面,并设置为开机自启
timezone Asia/Shanghai --isUtc --nontp ##清理分区和引导手动分区
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
clearpart --none --initlabel
part /boot --fstype="xfs" --ondisk=sda --size=1024
part swap --fstype="swap" --ondisk=sda --size=2048
part / --fstype="xfs" --ondisk=sda --grow --size=1 ##--grow --size=1为剩下所有分给根
%packages
@^web-server-environment ##安装web相关的软件
@^gnome-desktop-environment #添加桌面模式
@base
@core
@web-server
kexec-tools
gcc
lrzsz
mariadb-server
mariadb
@x11 x windows的版本
@office-suite 办公软件
%end
%post --interpreter=bash 声明解释器
需要执行的脚本
%end
reboot
批量安装效果验证
- 客户端会自动装机
需求二:在安装后,能不能顺便执行脚本配置某些参数{yum源案例}
vim /var/www/html/ks_config/centos7.cfg
%post --interpreter=bash #post表示在服务启动之后运行
cd /etc/yum.repos.d/
mkdir bak
mv C* bak/
echo "[centos7]
name=centos7 repo for kickstart
baseurl=http://192.168.88.110/centos7
enable=1
gpgcheck=0" >> CentOS-Media.repo
%end
需求三:在安装过程中,添加一个普通用户(一般安装桌面版操作系统时需要)
vim /var/www/html/ks_config/centos7.cfg
user --name=hongfuedu --password=$6$08xNwgwvXHCC/W8J$Sa3I0sd832pCk/M1Dr.os.1P6qFErIb5I3Okm0G7a9P0PaeHQnYKxOHMcZ1OeumLmYshQJaAurdxNJGZdKyD90 --iscrypted --gecos="hongfuedu"
#生成上述的密文密码可以使用以下命令:借助python命令完成
python -c 'import crypt; print(crypt.crypt("your_password", crypt.mksalt(crypt.METHOD_SHA512)))'