自动化运维之PXE网络安装系统实战
为什么要用PXE网络安装操作系统?
如果给一台主机安装一个linux系统,用光盘安装或者用U盘安装都可以实现,但是在生产环境中有时候需要给数十台、数百台主机安装操作系统,那用光盘一个一个的安装这种方式肯定是不可行的,相信也没有人会去这么做。这时就需要一个能够给多个主机同时安装系统的工具了,PXE就是这样的一个工具,他可以实现同时对多台主机同时安装系统。
PXE安装系统的流程:
1、需要安装系统的主机的网卡支持网络安装,不过现在不用担心,随着科技的发展,现在几乎所以的主机都支持。
2、客户端主机需要有一个IP地址来与PXE Server进行通信,这时网络中必须要有一个主机能自动分配IP。DHCP就是一个能为主机自动分配IP地址的服务,DHCP也可以安装在PXE Server主机上。
3、客户机得到IP地址后,需要提供一个引导程序pxelinux.0(类似于grub) 此文件由syslinux提供,所以需要安装syslinux。和能加载内核及内核镜像等文件,客户机可以通过TFTP协议到TFTP Server上下载内核及内核镜像文件,所以需要一个TFTP 服务,TFTP也可以安装在PXE Server主机上,客户机只是知道可以用TFTP协议下载文件,但是TFTP Server的IP是那个,这个还得需要DHCP服务器指名告诉客户机那个是TFTP Server,而TFTP服务需要超级进程进行管理,此进程是xinet,因此需要安装xinet服务。
4、如果想实现完全自动化部署操作系统,则需要一个kickstart文件,没有此文件则安装系统的时候需要自己手动一个一个的选择进行安装,kickstart文件可以自己手动的写编写,也可以用system-config-kickstart工具进行生成,如果需要则可以在PXE Server上安装system-config-kickstart工具。
5、已经有了kickstart文件了,kickstart文件中有一个参数指定了需要以什么方式,在哪里去找安装源(此安装源就是安装系统所需的软件),这样的方式可以是,nfs、ftp、http等,选择其一即可,博主在此选择ftp方式提供安装源。
由上述流程可以得到用PXE安装软件所需的依赖性包:
dhcp #提供IP地址,指名TFTP Server的地址,pxelinux文件 tftp-server #提供引导所需的文件,内核文件,内核镜像文件等 xinetd #管理tftp服务的超级进程 syslinux #提供pxelinux文件 system-config-kickstart #生成kickstart文件的工具 vsftpd #提供安装源
各软件的安装及其配置:
[root@jie1 ~]# cat /etc/yum.repos.d/server.repo [centos] name=sohu-centos baseurl=http://mirrors.sohu.com/centos/$releasever/os/$basearch gpgcheck=1 enable=0 gpgkey=http://mirrors.sohu.com/centos/RPM-GPG-KEY-CentOS-6 [epel] name=sohu-epel baseurl=http://mirrors.sohu.com/fedora-epel/$releasever/$basearch/ enable=1 [root@jie1 ~]# ifconfig eth0 | awk '/inet addr:/ {print $2}' addr:192.168.22.1 [root@jie1 ~]# yum -y install dhcp tftp-server xinetd syslinux system-config-kickstart vsftpd
DHCP服务的配置:
[root@jie1 ~]# cat /etc/dhcp/dhcpd.conf # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.sample # see 'man 5 dhcpd.conf' [root@jie1 ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf cp: overwrite `/etc/dhcp/dhcpd.conf'? y [root@jie1 ~]# grep -v "^#" /etc/dhcp/dhcpd.conf | grep -v "^$" option domain-name "jie.com"; option domain-name-servers 192.168.22.1; default-lease-time 43200; max-lease-time 86400; log-facility local7; subnet 192.168.22.0 netmask 255.255.255.0 { range 192.168.22.100 192.168.22.200; option routers 192.168.22.1; } next-server 192.168.22.1; filename="pxelinux.0";
安装源的提供:
[root@jie1 ~]# service vsftpd start Starting vsftpd for vsftpd: [ OK ] [root@jie1 ~]# mkdir /var/ftp/pub/centos-6.4-x86_64 [root@jie1 ~]# mount /dev/cdrom /var/ftp/pub/centos-6.4-x86_64 mount: block device /dev/sr0 is write-protected, mounting read-only
kickstart文件:
然后点击File--->save保存即可
#============用system-config-kickstart生成的kickstart文件=========== [root@jie1 ~]# cat ks.cfg #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use network installation url --url="ftp://192.168.22.1/pub/centos-6.4-x86_64" # Root password rootpw --iscrypted $1$rwNUnQGy$0CfH0U2/y028PzfcdTPZJ. # System authorization information auth --useshadow --passalgo=sha512 # Use graphical install graphical firstboot --disable # System keyboard keyboard us # System language lang en_US # SELinux configuration selinux --disabled # Installation logging level logging --level=info # Reboot after installation reboot # System timezone timezone Asia/Shanghai # Network information network --bootproto=dhcp --device=eth0 --onboot=on # System bootloader configuration bootloader --append="crashkernel=auto crashkernel=auto rhgb rhgb quiet quiet" --location=mbr --driveorder="sda" # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel part /boot --fstype=ext4 --size=200 part pv.008002 --size=81440 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=20240 logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480 %post sed -i '1,$s@id:[0-9]:initdefault:@id:3:initdefault:@g' /etc/inittab # Set the hostname IP=`ifconfig eth0 | awk '/inet addr:/{print $2}' | awk -F. '{print $NF}'` sed -i "s@HOSTNAME=.*@HOSTNAME=web$IP.jie.com@g" /etc/sysconfig/network %end #install package %packages @core @server-policy %end [root@jie1 ~]# cp ks.cfg /var/ftp/pub/centos6.cfg
所需的引导文件:
[root@jie1 ~]# cd /var/lib/tftpboot/ [root@jie1 tftpboot]# mkdir pxelinux.cfg [root@jie1 tftpboot]# cp /var/ftp/pub/centos-6.4-x86_64/isolinux/{boot.msg,splash.jpg,vesamenu.c32} /var/lib/tftpboot/ [root@jie1 tftpboot]# cp /var/ftp/pub/centos-6.4-x86_64/p_w_picpaths/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/ [root@jie1 tftpboot]# cp /var/ftp/pub/centos-6.4-x86_64/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default [root@jie1 tftpboot]# chmod +w /var/lib/tftpboot/pxelinux.cfg/default [root@jie1 tftpboot]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ [root@jie1 tftpboot]# cat /var/lib/tftpboot/pxelinux.cfg/default default vesamenu.c32 #prompt 1 timeout 200 display boot.msg menu background splash.jpg menu title Welcome to CentOS 6.4 made by jie! 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=ftp://192.168.22.1/pub/centos6.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 - [root@jie1 ~]# service dhcpd restart Shutting down dhcpd: [ OK ] Starting dhcpd: [ OK ] [root@jie1 ~]# chkconfig tftp on [root@jie1 ~]# service xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] [root@jie1 ~]# [root@jie1 ~]# service vsftpd restart Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ] [root@jie1 ~]# ss -tunlp | grep 67 udp UNCONN 0 0 *:67 *:* users:(("dhcpd",2898,7)) [root@jie1 ~]# ss -tunlp | grep 69 udp UNCONN 0 0 *:69 *:* users:(("xinetd",2976,5))
至此PXE Server的配置安装过程已经完成,现在测试能否自动安装。
PXE安装一定程度的解决了自动化部署安装操作系统,但是利用PXE安装不同版本的操作系统,这会使得PXE很难用于实现,为解决这一美中不足的缺陷cobbler应用而生,尽情期待cobbler自动化部署安装不同版本的操作系统。
希望广大博友多多指点,如看完此博客对PEX自动部署操作系统有疑问请给我留言或者发邮件到我邮箱,邮箱地址:[email protected]