一、什么是PXE
PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户?)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统,如:Windows95/98/2000/windows2003/windows2008/winXP/win7/win8,linux等。
二、原理
①客户端PXE网卡启动
②从DHCP服务器获得IP
③通过TFTP到服务器上下载pxelinux.0和它的配置文件default
④根据配置文件default指定的vmlinuz、initrd.img启动系统内核,并下载指定的ks.cfg文件
⑤跟据ks.cfg去(HTTP/FTP/NFS)服务器下载RPM包并安装系统
⑥完成安装
三、实战过程
1、安装配置DHCP
①、安装DHCP
yum -y install dhcp*
②、配置/etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.sample # see ‘man 5 dhcpd.conf‘ # option domain-name "example.org"; option domain-name-servers 172.16.12.100; default-lease-time 600; max-lease-time 7200; subnet 172.16.0.0 netmask 255.255.0.0 { range 172.16.12.100 172.16.12.130; option routers 172.16.0.1; next-server 172.16.12.100; filename "pxelinux.0"; }
查看开启端口(DHCP服务工作于udp 67号端口)
ss -unl | grep 67
2、安装配置tftp
安装tftp服务相关的包
yum -y install xinetd tftp-server tftp
超级守护进程:xinetd
功能:
为那些极少接收用户请求的服务,专门提供监听功能
瞬时(非独立)守护进程:
它们无须定义在运行级别下,只需要一次性地定义xinetd的运行级别
独立(standalone)守护进程:
能自我管理,无须xinetd提供监听服务的进程;
添加开机启动xinetd、tftp并启动
chkconfig xinetd on
chkconfig tftp on
service xinetd start
3、准备安装树
挂载光盘
mkdir /mnt/cdrom
mount -r /dev/cdrom /mnt/cdrom
mkdir /var/www/html/centos6
mount --bind /mnt/cdrom /var/www/html/centos6
service httpd start
4、准备/var/lib/tftpboot下文件
yum -y install syslinux
cp /mnt/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /mnt/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /mnt/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
5、制作kickstart文件ks.cfg,放到/var/www/html目录下
注意:url及repo后的路径要修改为可用安装树的路径
我们以root家目录下的anaconda-ks.cfg文件为kickstart文件模板
cp anaconda-ks.cfg /var/www/html/ks.cfg
vim /var/www/html/ks.cfg
# Kickstart file automatically generated by anaconda. #version=DEVEL install url --url="http://172.16.12.100/centos6" lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --mtu=1500 --bootproto dhcp rootpw --iscrypted $1$iRHppr42$VMlsh73oBqhMTjKp6OYOD. # Reboot after installation reboot firewall --disabled authconfig --useshadow --passalgo=sha512 selinux --disabled timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda,sdb --append="crashkernel=auto crashkernel=auto rhgb rhgb quiet 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 #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 repo --name="CentOS" --baseurl=http://172.16.12.100/centos6 --cost=100 %packages @Base @Core @base @basic-desktop @chinese-support @client-mgmt-tools @core @desktop-platform @fonts @general-desktop @graphical-admin-tools @legacy-x @network-file-system-client @perl-runtime @remote-desktop-clients @x11 lftp screen tree %end %post echo -e ‘Mage Education Learning Services\nhttp://www.magedu.com\n‘ >> /etc/issue [ ! -d /root/.ssh ] && mkdir /root/.ssh && chmod og=--- /root/.ssh cat >> /root/.ssh/authorized_keys << EOF ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAlmq1z0G/7wbGuSUewfXlFnwzqCg/myqTi/AwP8LP+JJ49xzIKMzpeWXHD8RWIf5RlDzo+6N7uPK5O22x/QtMosi0egz4shavEJeUkO0EH+KygXXgBIGuMWmAsL+yzbgWXT9H3zdzXi/qWcrBeBv2nYB5mpYSf7o0xqdhCst1MTfcYLD8qxvkwC8RiqBA/1u9N6jeDFbHO+UzZYYCr9zgk9uz4Rrhb9BU7c1GhjUCgRwBDAuo47IHw/OT6KS9lb8lT2R/ujVoDARy/eOhw8cAFXo+QcvzNSW2qKf/Qo21uR/wz2u9SRV0lvUDNSvC2PYtR+iPlDwHY81md430yiNf9w== root@server.magelinux.com EOF # Set the hostname ClientName=`ifconfig eth0 | awk ‘/inet addr:/{print $2}‘ | awk -F. ‘{print $NF}‘` sed -i "s@HOSTNAME=.*@HOSTNAME=client$ClientName.magelinux.com@g" /etc/sysconfig/networks # set hosts echo ‘172.16.0.1 server.magelinux.com server‘ >> /etc/hosts mv /boot/grub/grub.conf /var/tmp/.grub.test let Test=$[$RANDOM%2] if [ $Test -eq 0 ]; then sed -i ‘s@id:[0-9]:initdefault:@id:6:initdefault:@g‘ /etc/inittab else echo ‘*/10 * * * * /sbin/init 6‘ >> /var/spool/cron/root fi touch /.12th_lock %end
6、配置引导程序能自动加载kickstart文件
在下面19行后面加上ks=http://192.168.2.3/ks.cfg
vim /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 menu color sel 7 #ffffffff #ff000000 menu color title 0 #ffffffff #00000000 menu color tabmsg 0 #ffffffff #00000000 menu color unsel 0 #ffffffff #00000000 menu color hotsel 0 #ff000000 #ffffffff menu color hotkey 7 #ffffffff #ff000000 menu color scrollbar 0 #ffffffff #00000000 label linux menu label ^Install or upgrade an existing system menu default kernel vmlinuz append initrd=initrd.img ks=http://172.16.12.100/ks.cfg label vesa menu label Install system with ^basic video driver kernel vmlinuz append initrd=initrd.img xdriver=vesa nomodeset 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 -
7、新建一个虚拟机,网卡改到和172.16.12.100的服务器同一网络。
8、启动并自动安装
下面进入全自动安装
以上就是PXE自动网络引导安装Linux操作系统
本文出自 “斜视天花板” 博客,请务必保留此出处http://lemidi.blog.51cto.com/8601832/1379752