通过PXE实现网络批量安装系统
一、前言
PXE引导需要通过服务器硬件的固件来实现。具体操作方法可以参考硬件的使用手册,本文内容以部署网络安装服务的基础环境进行讲解。
部署PXE网络安装前,我们需要了解在这个过程中我们会用到的几个服务:首先是DHCP服务,这个服务为来自PXE的网络请求分配IP地址,后续的网络连接会通过这个IP地址进行网络通信。
其次会用到TFTP服务,这个服务用来传输安装引导所需要的文件,实现通过网络引导进入操作系统安装界面。
最后是Web服务,被安装主机通过HTTP协议从Web服务器下载安装系统所需要的各种软件包,进行操作系统安装。
本文以同一台设备同时部署DHCP、TFTP及WEB服务为例进行讲解,本机的IP地址设置为192.168.10.254/24,使用192.168.10.0/24这个网段 。
二、DHCP服务部署 ()
使用yum工具安装dhcp软件包,如果您的环境无法联网,可以使用操作系统安装光盘来配置yum源地址,避免安装过程遇到软件包相互依赖导致安装失败的问题。
| # yum install dhcp syslinux |
修改DHCP服务配置/etc/dhcp/dhcpd.conf配置文件如下:
配置文件中定义了自动获取的IP地址池范围是192.168.10.100到192.168.10.200,并且在获得IP地址后会访问192.168.10.254。DHCP服务根据来自PXE的申请自动判断引导类型,自动选择UEFI引导加载 bootx64.efi 文件,或者 Legacy 引导加载 pxelinux/pxelinux.0 文件。
启动DHCP服务,并设置开机自动启动:
| # systemctl restart dhcpd ; systemctl enable dhcpd |
三、TFTP服务部署,(tftp,xinetd可能需要在线安装)
使用yum工具安装tftp服务:
| # yum install tftp-server xinetd |
修改/etc/xinetd.d/tftp文件,我们需要将这个文件中 disable 的设置修改为no:
| # default: off
# description: The tftp server serves files using the trivial file transfer \ # protocol. The tftp protocol is often used to boot diskless \ # workstations, download configuration files to network-aware printers, \ # and to start the installation process for some operating systems. service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 } |
启动xinted服务,并将该服务设置为开机自动启动:
| # systemctl restart xinetd ; systemctl enable xinetd |
TFTP服务安装后,会创建/var/lib/tftpboot目录,我们需要把引导过程用到的文件复制到这个目录中,在客户端获得IP信息后,会通过TFTP访问该目录内容并下载文件,引导进入操作系统安装界面:
/var/lib/tftpboot/grub.cfg文件对应EFI的引导方式,这个文件的内容如下:
| set timeout=60
menuentry ‘Install Kylin Linux Advanced Server V10′ { linuxefi /images/vmlinuz ip=dhcp inst.repo=http://192.168.10.254/ky10 initrdefi /images/initrd.img } |
/var/lib/tftpboot/pxelinux/pxelinux.cfg/default文件对应Legacy的引导方式,这个文件的内容如下:
| default vesamenu.c32
timeout 600 display boot.msg label linux menu label ^Install Kylin Linux Advanced Server V10 menu default kernel vmlinuz append initrd=initrd.img ip=dhcp inst.repo=http://192.168.10.254/ky10 label vesa menu label Install Kylin Linux Advanced Server V10 in ^basic graphics mode kernel vmlinuz append initrd=initrd.img ip=dhcp inst.xdriver=vesa nomodeset inst.repo=http://192.168.10.254/ky10 |
四、WEB服务部署
安装WEB服务:
| # yum install httpd |
创建KY10目录用于提供中标麒麟高级服务器操作系统KY10安装介质的HTTP访问:
| # mkdir -p /var/www/html/ky10 |
准备WEB服务所需要用到的数据文件。这里我们提供了三种方式,分别是复制光盘数据到本地磁盘、直接挂载光盘到指定目录及直接挂载ISO文件到指定目录:
| 挂载光盘到/mnt目录
# mount /dev/sr0 /mnt 复制数据到/var/www/html/KY10目录 # shopt -s dotglob # cp -avRf /mnt/* /var/www/html/ky10 |
| 或者使用下面方式,直接将光盘挂载到/var/www/html/ky10
# mount /dev/sr0 /var/www/html/ky10 |
| 如果使用的是ISO文件,可以这样挂载,请根据实际情况调整ISO文件路径: |
五、kickstart R系自动应答安装
/root/initial-setup-ks.cfg
六、防火墙设置
默认情况下,系统会开启防火墙设置,我们为了使上面的服务正常对外提供响应,需要开放下列端口号:
- DHCP服务67/UDP
- TFTP服务69/UDP
- Web服务80/TCP
通过 firewall-cmd 命令添加防火墙设置:
| # firewall-cmd –add-service=dhcp –add-service=tftp –add-service=http –permanent
# firewall-cmd –reload |
六、追加银河麒麟桌面V10的安装选项
如果我们需要在已经部署完成的服务器网络安装基础环境上追加安装选项内容,需要调整引导启动过程提供的菜单列表,例如这里我们以添加银河麒麟桌面操作系统V10为例,进行讲解。
银河麒麟桌面版本本身提供了LiveCD的运行模式,这个过程中加载了一个约2.7G的squashfs文件,如果通过网络下载这个文件,会花费大量时间,因此在桌面操作系统的网络安装配置上,和服务器版本略有区别,下面是部署过程。
需求服务:dhcpd,tftpd,nfs,自动应答
(一)调整引导配置文件
我们首先需要修改的是对应EFI引导方式的 /var/lib/tftpboot/grub.cfg配置文件与对应Legacy引导方式的/var/lib/tftpboot/pxelinux/pxelinux.cfg/default配置文件。
在/var/lib/tftpboot/grub.cfg配置文件中加入下面内容:
| set timeout=60
menuentry ‘Install Kylin Linux Advanced Server V10’ { linuxefi /images/vmlinuz ip=dhcp inst.repo=http://192.168.10.254/ky10 initrdefi /images/initrd.img } menuentry ‘ Install Kylin-Desktop V10’ { linuxefi /casper/vmlinuz boot=casper only-ubiquity netboot=nfs nfsroot=192.168.10.254:/opt/kylinos/V10 audit=0 quiet splash — initrdefi /casper/initrd.lz } |
在/var/lib/tftpboot/pxelinux/pxelinux.cfg/default配置文件中加入下面内容:
| default vesamenu.c32
prompt 0 timeout 600 display boot.msg label linux menu label ^Install Kylin Linux Advanced Server V10 menu default kernel vmlinuz append initrd=initrd.img ip=dhcp inst.repo=http://192.168.10.254/ky10 label vesa menu label Install Kylin Linux Advanced Server V10 in ^basic graphics mode kernel vmlinuz append initrd=initrd.img ip=dhcp inst.xdriver=vesa nomodeset inst.repo=http://192.168.10.254/ky10 label desktop menu label Install Kylin-^Desktop V10 kernel /casper/vmlinuz append boot=casper only-ubiquity initrd=/casper/initrd.lz netboot=nfs nfsroot=192.168.10.254:/opt/kylinos/V10 audit=0 quiet splash — |
完成以上设置后,我们在引导成功后的启动菜单中,都能看到“Install Kylin-Desktop V10”的选项。
(二)配置NFS服务
我们使用NFS服务来对外共享前面提到的squashfs文件,这样客户端可以直接将该文件挂载到本地目录环境下进行访问。
安装NFS服务:
| # yum install nfs-utils |
创建目录/opt/kylinos/V10
| # mkdir -p /opt/kylinos/V10 |
这里我们用挂载的方式将ISO文件挂载到刚刚创建的这个V10目录,如果计划复制光盘中所有文件到本地磁盘或者通过光盘提供访问,可以参考本文前面服务器的操作方式进行操作。
| # mount -o loop /opt/iso/kylinos_v10.iso /opt/kylinos/V10 |
配置NFS共享,我们需要打开/etc/exports文件,添加下面内容:
| /opt/kylinos/V10 *(no_root_squash,no_subtree_check) |
启动NFS服务,并设置开机自动启动:
| # systemctl restart nfs ; systemctl enable nfs |
防火墙开放NFS服务端口:
| # firewall-cmd –add-service=nfs –permanent
# firewall-cmd –reload |
(三)准备TFTP文件
为了系统能正常启动,我们还需要对/var/lib/tftpboot目录中的内容进行一些调整,因为在安装银河麒麟桌面时,加载的内核和服务器是完全不一样。
| /var/lib/tftpboot/
├── casper 需手动创建 │ ├── initrd.lz 桌面光盘 /casper/initrd.lz 文件 │ └── vmlinuz 桌面光盘 /casper/vmlinuz 文件 ├── grub.cfg 需要修改 ├── grubx64.efi 桌面光盘 /EFI/BOOT/grubx64.efi 文件 ├── images 手动创建文件夹 │ ├── initrd.img 服务器光盘/images/pxeboot/initrd.img │ └── vmlinuz 服务器光盘/images/pxeboot/vmlinuz ├── pxelinux 需手动创建,添加光盘/isolinux/* │ ├── boot.msg 服务器光盘 /isolinux/boot.msg 文件 │ ├── casper -> ../casper/ 软链接 │ ├── initrd.img -> ../images/initrd.img │ ├── pxelinux.0 R系/usr/share/syslinux/pxelinux.0 │ ├── pxelinux.cfg 需手动创建 │ │ └── default 需要创建修改 │ ├── splash.png │ ├── vesamenu.c32 服务器光盘 /isolinux/vesamenu.c32 │ └── vmlinuz -> ../images/vmlinuz └── bootx64.efi 桌面光盘 /EFI/BOOT/BOOTX64.EFI 文件 |
以上操作完成后,您在客户端通过PXE网络引导时,就能看到银河麒麟桌面版本的安装菜单选项,并可通过该选项进行操作系统安装。