• 19.2 部署相关服务程序
    • 19.2.1 配置DHCP服务程序
    • 19.2.2 配置TFTP服务程序
    • 19.2.3 配置SYSLinux服务程序
    • 19.2.4 配置VSFtpd服务程序
    • 19.2.5 创建KickStart应答文件

    19.2 部署相关服务程序

    19.2.1 配置DHCP服务程序

    DHCP服务程序用于为客户端主机分配可用的IP地址,而且这是服务器与客户端主机进行文件传输的基础,因此我们先行配置DHCP服务程序。首先按照表19-1为无人值守系统设置IP地址,然后按照图19-2和图19-3在虚拟机的虚拟网络编辑器中关闭自身的DHCP服务。

    表19-1 无人值守系统与客户端的设置

    主机名称操作系统IP地址
    无人值守系统RHEL 7192.168.10.10
    客户端未安装操作系统-

    选择虚拟机导航条上的网络编辑器

    图19-2 打开虚拟机的虚拟网络编辑器

    不使用虚拟机的DHCP功能

    图19-3 关闭虚拟机自带的DHCP服务

    当挂载好光盘镜像并把Yum仓库文件配置妥当后,就可以安装DHCP服务程序软件包了。

    1. [root@linuxprobe ~]# yum install dhcp
    2. Loaded plugins: langpacks, product-id, subscription-manager
    3. This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
    4. rhel | 4.1 kB 00:00
    5. Resolving Dependencies
    6. --> Running transaction check
    7. ---> Package dhcp.x86_64 12:4.2.5-27.el7 will be installed
    8. --> Finished Dependency Resolution
    9. Dependencies Resolved
    10. ================================================================================
    11. Package Arch Version Repository Size
    12. ================================================================================
    13. Installing:
    14. dhcp x86_64 12:4.2.5-27.el7 rhel 506 k
    15. Transaction Summary
    16. ================================================================================
    17. Install 1 Package
    18. Total download size: 506 k
    19. Installed size: 1.4 M
    20. Is this ok [y/d/N]: y
    21. Downloading packages:
    22. Running transaction check
    23. Running transaction test
    24. Transaction test succeeded
    25. Running transaction
    26. Installing : 12:dhcp-4.2.5-27.el7.x86_64 1/1
    27. Verifying : 12:dhcp-4.2.5-27.el7.x86_64 1/1
    28. Installed:
    29. dhcp.x86_64 12:4.2.5-27.el7
    30. Complete!

    第14章已经详细讲解了DHCP服务程序的配置以及部署方法,相信各位读者对相关的配置参数还有一些印象。但是,我们在这里使用的配置文件与第14章中的配置文件有两个主要区别:允许了BOOTP引导程序协议,旨在让局域网内暂时没有操作系统的主机也能获取静态IP地址;在配置文件的最下面加载了引导驱动文件pxelinux.0(这个文件会在下面的步骤中创建),其目的是让客户端主机获取到IP地址后主动获取引导驱动文件,自行进入下一步的安装过程。

    1. [root@linuxprobe ~]# vim /etc/dhcp/dhcpd.conf
    2. allow booting;
    3. allow bootp;
    4. ddns-update-style interim;
    5. ignore client-updates;
    6. subnet 192.168.10.0 netmask 255.255.255.0 {
    7. option subnet-mask 255.255.255.0;
    8. option domain-name-servers 192.168.10.10;
    9. range dynamic-bootp 192.168.10.100 192.168.10.200;
    10. default-lease-time 21600;
    11. max-lease-time 43200;
    12. next-server 192.168.10.10;
    13. filename "pxelinux.0";
    14. }

    在确认DHCP服务程序的参数都填写正确后,重新启动该服务程序,并将其添加到开机启动项中。这样在设备下一次重启之后,在无须人工干预的情况下,自动为客户端主机安装系统。

    1. [root@linuxprobe ~]# systemctl restart dhcpd
    2. [root@linuxprobe ~]# systemctl enable dhcpd
    3. ln -s '/usr/lib/systemd/system/dhcpd.service' '/etc/systemd/system/multi-user.target.wants/dhcpd.service'

    19.2.2 配置TFTP服务程序

    我们曾经在第11章中学习过vsftpd服务与TFTP服务。vsftpd是一款功能丰富的文件传输服务程序,允许用户以匿名开放模式、本地用户模式、虚拟用户模式来进行访问认证。但是,当前的客户端主机还没有安装操作系统,该如何进行登录认证呢?而TFTP作为一种基于UDP协议的简单文件传输协议,不需要进行用户认证即可获取到所需的文件资源。因此接下来配置TFTP服务程序,为客户端主机提供引导及驱动文件。当客户端主机有了基本的驱动程序之后,再通过vsftpd服务程序将完整的光盘镜像文件传输过去。

    1. [root@linuxprobe ~]# yum install tftp-server
    2. Loaded plugins: langpacks, product-id, subscription-manager
    3. This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
    4. Resolving Dependencies
    5. --> Running transaction check
    6. ---> Package tftp-server.x86_64 0:5.2-11.el7 will be installed
    7. --> Processing Dependency: xinetd for package: tftp-server-5.2-11.el7.x86_64
    8. --> Running transaction check
    9. ---> Package xinetd.x86_64 2:2.3.15-12.el7 will be installed
    10. --> Finished Dependency Resolution
    11. Dependencies Resolved
    12. ================================================================================
    13. Package Arch Version Repository Size
    14. ================================================================================
    15. Installing:
    16. tftp-server x86_64 5.2-11.el7 rhel 44 k
    17. Installing for dependencies:
    18. xinetd x86_64 2:2.3.15-12.el7 rhel 128 k
    19. Transaction Summary
    20. ================================================================================
    21. Install 1 Package (+1 Dependent package)
    22. Total download size: 172 k
    23. Installed size: 325 k
    24. Is this ok [y/d/N]: y
    25. Downloading packages:
    26. --------------------------------------------------------------------------------
    27. Total 1.7 MB/s | 172 kB 00:00
    28. Running transaction check
    29. Running transaction test
    30. Transaction test succeeded
    31. Running transaction
    32. Installing : 2:xinetd-2.3.15-12.el7.x86_64 1/2
    33. Installing : tftp-server-5.2-11.el7.x86_64 2/2
    34. Verifying : 2:xinetd-2.3.15-12.el7.x86_64 1/2
    35. Verifying : tftp-server-5.2-11.el7.x86_64 2/2
    36. Installed:
    37. tftp-server.x86_64 0:5.2-11.el7
    38. Dependency Installed:
    39. xinetd.x86_64 2:2.3.15-12.el7
    40. Complete!

    TFTP是一种非常精简的文件传输服务程序,它的运行和关闭是由xinetd网络守护进程服务来管理的。xinetd服务程序会同时监听系统的多个端口,然后根据用户请求的端口号调取相应的服务程序来响应用户的请求。需要开启TFTP服务程序,只需在xinetd服务程序的配置文件中把disable参数改成no就可以了。保存配置文件并退出,然后重启xinetd服务程序,并将其加入到开机启动项中(在RHEL 7系统中,已经默认启用了xinetd服务程序,因此在将其添加到开机启动项中的时候没有输出信息属于正常情况)。

    1. [root@linuxprobe ~.d]# vim /etc/xinetd.d/tftp
    2. service tftp
    3. {
    4. socket_type = dgram
    5. protocol = udp
    6. wait = yes
    7. user = root
    8. server = /usr/sbin/in.tftpd
    9. server_args = -s /var/lib/tftpboot
    10. disable = no
    11. per_source = 11
    12. cps = 100 2
    13. flags = IPv4
    14. [root@linuxprobe xinetd.d]# systemctl restart xinetd
    15. [root@linuxprobe xinetd.d]# systemctl enable xinetd

    TFTP服务程序默认使用的是UDP协议,占用的端口号为69,所以在生产环境中还需要在firewalld防火墙管理工具中写入使其永久生效的允许策略,以便让客户端主机顺利获取到引导文件。

    1. [root@linuxprobe ~]# firewall-cmd --permanent --add-port=69/udp
    2. success
    3. [root@linuxprobe ~]# firewall-cmd --reload
    4. success

    19.2.3 配置SYSLinux服务程序

    SYSLinux是一个用于提供引导加载的服务程序。与其说SYSLinux是一个服务程序,不如说更需要里面的引导文件,在安装好SYSLinux服务程序软件包后,/usr/share/syslinux目录中会出现很多引导文件。

    1. [root@linuxprobe ~]# yum install syslinux
    2. Loaded plugins: langpacks, product-id, subscription-manager
    3. This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
    4. Resolving Dependencies
    5. --> Running transaction check
    6. ---> Package syslinux.x86_64 0:4.05-8.el7 will be installed
    7. --> Finished Dependency Resolution
    8. Dependencies Resolved
    9. ================================================================================
    10. Package Arch Version Repository Size
    11. ================================================================================
    12. Installing:
    13. syslinux x86_64 4.05-8.el7 rhel 1.0 M
    14. Transaction Summary
    15. ================================================================================
    16. Install 1 Package
    17. Total download size: 1.0 M
    18. Installed size: 2.3 M
    19. Is this ok [y/d/N]: y
    20. Downloading packages:
    21. Running transaction check
    22. Running transaction test
    23. Transaction test succeeded
    24. Running transaction
    25. Installing : syslinux-4.05-8.el7.x86_64 1/1
    26. Verifying : syslinux-4.05-8.el7.x86_64 1/1
    27. Installed:
    28. syslinux.x86_64 0:4.05-8.el7
    29. Complete!

    我们首先需要把SYSLinux提供的引导文件复制到TFTP服务程序的默认目录中,也就是前文提到的文件pxelinux.0,这样客户端主机就能够顺利地获取到引导文件了。另外在RHEL 7系统光盘镜像中也有一些我们需要调取的引导文件。确认光盘镜像已经被挂载到/media/cdrom目录后,使用复制命令将光盘镜像中自带的一些引导文件也复制到TFTP服务程序的默认目录中。

    1. [root@linuxprobe ~]# cd /var/lib/tftpboot
    2. [root@linuxprobe tftpboot]# cp /usr/share/syslinux/pxelinux.0 .
    3. [root@linuxprobe tftpboot]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} .
    4. [root@linuxprobe tftpboot]# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg} .

    然后在TFTP服务程序的目录中新建pxelinux.cfg目录,虽然该目录的名字带有后缀,但依然也是目录,而非文件!将系统光盘中的开机选项菜单复制到该目录中,并命名为default。这个default文件就是开机时的选项菜单,如图19-4所示。

    19.2 部署相关服务程序 - 图3

    图19-4 Linux系统的引导菜单界面

    1. [root@linuxprobe tftpboot]# mkdir pxelinux.cfg
    2. [root@linuxprobe tftpboot]# cp /media/cdrom/isolinux/isolinux.cfg pxelinux.cfg/default

    默认的开机菜单中有两个选项,要么是安装系统,要么是对安装介质进行检验。既然我们已经确定采用无人值守的方式安装系统,还需要为每台主机手动选择相应的选项,未免与我们的主旨(无人值守安装)相悖。现在我们编辑这个default文件,把第1行的default参数修改为linux,这样系统在开机时就会默认执行那个名称为linux的选项了。对应的linux选项大约在64行,我们将默认的光盘镜像安装方式修改成FTP文件传输方式,并指定好光盘镜像的获取网址以及Kickstart应答文件的获取路径:

    1. [root@linuxprobe tftpboot]# vim pxelinux.cfg/default
    2. 1 default linux
    3. 2 timeout 600
    4. 3
    5. 4 display boot.msg
    6. 5
    7. 6 # Clear the screen when exiting the menu, instead of leaving the menu displa yed.
    8. 7 # For vesamenu, this means the graphical background is still displayed witho ut
    9. 8 # the menu itself for as long as the screen remains in graphics mode.
    10. 9 menu clear
    11. 10 menu background splash.png
    12. 11 menu title Red Hat Enterprise Linux 7.0
    13. 12 menu vshift 8
    14. 13 menu rows 18
    15. 14 menu margin 8
    16. 15 #menu hidden
    17. 16 menu helpmsgrow 15
    18. 17 menu tabmsgrow 13
    19. 18
    20. 19 # Border Area
    21. 20 menu color border * #00000000 #00000000 none
    22. 21
    23. 22 # Selected item
    24. 23 menu color sel 0 #ffffffff #00000000 none
    25. 24
    26. 25 # Title bar
    27. 26 menu color title 0 #ff7ba3d0 #00000000 none
    28. 27
    29. 28 # Press [Tab] message
    30. 29 menu color tabmsg 0 #ff3a6496 #00000000 none
    31. 30
    32. 31 # Unselected menu item
    33. 32 menu color unsel 0 #84b8ffff #00000000 none
    34. 33
    35. 34 # Selected hotkey
    36. 35 menu color hotsel 0 #84b8ffff #00000000 none
    37. 36
    38. 37 # Unselected hotkey
    39. 38 menu color hotkey 0 #ffffffff #00000000 none
    40. 39
    41. 40 # Help text
    42. 41 menu color help 0 #ffffffff #00000000 none
    43. 42
    44. 43 # A scrollbar of some type? Not sure.
    45. 44 menu color scrollbar 0 #ffffffff #ff355594 none
    46. 45
    47. 46 # Timeout msg
    48. 47 menu color timeout 0 #ffffffff #00000000 none
    49. 48 menu color timeout_msg 0 #ffffffff #00000000 none
    50. 49
    51. 50 # Command prompt text
    52. 51 menu color cmdmark 0 #84b8ffff #00000000 none
    53. 52 menu color cmdline 0 #ffffffff #00000000 none
    54. 53
    55. 54 # Do not display the actual menu unless the user presses a key. All that is displayed is a timeout message.
    56. 55
    57. 56 menu tabmsg Press Tab for full configuration options on menu items.
    58. 57
    59. 58 menu separator # insert an empty line
    60. 59 menu separator # insert an empty line
    61. 59 menu separator # insert an empty line
    62. 60
    63. 61 label linux
    64. 62 menu label ^Install Red Hat Enterprise Linux 7.0
    65. 63 kernel vmlinuz
    66. 64 append initrd=initrd.img inst.stage2=ftp://192.168.10.10 ks=ftp://192.168.10.10/pub/ks.cfg quiet
    67. 65
    68. ………………省略部分输出信息………………

    19.2.4 配置VSFtpd服务程序

    在我们这套无人值守安装系统的服务中,光盘镜像是通过FTP协议传输的,因此势必要用到vsftpd服务程序。当然,也可以使用httpd服务程序来提供Web网站访问的方式,只要能确保将光盘镜像顺利传输给客户端主机即可。如果打算使用Web网站服务来提供光盘镜像,一定记得将上面配置文件中的光盘镜像获取网址和Kickstart应答文件获取网址修改一下。

    1. [root@linuxprobe ~]# yum install vsftpd
    2. Loaded plugins: langpacks, product-id, subscription-manager
    3. This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
    4. Resolving Dependencies
    5. --> Running transaction check
    6. ---> Package vsftpd.x86_64 0:3.0.2-9.el7 will be installed
    7. --> Finished Dependency Resolution
    8. Dependencies Resolved
    9. ================================================================================
    10. Package Arch Version Repository Size
    11. ================================================================================
    12. Installing:
    13. vsftpd x86_64 3.0.2-9.el7 rhel 166 k
    14. Transaction Summary
    15. ================================================================================
    16. Install 1 Package
    17. Total download size: 166 k
    18. Installed size: 343 k
    19. Is this ok [y/d/N]: y
    20. Downloading packages:
    21. Running transaction check
    22. Running transaction test
    23. Transaction test succeeded
    24. Running transaction
    25. Installing : vsftpd-3.0.2-9.el7.x86_64 1/1
    26. Verifying : vsftpd-3.0.2-9.el7.x86_64 1/1
    27. Installed:
    28. vsftpd.x86_64 0:3.0.2-9.el7
    29. Complete!

    刘遄老师再啰嗦一句,在配置文件修改正确之后,一定将相应的服务程序添加到开机启动项中,这样无论是在生产环境中还是在红帽认证考试中,都可以在设备重启之后依然能提供相应的服务。希望各位读者一定养成这个好习惯。

    1. [root@linuxprobe ~]# systemctl restart vsftpd
    2. [root@linuxprobe ~]# systemctl enable vsftpd
    3. ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'

    在确认系统光盘镜像已经正常挂载到/media/cdrom目录后,把目录中的光盘镜像文件全部复制到vsftpd服务程序的工作目录中。

    1. [root@linuxprobe ~]# cp -r /media/cdrom/* /var/ftp

    这个过程大约需要3~5分钟。在此期间,我们也别闲着,在firewalld防火墙管理工具中写入使FTP协议永久生效的允许策略,然后在SELinux中放行FTP传输:

    1. [root@linuxprobe ~]# firewall-cmd --permanent --add-service=ftp
    2. success
    3. [root@linuxprobe ~]# firewall-cmd --reload
    4. success
    5. [root@linuxprobe ~]# setsebool -P ftpd_connect_all_unreserved=on

    19.2.5 创建KickStart应答文件

    毕竟,我们使用PXE + Kickstart部署的是一套“无人值守安装系统服务”,而不是“无人值守传输系统光盘镜像服务”,因此还需要让客户端主机能够一边获取光盘镜像,还能够一边自动帮我们填写好安装过程中出现的选项。简单来说,如果生产环境中有100台服务器,它们需要安装相同的系统环境,那么在安装过程中单击的按钮和填写的信息也应该都是相同的。那么,为什么不创建一个类似于备忘录的需求清单呢?这样,在无人值守安装系统时,可以从这个需求清单中找到相应的选项值,从而免去了手动输入之苦,更重要的是,也彻底解放了人的干预,彻底实现无人值守自动安装系统,而不是单纯地传输系统光盘镜像。

    有了上文做铺垫,相信大家现在应该可以猜到Kickstart其实并不是一个服务程序,而是一个应答文件了。是的!Kickstart应答文件中包含了系统安装过程中需要使用的选项和参数信息,系统可以自动调取这个应答文件的内容,从而彻底实现了无人值守安装系统。那么,既然这个文件如此重要,该去哪里找呢?其实在root管理员的家目录中有一个名为anaconda-ks.cfg的文件,它就是应答文件。下面将这个文件复制到vsftpd服务程序的工作目录中(在开机选项菜单的配置文件中已经定义了该文件的获取路径,也就是vsftpd服务程序数据目录中的pub子目录中)。使用chmod命令设置该文件的权限,确保所有人都有可读的权限,以保证客户端主机可以顺利获取到应答文件及里面的内容:

    1. [root@linuxprobe ~]# cp ~/anaconda-ks.cfg /var/ftp/pub/ks.cfg
    2. [root@linuxprobe ~]# chmod +r /var/ftp/pub/ks.cfg

    Kickstart应答文件并没有想象中的那么复杂,它总共只有46行左右的参数和注释内容,大家完全可以通过参数的名称及介绍来快速了解每个参数的作用。刘遄老师在这里挑选几个比较有代表性的参数进行讲解,其他参数建议大家自行修改测试。

    首先把第6行的光盘镜像安装方式修改成FTP协议,仔细填写好FTP服务器的IP地址,并用本地浏览器尝试打开下检查有没有报错。然后把第21行的时区修改成上海(Asia/Shanghai),最后再把29行的磁盘选项设置为清空所有磁盘内容并初始化磁盘:

    1. [root@linuxprobe ~]# vim /var/ftp/pub/ks.cfg
    2. 1 #version=RHEL7
    3. 2 # System authorization information
    4. 3 auth --enableshadow --passalgo=sha512
    5. 4
    6. 5 # Use CDROM installation media
    7. 6 url --url=ftp://192.168.10.10
    8. 7 # Run the Setup Agent on first boot
    9. 8 firstboot --enable
    10. 9 ignoredisk --only-use=sda
    11. 10 # Keyboard layouts
    12. 11 keyboard --vckeymap=us --xlayouts='us'
    13. 12 # System language
    14. 13 lang en_US.UTF-8
    15. 14
    16. 15 # Network information
    17. 16 network --bootproto=dhcp --device=eno16777728 --onboot=off --ipv6=auto
    18. 17 network --hostname=localhost.localdomain
    19. 18 # Root password
    20. 19 rootpw --iscrypted $6$pDjJf42g8C6pL069$iI.PX/yFaqpo0ENw2pa7MomkjLyoae2zjMz2UZJ7b H3UO4oWtR1.Wk/hxZ3XIGmzGJPcs/MgpYssoi8hPCt8b/
    21. 20 # System timezone
    22. 21 timezone Asia/Shanghai --isUtc
    23. 22 user --name=linuxprobe --password=$6$a9v3InSTNbweIR7D$JegfYWbCdoOokj9sodEccdO.zL F4oSH2AZ2ss2R05B6Lz2A0v2K.RjwsBALL2FeKQVgf640oa/tok6J.7GUtO/ --iscrypted --gecos ="linuxprobe"
    24. 23 # X Window System configuration information
    25. 24 xconfig --startxonboot
    26. 25 # System bootloader configuration
    27. 26 bootloader --location=mbr --boot-drive=sda
    28. 27 autopart --type=lvm
    29. 28 # Partition clearing information
    30. 29 clearpart --all --initlabel
    31. 30
    32. 31 %packages
    33. 32 @base
    34. 33 @core
    35. 34 @desktop-debugging
    36. 35 @dial-up
    37. 36 @fonts
    38. 37 @gnome-desktop
    39. 38 @guest-agents
    40. 39 @guest-desktop-agents
    41. 40 @input-methods
    42. 41 @internet-browser
    43. 42 @multimedia
    44. 43 @print-client
    45. 44 @x11
    46. 45
    47. 46 %end

    如果觉得系统默认自带的应答文件参数较少,不能满足生产环境的需求,则可以通过Yum软件仓库来安装system-config-kickstart软件包。这是一款图形化的Kickstart应答文件生成工具,可以根据自己的需求生成自定义的应答文件,然后将生成的文件放到/var/ftp/pub目录中并将名字修改为ks.cfg即可。

    出现问题?大胆提问!

    因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~

    Linux技术交流请加A群:560843(),B群:340829(推荐),C群:463590(推荐),点此查看全国群。

    *本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。