浅谈PXE自动化安装Centos系统
PXE概念
- PXE(preboot executeenvironment),预启动执行环境)是由Intel公司开发的技术,工作于C/S的网络模式,支持客户端通过网络从服务器下载映像,并支持客户端机器通过网络启动操作系统,在启动过程中,客户端需要从服务器分配IP地址、掩码、网关以及相关的配置文件路径,再用TFTP(trivial file transfer protocol)协议从服务器下载一个启动软件包到本机内存中执行,由这个启动软件包完成客户端的基本软件设置,从而引导预先安装在服务器中的终端操作系统,PXE可以引导多种操作系统,如:centos、redhat、windows 7等,因此PXE只是一种引导方式,将PC的启动从网卡启动。
PXE的工作过程:
- PXE客户端启动时选择或设置为从网卡启动,向本网络中的DHCP服务器申请IP信息,包括IP地址、掩码、网关等。
- DHCP 服务器返回分配给客户机的IP地址以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上)。
- PXE客户端向本网络中的TFTP服务器获取pxelinux.0 文件。
- PXE Client 取得pxelinux.0 文件后之执行该文件到内存。
- 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核vmlinuz和文件系统init.image 。
- 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装。
PXE工作原理如下图
实验:安装centos系统
准备工作
1. 在服务器端搭建HTTPD、TFTP (tftp-server,centos8)、syslinux dhcp
yum -y install httpd tftp-server syslinux dhcp
systemctl enable --now httpd tftp dhcp
systemctl start httpd tftp.service
注意: 因为dhcp还没有配置文件,所以暂时无法启动
ss -ntulp
查看80
69
端口是否开放
2.准备yum源
- 准备三个光驱挂载6、7、8的ISO光盘
* 扫描出光盘
[root@Centos7 ~]#echo "- - -" > /sys/class/scsi_host/host0/scan
[root@Centos7 ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 50G 0 part /
├─sda3 8:3 0 2G 0 part [SWAP]
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 100G 0 part /data
sr0 11:0 1 4.3G 0 rom
sr1 11:1 1 3.7G 0 rom
sr2 11:2 1 6.7G 0 rom
- 创建目录并挂载
[root@Centos7 ~]#mkdir -pv /var/www/html/centos/{6,7,8}/isos/x86_64
[root@Centos7 ~]#mount /dev/sr0 /var/www/html/centos/7/isos/x86_64
mount: /dev/sr0 is write-protected, mounting read-only
[root@Centos7 ~]#mount /dev/sr1 /var/www/html/centos/6/isos/x86_64
mount: /dev/sr1 is write-protected, mounting read-only
[root@Centos7 ~]#mount /dev/sr2 /var/www/html/centos/8/isos/x86_64
3.准备ks文件
[root@Centos7 /var/www/html]#tree -L 4
.
├── centos
│ ├── 6
│ │ └── isos
│ │ └── x86_64
│ ├── 7
│ │ └── isos
│ │ └── x86_64
│ └── 8
│ └── isos
│ └── x86_64
└── ksdir
├── ks6.cfg
├── ks7.cfg
└── ks8.cfg
11 directories, 3 file
[root@Centos7 /var/www/html/ksdir]#ll
total 12
-rw-r--r-- 1 root root 1235 Nov 13 10:38 ks6.cfg
-rw-r--r-- 1 root root 1434 Nov 13 10:25 ks7.cfg
-rw-r--r-- 1 root root 1742 Nov 13 12:59 ks8.cfg
// 配置三个系统ks文件
[root@Centos7 /var/www/html/ksdir]#vim ks6.cfg
[root@Centos7 /var/www/html/ksdir]#vim ks7.cfg
[root@Centos7 /var/www/html/ksdir]#vim ks8.cfg
4.配置PXE文件
[root@Centos7 ~]#rpm -ql tftp-server
/etc/xinetd.d/tftp
/usr/lib/systemd/system/tftp.service
/usr/lib/systemd/system/tftp.socket
/usr/sbin/in.tftpd
/usr/share/doc/tftp-server-5.2
/usr/share/doc/tftp-server-5.2/CHANGES
/usr/share/doc/tftp-server-5.2/README
/usr/share/doc/tftp-server-5.2/README.security
/usr/share/man/man8/in.tftpd.8.gz
/usr/share/man/man8/tftpd.8.gz
/var/lib/tftpboot
// 这三个文件是centos8 启动需要的
[root@Centos7 ~]#cp /var/www/html/centos/8/isos/x86_64/isolinux/{libutil.c32,ldlinux.c32,libcom32.c32} /var/lib/tftpboot/
cp /var/www/html/centos/7/isos/x86_64/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
//创建 复制内核文件
[root@Centos7 ~]#mkdir -pv /var/lib/tftpboot/{6..8}
[root@Centos7 ~]#cp /var/www/html/centos/8/isos/x86_64/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/8/
[root@Centos7 ~]#cp /var/www/html/centos/7/isos/x86_64/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/7/
[root@Centos7 ~]#cp /var/www/html/centos/6/isos/x86_64/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/6/
[root@Centos7 /var/lib/tftpboot]#tree
.
├── 6
│ ├── initrd.img
│ └── vmlinuz
├── 7
│ ├── initrd.img
│ └── vmlinuz
├── 8
│ ├── initrd.img
│ └── vmlinuz
├── ldlinux.c32
├── libcom32.c32
├── libutil.c32
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg
└── default
4 directories, 12 files
5.创建安装菜单
// 编辑default文件
[root@Centos7 /var/lib/tftpboot/pxelinux.cfg]#vim default
default menu.c32
label linux6
menu label Install CentOS ^6mini
kernel 6/vmlinuz
append initrd=6/initrd.img ks=http://192.168.39.5/ksdir/ks6.cfg
label linux7
menu label Install CentOS ^7mini
kernel 7/vmlinuz
append initrd=7/initrd.img ks=http://192.168.39.5/ksdir/ks7.cfg
label linux8
menu label Install CentOS ^8mini
kernel 8/vmlinuz
append initrd=8/initrd.img ks=http://192.168.39.5/ksdir/ks8.cfg
label local
menu label Boot from ^local drive
localboot 0xffff
配置DHCP
[root@Centos7 /etc/dhcp]#cp /usr/share/doc/dhcp*/dhcpd.conf.example dhcpd.conf
cp: overwrite ‘dhcpd.conf’? y
option domain-name "test.org";
option domain-name-servers 180.76.76.76, 114.114.114.114;
subnet 192.168.39.0 netmask 255.255.255.0 {
range 192.168.39.10 10.254.239.100;
option routers 192.168.39.1;
filename "pxelinux.0";
next-server 192.168.39.5
}
// 检查语句,非常重要
[root@Centos7 /etc/dhcp]#dhcpd -t -cf /etc/dhcp/dhcpd.conf
Internet Systems Consortium DHCP Server 4.2.5
Copyright 2004-2013 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Not searching LDAP since ldap-server, ldap-port and ldap-base-dn were not specified in the config file
// 注意DHCP服务器的地址要静态
[root@Centos7 /etc/dhcp]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO=static
DEFROUTE="yes"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.39.5
GATEWAY=192.168.39.1
NETMASK=255.255.255.0
DNS1=180.76.76.76
[root@Centos7 /etc/dhcp]#nmcli con reload
[root@Centos7 /etc/dhcp]#nmcli con show
NAME UUID TYPE DEVICE
Wired connection 1 ff8d24f2-b45e-3726-aae6-6b9c52be552e ethernet eth0
eth0 c96bc909-188e-ec64-3a96-6a90982b08ad ethernet --
[root@Centos7 /etc/dhcp]#nmcli con up eth0
[root@Centos7 /etc/dhcp]#ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:fb:1b:81 brd ff:ff:ff:ff:ff:ff
inet 192.168.39.5/24 brd 192.168.39.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fefb:1b81/64 scope link
valid_lft forever preferred_lft forever
[root@Centos7 /etc/dhcp]#ping www.baidu.com
PING www.a.shifen.com (61.135.169.121) 56(84) bytes of data.
64 bytes from 61.135.169.121 (61.135.169.121): icmp_seq=1 ttl=128 time=3.80 ms
// 重启DHCPD服务
[root@Centos7 /etc/dhcp]#systemctl restart dhcpd
完