环境:
系统:centos7.1
平台:VirtualBox虚拟机
所安装的系统:centos6.7、centos7.1
大体的过程:
1、由dhcp为客户机分配地址,并提供客户机启动所需的文件和tftp服务器地址。
2、客户机自动从tftp下载bootloader第一阶段所需的文件。pxelinux.0文件
3、自动开始从tftp下载bootloader第二阶段所需的文件(提供窗口菜单,并启动相应内核和传递参数)。
isolinux.cfg ,splash.jpg,esamenu.c32,vmlinuz,initrd.img。
4、内核运行之后,启动anaconda安装程序并加载kickstart文件,从http服务器下载程序开始安装。
一、安装centos6.7.
1、安装配置dhcp、tftp与httpd服务。
[[email protected] ~]# yum install httpd tftp-server tftp dhcp -y
配置dhcpd。配置目录/etc/dhcp/。 复制dhcp配置样例文件:
[[email protected] dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example dhcpd.conf cp: overwrite ‘dhcpd.conf’? y
配置结果:
#option domain-name "star.com"; #指定搜索域,在我们这里用不到,注释了。 #option domain-name-servers 192.168.40.100; #DNS default-lease-time 3600; # 默认租约 max-lease-time 7200; #最长租约 log-facility local5; #日志。 要在/etc/rsyslog.conf中添加local5日志设施。也可以默认不用修改。 subnet 192.168.40.0 netmask 255.255.255.0 { #添加作用域。 range 192.168.40.10 192.168.40.20; #地址池 filename "pxelinux.0"; #客户端要去找的文件。 next-server 192.168.40.100; #客户端去哪里找filename的文件。 } #host node1 { #如果作地址保留,或只是为单台主机安装系统。就只设置这个。 # hardware ethernet 0:0:c0:5d:bd:95; # # filename "pxelinux.0"; # next-server 192.168.40.100; #}
启动的时候如果有问题,可以一直启动dhcpd,会显示哪些行有错误。
启动完成 ss -unl查找67端口是否打开,没问题我们用客户机测试一下。
看起来工作正常。
启动tftpd,在centos7里面,systemd就已经有xinetd的特性了,不用再来使用xinetd启动tftp。我们只要启动socket就可以, 主程序systemd会带为启动。
systemctl start tftpd.socket , 启动并查看69/UDP是否开启。
启动httpd。默认配置就可以了。
2、复制所需文件启动安装。
安装syslinux。 这个程序里面是一堆的bootloader文件。其中也包括pxe网络的bootloader。相当于是grub的第一阶段引导。
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #pxelinux.0就是syslinux生成的。 cp /mnt/cdrom/isolinux/{splash.jpg,vesamenu.c32} /var/lib/tftpboot/ #centos6光盘中的文件。用来生成引导窗口,并通过配置文件加载对应内核和传递参数。相当于是grub的第二阶段所需的文件。 cp /mnt/cdrom/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/ #用于pxe引导的内核与initrd文件, 不过我这里用md5sum发现光盘里正常的内核与initrd文件与pxe目录里面的一样,centos7也是。 mkdir /var/lib/tftpboot/pxelinux.cfg/ #这个里面就是要放vesamenu.c32的配置文件。 cp /mnt/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
这里的pxelinux.0加载完成以后,它就会再从相同位置加载第二阶段所需的文件。第二阶段再加载内核与initrd。
那么现在用于引导的第一和第二阶段就已经好了。就剩在配置菜单中为内核传递ks参数。不过在此之前我们就先来提供ks文件与软件仓库,软件仓库这里就用光盘了。
传递给内核的ks参数是anacoda程序要用的,也是自动安装的关键。
我这里的ks文件内容:
firewall --disabled install url --url=" rootpw --iscrypted $6$3hHx9zVZ$ShB3kPo0UeHpetxNXEJr2GynXg2rcg2lgCflfTbuxN1yfUbrUmBJu3P/ncD/X467M1jN2yxiNWnBExozzjafg1 text firstboot --disable keyboard us lang en_US selinux --disabled reboot timezone Asia/Shanghai bootloader --append="rhgb crashkernel=auto quiet" --location=mbr --driveorder="sda" zerombr clearpart --all part /boot --fstype="ext4" --size=200 part pv.008 --size=61440 volgroup vg0 --pesize=8192 pv.008 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 %end
这个文件中有的内容也不是很清楚, 直接复制马哥的,自己给简化了一下。可以安装system-config-kickstart程序来设置ks文件。
文件放在httpd服务器的主目录里。 anaconda支持http协议,不用再使用tftp了。
[[email protected] ~]# ls /var/www/html centos6 centos6.cfg
同时ks文件中所指定的url就是仓库的位置,我这里就在相同目录的centos6下面。
设置引导菜单。
vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32 #prompt 1 timeout 20 menu background splash.jpg menu title Welcome 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 #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 CentOS6 menu default kernel vmlinuz append initrd=initrd.img ks=http://192.168.40.100/centos6.cfg
把用不到的都删除了。 并且添加参数ks。 就是从哪里下载ks文件。
现在我们引导的第一阶段和第二阶段看起来都完成了。内核如果加载顺利,并启动anaconda,然后再成功下载ks文件,anaconda如果可以顺利的按着ks文件安装完成,也就算安装完成了。
在这里倒数第二行可以看到为什么要在pxelinux.cfg/default里面放菜单。 pxelinux.0默认读取的文件就是这个。
开始安装了。结果也正常。
二、安装centos7.1。
个人以为在一般情况下,第一二阶段的引导与系统版本的关系并不是必须。起码在同是centos系统的6和7版本之间还可以通用。
那么即然上面我们的引导都做好了,这里也就只剩复制一下内核文件,添加启动菜单,ks文件与软件仓库了。
ks文件:
install keyboard --vckeymap=cn --xlayouts=‘cn‘ reboot rootpw --iscrypted $6$3hHx9zVZ$ShB3kPo0UeHpetxNXEJr2GynXg2rcg2lgCflfTbuxN1yfUbrUmBJu3P/ncD/X467M1jN2yxiNWnBExozzjafg1 timezone Asia/Shanghai url --url="http://192.168.40.100/centos7" lang zh_CN 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 %packages @base @core %end
来看一下现在的httpd的根目录:
[[email protected] html]# ls centos6 centos6.cfg centos7 centos7.cfg
复制一下内核文件 : 当前目录在tftp根目录。
cp /mnt/cdrom1/images/pxeboot/initrd.img initrd.7.img cp /mnt/cdrom1/images/pxeboot/vmlinuz vmlinuz.7 [[email protected] tftpboot]# ls initrd.7.img initrd.img pxelinux.0 pxelinux.cfg splash.jpg vesamenu.c32 vmlinuz vmlinuz.7
注意:不要复制成centos6的内核了。
修改启动菜单。
default vesamenu.c32 timeout 100 #时间改长了一点,现在是10秒。 menu background splash.jpg menu title Welcome 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 #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 CentOS6 menu default kernel vmlinuz append initrd=initrd.img ks=http://192.168.40.100/centos6.cfg label linux menu label ^Install CentOS7 kernel vmlinuz.7 append initrd=initrd.7.img ks=http://192.168.40.100/centos7.cfg ~
也就是多了4行用于centos7的菜单。menu default是用于默认启动的。
我们来缕一下,dhcp发送启动引导文件。客户机收到文件启动引导,开始加载第二阶段。成功以后,会开始加载内核文件,内核文件再启动anaconda。anaconda加载ks文件,开始安装过程。
我们来测试一下:
看起来工作正常。重新进入6也工作正常 。 下面是7的。
格式化成功,并开始安装程序了,我们也可以看到一共469个包。
这里时间有点长,耐心等一下。 结果也正常。重启进入系统。
不知道为什么用centos7光盘里面的引导文件就会有问题。可能是传递内核参数的方式不一样吧。这里就不是很了解了。朋友们有兴趣可以试一下,vesamenu.c32文件和isolinux.cfg菜单文件。
那么即然7的引导不好用,有时候只是想安装7,而又没有6的光盘。 可以用syslinux包里带的一些文件。
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk}
上面这几个文件,用到的也就menu.c32文件,其它另外的两个c32文件不知道是干什么用的,另外memdisk好像是一个内核文件。
我这里只用menu.c32和一个菜单文件就可以用了。
菜单文件还是那个default,只不过要自己定了。与centos6上面的差不多。
default menu.c32 #启动menu.c32 prompt 5 timeout 30 MENU TITLE CentOS 7 PXE Menu LABEL linux MENU LABEL Install CentOS 7 x86_64 KERNEL vmlinuz.7 APPEND initrd=initrd.7.img ks=http://192.168.40.100/centos7.cfg
我现在的tftp目录:
initrd.7.img initrd.img menu.c32 pxelinux.0 pxelinux.cfg vmlinuz vmlinuz.7
当然可以忽略centos6的initrd与内核了。
工作正常。 不过用它安装centos6的时候有时候会在选择键盘的那里要手动。也不知道是不是刚才设置有问题,现在倒是自动安装了。
加上6以后:
现在的菜单文件:
default menu.c32 prompt 5 timeout 30 MENU TITLE CentOS 7 PXE Menu LABEL linux MENU LABEL Install CentOS 7 x86_64 KERNEL vmlinuz.7 APPEND initrd=initrd.7.img ks=http://192.168.40.100/centos7.cfg LABEL linux MENU LABEL Install CentOS 6 x86_64 KERNEL vmlinuz APPEND initrd=initrd.img ks=http://192.168.40.100/centos6.cfg
这就完成了。现在是在虚拟机中做的, 在实际环境中可能又会有各种各样的毛病。 而且有时候可能要安装多个版本的系统,如ubuntu, fedora...... 。这时就要使用cobbler来安装。
cobbler其实是pxe的二次封装,一些文件或配置可以自动生成,使用起来很方便。
谢谢浏览。