回顾:
dhcp包有两个:dhcpd和dhcrelay
dhcpd的配置文件:/etc/dhcp/dhcpd.conf
option routers GW;
option domain-name-servers IP,IP,IP;
default-lease-time;
max-lease-time;
subnet NET netmask MASK {
range ;
...
}
host HOST_ID {
hardware ethernet MAC;
fixed-address IP;
}
分配信息库:
/var/lib/dhcp/dhcpd.leases~
客户端命令:dhclient
-d:运行在前台;
其他配置选项:
filename:指明引导文件名称;可以理解为bootloader文件
next-server:指明引导所在的服务主机的IP地址;这个server一般为tftp server
示例:
filename "pxelinux.0";
next-server 172.18.100.6;
tftp:trivial ftp琐碎简单ftp 使用udp协议
pxe:
PXE:preboot excution environment,Intel牵头
流程:
没有安装操作系统的主机能够完成基于网络引导的安装或者启动操作
1、客户端的网卡必须支持网络引导机制,并且调整为第一启动引导设备
2、主机唤醒之后,开始加载网络引导应用时,网卡会在本地局域网络中广播一个rarp协议,获得一个IP地址,同时还会获得要加载的文件名称和文件serverIP
2、文件会在内存中展开,基于此文件去加载一个内核文件(也是从server获取),内核还需要依赖于initrd这样的虚根来完成对真实根所在的设备的驱动的加载,内核文件通常是专为系统安装所设定的,因此如果给它配置了网络属性的话,接着这个内核文件还需要基于网络把自己扮演成某种协议的客户端,去启动能加载安装程序的程序包,在本地完成安装并启动应用程序,而此程序在另一个基于http、ftp、nfs提供的yum仓库服务器上,读取kickstart文件,基于kickstart解决依赖关系,基于基础镜像仓库完成后续的所有安装过程。
网络引导安装会依赖于一个基础镜像仓库(可以理解为一个yum仓库)
CentOS:
dhcp(ip/netmask,gw,dns;filename,next-server)
tftp server(bootloader,kernel,initrd)
yum repository(ftp,http,nfs)
kickstart文件:自动完成操作
tftp server:
centos6:
chkconfig tftp on
service xinetd restart
centos7:
systemctl start tftp.socket
systemctl enable tftp.socket---设置为开机自动启动
默认的文件根目录:/var/lib/tftpboot/
配置PXE环境:
CentOS 7:
yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot
mkdir /var/lib/tftpboot/pxelinux.cfg/
vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32---以菜单方式显示安装界面或者引导界面
prompt 5---菜单界面显示给用户5秒钟
timeout 30---菜单界面显示超时,如果不选择就超时
MENU TITLE CentOS 7 PXE Menu---MENU TITLE是固定的,后边的字符串可以随便写,指定一个菜单项
LABEL linux---标签
MENU LABEL Install CentOS 7 x86_64---菜单中显示的是什么install后边的字符串随便写,这是菜单某一个条目的标题
KERNEL vmlinuz---这个菜单项的内核
APPEND initrd=initrd.img---向内核附加的参数 inst.repo=http://192.168.10.9/centos/7/x86_64
LABEL linux_autoinst---标签
MENU LABEL Install CentOS 7 x86_64 auto---菜单中显示的是什么install后边的字符串随便写,这是菜单某一个条目的标题
KERNEL vmlinuz---这个菜单项的内核
APPEND initrd=initrd.img---向内核附加的参数 inst.repo=http://192.168.10.9/centos/7/x86_64 ks=http://192.168.10.9/kickstarts/centos7.cfg---kickstart文件
CentOS 6:
yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot
cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.png} /var/lib/tftpboot
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default---编辑这个文件不需要指定inst.repo,只需要指定ks文件即可
内容如下所示:
display boot.msg
menu background splash.jpg
menu title Welcom to CentOS 6.7!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #fffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #00000000
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label zutoinst
menu label ^Auto Install CentOS---^表示ctrl,表示一个控制符,表示按A快速定位
menu default
kernel vmlinuz
append initrd=initrd.img
label linux
menu label ^Install or upgrade an existing system
kernel vmlinuz
append initrd=initrd.img
label vesa
menu lebel Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img nomodeset---不做模式设定,启动时使用600×480的基本显卡驱动
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append ~
下面演示tftpserver---文件路径在/var/lib/tftpboot/
yum -y install tftp tftp-server---同时安装客户端和服务端
systemctl start tftp.socket
systemctl enable tftp.socket
ss -unl---udp协议的69端口
然后就可以使用客户端连接上去了
然后把这台server配置成dhcp服务器,
vim /etc/dhcp/dhcpd.conf
option domain-name "magedu.com";
option routers 192.168.10.9;
option domain-name-servers 172.18.0.1;
default-lease-time 43200;
max-lease-time 86400;
log-facility local7;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.101 192.168.10.120;
filename "pxelinux.0";
next -server 192.168.10.9;
}
配置完成后
systemctl restart dhcpd.service
ss -unl---67端口
然后创建一个仓库:通过http协议来访问
mkdir -pv /var/www/html/centos/7/x86_64
mount -r /dev/cdrom /var/ww/html/centos/7/x86_64---把cdrom中的文件挂载到http server中,当作yum仓库
systemctl start httpd.service
然后创建一个kickstart文件
mkdir -pv /var/www/html/kickstarts
vim /var/www/html/kickstarts/centos7.cfg
install
xconfig --startxonboot
keyboard --vckeymap=cn --xlayouts='cn'
reboot
rootpw --iscrypted $HDHf2v4i$LMo.xGHfxQDOf8e043C.g/
timezone Asia/Shanghai
url --url="http://192.168.10.9/centos/7/x86_64"
lang zh_CN
user --groups=wheel --name=mageedu --password=$6$1eWr0etY$DfLZgqu... --isrypted --gecos="MageEdu"
firewall --disabled
network --bootproto=dhcp --device=eth0
auth --useshadow --passalgo=sha512
text
firstboot --disable
selinux --permissive
ignoredisk --only-use=sda
bootloader --location=mbr --boot-drive=sda
zerombr
clearpart --all --initlabel
part /boot --asprimary --fstype="xfs" --size=512
part swap --fstype="swap" --size=2048
part /usr --fstype="xfs" --size=20480
part / --fstype="xfs" --size=20480
%packagesbr/>@base
@core
lftp
screen
wget
tree
%end
kickstart文件准备好了以后,
vim /etc/yum.repos.d/CentOS-Base.repo
把baseurl替换为本地挂载的光盘文件路径
baseurl=file:///var/www/html/centos/7/x86_64
yum -y install syslinux
rpm -ql syslinux---可以看到有一个pxelinux.o文件
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
此时还需要内核文件(一定要与当前系统版本保持一致)和initrd文件
在/var/www/html/centos/7/x86_64/images/pxeboot下有initrd.img文件和vmlinuz内核文件
cp /var/www/html/centos/7/x86_64/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /usr/share/syslinux/{chain.c32,memdisk,menu.c32,mboot.c32} /var/lib/tftpboot/---还需要一些启动菜单,centos7系统下选择这些:menu.c32字符界面用到,vesamenu.c32图形界面会用到,memdisk把内存当成磁盘,方便initrd需要
cd /var/lib/tftpboot/
mkdir pxelinux.cfg
cd /pxelinux.cfg
vim default
default menu.c32---以菜单方式显示安装界面或者引导界面
prompt 5---菜单界面显示给用户5秒钟
timeout 30---菜单界面显示超时,如果不选择就超时
MENU TITLE CentOS 7 PXE Menu---MENU TITLE是固定的,后边的字符串可以随便写,指定一个菜单项
LABEL linux---标签
MENU LABEL Install CentOS 7 x86_64---菜单中显示的是什么install后边的字符串随便写,这是菜单某一个条目的标题
KERNEL vmlinuz---这个菜单项的内核
APPEND initrd=initrd.img---向内核附加的参数 inst.repo=http://192.168.10.9/centos/7/x86_64
LABEL linux_autoinst---标签
MENU LABEL Install CentOS 7 x86_64 auto---菜单中显示的是什么install后边的字符串随便写,这是菜单某一个条目的标题
KERNEL vmlinuz---这个菜单项的内核
APPEND initrd=initrd.img---向内核附加的参数 inst.repo=http://192.168.10.9/centos/7/x86_64 ks=http://192.168.10.9/kickstarts/centos7.cfg---kickstart文件
systemctl start httpd.service
然后找一个客户端就可以用pxe网络引导了,但是只能到加载内核这一步,因为没有指定安装路径,安装程序,这里能看到IP只是网卡的IP,不是内核的IP,因为没有系统
在网络引导出现菜单的时候,按table键,指定参数
vmlinuz initrd=initrd.img ip=192.168.10.11 netmask=255.255.255.0 inst.repo=http://192.168.10.9/centos/7/x86_64/---指定之前要配置内核的IP地址
但是每次安装系统时指定IP等参数太麻烦了,所以可以在default配置文件中添加
客户端
tftp 192.168.10.9---就可以连接,出现tftp的命令行提示符,可以使用help显示帮助信息
转载于:https://blog.51cto.com/13852573/2408166