pxe工具可以实现全自动的安装配置好一台主机,例如本次实验中的新建虚拟机不用手动装载镜像只需设为自动检测,并加装上一张对应配置的dhcp地址的网段网卡。便可以实现一个空壳虚拟机自动安装系统并配置网络地址成为一台可用的主机。
本次实验环境使用的是centos7.2系统,不过制作出来的脚本文件是通用的。比如在centos7.4系统中同样可以使用,只需对应修改网卡名称地址以及镜像文件名称即可。
我们需要配置一台母机出来,实现一键部署需要的相关内容都会在这台母机上配置完毕。这样母机就能源源不断的产生出其他新机。
首先本次实验环境仅需用到一张仅主机模式的网卡
地址是可以根据自己的需求喜好变动的,但是脚本里的ip地址内容也要跟着变动就是了。
然后我们先自己使用vm虚拟机手动安装好一台centos7.2的系统主机,ip地址直接dhcp自动分配或者自己手动配置也行。只要后面能用ssh远程连接软件连接上就行。
安装完毕进到系统里面先使用ip a命令查看一下地址。
我这里不知道为什么网口是关的,所以我要进到这个网卡配置文件里面改一下启动参数。no改为yes然后:wq!保存退出即可。
再用命令重启网络服务,就可以看到分配的地址为128。
接着使用一些ssh远程连接软件连接上这台主机,便与我们上传脚本文件。
没做ssh免密的话是要输入一下你这台虚拟机的密码的,我这边是已经输入密码登录进来了。
然后一般都会有个可以上传浏览文件的地方比如这个:(不同软件不一样,但是肯定都有)
正好显示现在这台虚拟机root目录下的文件。
将我们的脚本文件以及镜像文件上传到这台虚拟机上
直接鼠标点住拖动到这个浏览文件界面就行或者上面有个⬆键按钮点击就可以选择需要上传的文件。
当然你也可以头铁选择直接在vm虚拟机里面手敲好这些代码。
反正我是建议将代码内容拷贝到txt文本文件上。然后再把txt后缀格式改成sh文件或者直接在这个ssh登录界面上使用vi命令创建pxe.sh文件然后拷贝代码内容进去。
脚本代码内容如下,可以根据自己的需求对里面的一些ip地址,镜像文件等等进行修改。
如果对很多东西不是很理解,想单纯抄作业做一下看看。那就跟我的实验环境一模一样,ip网段(10.1.0.0网段)还有镜像文件CentOS-7-x86_64-DVD-1511(就是centos7.2)。网卡对应配置文件名称(ifcfg-eno16777736)。
#!/bin/bash echo "10.1.0.10 pxe" >> /etc/hosts # 创建部署目录 mkdir -p /opt/centos mount /dev/cdrom /opt/centos read -p "已完成创建部署目录,按回车继续..." # 创建本地yum源配置文件 mv /etc/yum.repos.d/* /home cat << EOF > /etc/yum.repos.d/local.repo [centos] name=centos baseurl=file:///opt/centos gpgcheck=0 enabled=1 EOF read -p "已创建本地yum源配置文件,按回车继续..." # 检查源 yum clean all yum repolist read -p "已检查源,按回车继续..." # 配置网络接口 cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME=eno16777736 DEVICE=eno16777736 ONBOOT=yes IPADDR=10.1.0.10 NETMASK=255.255.255.0 GATEWAY=10.1.0.2 DNS1=10.1.0.2 EOF read -p "已配置网络接口,按回车继续..." # 启动并启用网络接口 systemctl restart network read -p "已启动并启用网络接口,按回车继续..." # 将主机名修改为 "pxe" hostnamectl set-hostname pxe read -p "已将主机名修改为 'pxe',按回车继续..." # 更新系统软件包 yum update -y --skip-broken read -p "已更新系统软件包,按回车继续..." # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld read -p "已关闭防火墙,按回车继续..." # 安装所需软件包 yum install -y tftp-server syslinux httpd dhcp read -p "已安装所需软件包,按回车继续..." # 卸载光盘 umount /opt/centos read -p "已卸载光盘,按回车继续..." # 配置 DHCP 服务器 cat << EOF > /etc/dhcp/dhcpd.conf authoritative; ddns-update-style none; subnet 10.1.0.0 netmask 255.255.255.0 { range 10.1.0.50 10.1.0.100; option domain-name-servers 10.1.0.2; option routers 10.1.0.2; option broadcast-address 10.1.0.255; default-lease-time 600; max-lease-time 7200; filename "pxelinux.0"; } EOF read -p "已配置DHCP服务器,按回车继续..." # 启动并启用 DHCP 服务器 systemctl start dhcpd systemctl enable dhcpd read -p "已启动并启用DHCP服务器,按回车继续..." # 配置 TFTP 服务器 mkdir -p /var/lib/tftpboot cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/ cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ # 复制vmlinuz和initrd.img文件 if [ -f /root/CentOS-7-x86_64-DVD-1511.iso ]; then mount -o loop /root/CentOS-7-x86_64-DVD-1511.iso /mnt cp /mnt/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/ umount /mnt else echo "未找到CentOS-7-x86_64-DVD-1511.iso镜像文件,请确认路径是否正确。" exit 1 fi cat > /var/www/html/ks.cfg << EOF # 系统语言 lang en_US # 安装语言 keyboard us # 安装介质 cdrom # 系统时区 timezone Asia/Shanghai # 使用网络安装 url --url=http://10.1.0.10/CentOS-7-x86_64-DVD-1511 # root密码 rootpw --plaintext 000000 # 自动安装配置 autopart --type=plain # 使用默认分区方案 bootloader --location=mbr # 安装引导程序到 MBR zerombr # 清除磁盘主引导记录 clearpart --all --initlabel # 清除磁盘分区表 # 防火墙配置 firewall --disabled # Selinux配置 selinux --disabled # 安装后重新启动系统 reboot # 初始用户 user --name=wangle --password=000000 # 系统安装 text ignoredisk --only-use=sda %packages @^minimal @core %end EOF # 重启 TFTP 服务器 systemctl restart tftp read -p "已配置TFTP服务器并编写ks.cfg,文件按回车继续..." # 配置 PXE 引导配置文件 mkdir -p /var/lib/tftpboot/pxelinux.cfg cat << EOF > /var/lib/tftpboot/pxelinux.cfg/default default menu.c32 prompt 0 timeout 30 MENU TITLE PXE Boot Menu LABEL CentOS7_x86_64 MENU LABEL ^Install CentOS 7 x86_64 KERNEL vmlinuz APPEND initrd=initrd.img inst.repo=http://10.1.0.10/CentOS-7-x86_64-DVD-1511 ks=http://10.1.0.10/ks.cfg EOF read -p "已创建PXE引导配置文件,按回车继续..." # 配置 HTTP 服务器 mkdir -p /var/www/html/CentOS-7-x86_64-DVD-1511 mount -o loop /root/CentOS-7-x86_64-DVD-1511.iso /var/www/html/CentOS-7-x86_64-DVD-1511 read -p "已配置HTTP服务器,按回车继续..." # 启动并启用 HTTP 服务器 systemctl start httpd systemctl enable httpd read -p "已启动并启用HTTP服务器,按回车继续..." # 重启 TFTP 服务器 systemctl restart tftp # 清理并重启系统网络服务 systemctl restart network echo "PXE 服务部署完成!"
既然我们已经上传(制作)好了这个脚本文件。那接着我们对其使用命令赋予执行权限再运行它就ok了。
如果你的网卡网络ip地址对不上脚本里面配置修改的网卡ip地址,则会导致脚本跑到修改网络接口的地方就让ssh远程连接断掉了。所以要么设置的网络ip地址一样来跑,要么就是直接在虚拟机上跑。
我这边就是跑了ip被换ssh断掉了,然后我再新开了一个对应地址的ssh连接重新再跑一遍给各位看。
如果出现这种情况,则本地yum仓库源会配置不成功,会导致后面的一些软件服务安装失败。
因此我们需要重新导入一下镜像源或者查看是否勾选连接镜像源选项,到这台虚拟机的设置界面查看。右键找到设置选项。
勾选上连接设备状态,点击浏览重新导入一次centos7.2的镜像,导入完毕后再重启一下虚拟机。
我们再去跑一下脚本就可以完美运行至完毕啦。
[root@pxe ~]# ./pxe2.sh mount: /dev/sr0 写保护,将以只读方式挂载 已完成创建部署目录,按回车继续... 已创建本地yum源配置文件,按回车继续... 已加载插件:fastestmirror 正在清理软件源: centos Cleaning up everything 已加载插件:fastestmirror centos | 3.6 kB 00:00:00 (1/2): centos/group_gz | 155 kB 00:00:00 (2/2): centos/primary_db | 2.8 MB 00:00:00 Determining fastest mirrors 源标识 源名称 状态 centos centos 3,723 repolist: 3,723 已检查源,按回车继续... 已配置网络接口,按回车继续... 已启动并启用网络接口,按回车继续... 已将主机名修改为 'pxe',按回车继续... 已加载插件:fastestmirror Loading mirror speeds from cached hostfile No packages marked for update 已更新系统软件包,按回车继续... 已关闭防火墙,按回车继续... 已加载插件:fastestmirror Loading mirror speeds from cached hostfile 正在解决依赖关系 --> 正在检查事务 ---> 软件包 dhcp.x86_64.12.4.2.5-42.el7.centos 将被 安装 ---> 软件包 httpd.x86_64.0.2.4.6-40.el7.centos 将被 安装 --> 正在处理依赖关系 httpd-tools = 2.4.6-40.el7.centos,它被软件包 httpd-2.4.6-40.el7.centos.x86_64 需要 --> 正在处理依赖关系 /etc/mime.types,它被软件包 httpd-2.4.6-40.el7.centos.x86_64 需要 --> 正在处理依赖关系 libaprutil-1.so.0()(64bit),它被软件包 httpd-2.4.6-40.el7.centos.x86_64 需要 --> 正在处理依赖关系 libapr-1.so.0()(64bit),它被软件包 httpd-2.4.6-40.el7.centos.x86_64 需要 ---> 软件包 syslinux.x86_64.0.4.05-12.el7 将被 安装 --> 正在处理依赖关系 mtools,它被软件包 syslinux-4.05-12.el7.x86_64 需要 ---> 软件包 tftp-server.x86_64.0.5.2-12.el7 将被 安装 --> 正在检查事务 ---> 软件包 apr.x86_64.0.1.4.8-3.el7 将被 安装 ---> 软件包 apr-util.x86_64.0.1.5.2-6.el7 将被 安装 ---> 软件包 httpd-tools.x86_64.0.2.4.6-40.el7.centos 将被 安装 ---> 软件包 mailcap.noarch.0.2.1.41-2.el7 将被 安装 ---> 软件包 mtools.x86_64.0.4.0.18-5.el7 将被 安装 --> 解决依赖关系完成 依赖关系解决 ================================================================================================================ Package 架构 版本 源 大小 ================================================================================================================ 正在安装: dhcp x86_64 12:4.2.5-42.el7.centos centos 511 k httpd x86_64 2.4.6-40.el7.centos centos 2.7 M syslinux x86_64 4.05-12.el7 centos 990 k tftp-server x86_64 5.2-12.el7 centos 44 k 为依赖而安装: apr x86_64 1.4.8-3.el7 centos 103 k apr-util x86_64 1.5.2-6.el7 centos 92 k httpd-tools x86_64 2.4.6-40.el7.centos centos 82 k mailcap noarch 2.1.41-2.el7 centos 31 k mtools x86_64 4.0.18-5.el7 centos 203 k 事务概要 ================================================================================================================ 安装 4 软件包 (+5 依赖软件包) 总下载量:4.7 M 安装大小:14 M Downloading packages: ---------------------------------------------------------------------------------------------------------------- 总计 15 MB/s | 4.7 MB 00:00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安装 : apr-1.4.8-3.el7.x86_64 1/9 正在安装 : apr-util-1.5.2-6.el7.x86_64 2/9 正在安装 : httpd-tools-2.4.6-40.el7.centos.x86_64 3/9 正在安装 : mtools-4.0.18-5.el7.x86_64 4/9 正在安装 : mailcap-2.1.41-2.el7.noarch 5/9 正在安装 : httpd-2.4.6-40.el7.centos.x86_64 6/9 正在安装 : syslinux-4.05-12.el7.x86_64 7/9 正在安装 : 12:dhcp-4.2.5-42.el7.centos.x86_64 8/9 正在安装 : tftp-server-5.2-12.el7.x86_64 9/9 验证中 : httpd-2.4.6-40.el7.centos.x86_64 1/9 验证中 : httpd-tools-2.4.6-40.el7.centos.x86_64 2/9 验证中 : apr-1.4.8-3.el7.x86_64 3/9 验证中 : mailcap-2.1.41-2.el7.noarch 4/9 验证中 : apr-util-1.5.2-6.el7.x86_64 5/9 验证中 : tftp-server-5.2-12.el7.x86_64 6/9 验证中 : mtools-4.0.18-5.el7.x86_64 7/9 验证中 : 12:dhcp-4.2.5-42.el7.centos.x86_64 8/9 验证中 : syslinux-4.05-12.el7.x86_64 9/9 已安装: dhcp.x86_64 12:4.2.5-42.el7.centos httpd.x86_64 0:2.4.6-40.el7.centos syslinux.x86_64 0:4.05-12.el7 tftp-server.x86_64 0:5.2-12.el7 作为依赖被安装: apr.x86_64 0:1.4.8-3.el7 apr-util.x86_64 0:1.5.2-6.el7 httpd-tools.x86_64 0:2.4.6-40.el7.centos mailcap.noarch 0:2.1.41-2.el7 mtools.x86_64 0:4.0.18-5.el7 完毕! 已安装所需软件包,按回车继续... 已卸载光盘,按回车继续... 已配置DHCP服务器,按回车继续... Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service. 已启动并启用DHCP服务器,按回车继续... mount: /dev/loop0 写保护,将以只读方式挂载 已配置TFTP服务器并编写ks.cfg,文件按回车继续... 已创建PXE引导配置文件,按回车继续... mount: /dev/loop0 写保护,将以只读方式挂载 已配置HTTP服务器,按回车继续... Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service. 已启动并启用HTTP服务器,按回车继续... PXE 服务部署完成! [root@pxe ~]#
到此,我们母机完全配置完毕了。其实非常简单,但是因为怕初学者不理解出错,所以说了不少有的没的。
接着我们准备空壳测试机,在vm虚拟机软件左上角文件新建虚拟机,步骤跟安装centos7.2系统一样。但是我们在创建完毕后不要去导入镜像。如下:
直接启动虚拟机即可,如果出现无法连接什么虚拟机设备啥的你直接点击是或者否直接叉掉都行。
这是因为我们没有导入镜像源导致的,但是PXE本来就不需要手动导入镜像源。
在启动虚拟机后的短暂几秒内,我们就会发现正在dhcp自动查找地址了。
随后就进入到了我们的PXE启动菜单,里面正是只有一个我们存放的centos7.2镜像,所以只有一个安装centos7的选项。
这期间全程摆烂不用动,可以看着它一步一步自己配置好。我这份脚本的代码下面给的参数是以文本行形式安装,因此整个安装过程都看不到之前安装系统的那种图形化界面。如果喜欢图形化界面就自己将脚本代码那部分内容参数修改一下。
安装完毕以后会发现dhcp自动分配的地址对不上我们在母机DHCP服务器配置的50-100,反而是129。
仔细回想一下我一开始母机的ip地址是用dhcp自动分配的,当时给的是128。相信我说到这里有人已经知道原因了,那就是被我们的vm虚拟机给限制了。在虚拟网络编辑器中将我们对应网段的主机模式网卡的使用本地dhcp地址分配虚拟机选项给勾掉就好了。
然后重启一下test虚拟机,ip a查看一下地址,如果没出现地址就用systemctl restart network命令重启网络服务再ip a。此时就会发现dhcp给的地址符合我们母机的范围了。
至此使用脚本一键搭建pxe工具批量部署服务器的实验完成!