基于CentOS 7的PXE装机

网上各种贴子各种飞总说不到重点,本人表示不喜欢。

基于Centos7PXE装机

基本概念

  • pxe装机依赖几个服务: dhcp/tftp/fileserver
  • dhcp: 为装机分配地址及指明tftp server服务器是谁,下载什么文件
  • tftp: 提供网络引导文件pxelinux.0及内核文件vmlinuz、initrd.img
    • (具体文件: boot.msg initrd.img pxelinux.0 pxelinux.cfg splash.png vesamenu.c32 vmlinuz)
  • fileserver: 提供安装树输出,一般指yum repository (yum 仓库或yum源)
  • syslinux: 网络引导文件pxelinux.0由syslinux软件包提供

dhcp服务

1
2
3
4
yum  -y install  dhcp
rpm -ql dhcp
/etc/dhcp/dhcpd.conf # 主配置文件
/var/lib/dhcpd/dhcpd.leases # 租约文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@master ~]# cat /etc/dhcp/dhcpd.conf  | grep -v ^# | grep -v ^$
option domain-name "digmyth.com";
option domain-name-servers 114.114.114.114;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 172.16.10.0 netmask 255.255.255.0 {
range 172.16.10.20 172.16.10.30;
option domain-name-servers 172.16.10.1;
option domain-name "digmyth.com";
option routers 172.16.10.254;
default-lease-time 600;
max-lease-time 7200;
}
filename "pxelinux.0"; # 定义网络引导文件名
next-server 172.16.10.1; # 定义tftp server地址

启动服务

1
2
3
# systemctl  start dhcpd
[root@master ~]# netstat -unlp | grep 67
udp 0 0 0.0.0.0:67 0.0.0.0:* 995/dhcpd

syslinux提供引导文件

1
2
3
4
准备网络引导文件pxelinux.0  相当于bootloader
# yum -y install syslinux
[root@master tftpboot]# ll /usr/share/syslinux/pxelinux.0
-rw-r--r--. 1 root root 26764 Nov 6 2016 /usr/share/syslinux/pxelinux.0

tftp server

1
2
3
4
5
# yum  -y install tftp tftp-server
[root@master ~]# rpm -ql tftp-server
/etc/xinetd.d/tftp # 启动文件
/usr/sbin/in.tftpd
/var/lib/tftpboot # 服务根目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# cat /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 #改为no
per_source = 11
cps = 100 2
flags = IPv4
}

启动tftp服务

1
2
3
4
# cp  /usr/share/syslinux/pxelinux.0  /var/lit/tftpboot
# systemctl start tftp
# tftp localhost
> get pxelinux.0 # 测试成功

准备内核及其它相关文件

此时pxe己经能够获得地址并下载pxelinux.0进行网络引导,接下来是下载内核文件vmlinuzinitrd.img继续完成装机。
这里我拿CentOS7.2为例:CentOS-7-x86_64-DVD-1511.iso

1
2
3
4
5
[root@master ~]# mount -o loop CentOS-7-x86_64-DVD-1511.iso  /mnt
mount: /dev/loop0 is write-protected, mounting read-only
[root@master pxeboot]# cd /mnt/images/pxeboot/
[root@master pxeboot]# cp vmlinuz /var/lib/tftpboot/
[root@master pxeboot]# cp initrd.img /var/lib/tftpboot/
1
2
3
4
5
6
7
8
9
10
11
12
13
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg /default
[root@master pxelinux.cfg]# cat default
default vesamenu.c32
#default linux # 这里是一个标签,对找后面相应的label
timeout 600

menu title CentOS 7 wxq # 此处定义title
label linux
menu label ^Install CentOS 7 # 此处定义系统安装时显示版本
kernel vmlinuz
append initrd=initrd.img method=http://172.16.10.1/pub/ ks=http://172.16.10.1/pxe/CentOS72.ks
# 注意: 如果此处只定义method,那么装机过程将全手动。

此外还有一些额外文件

1
2
3
4
5
[root@master ~]# ls /mnt/isolinux/
boot.cat grub.conf isolinux.bin memtest TRANS.TBL vesamenu.c32
boot.msg initrd.img isolinux.cfg splash.png upgrade.img vmlinuz
[root@master ~]# ll /var/lib/tftpboot/
boot.msg initrd.img pxelinux.0 splash.png vesamenu.c32 vmlinuz

定义安装树

1
2
3
4
5
# yum  -y install httpd
# mkdir /var/www/html/pxe
# mkdir /var/www/html/pub
# mount --bind /mnt /var/www/html/pub/
# systemctl start httpd

定义ks文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/pxe/CentOS72.ks
[root@master pxe]# cat CentOS72.ks
#version=DEVEL
# System authorization information

install
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
auth --enableshadow --passalgo=sha512

# Use CDROM installation media
# Run the Setup Agent on first boot
#firstboot --enable
# System language
lang en_US.UTF-8

url --url=http://172.16.10.1/pub/
# Use graphical install
graphical
#text

selinux --disabled
skipx

reboot

# Network information
#network --bootproto=static --device=ens33 --gateway=172.16.10.254 --ip=172.16.10.30 --nameserver=114.114.114.114 --netmask=255.255.255.0 --onboot=on --ipv6=auto --activate
network --bootproto=dhcp --device=ens33 --onboot=yes --ipv6=auto --activate
network --hostname=digmyth

# Root password=123456
rootpw --iscrypted $6$6ErC1johQ5LVAYwQ$cGGxb6Q6./SpvXCZs.K39d9LpV/IeFnspUT6mHmsVsARzToRCSsZ4fLxcOh0tYWpt38Yh6JoMzmSEkEtCtMlS/
# System services
services --disabled="chronyd"

# System timezone
timezone Asia/Shanghai --isUtc --nontp
# System bootloader configuration
clearpart --all --initlabel
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information

#clearpart --drives=sda --initlabel
#clearpart --none --initlabel
# Disk partitioning information

#ignoredisk --only-use=sda
#part pv.735 --fstype="lvmpv" --ondisk=sda --size=19979
#volgroup vg --pesize=4096 pv.735
#logvol /boot --fstype="xfs" --size=500 --name=boot --vgname=vg
#logvol / --fstype="xfs" --size=16000 --name=root --vgname=vg
#logvol /data --fstype="xfs" --size=3000 --name=data --vgname=vg
#logvol swap --fstype="swap" --grow --size=1


%packages
@^minimal
@core
kexec-tools
vim
net-tools
sysstat

%end

%post
touch /root/wxq.txt
%end

%addon com_redhat_kdump --enable --reserve-mb='auto'
%end

上面的装机将进入图形界面手动分区安装

pxeboot

到此完结,可以结合cobbler实现多pxe环境并存。

  • cobbler 一些概念:
  • distro发行版: 其实就是pxe所说的相应内核文件
  • profile: 提供pxeboot引导文件、KS文件、安装树(用现有iso镜像mirror/import方式)
是不是很完美 。。。