PXE(Preboot Excute Environment)预启动执行环境, 可以让计算机通过网络启动系统, 主要用于无人值守安装系统中引导客户端主机安装 Linux 操作系统.
由于之前有过使用 cobbler+kickstart PXE 安装系统的博客, 这里 RHEL7 下使用第二种方法.
部署 PXE 相关环境
第一步: DHCP 服务
部署 DHCP 服务之前, 由于使用虚拟机测试, 为了避免虚拟机软件的 DHCP 功能对本实验造成影响, 在网络配置中将应用 DHCP 服务选项取消掉
安装 DHCP 服务
[root@localhost ~]# yum install -y dhcp
编辑 DHCP 服务配置文件
[root@localhost ~]# 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.50 192.168.10.100;
- default-lease-time 21600;
- max-lease-time 43200;
- next-server 192.168.10.10;
- filename "pxelinux.0";
- }
配置完成重启 DHCP 服务, 由于 DHCP 服务未成功启动也不会报错, 所以查看一下 DHCPD 服务状态
- [root@localhost ~]# systemctl restart dhcpd
- [root@localhost ~]# systemctl status dhcpd
- dhcpd.service - DHCPv4 Server Daemon
- Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled)
- Active: failed (Result: exit-code) since Tue 2019-03-19 10:16:36 EDT; 6s ago
- Docs: man:dhcpd(8)
- man:dhcpd.conf(5)
果然启动失败了, 配置文件一定有哪里出现错误.
我们执行 journal -xe 命令查看一下
- [root@localhost ~]# journalctl -xe
- --
- -- The start-up result is done.
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: Internet Systems Consortium
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: Copyright 2004-2013 Internet
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: All rights reserved.
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: For info, please visit https
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: Not searching LDAP since lda
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: Wrote 0 leases to leases fil
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: Mar 19 10:16:36 localhost.lo
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: ** Ignoring requests on eno1
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: you want, please write a sub
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: in your dhcpd.conf file for
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: to which interface eno167777
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: Mar 19 10:16:36 localhost.lo
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: Mar 19 10:16:36 localhost.lo
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: on ftp.isc.org. Features ha
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: have been made to the base s
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: it work better with this dis
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: Mar 19 10:16:36 localhost.lo
- Mar 19 10:16:36 localhost.localdomain dhcpd[42926]: http://bugzilla.redhat.com
似乎是 eno167777 网卡问题, 原来我们还原虚拟机后没有将 IP 修改为 DHCP 配置文件中对应的 192.168.10.10. 修改一下.
修改完成后, 再次重启 DHCPD 服务
- [root@localhost ~]# systemctl restart dhcpd
- [root@localhost ~]# systemctl status dhcpd
- dhcpd.service - DHCPv4 Server Daemon
- Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; disabled)
- Active: active (running) since Tue 2019-03-19 10:23:13 EDT; 6s ago
- Docs: man:dhcpd(8)
- man:dhcpd.conf(5)
- Main PID: 43382 (dhcpd)
第二步 TFTP 服务
Trivial File Transfer Protocol 简单文本传输协议. 该轻量级的服务由 xinetd 网络守护进程管理, 开启 TFTP 服务时只需在 xinetd 服务主配置文件中 / etc/xinetd.d/tftp 文件中将 disable 修改为 no 即可.
- [root@localhost ~]# yum install -y tftp-server
- [root@localhost ~]# 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
- }
TFTP 默认占用 69/udp 端口, 在生产环境中, 需要在 firewalld 防火墙管理工具中永久放行 69/udp 端口.
- [root@localhost ~]# firewall-cmd --permanent --add-port=69/udp
- success
- [root@localhost ~]# firewall-cmd --reload
- success
第三部: SYSlinux 服务是一个提供引导加载的服务程序
安装 syslinux
[root@localhost ~]# yum install -y syslinux
我们需要将 syslinux 服务提供的引导文件 (即上面提到的 pxelinu.0) 复制到 TFTP 服务默认目录中, 另外 ISO 镜像里也有一些引导文件需要复制到 TFTP 默认目录中.
- [root@localhost ~]# cd /var/lib/tftpboot/
- [root@localhost tftpboot]# cp /usr/share/syslinux/pxelinux.0 .
- [root@localhost tftpboot]# cp /mnt/images/pxeboot/{
- vmlinuz,initrd.img
- } .
- [root@localhost tftpboot]# cp /mnt/isolinux/{
- vesamenu.c32,boot.msg
- } .
另外我们还要在 TFTP 默认目录中, 创建一个名为 pxelinux.cfg 的文件夹, 将镜像文件里的开机选项菜单复制到里面并重命名为 default.
- [root@localhost tftpboot]# mkdir pxelinux.cfg
- [root@localhost tftpboot]# cp /mnt/isolinux/isolinux.cfg pxelinux.cfg/default
由于默认的开机菜单中有两个选项, 要么是安装系统, 要么是对安装介质进行检验. 既然我们已经确定采用无人值守的方式安装系统, 还需要为每台主机手动选择相应的选项, 未免与我们的主旨 (无人值守安装) 相悖. 现在我们编辑这个 default 文件, 把第 1 行的 default 参数修改为 Linux, 这样系统在开机时就会默认执行那个名称为 Linux 的选项了. 对应的 Linux 选项大约在 64 行, 我们将默认的光盘镜像安装方式修改成 FTP 文件传输方式, 并指定好光盘镜像的获取网址以及 Kickstart 应答文件的获取路径.
- [root@localhost tftpboot]# VIM !$
- 1 default Linux
- ..
- 64 append initrd=initrd.img inst.stage2=ftp://192.168.10.10 ks=ftp://192.168.10.10/pub/ks.cfg quiet
第四步: 配置 vsftpd 服务程序
当前 pxe 服务是通过镜像文件安装的, 是必要的用到 FTP 文件传输服务. 也可以使用 HTTP 的 web 网站访问的方式, 只要能确保, 光盘中的镜像能顺利地传输给客户端主机即可.
- [root@localhost tftpboot]# yum install -y vsftpd
- [root@localhost tftpboot]# systemctl start vsftpd
- [root@localhost tftpboot]# systemctl enable vsftpd
- ln -s '/usr/lib/systemd/system/vsftpd.service' '/etc/systemd/system/multi-user.target.wants/vsftpd.service'
接下来将镜像中的所有文件复制到 vsftpd 服务的的工作目录中(过程大概几分钟), 同时在 firewalld 防火墙管理工具中放行 ftp 服务. 在 selinux 域策略中放行 FTP 传输.
- [root@localhost linuxprobe]# firewall-cmd --permanent --add-service=ftp
- success
- [root@localhost linuxprobe]# firewall-cmd --reload
- success
- [root@localhost linuxprobe]# getsebool -a | grep ftpd
- ftpd_anon_write --> off
- ftpd_connect_all_unreserved --> off
- ftpd_connect_db --> off
- ftpd_full_access --> off
- ftpd_use_cifs --> off
- ftpd_use_fusefs --> off
- ftpd_use_nfs --> off
- ftpd_use_passive_mode --> off
- sftpd_anon_write --> off
- sftpd_enable_homedirs --> off
- sftpd_full_access --> off
- sftpd_write_ssh_home --> off
- [root@localhost linuxprobe]# setsebool -P ftpd_connect_all_unreserved=on
创建 KickStart 应答文件
在 rhel7 系统中 root 用户家目录有个 anaconda-ks.cfg 文件, 是为当前系统的 ks 应答文件. ks 文件具体参数在上次实验中有详细的讲解. 这里只改三个地方测试效果即可: 首先把第 6 行的光盘镜像安装方式修改成 FTP 协议, 仔细填写好 FTP 服务器的 IP 地址, 并用本地浏览器尝试打开下检查有没有报错. 然后把第 21 行的时区修改成上海(Asia/Shanghai), 最后再把 29 行的磁盘选项设置为清空所有磁盘内容并初始化磁盘.
首先将该文件复制到 ftp 家目录中. chmod +r 命令让所有人都可对其读取.
- t@localhost ~]# cp /root/anaconda-ks.cfg /var/ftp/pub/ks.cfg
- [root@localhost ~]# chmod -r !$
- chmod -r /var/ftp/pub/ks.cfg
修改参数
- #version=RHEL7
- # System authorization information
- auth --enableshadow --passalgo=sha512
- # Use CDROM installation media
url --url=ftp://192.168.10.10 设置 FTP 安装模式
- # Run the Setup Agent on first boot
- firstboot --enable
- ignoredisk --only-use=sda
- # Keyboard layouts
- keyboard --vckeymap=us --xlayouts='us'
- # System language
- lang en_US.UTF-8
- # Network information
- network --bootproto=dhcp --device=eno16777736 --onboot=off --ipv6=auto
- network --hostname=localhost.localdomain
- # Root password
- rootpw --iscrypted $6$0XQWDt7L9e0SdNCH$LyxVJ8ZoncLu2tTPn/4nUjOT.DFmLgejZOWWg/U9aF7qPJGnLs6JuDZ1/RHrr17HKs1zA10ifsUk.axakInCG.
- # System timezone
timezone Asia/Shanghai --isUtc 设置时区为上海
- # X Windows System configuration information
- xconfig --startxonboot
- # System bootloader configuration
- bootloader --location=mbr --boot-drive=sda
- autopart --type=lvm
- # Partition clearing information
clearpart --all --initlabel 清空并初始化磁盘
- %packages
- @base
- @core
- @desktop-debugging
- @dial-up
自动部署客户端
来源: https://www.cnblogs.com/volac/p/10562245.html