利用kickstart、http、dhcp、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系列系统等。
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。
syslinux是一个功能强大的引导加载程序,而且兼容各种介质。它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。它的安装很简单,一旦安装syslinux好之后,sysLinux启动盘就可以引导各种基于DOS的工具,以及MS-DOS/Windows或者任何其它操作系统。不仅支持采用BIOS结构的主板,而且从6.0版也开始支持采用EFI结构的新型主板。安装syslinux的 磁盘将改变磁盘上的 引导扇区,并复制ldlinux.sys文件到其根目录(或者复制到指定的目录)下。注意:SYSLINUX不支持NTFS文件系统,所以磁盘必须是FAT(FAT16/FAT32)文件系统
一.部署环境
1.关闭selinx和防火墙
关闭selinux
sed -i 's/SELINUX=enforing/SELINUX=disabled/g' /etc/sysconfig/selinux
修改完之后要不就直接重启,要不就是用 getenforce 0
关闭防火墙
[root@localhost ~]# /etc/init.d/iptables stop
2.搭建必须的服务
安装http xinet dhcp tftp
[root@localhost ~]# yum
-
y install dhcp tftp
-
server httpd xinetd
设置开机启动
[root@localhost ~]# chkconfig httpd on
[root@localhost ~]# chkconfig dhcpd on
[root@localhost ~]# chkconfig xinetd on
[root@localhost ~]# chkconfig tftp on
修改tftp参数
sed -i 's/disable = no/disable = no/g' /etc/xinetd.d/tftp
server_args = -s /var/lib/tftpboot #tftp的默认目录
修改dhcp参数
[root@localhost ~]# cat > /etc/dhcp/dhcpd.conf <<EOF
ddns-update-style interim;
ignore client-updates;
subnet 192.168.117.0 netmask 255.255.255.0 { #dhcp的网段
option routers 192.168.117.1; #网关
option subnet-mask 255.255.255.0; #掩码
filename "pxelinux.0"; #syslinux启动程序
next-server 192.168.117.135; #注意,这里一定要是服务本机
option domain-name-servers 192.168.117.1; #DNS服务器可忽略
range dynamic-bootp 192.168.117.128 192.168.117.254; #dhcp的IP范围
default-lease-time 21600;
max-lease-time 43200;
}
EOF
重启dhcp xinetd http服务
[root@localhost ~]# /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
[ OK ]
重启httpd的时候报警告下面这段话,这个其实可以忽略。可以修改参数使这项消失。
[root@localhost ~]# sed -i 's/#ServerName www.example.com:80/ServerName www.example.com:80/' /etc/httpd/conf/httpd.conf
[root@localhost ~]# /etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
[root@localhost ~]# /etc/init.d/xinetd restart
Stopping xinetd: [FAILED]
Starting xinetd: [ OK ]
[root@localhost ~]# /etc/init.d/dhcpd restart
Starting dhcpd: [ OK ]
安装syslinux
[root@localhost ~]# yum install syslinx -y
找到pxelinux的位置拷贝到tftp默认路径下去
[root@localhost ~]# find / -name pxelinux.0
/usr/share/syslinux/pxelinux.0
[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@localhost ~]# ll /var/lib/tftpboot/
total 28
-rw-r--r-- 1 root root 26759 Dec 19 03:22 pxelinux.0
二.部署系统目录
我使用的是vmware环境来部署的,网卡模式选择nat,cdrom选择一个本地的系统。
挂在系统盘
[root@localhost ~]# mount /dev/cdrom /mnt
mount: block device /dev/sr0 is write-protected, mounting read-only
创建存放系统的目录
[root@localhost centos6.9]# pwd
/var/www/html/iso/centos6.9
拷贝系统到目录中
[root@localhost ~]# cp -r /mnt/* /var/www/html/iso/centos6.9/
然后使用编写自己的ks.cfg文件,可以使用在带图形化界面的linux系统中安装system-config-kickstart.noarch
yum install system-config-kickstart.noarch –y
配置文件修改完了,接下来我们制作无人值守安装文件。
在图形化界面运行system-config-kickstart弹出来界面。
我们设置下默认安装的语言,时区,根口令,然后勾选下面的安装后重新引导。然后选择安装方法。
我们配置ftp服务器的安装方法。选择执行新安装。然后点击引导装载程序选项
参考我上面的选择。接着
到这一步,选择部分参考我的。布局这里,我们自己设置下分区大小。
网络这里,默认没有,点击添加网络,设备名称为eth0,网络类型为dhcp
参考我的配置
防火墙和selinux根据自己需求选择开启或者禁用
默认
在这里勾选一些包,默认可能没有勾选桌面。根据自己需求勾选。后面剩余的两项不需要配置。
ks.cfg这个文件存放在http可以访问到目录下即可,我的存放在/var/www/html/iso/centos(这里是你创建的目录)/isolinux/我这边就直接用我做好的ks.cfg
创建放置default的目录
[root@localhost pxelinux.cfg]# pwd
/var/lib/tftpboot/pxelinux.cfg
拷贝isolinux.cfg到这个目录下并改名为default
cp /var/www/html/iso/centos6.9/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/
mv isolinux.cfg default
修改default
default vesamenu.c32 #默认启动选项
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.9!
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 centos6.9_http #标签,配合上面的default使用
menu label ^AutoInstall centos6.9 #菜单显示选项名称
menu default #启动菜单后光标默认的位置
kernel vmlinuz #预加载内核
append initrd=initrd.img ks=http://192.168.117.135/iso/centos6.9/isolinux/ks.cfg ksdevice=eth0 # # 预加载的参数以及ks文件的存放地址,ksdevice表示使用哪个网卡启动,在多个网卡的时候使用。
拷贝vmlinuz和initrd.img到/var/lib/tftpboot/下,也就是tftp的默认目录下
[root@localhost tftpboot]# cp /var/www/html/iso/centos6.9/isolinux/initrd.img /var/lib/tftpboot/
[root@localhost tftpboot]# cp /var/www/html/iso/centos6.9/isolinux/vmlinuz /var/lib/tftpboot/
[root@localhost tftpboot]# cp /var/www/html/iso/centos6.9/isolinux/vesamenu.c32 /var/lib/tftpboot/
[root@localhost tftpboot]# cp /var/www/html/iso/centos6.9/isolinux/splash.jpg /var/lib/tftpboot/
三.安装系统
首先我们来验证安装单系统
修改default文件中的default vesamenu.c32 为default centos6.9_http
default vesamenu.c32 #默认启动选项
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to linux!
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 centos6.9_http #标签,配合上面的default使用
menu label ^AutoInstall centos6.9 #菜单显示选项名称
menu default #启动菜单后光标默认的位置
kernel vmlinuz #预加载内核
append initrd=initrd.img ks=http://192.168.117.135/iso/centos6.9/isolinux/ks.cfg ksdevice=eth0 # # 预加载的参数以及ks文件的存放地址,ksdevice表示使用哪个网卡启动,在多个网卡的时候使用。
选择网卡安装
选择网络安装后会自动进行centos6.9的安装。
安装完成
接下来我们来实现安装多系统
修改default文件中的default centos6.9_http 为default vesamenu.c32
default vesamenu.c32 #默认启动选项
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to linux
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 centos6.9_http #标签,配合上面的default使用
menu label ^AutoInstall centos6.9 #菜单显示选项名称
menu default #启动菜单后光标默认的位置
kernel vmlinuz #预加载内核
append initrd=initrd.img ks=http://192.168.117.135/iso/centos6.9/isolinux/ks.cfg ksdevice=eth0 # # 预加载的参数以及ks文件的存放地址,ksdevice表示使用哪个网卡启动,在多个网卡的时候使用。
#添加一项centos7.4的安装项目
label centos7.4_http #标签,配合上面的default使用
menu label ^AutoInstall centos7.4 #菜单显示选项名称
kernel vmlinuz #预加载内核
append initrd=initrd.img ks=http://192.168.117.135/iso/centos7.4/isolinux/ks.cfg ksdevice=eth0 # # 预加载的参数以及ks文件的存放地址,ksdevice表示使用哪个网卡启动,在多个网卡的时候使用。
创建一个centos7.4的目录用来存放镜像
[root@localhost centos7.4]# pwd
/var/www/html/iso/centos7.4
存放镜像的方法和前面centos6.9一样,先挂在在拷贝。
[root@localhost ~]# mount /dev/cdrom /mnt/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# cp -r /mnt/* /var/www/html/iso/centos7.4/
然后创建ks.cfg文件这里可以参考http://www.cnblogs.com/Dev0ps/p/9996931.html
选择网络引导
这里需要注意的是centos6和centos7丢应的vmlinuz和initrd.img文件不一样,需要在default中修改。
首先把centos7的这个两个文件拷贝到tftp的默认目录下/var/lib/tftpboot/
mv /var/www/html/iso/centos7.4/isolinux/initrd.img /var/lib/tftpboot/initrd_7.img
mv /var/www/html/iso/centos7.4/isolinux/vmlinuz /var/lib/tftpboot/vmlinuz_7
修改default中centos7.4的选项,使其使用centos7的引导内核和参数。
安装界面
安装完成界面