hzrnice 2019-08-16
在大规模的Linux应用环境中,比如Web群集、分布式计算等,服务器往往并不配备光驱设备,在这种情况下,如何给成百上千台服务器裸机快速安装系统呢?传统的USB光驱、移动硬盘等安装方式很显然已经力不从心了,那么就需要——PXE网络装机及无人值守安装。
PXE网络装机及无人值守安装可以实现的功能有:
1.规模化:同时装配多台服务器;
2.自动化:安装系统、配置各种服务;
3.远程实现:不需要光盘、U盘等安装介质。
如图:
关于Windows PXE网络装机可以参考博文:Windows server 2016部署WDS服务
若要搭建PXE网络体系,必须要满足的条件有: 1.客户机的网卡支持PXE协议(集成BOOTROM芯片),且主板支持网络引导; 2.网络中必须有一台DHCP服务器为客户机分配IP地址、指定引导文件的位置; 3.服务器通过TFTP(简单文件传输协议)提供引导镜像文件的下载。
其中第一个条件是硬件要求,目前绝大部分服务器和PC都能够提供此支持,只需在BIOS设置中允许从Network或LAN启动即可。
满足条件后,我们来实现这种功能!
本次试验PXE远程安装服务器集成了CentOS 7 安装源、FTP服务、TFTP服务、DHCP服务,能够像客户机(裸机)发送PXE引导程序、Linux内核、启动菜单等数据,以及提供安装文件。
PXE远程安装服务的部署过程大致可以分成这样几步: 1.安装FTP服务并准备CentOS 7 安装源; 2.安装TFTP服务并启动; 3.准备Linux内核、初始化镜像文件; 4.准备PXE引导程序、启动菜单文件; 5.安装并启动DHCP服务; 6.验证PXE网络安装效果。
接下来我们开始分步骤完成实验,并实现理想的效果!
通过搭建本地YUM的方式安装一系列服务。如果有朋友对YUM的搭建不明白可以参考博文:YUM仓库配置及命令详解
[root@localhost ~]# mount /dev/cdrom /mnt [root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# rm -rf * [root@localhost yum.repos.d]# vim a.repo [a] baseurl=file:///mnt gpgcheck=0 [root@localhost ~]# yum -y install vsftpd //安装FTP服务 [root@localhost ~]# mkdir /var/ftp/centos7 [root@localhost ~]# cp -rf /mnt/* /var/ftp/centos7/ //将光盘中的东西全部复制到FTP服务科匿名访问的目录中 [root@localhost ~]# systemctl start vsftpd //启动FTP服务
TFTP(简单文件传输协议)服务所使用UDP的69端口。
[root@localhost ~]# yum -y install tftp-server //安装TFTP服务 [root@localhost ~]# vim /etc/xinetd.d/tftp //修改TFTP服务的配置文件,内容如下: service tftp { socket_type = dgram protocol = udp //TFTP服务采用udp传输协议 wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot //指定TFTP服务的根目录 disable = no //这项必须改成“no” per_source = 11 cps = 100 2 flags = IPv4 } [root@localhost ~]# systemctl start tftp //启动TFTP服务
用PXE网络安装的Linux内核、初始化文件可以从CentOS 7系统光盘中获得,位于images/pxeboot/目录下,分别是initrd.img和vmlinuz。将这两个文件复制到TFTP服务的根目录下。
[root@localhost ~]# cd /mnt/images/pxeboot/ [root@localhost pxeboot]# cp vmlinuz initrd.img /var/lib/tftpboot/
用于PXE网络安装的引导程序为pxelinux.0,由软件包syslinux提供。因此需要先安装syslinux。
[root@localhost ~]# yum -y install syslinux [root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
启动菜单来指导客户机的引导过程,包括如何调用内核、如何加载初始化镜像。默认的启动菜单文件为default,应放置在TFTP根目录下的pxelinux.cfg子目录下,典型的启动菜单引导文件需手动创建,可以参考以下内容:
[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg //在TFTP服务根目录下创建pxelinux.cfg目录 [root@localhost ~]# cd /var/lib/tftpboot/pxelinux.cfg/ [root@localhost pxelinux.cfg]# vim default //创建default菜单文件。文件内容如下: default auto prompt 1 label auto kernel vmlinuz append initrd=initrd.img method=ftp://192.168.1.1/centos7 label linux text kernel vmlinuz append text initrd=initrd.img method=ftp://192.168.1.1/centos7 label linux rescue kernel vmlinuz append rescue initrd=initrd.img method=ftp://192.168.1.1/centos7
其中个配置项的含义: default:用来指定默认入口名称; prompt:用来决定是否需要等待用户控制(1表示需要,0表示不需要); label:用来定义并分割启动项,文件中有三种引导模式: 分别是图形安装(默认)、文本安装、救援模式; kernel:用来指定所需内核; append:追加配置项; initrd:用来指定系统初始化文件; method:用来指定安装方式; 引导入口的个数及内容根据实际情况自定义。
由于PXE客户机通常是尚未安装系统的裸机,因此为了与服务器取得联系并正确的下载相关引导文件,需要预先配置DHCP服务器来自动分配地址并告知引导文件位置。
[root@localhost ~]# yum -y install dhcp [root@localhost ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf //复制DHCP服务的模板 [root@localhost ~]# vim /etc/dhcp/dhcpd.conf //修改DHCP服务的配置文件,主要内容如下: ……………… //省略部分内容 subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; option domain-name-servers 192.168.1.1; option domain-name "internal.example.org"; option routers 192.168.1.1; option broadcast-address 192.168.1.255; default-lease-time 600; max-lease-time 7200; next-server 192.168.1.1; //指定TFTP服务器的地址 filename "pxelinux.0"; //指定PXE引导程序的文件名 } ……………… //省略部分内容 [root@localhost ~]# systemctl start dhcpd
对于新购买的裸机,一般都不需要设置(如果是重新装系统,建议则应调BIOS为网络启动)。若使用vmware虚拟机进行测试,虚拟机内存至少需要2GB,否则在启动会报错。
耐心等待,几分钟后:
出现这种情况,表示部署成功!
通过PXE远程安装服务,虽然,安装介质已经不再受限于光盘、移动硬盘、U盘等设备,大大提高了系统安装的灵活想但是,安装期间仍然需要人为的进行交互式的操作,当需要批量安装时非常的不方便。那么就需要使用到——“Kickstart无人值守安装”
实现Kickstart无人值守安装部署过程: 1.配置应答文件并保存; 2.启动自动应答文件; 3.验证无人值守安装。
接下来我们开始分步骤完成,并实现理想的效果!
要想图形化的创建应答文件,则需要安装system-config-kickstart工具,如果对配置文件非常熟悉的话,也可以直接修改系统自动创建的无人安装配置文件/root/anaconda-ks.cfg。本次案例安装system-config-kickstart工具,图形化的编辑配置文件。
[root@localhost ~]# yum -y install system-config-kickstart //安装system-config-kickstart工具,安装完成之后:
[root@localhost ~]# vim /var/ftp/ks.cfg //查看刚才通过图形化编辑的应答文件 #platform=x86, AMD64, 或 Intel EM64T #version=DEVEL # Install OS instead of upgrade install # Keyboard layouts keyboard 'us' # Root password rootpw --iscrypted $1$3uZeSVnX$FYsU4y8y/qqEWA66Wuysg1 # Use network installation url --url="ftp://192.168.1.1/centos7" # System language lang zh_CN # Firewall configuration firewall --disabled # System authorization information auth --useshadow --passalgo=sha512 # Use graphical install graphical firstboot --disable # SELinux configuration selinux --disabled # Network information network --bootproto=dhcp --device=ens33 # Reboot after installation reboot # System timezone timezone Asia/Shanghai # System bootloader configuration bootloader --location=mbr # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel # Disk partitioning information part swap --asprimary --fstype="swap" --size=2048 part / --asprimary --fstype="xfs" --grow --size=1 %post --interpreter=/bin/bash rm -rf /etc/yum.repos.d/* cd /etc/yum.repos.d/ echo -e "[a]" >> a.repo echo -e "baseurl=ftp://192.168.1.1/centos7" >> a.repo echo -e "gpgcheck=0" >> a.repo %end
不过刚才已经说明了,还缺一个选项——“软件包选择”,需要自己手动添加几行配置项,在末尾添加即可,添加内容如下:
%packages @^minimal %end //这三项的意思就是最小安装
%packages @^gnome-desktop-environment %end //这三项的意思是桌面安装
当然也可以参考/root/anaconda-ks.cfg文件,文件中%packages到%end之间都是配置选项,每行一个配置选项,任意选择!
大家可以不经过图形化编辑,直接复制配置文件!效果也可实现!
[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default default auto prompt 0 label auto kernel vmlinuz append initrd=initrd.img method=ftp://192.168.1.1/centos7 ks=ftp://192.168.1.1/ks.cfg
将prompt 改为0,表示不等待用户选择。添加ks引导参数,并制定URL访问路径。
实验完成!