实现PXE无人值守自动安装CentOS 7

本文按照操作步骤一步一步教你如何制作可以在n台客户端直接安装linux CentOS 7:
  首先来检查一下防火墙和selinux是否开启,如有开启需要关闭,不然会对接下来设置dhcp等服务产生影响。

# getenforce
# vim /etc/selinux/config
# setenforce 0
# firewall-cmd --state
# systemctl stop firewalld
# systemctl disable firewalld



我们要实现的是在没有光盘,仅有局域网的情况下,实现无人值守安装,那就需要解决如下问题:

  • 内网文件服务器搭建 (dhcp服务器、tftp服务器)
  • 自动交互应答文件
  • 启动引导盘
     $emsp;既然用网络,那新系统安装的时候就需要有IP能够获取服务器中的内容,所以需要搭建一个dhcp服务器来自动分配IP,也包括安装后自动分配IP;而安装过程中一些引导文件需要从服务器上拷贝到客户端,所以又需要用到ftp或者tftp,ftp可以用来进行文件传输,而tftp可以理解为精简版的ftp,而PXE就内置了tftp客户端,现在的网卡基本上都支持PXE,所以这里我们需要搭建一个tftp的服务端。
    我们先来安装相应包:dhcp、tftp-server、syslinux
    # yum install -y dhcp tftp-server syslinux httpd
    装好后配置dhcp服务器,编辑配置文件/etc/dhcp/dhcpd.conf,这个文件默认为空,看提示说可以参考例子,那我们就删除原文件,把这个文件复制过来修改。
# rm -f /etc/dhcp/dhcpd.conf
# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
# vim /etc/dhcp/dhcpd.conf

对配置文件进行编辑,修改如下:指定子网段,默认网关,子网掩码、tftp服务器地址等。
注:我这台机器的地址是192.168.10.3

dhcp配置文件修改好了,接下来配置系统安装rpm包时需要的yum源,这里利用httpd服务,默认的端口是80,工作目录为/var/www/html/,创建一个目录,从这台机器的光盘中挂载,或者利用xshell的工具从windows上拷贝一个ISO镜像也可以。

# mkdir -pv /var/www/html/CentOS7/os/x86_64
# mount /data/CentOS-7-x86_64-DVD-1810.iso /var/www/html/CentOS7/os/x86_64/

将服务加入开机自启,并启动服务,用ss查看端口开启情况,其中dhcp对应67,tftp对应69,http对应80端口:

#  systemctl enable httpd dhcpd tftp.socket
# systemctl start httpd dhcpd tftp.socket
# ss -ntul


在浏览器中输入“http://192.168.10.3/CentOS7/os/x86_64/”应该可以看到如下内容

centos7安装的时候有很多交互式操作,而在我们装完系统后的/root/目录下有个anaconda-ks.cfg文件,该文件就记录了该系统需要安装哪些包,设置哪几个用户、创建分区等一系列配置。我们可以将这个文件复制过来直接修改,也可以安装system-config-kickstart在图形化界面配置来生成.cfg文件。
注:kickstart需要在图形化界面运行,如果你是用ssh远程的话,要用ssh -X,或者转到机器的图形界面上运行也可以。

# yum -y install system-config-kickstart
# system-config-kickstart

会跳出来这样一个界面,编辑好后电子左上角的File将文件保存。

这里我是将原来系统的做了修改,贴一下带桌面的:

auth --enableshadow --passalgo=sha512
url --url=http://192.168.10.3/CentOS7/os/x86_64/
text
firewall --disabled
selinux --disabled
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 3 B K 1. z B d N G D T 0 k E 3 3BK1.zBdNGDT0kE3 3BK1.zBdNGDT0kE3okZXK4Yo/v54k4YtEm6S8Q4OanVpUUmE6c6uvzCxBJA91PKyGUWnGTWF1pB3IsHY6UTtmzuPWBzBxbUDl4UE1/
services --disabled=“chronyd”
timezone Asia/Shanghai --isUtc --nontp --ntpservers=0.centos.pool.ntp.org,1.centos.pool.ntp.org,2.centos.pool.ntp.org,3.centos.pool.ntp.org
user --name=yiyu --password= 6 6 6tAjQUpls0Nz/Hldc$D7VThFMukV4G4vxOPQQbOHjM0chD1K.bxcupl3nx0b2BRSpk6POtoKEF4EHQjGkGmMtx3692SQb.A9TwhOV8C/ --iscrypted --gecos=“yiyu”
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
clearpart --none --initlabel
zerombr
part swap --fstype=“swap” --ondisk=sda --size=2048
part /boot --fstype=“xfs” --ondisk=sda --size=500
part / --fstype=“xfs” --ondisk=sda --size=10240
part /data --fstype=“xfs” --ondisk=sda --size=1024
reboot
%packages
@^graphical-server-environment
@base
@core
@desktop-debugging
@dial-up
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@hardware-monitoring
@input-methods
@internet-browser
@multimedia
@print-client
@x11
autofs
%end
%addon com_redhat_kdump --enable --reserve-mb=‘auto’
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
%post
systemctl enable autofs
systemctl disable initial-setup.service
systemctl set-default multi-user.target
mkdir /root/.ssh
cat > /root/.ssh/authorized_keys < ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCpHJMehlJwlZIOG5O77E08ME1PTagh7IcM/lH22kHdXpz/VAlGfyB+n6JvtdLxyBmZy1imcCrzbszf6TCCGAgXO9FjtZ93KwaeI30TL0+7ErtBKLrFeUWiFzOV61npiG2/qkQaLiLPGpMuFrdCgVhw5mIuFAlXfiVCfEzIvDXjz2Clqh82WV6xzh13o/rMnMPJ3YnLkHdbrgbKGdIU4R6oCy5hYXPwmFbpFH9/yt/yxIkURIasM8koXRx+oaUlBKQSS9DYmHxLknTGOoY7tOc0Ez7zMS1aT76hK0bdEEuzHC0hEGVlFfhBSrSLltbdl9DGiZgG26zFtiYyFRh02BUZ [email protected]
EOF
rm -rf /etc/yum.repos.d/*
cat > /etc/yum.repos.d/base.repo < [base]
name=base
baseurl=http://192.168.10.3/CentOS7/os/x86_64/
gpgcheck=0
EOF
%end

最后面增加了yum源和本机基于key验证的公钥。将此文件拷贝到http的工作目录,并给文件增加可读权限。:

# mkdir /var/www/html/CentOS7/kscfg/
# cp CentOS7.cfg /var/www/html/CentOS7/kscfg/
# cp CentOS7-minimal.cfg /var/www/html/CentOS7/kscfg/
# chmod +r /var/www/html/CentOS7/kscfg/CentOS7.cfg
# chmod +r /var/www/html/CentOS7/kscfg/CentOS7-minimal.cfg

注:用system-config-kickstart配置anaconda-ks.cfg文件时,如果package包加载不出来,可将本地yum源的[]中的内容改为development。

如果是minimal安装上面文件只需修改%packages中内容

安装引导界面的配置文件做好了,接下来准备PXE安装的相关文件,也就是上面next-server中的文件了。
tftp的工作目录默认在/var/lib/tftpboot/下,将内核启动的相关引导文件放到这个目录下,我是挂载了个光盘,所以从光盘拷,也开业从上面挂载的/var/www/html/CentOS7/中拷贝。

# mkdir /var/lib/tftpboot/pxelinux.cfg/
# cp /usr/share/syslinux/{menu.c32,pxelinux.0} /var/lib/tftpboot/
# cp /media/cdrom/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

其中vmlinuz、initrd.img是BootLoader启动的必要文件,这里就不再细说了,相信大家都有了解,现在可以用tree看一下文件是否齐全

最后再来制作启动菜单,这是最后一步了:
编辑上一步拷贝过来的/var/lib/tftpboot/pxelinux.cfg/default文件
贴一下:

default menu.c32
timeout 600
menu title CentOS 7.6 auto-installation
label minimal
menu label Auto Install ^Minimal CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.10.3/CentOS7/kscfg/CentOS7-minimal.cfg
label desktop
menu label Auto Install ^Graphic CentOS 7
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.10.3/CentOS7/kscfg/CentOS7.cfg
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
menu end

好了,制作完毕,可以新建虚拟机去测试了:
注:我这里设置的内网dhcp,所以这里选和刚刚制作机器同样的网络模式:仅主机。


启动菜单是这个样子,因为上面把默认的背景换掉了。

补充:我这个在启动的时候报了2个错,一个是老卡在这里不动,然后服务器那边会卡的死机,后来我把服务器内存加到大2G(原来为1G,毕竟贫民,笔记本配置不行啊T^T)就可以了,界面是这个样子的

另一个错就是这里走下去后,dracut出现timeout

按照提示看了下日志文件,又执行# ksvalidator /var/www/html/CentOS7/kscfg/CentOS7.cfg检查了语法,
两个文件在这里都报错了

28行原内容是这样子的:

28 timezone Asia/Shanghai --isUtc --nontp --ntpservers=0.centos.pool.ntp.org,1.centos.pool.ntp.org,2.centos.pool.ntp.org,3.centos.pool.ntp.org

估计是这里的ntpservers的设置问题,把后面这里删掉,只留下

timezone Asia/Shanghai

再检查语法就没有问题了,然后再重新启动客户端。发现这个问题还在,会一直卡在这里,后来我把要安装的虚拟机的运行内存加大到2G后就么问题了。

你可能感兴趣的:(linux)