一、基础:
pxe(pre-bootexecution environment),预启动执行环境,运行在client/server的工作模式;
pxe client会调用网际协议(ip)、用户数据报协议(udp)、动态主机设定协议(dhcp)、小型文件传输协议(tftp)等网络协议。
pxe client存放在网卡的rom 中。当计算机引导时,bios 把 pxe client 调入内存中执行,pxe bootrom(自启动芯片)会发送一个udp广播请求,向本网络中的dhcp服务器索取ip。
pxe的工作过程:pxe协议运行的详细工作流程,请参考以下图文描述:
1. pxe client 从自己的pxe网卡启动,向本网络中的dhcp服务器请求ip;
2. dhcp 服务器返回分配给客户机的ip 以及pxe文件的放置位置(该文件一般是放在一台tftp服务器上) ;
3. pxe client 向本网络中的tftp服务器索取pxelinux.0 文件(在 pxe client 的 rom 中,已经存在 tftp client);
4. pxe client 取得pxelinux.0 文件后之执行该文件;
5. 根据pxelinux.0 的执行结果,通过tftp服务器加载内核和文件系统 ;
6. 进入安装画面, 此时可以通过选择http、ftp、nfs 方式之一进行安装;
二、涉及软件安装及配置(syslinux、dhcp服务器、tftp服务器、file server)
1、syslinux
通过网络引导linux的引导文件是pxelinux.0,这个文件由syslinux程序提供。syslinux is a suite of bootloaders。
通过yum install syslinux安装程序后,使用rpm -ql syslinux查看文件的时候,竟然没有显示pxelinux.0这个文件,以为自己安装程序的问题,后来才发现只是未显示而已,文件还是在/usr/share/syslinux/目录下,使用ls /usr/share/syslinux/就可以看到了。
将pxelinux.0复制到tftp目录: ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
2、将安装光盘images/pxeboot/目录下的initrd.img、vmlinuz复制到tftp目录:cp images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot
复制isolinux目录下的三个文件至tftp目录:mnt]# cp isolinux/{boot.cat,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
注:经验证boot.cat、splash.jpg可以不用复制;boot.cat不复制不影响启动,splash.jpg不复制显示菜单的时候没有背景图片(如下图)。
但是vesamenu.c32文件必须要有,不然会报找不到该文件的错误
在/var/lib/tftpboot/下创建pxelinux.cfg:mnt]# mkdir /var/lib/tftpboot/pxelinux.cfg
将isolinux/isolinux.cfg复制到 /var/lib/tftpboot/pxelinux.cfg目录下并命令为default:mnt]# cp isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
3、dhcp
subnet 172.16.0.0 netmask 255.255.0.0 { range 172.16.100.151 172.16.100.170; option routers 172.16.100.67; filename "pxelinux.0"; next-server 172.16.100.67;}
4、然后启动虚拟机,就可以显示熟悉的安装引导菜单了。(连接不是tftp服务器,检查服务是否有开,iptables和selinux)
三、全自动通过http安装centos
以下内容为我整理的流程图,从图中可以看出pxelinux.0的文件功能相当于bootloader和isolinux.bin的集成版。
1、修改default,增加一项ks;如果想在菜单项时间短一些,可以修改timeout时间。
label ks menu label ^install system based ks menu default kernel vmlinuz append initrd=initrd.img text ks=http://172.16.100.67/ks.cfglabel linux menu label ^install or upgrade an existing system kernel vmlinuz append initrd=initrd.img
2、修改ks.cfg文件,指定从http服务器加载安装程序
# kickstart file automatically generated by anaconda.#version=develinstall#cdromurl --url=http://172.16.100.67/centos6.6/lang en_us.utf-8keyboard usnetwork --onboot no --device eth0 --bootproto dhcp --noipv6rootpw --iscrypted $6$3.bn6kz9zigmqq.z$v/q8xf2asfm8kcwm6gsjhybvttmmm6b50i6a/affx38xkg1sp2kl.ecbada4slwg6itozhlxg/41sgrcjblf11firewall --service=sshauthconfig --enableshadow --passalgo=sha512selinux --enforcingtimezone --utc asia/shanghaibootloader --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 workclearpart --allpart /boot --fstype=ext4 --size=200part / --fstype=ext4 --size=7000part swap --size=2000#repo --name="centos" --baseurl=cdrom:repodata/ --cost=100reboot%packages --nobase@core%end
3、开启dchpd、tftpd、httpd,关闭iptable、selinux,就可以完成自动安装了。
后续:
在安装的时候出现一个问题,提示this device may need to be reinitialized。
解决方法:
在ks文件中增加zeromb就可以了,#号这一行,可有可无,不影响。
# clear the master boot record zeromb
配置修改为:
url --url=http://172.16.100.67/centos6.6/lang en_us.utf-8keyboard usnetwork --onboot no --device eth0 --bootproto dhcp --noipv6rootpw --iscrypted $6$3.bn6kz9zigmqq.z$v/q8xf2asfm8kcwm6gsjhybvttmmm6b50i6a/affx38xkg1sp2kl.ecbada4slwg6itozhlxg/41sgrcjblf11firewall --service=sshauthconfig --enableshadow --passalgo=sha512selinux --enforcingtimezone --utc asia/shanghaibootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"zerombrpex部分内容来自于:https://www.cnblogs.com/sunhongleibibi/archive/2017/11/17/7851382.html
以上就是教你通过网络安装centos系统的详细内容。
