要安装一个操作系统,首先要理解系统的启动引导过程。要有这么几项,引导文件-比如硬盘的MBR,引导菜单-grub,虚拟系统镜像文件,操作系统内核文件,最后是各种安装包。那么怎么通过pxe来引导操作系统实现安装呢?其实支持pxe安装的网卡,内置了tftp客户端及dhcp客户端。首先从dhcp获取ip地址,同时dhcp服务器会告诉来访者通过pxe启动需要的引导文件名称及tftp服务器的IP。继而主机找到tftp服务器获取pxelinux.0引导文件,menu.c32菜单样式文件及default菜单配置文件。到这一步就可以看到启动菜单项了,接下来需要根据用户选择来加载相对应的虚拟系统镜像加载启动内核。所以tftp服务器还要有对应的initrd.img及vmlinuz内核文件。由于tftp不支持大文件,所以各种安装包及驱动要从http服务器获取。因此还要配置http服务器,挂载对应的系统iso镜像文件。那么下面来详细说明实现步骤。
1 前置条件,关闭防火墙,关闭selinu,时间同步。在此基础上安装dhcp服务
1.1 配置其中个网卡为规划的网段地址
```
[root@main html]#cat /etc/sysconfig/network-scripts/ifcfg-ens37
DEVICE=ens37
NAME=ens37
PREFIX=24
IPADDR=10.10.10.254
BOOTPROTO=none
ONBOOT=yes
```
1.1.2 运行安装脚本,配置dhcpd配置文件,并启动dhcpd服务
```
#!/bin/bash
##DHCP ------------------------------------
##install dhcp,before start this service,be sure you have this subnet ip
yum install dhcp -y
Subnet="10.10.10.0"
NetMask="255.255.255.0"
Range="10.10.10.2 10.10.10.200"
Router="10.10.10.1"
Search="ruitais.com"
NameServer="114.114.114.114,180.76.76.76"
cat /dev/null > /etc/dhcp/dhcpd.conf
cat > /etc/dhcp/dhcpd.conf << EOF
#day=86400s
default-lease-time 86400;
max-lease-time 864000;
option domain-name "$Search";
option domain-name-servers $name-servers;
subnet $Subnet netmask $NetMask {
range $Range;
option routers $Router;
filename "pxelinux.0"; ##配置pxe引导的文件名,告诉每个来获取ip的主机
next-server 10.10.10.254; ##配置pxe引导的tftp地址,告诉每个来访的主机
}
EOF
systemctl start dhcpd.service
systemctl enable dhcpd.service
```
2 配置http服务器,yum源,及应该文件
2.1 安装yum install httpd -y
2.2 复制安装光盘镜像至指定目录,并挂载至http服务根下对应目录。
```
[root@main data]#ls
CentOS-6.10-x86_64-bin-DVD1.iso CentOS-7-x86_64-Everything-1810.iso //镜像文件复制到/data下。
[root@main data]#vim /etc/fstab //编辑,在后追加两行
/data/CentOS-7-x86_64-Everything-1810.iso /var/www/html/centos/7/ox/x86_64 iso9660 defaults 0 0
/data/CentOS-6.10-x86_64-bin-DVD1.iso /var/www/html/centos/6/ox/x86_64 iso9660 defaults 0 0
[root@main data]#mount -a //挂载iso文件
```
3 制作应答文件,放置在http服务器对应的目录,
3.1 参考安装好的系统的ks文件
[root@localhost ~]# cat /root/anaconda-ks.cfg
3.2 用system-config-kickstart生成应答文件.
yum install system-config-kickstart -y
3.3 centos7 最小化安装应答文件参考。
```
[root@localhost ~]#cp /root/centos7_ks.cfg /var/www/html/centos/7/ //复制应答文件到对应的版本目录
[root@main html]#cat /var/www/html/centos/7/centos7_ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$qOLmFLxc$13.2FhiY5XL5omse2kX9y.
# Use network installation
url --url="http://10.10.10.254/centos/7/ox/x86_64/"
# System language
lang en_US
# System authorization information
auth --useshadow --passalgo=sha512
# Use text mode install
text
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Firewall configuration
firewall --disabled
# Network information
network --bootproto=dhcp --device=eth0
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# System bootloader configuration
bootloader --append="net.ifnames=0" --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all
# Disk partitioning information
part / --fstype="xfs" --size=10240
part /home --fstype="xfs" --size=20480
part /boot --fstype="xfs" --size=1024
part swap --fstype="swap" --size=4096
part /data --fstype="xfs" --size=40960
%post
mkdir /root/.ssh
cd /root/.ssh
cat > authorized_keys <
```
3.4 centos6最小化安装参考
```
[root@localhost ~]#cp /root/ks6_mini.cfg /var/www/html/centos/6/ ##复制应答文件到对应的版本目录
[root@main html]#cat /var/www/html/centos/6/ks6_mini.cfg
#version=DEVEL
install
url --url=http://10.10.10.254/centos/6/ox/x86_64/
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $1$qOLmFLxc$13.2FhiY5XL5omse2kX9y.
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
clearpart --all
zerombr
reboot
text
part /boot --fstype=ext4 --size=1024
part / --fstype=ext4 --size=50000
part /data --fstype=ext4 --size=30000
part swap --size=2048
%packages
@base
@core
autofs
%end
%post
mkdir /root/.ssh
cd /root/.ssh
cat > authorized_keys <
```
上述应答文件密码为"centos7",并且执行了安装后脚本,把root公钥文件配好,系统安装后可以直接ssh方式连接,免密登录,注意使用时替换成自己的公钥
4 制作启动引导文件,及引导菜单(包括样式及内容)
4.1 安装tftp制作启动菜单,采用menu.c20,pexlinux.0 文件,放置在tfpt目录中.
```
[root@main 7]#yum install syslinux //生成menu.c32及pexlinux.0文件
[root@main 7]#yum install tftp-server
[root@main 7]#systemctl start tftp.service //启动fttp服务
[root@main 7]#cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/ //拷贝menu.c32以及pexlinux.0引导文件到tftp根目录下
[root@main 7]#cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@main tftpboot]#pwd
/var/lib/tftpboot
[root@main tftpboot]#ls
menu.c32 pxelinux.0
```
4.2 根据安装盘的菜单文件修改现有菜单。
```
[root@main tftpboot]# mkdir pxelinux.cfg
[root@main tftpboot]#cat pxelinux.cfg/default
default menu.c32
timeout 600
menu title Auto Install CentOS for Ruitais
label linux7
menu label Install ^Mini CentOS 7
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://10.10.10.254/centos/7/centos7_ks.cfg
label linux6
menu label Install CentOS ^6 Mini
kernel centos6/vmlinuz
append initrd=centos6/initrd.img ks=http://10.10.10.254/centos/6/ks6_mini.cfg
label local
menu label Boot from ^local drive
menu default
localboot 0xffff
```
//注意事项:
kernel 字段指明内核的相对路径,路径参考点是pxelinux.0引导文件所在的目录。
append initrd 指明引导系统的虚拟镜像文件
ks 表示应答文件所在的位置,支持http路径,与http配置的ks文件路径对应
最后memu default 指明默认的选中项。
5.1 tftp服务器文件目录明细
```
[root@main tftpboot]#tree
.
├── centos6
│ ├── initrd.img //centos6的启动虚拟镜像
│ └── vmlinuz //centos6的内核文件
├── centos7
│ ├── initrd.img //centos7的启动虚拟镜像
│ └── vmlinuz //centos7的内核文件
├── menu.c32 //pxe引导的菜单样式文件
├── pxelinux.0 //pxe引导文件
└── pxelinux.cfg
└── default //pxe菜单的配置文件
```
5.2 http服务器文件目录明细
```
[root@main html]#tree -L 5 //根目录html
.
└── centos
├── 6
│ ├── ks6_mini.cfg //centos6的应答文件
│ └── ox
│ └── x86_64 //此目录挂载centos6的iso镜像
│ ├── CentOS_BuildTag
│ ├── EFI
│ ├── EULA
│ ├── GPL
│ ├── images
│ ├── isolinux
│ ├── Packages
│ ├── RELEASE-NOTES-en-US.html
│ ├── repodata
│ ├── RPM-GPG-KEY-CentOS-6
│ ├── RPM-GPG-KEY-CentOS-Debug-6
│ ├── RPM-GPG-KEY-CentOS-Security-6
│ ├── RPM-GPG-KEY-CentOS-Testing-6
│ └── TRANS.TBL
└── 7
├── centos7_ks.cfg //centos7的应答文件
└── ox
└── x86_64 //此目录挂载centos7的ios镜像
├── CentOS_BuildTag
├── EFI
├── EULA
├── GPL
├── images
├── isolinux
├── LiveOS
├── Packages
├── repodata
├── RPM-GPG-KEY-CentOS-7
├── RPM-GPG-KEY-CentOS-Testing-7
└── TRANS.TBL
18 directories, 17 files
```
至此,一个自动安装系统服务就搭建完毕。