前言:
对于单台服务器上的OS安装,我们可以手动进行,若是一个集群服务中的多个节点超过50台服务器的OS安装,手动安装显然是不可行的,因此作为系统运维工程师自动化运维是我们必不可缺的技能。
PXE是一种引导协议,它通过网络来启动系统安装过程。
一、环境准备
在Centos6 操作系统上实现PXE的自动化部署OS,所依赖的服务有:dhcp, tftp, fileserver(http,ftp,nfs),依赖的安装源:kickstart文件,可引导内核-vimlinuz,initrd.img文件。
PXE自动化部署OS拓扑图
节点准备:节点zly准备两块网卡,将网卡eth0做外接网卡,将第二块网卡eth1做PXE完成自动化部署OS,网卡eth0桥接模式,网卡eth1内网模式vmnet2;
[root@ zly ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 BOOTPROTO=static ONBOOT=yes IPADDR=192.168.20.3 NETMASK=255.255.255.0 GATEWAY=192.168.20.3 HWADDR=00:0C:29:73:9F:1B .................. [root@ zly ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:73:9F:11 inet addr:172.16.20.8 Bcast:172.16.255.255 Mask:255.255.0.0 inet6 addr: fe80::20c:29ff:fe73:9f11/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:12463 errors:0 dropped:0 overruns:0 frame:0 TX packets:6010 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:11748882 (11.2 MiB) TX bytes:515051 (502.9 KiB) eth1 Link encap:Ethernet HWaddr 00:0C:29:73:9F:1B inet addr:192.168.20.3 Bcast:192.168.20.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe73:9f1b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:468 (468.0 b) [root@ zly ~]# service network restart
二、下载镜像光盘至本地准备PXE所依赖的安装源
1、下载光盘镜像,并查看所需要的文件;
[root@zly ~]# lftp http://172.16.0.1/cobbler/ks_mirror cd: received redirection to `http://172.16.0.1/cobbler/ks_mirror/' cd ok, cwd=/cobbler/ks_mirror lftp 172.16.0.1:/cobbler/ks_mirror/centos-6.4-x86_64> ls -rw-r--r-- 14 2013-03-06 02:28 CentOS_BuildTag drwxr-xr-x - 2013-07-05 07:42 EFI ........ drwxr-xr-x - 2013-07-05 07:42 cache drwxr-xr-x - 2013-07-05 07:42 p_w_picpaths drwxr-xr-x - 2013-07-05 07:42 isolinux drwxr-xr-x - 2013-07-05 07:42 repodata lftp 172.16.0.1:/cobbler/ks_mirror/centos-6.4-x86_64> mirror isolinux/ Total: 1 directory, 11 files, 0 symlinks New: 11 files, 0 symlinks 37045107 bytes transferred in 3 seconds (10.82M/s) lftp 172.16.0.1:/cobbler/ks_mirror/centos-6.4-x86_64> mirror p_w_picpaths/ Total: 2 directories, 7 files, 0 symlinks New: 7 files, 0 symlinks 207128660 bytes transferred in 28 seconds (7.18M/s) lftp 172.16.0.1:/cobbler/ks_mirror/centos-6.4-x86_64> bye ................................ [root@ zly ~]# ls isolinux/ boot.cat grub.conf isolinux.bin memtest TRANS.TBL vmlinuz boot.msg initrd.img isolinux.cfg splash.jpg vesamenu.c32 [root@ zly ~]# ls p_w_picpaths/pxeboot/ initrd.img TRANS.TBL vmlinuz
2、创建挂载光盘镜像的目录并挂载光盘
[root@zly ~]# mkdir /var/ftp/pub/centos-6.4-x86_64 -pv mkdir: created directory `/var/ftp/pub/centos-6.4-x86_64' [root@zly ~]# mount -r /dev/cdrom /var/ftp/pub/centos-6.4-x86_64/ [root@zly ~]# cd /var/ftp/pub/centos-6.4-x86_64/ [root@zly centos-6.4-x86_64]# ls CentOS_BuildTag isolinux RPM-GPG-KEY-CentOS-Debug-6 EFI Packages RPM-GPG-KEY-CentOS-Security-6 EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6 GPL repodata TRANS.TBL p_w_picpaths RPM-GPG-KEY-CentOS-6
三、安装PXE实现部署所依赖的服务
1、安装vsftpd服务,并启动服务;
[root@zly ~]# yum -y install vsftpd Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package vsftpd.x86_64 0:2.2.2-11.el6_3.1 will be installed --> Finished Dependency Resolution ................................. Installed: vsftpd.x86_64 0:2.2.2-11.el6_3.1 Complete! ................................. [root@ zly ~]# service vsftpd start Starting vsftpd for vsftpd: [ OK ] [root@ zly ~]# ss -tanlp | grep vsftpd LISTEN 0 32 *:21 *:* users:(("vsftpd",8968,3))
2、确认已配置好的yum源,并安装dhcp
[root@zly ~]# vim /etc/yum.repos.d/centos.repo [yum1] name=centos6.4 baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.4-x86_64/ enable=1 gpgcheck=0 [yum2] name=fedora baseurl=http://172.16.0.1/fedora-epel/6/x86_64/ enable=1 gpgcheck=0 [yum3] name=extr baseurl=http://172.16.0.1/centos/6/extras/x86_64/ enable=1 gpgcheck=0 ........................ [root@zly ~]# yum -y install dhcp Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package dhcp.x86_64 12:4.1.1-34.P1.el6.centos will be installed --> Finished Dependency Resolution ................. Installed: dhcp.x86_64 12:4.1.1-34.P1.el6.centos Complete!
四、修改dhcp的配置文件
1、dhcp服务是使用PXE的前提,通过dhcp服务可以告知tftp服务的地址,以及要加载的文件;
[root@zly ~]# cp /usr/share/doc/dhcp dhclient-4.1.1/ dhcp-4.1.1/ dhcp-common-4.1.1/ [root@zly ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf cp: overwrite `/etc/dhcp/dhcpd.conf'? y [root@zly ~]# vim /etc/dhcp/dhcpd.conf option domain-name "xiaozheng.com"; option domain-name-servers 172.16.20.8; default-lease-time 43200; max-lease-time 86400; .................. subnet 192.168.20.0 netmask 255.255.255.0 { range 192.168.20.1 192.168.20.100 option routers 192.168.20.3 } :.,$s@^\([^#]\)@#\1@g 注释当前行及其之后的行 [root@ zly ~]# service dhcpd start Starting dhcpd: [ OK ] [root@ zly ~]# ss -uanlp | grep dhcp UNCONN 0 0 *:67 *:* users:(("dhcpd",6578,7))
2、在配置文件中添加指向tftp服务器及PXE文件目录
[root@ zly ~]# vim /etc/dhcp/dhcpd.conf subnet 192.168.20.0 netmask 255.255.255.0{ range 192.168.20.1 192.168.20.100; option routers 192.168.20.3; } next-server 192.168.20.3; filename="pxelinux.0"; ........ [root@ zly ~]# service dhcpd restart Shutting down dhcpd: [ OK ] Starting dhcpd: [ OK ]
五、tftp服务的安装配置
1、安装使用tftp服务,查看tftp根目录的‘pxelinux'存放路径,并启动xinetd服务;
[root@ zly ~]# yum -y install syslinux tftp tftp-server Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package syslinux.x86_64 0:4.02-8.el6 will be installed ---> Package tftp.x86_64 0:0.49-7.el6 will be installed ---> Package tftp-server.x86_64 0:0.49-7.el6 will be installed ........................ Installed: syslinux.x86_64 0:4.02-8.el6 tftp.x86_64 0:0.49-7.el6 tftp-server.x86_64 0:0.49-7.el6 Dependency Installed: xinetd.x86_64 2:2.3.14-38.el6 Complete! ......................... [root@ zly ~]# cd /etc/xinetd.d/ [root@ zly xinetd.d]# ls chargen-dgram daytime-stream echo-dgram tcpmux-server time-stream chargen-stream discard-dgram echo-stream tftp daytime-dgram discard-stream rsync time-dgram [root@ zly xinetd.d]# vim tftp server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = yes .............................. [root@ zly xinetd.d]# chkconfig tftp on [root@ zly xinetd.d]# service xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] [root@ zly xinetd.d]# ss -uanlp State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 *:751 *:* users:(("rpc.statd",1423,5)) UNCONN 0 0 *:111 *:* users:(("rpcbind",1404,6)) UNCONN 0 0 *:631 *:* users:(("cupsd",1547,9)) UNCONN 0 0 *:67 *:* users:(("dhcpd",6664,7)) UNCONN 0 0 *:69 *:* users:(("xinetd",6752,5))
六、配置PXE部署OS所需的安装源
1、从所下载的镜像文件中添加PXE部署OS所需要的相关文件;
[root@ zly ~]# ls anaconda-ks.cfg install.log isolinux pxelinux.0 p_w_picpaths install.log.syslog package.xml [root@ zly ~]# cd isolinux/ [root@ zly isolinux]# ls boot.cat grub.conf isolinux.bin memtest TRANS.TBL vmlinuz boot.msg initrd.img isolinux.cfg splash.jpg vesamenu.c32 ...................... [root@ zly isolinux]# cp {boot.msg,splash.jpg,vesamenu.c32} /var/lib/tftpboot/ [root@ zly isolinux]# cd /var/lib/tftpboot/ [root@ zly tftpboot]# ls boot.msg pxelinux.0 splash.jpg vesamenu.c32 ...................... [root@ zly ~]# cp p_w_picpaths/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ [root@ zly ~]# ls /var/lib/tftpboot/ boot.msg initrd.img pxelinux.0 splash.jpg vesamenu.c32 vmlinuz
2、创建PXE配置文件
[root@ zly ~]# mkdir /var/lib/tftpboot/pxelinux.cfg [root@ zly ~]# cd /var/lib/tftpboot/pxelinux.cfg/ [root@ zly pxelinux.cfg]# ls [root@ zly pxelinux.cfg]# cp /root/isolinux/isolinux.cfg default [root@ zly pxelinux.cfg]# ls default [root@ zly pxelinux.cfg]# vim default label linux menu label ^Install or upgrade an existing system menu default kernel vmlinuz append initrd=initrd.img ks=ftp://192.168.20.3/pub/kickstart/centos6.cfg ............... [root@ zly pxelinux.cfg]# chmod +x default
七、配置PXE所需的kickstart文件
1、创建kickstart文件;
[root@ zly pxelinux.cfg]# mkdir -pv /var/lib/pub/kickstart/ mkdir: created directory `/var/lib/pub' mkdir: created directory `/var/lib/pub/kickstart/' [root@ zly pxelinux.cfg]# vim default [root@ zly pxelinux.cfg]# yum -y install system-config-kickstart [root@ zly pxelinux.cfg]# system-config-kickstart Xlib: extension "RANDR" missing on display "localhost:11.0". /usr/share/system-config-kickstart/kickstartGui.py:103: GtkWarning: GtkSpinButton: setting an adjustment with non-zero page size is deprecated xml = gtk.glade.XML ("/usr/share/system-config-kickstart/system-config-kickstart.glade", domain="system-config-kickstart") Loaded plugins: fastestmirror, refresh-packagekit Loading mirror speeds from cached hostfile .................
*(基图形化界面创建)
需要修改内容如下,其他选项使用默认配置
1)修改安装方法
2)修改磁盘分区
3)修改安装后脚本,并保存
至此kickstart文件创建完毕保存则可以使用
2、修改已经创建的kickstart文件,并重启vsftpd服务
[root@ zly ~]# ls anaconda-ks.cfg p_w_picpaths install.log.syslog package.xml centos6.cfg install.log isolinux pxelinux.0 [root@ zly ~]# cat anaconda-ks.cfg [root@ zly ~]# vim centos6.cfg url --url="ftp://192.168.20.3/pub/centos-6.4-x86_64" ............ clearpart --all --initlabel 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 ........... [root@ zly ~]# service vsftpd restart Shutting down vsftpd: [ OK ] Starting vsftpd for vsftpd: [ OK ]
八、使用PXE完成自动化部署OS
新建虚拟机安装OS,将其网卡连接模式改为内网模式vmnet2,启动安装流程,部署过程如下:
1)OS安装选择界面
2)等待NetworkManager配置网卡
3)从属检测
4)安装OS包
5)安装完毕后,重启主机即可使用已安装的系统
至此,基于PXE的自动化部署OS已经基本完成,后续自动化部署敬请关注!