为了不必要的麻烦,可以暂时禁用selinux
setenforce 0
为了简单,直接禁用firewalld:
systemctl disable firewalld
systemctl stop firewalld
确认防火墙放行相应的数据包,或直接暂时删除或防火墙的规则
iptables -F
整个过程需要三种协议的支持:dhcp、tftp、http(或ftp)。
dhcp用来使得机器获取ip地址、next server等信息。next server告诉机器下一步去哪台机器拉取与安装相关的文件。
tftp协议负责传输启动安装界面所需要的文件。
真正安装的时候,所需要的文件,由http(或者ftp)传输。
配置httpd的细节不再详述。
配置dhcp服务器,主要设置好 next-server 和 filename 两项。
关于tftp server的配置,大部分介绍都是错误的。大都采用xinet的方式启动tftp server,其实不必要。很多英文网站的介绍也是错的,这是我发现的为数不多的、英文网站大部分介绍都是错误的情况。这篇文章的观点和我相同,这里是这篇文章的备用地址。已经在机器上测试过,删除xinetd之后,并不影响tftp,下面是例子。
[root@localhost ~]# netstat -anpu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:3809 0.0.0.0:* 665/dhclient
udp 0 0 0.0.0.0:68 0.0.0.0:* 665/dhclient
udp 0 0 127.0.0.1:323 0.0.0.0:* 618/chronyd
udp6 0 0 :::16079 :::* 665/dhclient
udp6 0 0 ::1:323 :::* 618/chronyd
[root@localhost ~]#
[root@localhost ~]# rpm -ql xinetd
package xinetd is not installed
[root@localhost ~]#
[root@localhost ~]# systemctl start tftp
[root@localhost ~]#
[root@localhost ~]# netstat -anpu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
udp 0 0 0.0.0.0:3809 0.0.0.0:* 665/dhclient
udp 0 0 0.0.0.0:68 0.0.0.0:* 665/dhclient
udp 0 0 127.0.0.1:323 0.0.0.0:* 618/chronyd
udp6 0 0 :::16079 :::* 665/dhclient
udp6 0 0 :::69 :::* 1/systemd
udp6 0 0 ::1:323 :::* 618/chronyd
[root@localhost ~]#
[root@localhost ~]# echo 123412341234123 > /var/lib/tftpboot/t
[root@localhost ~]#
[root@localhost ~]# tftp 127.0.0.1
tftp> get t
tftp> [root@localhost ~]#
[root@localhost ~]#
[root@localhost ~]# cat t
123412341234123
[root@localhost ~]#
弄明白每步的作用之后,配置并不困难。
通过wireshark抓包之后,可以观察到dhcp和用tftp传输pxelinux.0(这个文件名是配置在dhcp中的)的过程,截图如下。
这篇文章靠谱,作者采用了xinetd的方式启动tftp server。备份地址