本文转自https://www.jianshu.com/p/be54c2a9134b 只做学习参考使用
这里介绍的应答文件制作部分,介于图形化,若想参考文本制作,可参考https://blog.csdn.net/sxy2475/article/details/78015262
PXE(PrebootExcutionEnvironment)预启动执行环境,Intel公司研发基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统PXE可以引导和安装Windows,linux等多种操作系统
PXE网络自动化安装:通过搭建网络yum源(http,ftp,nfs三者选一),tftp服务器,dhcp服务器,原理是,通过dhcp服务器,使得机器启动的时候,获取到相关的ip,在dhcp里指定了next-server,该next-server就是tftp服务器的ip,这样,机器获取到ip后,会到指定的tftp服务器的默认路径/var/lib/tftpboot下去下载相关的文件,首先是加载pxelinux.cfg目录下的default文件,该default文件就是安装机器的菜单选项,在这菜单里,指定kickstart文件路径和/var/lib/tftpboot下的initrd.img和vmlinuz的路径,使得需要安装的对应系统能够启动并加载kickstart文件进行安装。在kickstart文件里我们将指定了安装包的路径。
1.客户端向PXE服务器上的dhcp服务发送IP地址请求消息,dhcp服务检测客户端请求是否合法,主要是检测客户机的网卡MAC地址,如果合法则分配给客户端IP地址,同时将启动文件名pxelinux.0和启动文件位置信息一并传送给客户端。
2.客户端向PXE 服务器上的tftp服务发送获取启动文件pxelinux.0请求消息,tftp服务在接收到消息之后向客户端发送pxelinux.0大小信息,询问客户端是否同意使用,当tftp服务收到客户端发回的同意使用信息之后,正式向客户端发送pxelinux.0文件。
3.客户端执行接收到的pxelinux.0文件。
4.客户端向tftp服务器发送针对本机的配置信息文件(在tftp 服务器的pxelinux.cfg目录下),tftp服务器将配置文件发回客户端,继而客户端根据配置文件执行后续操作。
5.客户端向tftp服务器发送Linux内核请求信息,tftp服务器在接收到消息之后将内核文件发送给客户端
6.客户端向tftp服务器发送根文件请求信息,tftp服务器接收到消息之后返回Linux根文件系统给客户端。
7.客户端启动Linux内核
8.客户端下载安装源文件,读取自动化安装脚本
一、安装前准备:
关闭作为DHCP的服务器的防火墙和SELinux,防止以后自动化安装问题出错。DHCP服务器为静态IP。
二、安装DHCP服务
作为以后PXE自动化安装,必须从服务其上拿到相应的IP地址,才能继续自动化安装。
1.以下在VM虚拟机下操作,要做DHCP服务器,需手懂给系统分配IP,并把桥接模式去掉,留下主机模式。
并将使用本地DHCP服务将IP地址分配给虚拟机前面√去掉。
1.安装DHCP:注意几个比较重要的配置文件
[root@centos7 ~]#yum -y install dhcp
[root@centos7 ks]#rpm -ql dhcp
......
/etc/dhcp/dhcpd.conf 注:dhcp的配置文件
/var/lib/dhcpd/dhcpd.leases 注:服务器端查看那些机器从这获取了ip
2.查看配置文件,配置DHCP服务:
[root@centos7 ~]#systemctl start dhcpd 注:刚开始启动,是启动不了DHCP服务,没有配置文件。
[root@centos7 ~]#cat /etc/dhcp/dhcpd.conf
注:默认DHCP服务是没有配置,让我们自己配置或者参考 /usr/share/doc/dhcp*/dhcpd.conf.example文件,
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
[root@centos7 ~]#cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf 注:拷贝模板文件
cp: overwrite ‘/etc/dhcp/dhcpd.conf’? y
# option definitions common to all supported networks...
#option domain-name "example.org"; 选项域名:这里可自己起一个
option domain-name "jie";
#option domain-name-servers ns1.example.org, ns2.example.org; 域名NDS
option domain-name-servers 114.114.114.114,8.8.8.8;
option routers 192.168.18.1;
default-lease-time 600; 默认租赁时间600秒
max-lease-time 7200; 最长时间7200秒
# Use this to enble / disable dynamic dns updates globally.
#ddns-update-style none;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
subnet 192.168.18.0 netmask 255.255.255.0 {
range 192.168.18.100 192.168.18.150;
} 在这添加这台电脑所属的网段参考下面的例子来填。
subnet 10.152.187.0 netmask 255.255.255.0 {
}
3.启动服务:
实验:开一台虚拟机是否从这台DHCP服务器上拿到ip
结果机器成功拿到ip但还不确定是否从这台DHCP拿到的ip,我们可以下命令在DHCP服务其上查看。
[root@centos7 ~]#cat /var/lib/dhcpd/dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-4.2.5
server-duid "\000\001\000\001!\006\036\335\000\014),\257\222";
lease 192.168.18.136 {
starts 6 2017/07/22 14:35:24;
ends 6 2017/07/22 14:45:24;
cltt 6 2017/07/22 14:35:24;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:14:f0:43;
client-hostname "cnetos7";
}
lease 192.168.18.135 {
starts 6 2017/07/22 14:35:24;
ends 6 2017/07/22 14:45:24;
cltt 6 2017/07/22 14:35:24;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:0c:29:14:f0:39;
client-hostname "cnetos7";
}
客户端 :cat /var /lib/dhclient/dhclient.leases
三、为PXE自动化安装,给系统装上必要的软件服务
1.安装软件包:
[root@centos7 ~]#yum -y install httpd :httpd服务走网络自动化安装
[root@centos7 ~]systemctl start httpd :启动httpd服务
[root@centos7 ~]#systemctl enable httpd :开机启用httpd服务
[root@centos7 ~]#yum -y install tftp-server :安装tftp服务端软件包
[root@centos7 ~]systemctl start tftp :启动 tftp服务
[root@centos7 ~]#systemctl enable tftp :开机启用 tftp服务
[root@centos7 ~]#yum -y install syslinux :生成将来服务要用的pxelinux.0等重要文件
[root@centos7 ~]#yum -y install system-config-kickstart :图形化生成系统安装配置文件。
启动服务后查看是否相应端口打开。httpd:80 端口 tftp:69端口
iptables -F关闭防火墙
2.配置共享服务:
实现网络能获取资源安装包:
[root@centos7 ~]#mkdir /var/www/html/centos7 :创建centos7目录存放centos7安装相关文件
[root@centos7 ~]#mkdir /var/www/html/centos6 ::创建centos6目录存放centos6安装相关文件
在机器上挂载centos6和centos 7的安装光盘,也可以把按装光盘里的内容拷贝进相应的目录。这里直接把相应光盘挂载到相应的目录。
[root@centos7 ks]#df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sr0 3.7G 3.7G 0 100% /var/www/html/centos6
/dev/sr1 7.8G 7.8G 0 100% /var/www/html/centos7
[root@centos7 ~]#mount /dev/sr1 /var/www/html/centos/7
[root@centos7 ~]#mount /dev/sr0 /var/www/html/centos/6
注意:在VM上如果挂上两张光盘不能马上识别两张,只识别其中一张是,可重启系统。重启系统后,注意相应的服务打开没有。
通过页面查看是否成功。
通过页面可成功访问,则继续下一步。
3.装备kickstart文件:
kickstart文件通常以cfg结尾,就像我们刚装完操作系统会在root 家目录下生成一个anaconda-ks.cfg的文件,这个文件记录了我们安装操作系统的配置信息。
[root@centos7 ~]#cat anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8
# Network information
network --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --activate
network --bootproto=dhcp --device=ens34 --ipv6=auto --activate
network --hostname=centos7.3.zj.com
# Root password
rootpw --iscrypted $6$9HqkLNFljMIUPxQp$RN/c9R4Aioox2YN9G5CUxp2Tx9adxkTpCDBfEd7q.T2ILpu.N3ui0OX0A1m.RVww1PxEi7vexNbduJC/QVQAe0
# System services
services --disabled="chronyd"
# System timezone
timezone Asia/Vladivostok --isUtc --nontp
user --name=zj --password=$6$fcqC26T/5m2H6wQ4$TR69Lknl3TcGUXChOQP4nedTV3Wrd/hc77p.1ZPRKWnoNKYUr5/DUTDFZK34XUAYlRv92XHRA733FPPYKeW8o. --iscrypted --gecos="zj"
# X Window System configuration information
xconfig --startxonboot
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
autopart --type=plain
# Partition clearing information
clearpart --none --initlabel
%packages
@^gnome-desktop-environment
@base
@core
@desktop-debugging
@dial-up
@directory-client
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@internet-browser
@java-platform
@multimedia
@network-file-system-client
@networkmanager-submodules
@print-client
@x11
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --notempty
pwpolicy luks --minlen=6 --minquality=50 --notstrict --nochanges --notempty
%end
kickstart的文件我们可以按照原本系统完成安装的anaconda-ks.cfg作为模板来修改,也可以通过system-config-kickstart 来生成cfg文件
选择安装包这里centos7上默认不可选着,这时我们可以修改yum源的repo文件名称改为development.(不知这是否是一个bug)以上是生成centos7的kickstart配置文件,可根据自己的需求再详细配置。生成centos6的kickstart需在centos6的系统完成以上相同的步骤即可。
也可以通过查看centos7.3.cfg文件,与系统的anaconda-ks.cfg文件其实是大同小异。
[root@centos7 ~]#cat centos7.3.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password #设置root密码
rootpw --iscrypted $1$8jkYz2Hx$8IafUvMALxHgdMtM//D.Q.
# Use network installation
url --url="http://192.168.18.144/centos7" #指定安装使用的yum源路径
# System language
lang en_US
# Firewall configuration
firewall --disabled
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical
firstboot --disable
# SELinux configuration
selinux --disabled
# Network information
network --bootproto=dhcp --device=ens33
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Partition clearing information
clearpart --all
# Disk partitioning information
part / --fstype="xfs" --size=50000
part /boot --fstype="xfs" --size=500
part swap --fstype="swap" --size=2048
%packages #要安装的软件包
@base
@gnome-desktop
%end
把生成的centos7.3.cfg和centos6.9.cfg文件存到相应的网络路径中
[root@centos7 ~]#mkdir /var/www/html/ks :生成ks目录,用于存放centos6和centos7的kickstart文件。
[root@centos7 ~]#cp /root/centos7.3.cfg /var/www/html/ks/ :centos7上拷贝centos7.3.cfg文件到/var/www/html/ks/目录下
[root@centos6 ~]#scp centos6.9.cfg 192.168.18.144:/var/www/html/ks/
:在centos6上的centos6.9.cfg 传到/var/www/html/ks/目录下。
前面配置过DHCP服务,这里我们只需添加pxelinux.0信息
subnet 192.168.18.0 netmask 255.255.255.0 {
range 192.168.18.100 192.168.18.150;
option routers 192.168.18.1;
filename "pxelinux.0"; #指定PXE引导程序的文件名
next-server 192.168.18.144; #指定TFTP服务器的地址
}
subnet 10.152.187.0 netmask 255.255.255.0 {
}
注明:filename这一个选项很重要,它的作用是指明bootstrap所在的位置,一般是指向一个TFTP服务器的某个目录下。这里是相对路径,其中路径的上半部分在的一个配置文件之中。
[root@centos7 ~]#systemctl restart dhcpd 重启DHCP服务。
五、整理准备相关文件
[root@centos7 ~]#mkdir /var/lib/tftpboot/pxelinux.cfg/ :在/var/lib/tftpboot/生成pxelinux.cfg目录为将来生成default菜单。
[root@centos7 ~]#cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/ :拷贝pxelinux.0(引导程序)menu.c32(背景图片)到/var/lib/tftpboot/下
[root@centos7 ~]#mkdir /var/lib/tftpboot/centos6 :创建centos6目录存放centos6的内核引导文件。
[root@centos7 ~]#cp /var/www/html/centos6/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6 :拷贝centos6光盘的vmlinuz,initrd.img文件到/var/lib/tftpboot/里
[root@centos7 ~]#mkdir /var/lib/tftpboot/centos7 :创建centos7目录存放centos7的内核引导文件。
[root@centos7 ~]#cp /var/www/html/centos7/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7 :拷贝centos7光盘的vmlinuz,initrd.img文件到/var/lib/tftpboot/里
六、配置启动菜单
可参考根据系统光盘文件的isolinux目录下isolinux.cfg文件修改。
[root@centos7 ~]#vim /var/lib/tftpboot/pxelinux.cfg/default
[root@centos7 ~]#cat /var/lib/tftpboot/pxelinux.cfg/default :这里配置default启动菜单如下。
default menu.c32
timeout 600
menu title PXE CentOS Linux 7 and 6 Install Menu
label autocentos7 :自动安装centos7
menu label ^Automatic Mini Install CentOS 7
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://192.168.18.144/ks/centos7.3.cfg
label manualcentos7 :手动安装centos7
menu label ^Manual Install CentOS 7
kernel centos7/vmlinuz
append initrd=centos7/initrd.img inst.repo=http://192.168.18.144/centos7
label autocentos6 :自动安装centos6
menu label Automatic ^Mini Install CentOS 6
kernel centos6/vmlinuz
append initrd=centos6/initrd.img ks=http://192.168.18.144/ks/centos6.9.cfg
label manuallcentos6 :手动安装centos7
menu label ^Manual Install CentOS 6
kernel cenots6/vmlinuz
append initrd=centos6/initrd.img inst.repo=http://192.168.18.144/centos6
label local :默认本地安装
menu label Boot from ^local drive
menu default
localboot 0xffff
七、检查各项配置
在/var/lib/tftpboot/里的文件目录如下
[root@centos7 ~]#tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── centos6
│ ├── initrd.img
│ └── vmlinuz
├── centos7
│ ├── initrd.img
│ └── vmlinuz
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg
└── default
到这里PEX自动化安装配置文件就全部完成。
八、测试安装
选择网络启动安装
成功进入并从服务器获取了ip,将执行PEX自动化安装centos
这里分别测试centos7和centos6的自动安装
centos6成功进入字符界面开始安装。
稍等片刻centos6成功完成安装。
centos7稍等片刻也进入图形自动化安装界面如需字符界面可在centos7.3.cfg文件修改
[root@centos7 ~]#cat /var/www/html/ks/centos7.3.cfg
......
# System authorization information
auth --useshadow --passalgo=sha512
# Use graphical install
graphical 注:这里改为text即为安装时为字符界面安装
firstboot --disable
# SELinux configuration
selinux --disabled
......