基本流程:
1、网卡作为可引导的启动设备
2、BIOS找到引导设置网卡,激活网卡的PXE功能
3、客户端通过PXE的内置dhcp客户端尝试DHCP广播请求,从DHCP服务器获取IP地址、掩码、网关、网络属性
4、DHCP服务器告知客户端tftp服务器地址(next-server),将 "filename "pxelinux.0";" 参数中指定的文件(pxelinux.0)推送给客户端;
5、PXE的内置tftp客户端到指定tftp服务器下载启动镜像文件pxelinux.0后,在内存展开启动文件。
6、客户端 pxelinux.0 程序读取 tftp 服务器上的配置文件default(通常是 /tftpboot/pxelinux.cfg/default)
7、先读取vmlinuz、initrd.img,然后加载安装管理程序anaconda-ks.cfg脚本配置文件
8、anaconda程序根据脚本配置文件查找安装源(HTTP,NFS,FTP)
9、anaconda按需执行自动化安装
本文实验环境 :
# uname -r 2.6.32-431.el6.x86_64 # cat /etc/system-release CentOS release 6.5 (Final) # setenforce 0 # 临时关闭SELinux # 修改文件永久生效使/etc/sysconfig/selinux的 SELINUX=disabled # service iptables stop # 关闭iptables
DHCP服务器配置
1、配置dhcp服务
DHCP服务器服务端口为UDP67,客户端服务端口为UDP68
DHCP基本工作原理:
# yum -y install dhcp # cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf #复制dhcpd的示例配置文件 #修改配置文件为/etc/dhcp/dhcpd.conf # dhcpd.conf option domain-name "magedu.com"; # 指定网域域名 option domain-name-servers 172.16.0.1,8.8.8.8; # 域名服务器ip,多个IP用逗号分隔。 default-lease-time 6000; # 默认租约时长,时间为秒 max-lease-time 8000; # 最大租约时间 log-facility local7; # log日志设备类型 subnet 172.16.0.0 netmask 255.255.0.0 { # DHCP服务器自身网段及子网掩码 range 172.16.19.50 172.16.19.100; # 地址池,动态分配IP地址的范围 option routers 172.16.0.1; # 路由地址 next-server 172.16.19.2; # TFTP服务器ip地址 filename "pxelinux.0"; # PXE启动引导文件 } # service dhcpd configtest # 检查配置文件是否有语法错误 # service dhcpd start # 重启DHCP服务 # ss -utnl |grep 67 # 查看DHCP的67端口是否打开
TFTP服务器相关配置:
2、配置TFTP
# yum -y install tftp-server tftp # 安装tftp-server和tftp # chkconfig tftp on # 加入开机自启动 # service xinetd restart # 重新启动xinetd服务 # ss -unl | grep :69 # 查看69端口是否打开
TFTP服务器端口号为69,UDP协议。
配置文件默认即可,tftp 服务的默认根目录是/var/lib/tftpboot/ 。
#在centos5默认根目录是/ftfpboot,且需要修改配置文件/etc/xinetd.d/tftp 的一项disabled=no
#在cetnos7和cetnos6.5一样无需配置,根目录相同。
配置文件其中的一项:server_args= -s /var/lib/tftpboot
-s :指定tftp服务器的根目录
-v 指定把日志输出到/var/log/messages中
3、提供PXE的工作环境
pxelinux 是一个由 syslinux 派生出的支持 PXE 环境的 bootloader,它可以从网络引导一个Linux操作系统。
启动引导文件pxelinux.0
# yum -y install syslinux(默认已安装) # rpm -ql syslinux |grep pxelinux.0 # 查找启动引导文件pxelinux.0 # cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #复制到tftp根目录下
4、提供引导内核等文件
启动镜像pxelinux.0文件在执行过程中,会读取配置文件以确定它应该载入什么Linux内核文件来运行。
所有的配置文件都放在启动服务器的/var/lib/tftpboot/pxelinux.cfg/目录下,此目录需要手动创建。
pxelinux.0根据一定的规则来搜索合适的配置文件名。
# mount /dev/cdrom /media/cdrom/ #挂载光盘 # cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ # 复制内核相关文件 # cp /media/cdrom/isolinux/{splash.jpg,vesamenu.c32,boot.msg} /var/lib/tftpboot # 复制启动图形菜单界面相关文件 # mkdir /var/lib/tftpboot/pxelinux.cfg/ # cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default # 启动配置文件
/var/lib/tftpboot/目录树 1 directory, 7 files ├── boot.msg # Linux启动菜单配置信息,可手动修改。 ├── initrd.img # 内存虚拟文件系统。用来临时的引导硬件到内核vmlinuz。 ├── pxelinux.0 # PXE的启动引导文件, ├── pxelinux.cfg # 启动配置文件目录,手动创建,载入什么Linux内核文件来运行 │ └── default # /medir/cdrom/isolinux/isolinux.cfg ├── splash.jpg # 图形界面的背景图片,图片格式 640*480 jpg/png ├── vesamenu.c32 # 菜单主程序,启动图形界面,不可修改。 └── vmlinuz # 是可引导的、压缩的内核文件
启动配置文件default
# /var/lib/tftpboot/pxelinux.cfg/ default default vesamenu.c32 # 默认加载菜单主引导程序 #prompt 1 timeout 600 # 设置超时时间 display boot.msg # 显示主菜单 menu background splash.jpg # 设置菜单背景图片 menu title Welcome to CentOS 6.5! # 设置菜单标题 menu color border 0 #ffffffff #00000000 # 设置菜单字体颜色 ... ... ... label linux # 设置标签 menu label ^Install or upgrade an existing system # 设置菜单标签 menu default # 设置默认选择菜单 kernel vmlinuz # 设置内核文件位置,根目录为TFTP服务器根目录 append initrd=initrd.img ks=http://172.16.19.2/centos6.cfg # 设置启动时加载kickstart文件 ... ... .... label rescue menu label ^Rescue installed system kernel vmlinuz append initrd=initrd.img rescue ..............
HTTP服务器
5、提供安装源
本文基于http服务实现,使用光盘的镜像文件作为安装源。
# yum -y install httpd # mkdir -pv /var/www/html/centos6 # 创建安装源目录 # mount --bind /media/cdrom /var/www/html/centos6/ # 绑定目录, 是将一个目录中的内容挂载到另一个目录上 # service httpd restart # 重启服务 # ss -tnl |grep 80 # 查看http服务是否监听
kickstart
6、提供ks.cfg文件
可以使用命令system-config-kickstart命令(使用Xshell远程ssh工具,安装Xmanger包)打开,打开图形窗口,按需定制操作系统,最后保存配置文件。
注意:如果使用root根目录下面的anaconda-ks.cfg配置文件进行修改,则需要查看其权限,保证其有可读权限,604即可。anaconda-ks.cfg默认为600,如果权限不够,会提示找不到ks文件。
Kickstart基本步骤:
1、创建Kickstart文件
使用system-config-kickstart
使用文本编辑器手动编辑
2、为安装程序提供Kickstart文件
网络服务器:FTP、HTTP和NFS
DHCP/TFTP服务器
USB磁盘 或 CD-ROM
本地硬盘
3、引导安装程序
安装磁盘
PXE
boot.iso
4、使安装程序指向Kickstart文件
ks=http|ftp://server/dir/file
ks=nfs:server:/dir/file
ks=hd:device:/dir/file
ks=cdrom:/dir/file
基于isolinux目录创建引导盘:
# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.5 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/
安装与配置:
# yum install system-config-kickstart # 安装包 # system-config-kickstart # 配置命令。 # 本文使用本机上已存在的anaconda-ks.cfg作为模板编辑,另存为centos6.cfg # ksvalidator /root/centos6.cfg # 配置完成后的语法检查命令 # chmod 601 /root/centos6.cfg # cp /root/centos6.cfg /var/www/html/ # 复制到http的根目录下,为客户端提供自动化安装。 # wget http://172.16.19.2/centos6/ks.cfg # 测试是否可以正常下载。
ks配置文件基本格式
# 命令段 install # 指定安装源 url --url=http://172.16.19.2/centos6/ repo --name="CentOS" --baseurl=http://172.16.19.2/centos6/ lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 # Reboot after installation reboot firewall --disabled authconfig --useshadow --passalgo=sha512 selinux --disabled timezone Asia/Shanghai # 硬盘分区信息 part /boot --fstype=ext4 --size=200 part pv.008002 --size=61440 volgroup vg0 --pesize=8192 pv.008002 logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480 logvol swap --name=swap --vgname=vg0 --size=2048 logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240 logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480 # 软件包段 %packages @Base @Core @base @client-mgmt-tools @core @desktop-platform ... ... ... pack_name @group -pack_name #不安装的包,但如果被依赖,也会被安装 %end #与上一个%开头的对应 # 脚本段 %post #安装后脚本 sed -i '1,$s@id:[0-9]:initdefault:@id:3:initdefault:@g' /etc/inittab %end