要安裝一個操作系統,首先要理解系統的啓動引導過程。要有這麼幾項,引導文件-比如硬盤的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 <<EOF
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoVMMkxrUCx8iKCdZsJOKNjJp2VG5D+KkXwS+/d4H+oQH0dYS2fSZMcsgNxzXhgxz915/2pnMx/XHPlONEkzzCmrRwdO0DIoKPEvfIeA99G4+AIha2Hjg6ilosNZ0GqOBdXuCjKJxyraEgRMdmoyUX0DYuhZNfSvUUMseKtHlBVPgWna9PscxOZUsnQAoBcGTewZaOTKEqzuK3Ug0cPyfID4vtN4thh+09TJqoc85TFPhrR3CMBml2zYnFfavP23Oga2bfW2bbG20z70enEKuV0JqgTCmZ5OsYzHtKOEhrJ2KfzqKAc2mbJGmCTg0oywOZL7N9vLynohNXzIb7vOc/ [email protected]
EOF
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
%end
```
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 <<EOF
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoVMMkxrUCx8iKCdZsJOKNjJp2VG5D+KkXwS+/d4H+oQH0dYS2fSZMcsgNxzXhgxz915/2pnMx/XHPlONEkzzCmrRwdO0DIoKPEvfIeA99G4+AIha2Hjg6ilosNZ0GqOBdXuCjKJxyraEgRMdmoyUX0DYuhZNfSvUUMseKtHlBVPgWna9PscxOZUsnQAoBcGTewZaOTKEqzuK3Ug0cPyfID4vtN4thh+09TJqoc85TFPhrR3CMBml2zYnFfavP23Oga2bfW2bbG20z70enEKuV0JqgTCmZ5OsYzHtKOEhrJ2KfzqKAc2mbJGmCTg0oywOZL7N9vLynohNXzIb7vOc/ [email protected]
EOF
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
%end
```
上述應答文件密碼爲"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
```
至此,一個自動安裝系統服務就搭建完畢。