PXE+Kickstart无人值守安装系统                 2017-04-20 12:13:31

标签:

版权声明:原创作品,谢绝转载!否则将追究法律责任。

 

PXE+Kickstart无人值守安装系统

一、介绍二、原理三、安装部署PXE+kickstart四、安装TFTP五、安装DHCP六、生成kickstart(ks.cfg)文件七、安装HTTP八、虚拟机测试自动安装

一、介绍

CentOS的安装方法挺多,最常见的有光盘、Kickstart无人值守安装、U盘安装及ISO硬盘安装等。如果现在让你安装100台服务器,甚至更多台服务器,你会用什么办法安装呢,用光盘?这样要损坏多少张光盘呢,价格也不菲,U盘安装?一台一台接,很累好不好,用kickstart无人值守安装的方法,可以在内网批量安装新服务器系统,这种方法极大地简化了用光盘重复安装的过程,极大地提高了工作效率。

二、原理

1.什么是PXE

(1)PXE不是一种安装方式,而是一种引导方式(2)PXE(Pre-boot Execution Environment)协议可以使计算机通过网络启动(3)采用C/S结构

2.PXE的工作过程

(1)PXE Client向DHCP发送请求  PXE Client从自己的PXE网卡启动,通过PXE BootROM(自启动芯片)会以UDP协议发送一个广播请求,向本网络中的DHCP服务器索取IP。(2)DHCP服务器提供信息  DHCP服务器收到客户端的请求,验证是否是合法的PXE Client的请求,验证通过它将给客户端一个提供相应,  这个提供相应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。(3)PXE客户端请求下载启动文件  客户端收到服务器的回应后,会回应一个帧,以请求传送启动所需文件。这些文件包括:pxelinux.0、pxelinux.cfg/default、initrd.img等文件。(4)Boot Server响应客户端请求并传送文件  当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答,用以决定启动参数。  BootROM由TFTP通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。  default文件下载完成后,会根据该文件中定义的引导顺序,启动Liunx安装程序的引导内核。(5)请求下载自动应答文件   客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么介质来安装linux   如果通过网络安装(NFS.FTP.HTTP),则会在这个时候初始化网络,并定位安装源位置。   接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。(6)将ks.cfg文件下载回来后,通过该文件找到OS Server,并安装该文件的配置请求下载安装过程需要的软件包。   OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。

补充信息,这里图文并茂介绍PXE工作流程

http://www.zyops.com/autoinstall-kickstart

三、部署安装PXE+Kickstart

1.系统环境准备

[root@pxe ~]# uname -a				#这是一台桌面GUN的Linux,可能你问为什么要用桌面呢,后面要用到啦Linux pxe 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux[root@pxe ~]# uname -m				x86_64						#64位系统[root@pxe ~]# cat /etc/redhat-release 		CentOS release 6.6 (Final)			#版本是6.6[root@pxe ~]# getenforce Disabled					#禁用selinux[root@pxe ~]# /etc/init.d/iptables stop		#关闭防火墙[root@pxe ~]# ifconfig eth0 | sed -n '2p' | awk  '{print $2}' | awk -F ":" '{print $2}'192.168.16.100					#这台机器的IP地址

注意:虚拟机环境网卡采用NAT模式,不要使用桥接模式,把VMware的NAT模式的DHCP服务也关闭

2.创建用于存放镜像里面的内容目录

[root@pxe ~]# mkdir -p /data/sys

3.挂载镜像到mnt目录下,再将系统镜像里边的内容拷贝到共享目录/data/sys中去

[root@pxe ~]# mount /dev/cdrom /mnt/mount: block device /dev/sr0 is write-protected, mounting read-only[root@pxe ~]# ll /mnt/total 712-r--r--r--. 2 test test     14 Oct 24  2014 CentOS_BuildTagdr-xr-xr-x. 3 test test   2048 Oct 24  2014 EFI-r--r--r--. 2 test test    212 Nov 28  2013 EULA-r--r--r--. 2 test test  18009 Nov 28  2013 GPLdr-xr-xr-x. 3 test test   2048 Oct 24  2014 p_w_picpathsdr-xr-xr-x. 2 test test   2048 Oct 24  2014 isolinuxdr-xr-xr-x. 2 test test 686080 Oct 24  2014 Packages-r--r--r--. 2 test test   1354 Oct 20  2014 RELEASE-NOTES-en-US.htmldr-xr-xr-x. 2 test test   4096 Oct 24  2014 repodata-r--r--r--. 2 test test   1706 Nov 28  2013 RPM-GPG-KEY-CentOS-6-r--r--r--. 2 test test   1730 Nov 28  2013 RPM-GPG-KEY-CentOS-Debug-6-r--r--r--. 2 test test   1730 Nov 28  2013 RPM-GPG-KEY-CentOS-Security-6-r--r--r--. 2 test test   1734 Nov 28  2013 RPM-GPG-KEY-CentOS-Testing-6-r--r--r--. 1 test test   3380 Oct 24  2014 TRANS.TBL[root@pxe ~]# cp -a /mnt/* /data/sys/

四、安装TFTP

在安装PXE过程中,客户端通过TFTP协议从TFTP服务器下载引导文件并执行,因此,需要配置TFTP服务器和PXE的引导配置完成这个过程

1.安装tftp和xinetd

[root@pxe ~]# yum install tftp-server.x86_64 xinetd.x86_64 -y[root@pxe ~]# rpm -qa tftp-server xinetdxinetd-2.3.14-40.el6.x86_64tftp-server-0.49-8.el6.x86_64

2.配置tftp服务

TFTP服务使用Xinetd服务管理,编辑/etc/xinetd.d/tftp,将文件中disable的参数由yes改为no[root@pxe ~]# vim /etc/xinetd.d/tftpservice tftp{        socket_type             = dgram        protocol                = udp        wait                    = yes        user                    = root        server                  = /usr/sbin/in.tftpd        server_args             = -s /var/lib/tftpboot		#这是存放目录,根据自己喜欢修改        disable                 = no        per_source              = 11        cps                     = 100 2        flags                   = IPv4}

3.启动xinetd,并且设置开机自启动

[root@pxe ~]# /etc/init.d/xinetd startStarting xinetd:                                           [  OK  ][root@pxe ~]# chkconfig --level 3 xinetd on[root@pxe ~]# chkconfig --list xinetdxinetd         	0:off	1:off	2:off	3:on	4:on	5:on	6:off

4.配置支持PXE引导启动程序

PXE启动映像文件由syslinux软件提供,只要安装了syslinux,就会生成一个pxelinux.0文件,将这个文件复制到TFTP默认路径即可。 syslinux是一个功能强大的引导加载程序,而且兼容各种介质,更加确切地说:syslinux是一个小型的Linux操作系统,它的目的是简化Linux的时间,并建立修护或其他特殊用途的启动盘。

[root@pxe ~]# yum install syslinux.x86_64 -y[root@pxe ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/[root@pxe ~]# ll /var/lib/tftpboot/total 28-rw-r--r--. 1 root root 26759 Apr 19 23:54 pxelinux.0

5.用于网络启动的内核文件

将CentOS安装光盘目录中的p_w_picpaths/pxeboot/{vmlinuz,initrd.img}启动文件复制到某个安装目录,比如/var/lib/tftpboot/

[root@pxe ~]# cp /data/sys/p_w_picpaths/pxeboot/vmlinuz /var/lib/tftpboot/				#复制内核文件[root@pxe ~]# cp /data/sys/p_w_picpaths/pxeboot/initrd.img /var/lib/tftpboot/				#复制驱动文件root@pxe ~]# cp /data/sys/isolinux/boot.msg /var/lib/tftpboot/				#复制boot.msg

6.创建pxelinx.cfg目录,复制isolinux.cfg文件到/tftpboot目录并改名default

[root@pxe ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg[root@pxe ~]# cp /data/sys/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

7.编辑配置default文件

[root@pxe ~]# cd /var/lib/tftpboot/pxelinux.cfg/ [root@pxe pxelinux.cfg]# chmod 644 default [root@pxe pxelinux.cfg]# vim default default linux		#默认启动的是“lobeltext”中标记的内核#prompt 1		#开启会显示命令行'boot: '提示符。prompt值为0时则不提示,将会直接启动'default'参数中指定的timeout 1		#timeout时间是引导时等待用户手动选择的时间,设为1可直接引导,单位为1/10秒display boot.msg# 菜单背景图片、标题、颜色menu background splash.jpgmenu title Welcome to CentOS 6.6!menu color border 0 #ffffffff #00000000menu color sel 7 #ffffffff #ff000000menu color title 0 #ffffffff #00000000menu color tabmsg 0 #ffffffff #00000000menu color unsel 0 #ffffffff #00000000menu color hotsel 0 #ff000000 #ffffffffmenu color hotkey 7 #ffffffff #ff000000menu color scrollbar 0 #ffffffff #00000000label linux			  menu label ^Install or upgrade an existing system  menu default  kernel vmlinuz						#指定要启动的内核。同样要注意路径,默认是/var/lib/tftpboot目录  append initrd=initrd.img ks=http://192.168.16.100/ks.cfg	#添加ks文件的地址

五、安装配置DHCP服务

在PXE安装过程中,PXE客户机主要通过DHCP服务获取地址,PXE引导文件名称,然后再客户端机上通过TFTP协议从TFTP服务器下载引导文件并执行,从而启动系统安装程序执行后,接着下载并安装程序启动安装。

1.安装和配置DHCP

[root@pxe ~]# yum install dhcp.x86_64 -y[root@pxe ~]# vim /etc/dhcp/dhcpd.conf ## DHCP Server Configuration file.#   see /usr/share/doc/dhcp*/dhcpd.conf.sample#   see 'man 5 dhcpd.conf'#ddns-update-style none;					#不ddns更新next-server 192.168.16.100;				#告知客户端tftp服务器的ip地址filename "pxelinux.0";					#告知客户端从TFTP根目录下载pxelinux.0文件subnet 192.168.16.0 netmask 255.255.255.0 {		#设定子网  range 192.168.16.10 192.168.16.20;			#设定子网范围   option domain-name-servers 114.114.114.114;		#设定DNS   option routers 192.168.16.2;				#设定默认网关   default-lease-time 600;				#设置默认的IP租用时间,单位为秒   max-lease-time 7200;					#最大的IP租用时间,单位为秒   }log-facility local4;					#记录DHCP日志

2.创建日志文件

[root@pxe ~]# vim /etc/rsyslog.conf # Save dhcpd messages also to dhcpd.loglocal4.*                                                /var/log/dhcpd.log[root@pxe ~]# touch /var/log/dhcpd.log[root@pxe ~]# chmod 600 /var/log/dhcpd.log

3.启动DHCP服务器

[root@pxe ~]# /etc/init.d/dhcpd startStarting dhcpd:                                            [  OK  ]

4.设置开机自启动

[root@pxe ~]# chkconfig dhcpd on[root@pxe ~]# chkconfig --list | grep dhcpdhcpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off

六、生成kickstart文件

通常安装操作系统过程中,需要常常和服务器进行交互操作,为了减少这个交互过程可以使用kickstart。使用kickstart,只需先定义好一个kickstart自动应答配置文件ks.cfg,并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自动从文件中读取kickstart配置文件。

1.使用CentOS Linux提供一个图形化的kickstart配置工具

[root@pxe ~]# yum install system-config-kickstart.noarch

打开kickstart工具,也在图形终端打开命令行窗口键入命令system-config-kickstart打开

这里选择语言、时区、root密码,勾选第一个,安装系统后重启

选择全新安装,安装源方式为HTTP,HTTP地址和目录

选择是引导,默认就行啦

分区信息,清除引导,移除分区,添加你需要的分区

添加网络设备,如果只有一张网卡就eth0啦

这里密码加密,默认就行

防火墙配置,我这里是选择关闭的

显示配置,默认即可

选择安装的软件包,根据自己情况选择哈

选择左上角的File,点击Save(保存)

保存的路径/data/sys/ks.cfg,这个路径很讲究喔

查看保存后的ks.cfg文件,本应该是有三部分的,但我没有选择脚本选项,所以这里文件只有两部分,第一是键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项,第二是软件包安装

[root@pxe ~]# cat /data/sys/ks.cfg #platform=x86, AMD64, or Intel EM64T#version=DEVEL# Firewall configurationfirewall --disabled                                        #防火墙禁用# Install OS instead of upgradeinstall                                                    #表示是安装系统不是升级# Use network installationurl --url="http://192.168.16.100/"                         #告诉安装程序,到http://ip/下面找安装介质# Root passwordrootpw --iscrypted $1$ZoLiOvI6$jV67RM98I/JKaKpE6vUDz0       #root密码# System authorization informationauth  --useshadow  --passalgo=sha512# Use text mode installtext                                                        #文本安装方式firstboot --disable# System keyboard                                           #键盘类型keyboard us                    # System language                                           #系统语言lang en_US# SELinux configuration                                     #禁用selinuxselinux --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 configurationbootloader --location=mbr                                    #系统引导相关信息# Clear the Master Boot Record              zerombr# Partition clearing information                           #清除所有分区clearpart --all --initlabel # Disk partitioning information                            #系统的三个分区part /boot --fstype="ext4" --size=200part swap --fstype="swap" --size=2048part / --asprimary --fstype="ext4" --grow --size=1%packages                                                #安装的软件包@base@compat-libraries@debugging@developmentgit%end

给予ks.cfg权限

[root@pxe ~]# chmod 777 /data/sys/ks.cfg

七.安装HTTP服务

1.检查是否安装

[root@pxe ~]# /usr/local/nginx/sbin/nginx -v		#这是我编译安装好的nginxnginx version: nginx/1.12.0

2.配置nginx.conf文件

worker_processes  1;events {    worker_connections  1024;}http {    include       mime.types;    default_type  application/octet-stream;    sendfile        on;    keepalive_timeout  65;    server {        listen       80;        server_name  192.168.16.100;        location / {            root   /data/sys;					#这个目录是存放ks.cfg            index  index.html index.htm;        }        error_page   500 502 503 504  /50x.html;        location = /50x.html {            root   html;        }    }}

3.检查语法

[root@pxe conf]# /usr/local/nginx/sbin/nginx -tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

4.启动nginx服务

[root@pxe conf]# /usr/local/nginx/sbin/nginx

八、用虚拟机测试自动化安装

  1. 用虚拟机安装一台测试机器,不用选择光盘,直接点击开机就行

     

    然后就是你去吃个饭回来,就安装好啦,去吃饭啦

最后想说的是,这个自动化安装功能我超级喜欢,就好像windows AD部署利用组策略自动安装软件一样,嘻嘻,感谢51CTO这个平台,让自己学习更多知识,看到很多大牛的好文章,才能让自己进步。