Linux系统下手把手完成无人值守安装服务
刚入职的运维新手经常会被要求去做一些安装操作系统的工作,如果按照用镜像光盘安装操作系统,效率会相当低下。那么如何提升效率,搭建出一套可以批量安装Linux系统的无人值守的安装系统?
PXE+TFTP+FTP+DHCP+Kickstart服务可以搭建出一个无人值守安装系统。这种无人值守安装系统可以自动的为数十台服务器安装系统,将运维人员从重复性的工作中解救出来,大大提升了系统安装的效率。
如上图所示,是无人值守安装系统的工作流程。
PXE(Preboot eXecute Environment,预启动执行环境)是由 Intel 公司开发的技术,可以让计算机通过网络来启动操作系统(前提是计算机上安装的网卡支持 PXE 技术),主要用于在无人值守安装系统中引导客户端主机安装 Linux 操作系统。Kickstart 是一种无人值守的安装方式,其工作原理是预先把原本需要运维人员手工填写的参数保存成一个ks.cfg 文件,当安装过程中需要填写参数时则自动匹配 Kickstart 生成的文件。所以只要Kickstart 文件包含了安装过程中需要人工填写的所有参数,那么从理论上来讲完全不需要运维人员的干预,就可以自动完成安装工作。
当然需要使用 TFTP 协议帮助客户端获取引导及驱动文件。vsftpd 服务程序用于将完整的系统安装镜像通过网络传输给客户端。当然,只要能将系统安装镜像成功传输给客户端即可,因此也可以使用 httpd 来替代 vsftpd 服务程序。
首先,配置DHCP服务程序。DHCP 服务程序用于为客户端主机分配可用的 IP 地址,而且这是服务器与客户端主机进行文件传输的基础,因此我们先行配置 DHCP 服务程序。
[root@linuxprobe linuxprobe]# yum install dhcp
[root@linuxprobe ~]# vim /etc/dhcp/dhcpd.conf
allow booting;
allow bootp;
ddns-update-style interim;
ignore client-updates;
subnet 192.168.10.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option domain-name-servers 192.168.10.10;
range dynamic-bootp 192.168.10.100 192.168.10.200;
default-lease-time 21600;
max-lease-time 43200;
next-server 192.168.10.10;
filename “pxelinux.0”;
}
该操作的目的是为了允许BOOTP引导程序协议,旨在让局域网内暂时没有操作系统的主机也能获取静态 IP地址;在配置文件的最下面加载了引导驱动文件 pxelinux.0 ,其目的是让客户端主机获取到 IP 地址后主动获取引导驱动文件,自行进入下一步的安装过程。具体解释见《Linux就该这么学》。
第二步,配置TFTP服务程序。
vsftpd 是一款功能丰富的文件传输服务程序,允许用户以匿名开放模式、本地用户模式、虚拟用户模式来进行访问认证。但是,当前的客户端主机还没有安装操作系统,该如何进行登录认证呢?而 TFTP 作为一种基于 UDP 协议的简单文件传输协议,不需要进行用户认证即可获取到所需的文件资源。因此接下来配置 TFTP 服务程序,为客户端主机提供引导及驱动文件。当客户端主机有了基本的驱动程序之后,再通过 vsftpd 服务程序将完整的光盘镜像文件传输过去。
[root@linuxprobe ~]# yum install tftp-server
[root@linuxprobe ~.d]# vim /etc/xinetd.d/tftp
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
}
第三步,配置SYSLinux服务程序。SYSLinux 是一个用于提供引导加载的服务程序。与其说 SYSLinux 是一个服务程序,不如说更需要里面的引导文件,在安装好 SYSLinux 服务程序软件包后,/usr/share/syslinux 目录中会出现很多引导文件。
[root@linuxprobe ~]# yum install syslinux
[root@linuxprobe ~]# cd /var/lib/tftpboot
[root@linuxprobe tftpboot]# cp /usr/share/syslinux/pxelinux.0 .
[root@linuxprobe tftpboot]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} .
[root@linuxprobe tftpboot]# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg} .
首先需要把 SYSLinux 提供的引导文件复制到 TFTP 服务程序的默认目录中,也就是前文提到的文件 pxelinux.0,这样客户端主机就能够顺利地获取到引导文件了。另外在 RHEL 7 系统光盘镜像中也有一些我们需要调取的引导文件。确认光盘镜像已经被挂载到/media/cdrom 目录后,使用复制命令将光盘镜像中自带的一些引导文件也复制到 TFTP 服务程序的默认目录中。
[root@linuxprobe tftpboot]# mkdir pxelinux.cfg
[root@linuxprobe tftpboot]# cp /media/cdrom/isolinux/isolinux.cfg pxelinux.cfg/default
然后在 TFTP 服务程序的目录中新建 pxelinux.cfg 目录,虽然该目录的名字带有后缀,但依然也是目录,而非文件!将系统光盘中的开机选项菜单复制到该目录中,并命名为 default。这个 default 文件就是开机时的选项菜单,如图所示。
第四步,配置vdftpd服务程序。
[root@linuxprobe ~]# yum install vsftpd
在确认系统光盘镜像已经正常挂载到/media/cdrom 目录后,把目录中的光盘镜像文件全部复制到 vsftpd 服务程序的工作目录中。
[root@linuxprobe ~]# cp -r /media/cdrom/* /var/ftp
最后,创建KickStart应答文件。
毕竟,我们使用 PXE + Kickstart 部署的是一套“无人值守安装系统服务”,而不是“无人值守传输系统光盘镜像服务”,因此还需要让客户端主机能够一边获取光盘镜像,还能够一边自动帮我们填写好安装过程中出现的选项。
在 root 管理员的家目录中有一个名为 anacondaks.cfg 的文件,它就是应答文件。下面将这个文件复制到 vsftpd 服务程序的工作目录中(在开机选项菜单的配置文件中已经定义了该文件的获取路径,也就是 vsftpd 服务程序数据目录中的 pub 子目录中)。使用 chmod 命令设置该文件的权限,确保所有人都有可读的权限,以保证客户端主机可以顺利获取到应答文件及里面的内容:
[root@linuxprobe ~]# cp ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
[root@linuxprobe ~]# chmod +r /var/ftp/pub/ks.cfg
到目前为止,我们的服务基本部署完毕,集体详细解释过程参见《Linux就该这么学》,希望本文对刚入职的运维人员有一定的帮助。