首页 > 代码库 > PXE+Kickstart无人值守安装系统

PXE+Kickstart无人值守安装系统

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_BuildTag
dr-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 GPL
dr-xr-xr-x. 3 test test   2048 Oct 24  2014 images
dr-xr-xr-x. 2 test test   2048 Oct 24  2014 isolinux
dr-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.html
dr-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 xinetd
xinetd-2.3.14-40.el6.x86_64
tftp-server-0.49-8.el6.x86_64

2.配置tftp服务

TFTP服务使用Xinetd服务管理,编辑/etc/xinetd.d/tftp,将文件中disable的参数由yes改为no
[root@pxe ~]# vim /etc/xinetd.d/tftp
service 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 start
Starting xinetd:                                           [  OK  ]
[root@pxe ~]# chkconfig --level 3 xinetd on
[root@pxe ~]# chkconfig --list xinetd
xinetd         	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安装光盘目录中的images/pxeboot/{vmlinuz,initrd.img}启动文件复制到某个安装目录,比如/var/lib/tftpboot/

[root@pxe ~]# cp /data/sys/images/pxeboot/vmlinuz /var/lib/tftpboot/				#复制内核文件

[root@pxe ~]# cp /data/sys/images/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.jpg
menu title Welcome to CentOS 6.6!
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						#指定要启动的内核。同样要注意路径,默认是/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.log
local4.*                                                /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 start
Starting dhcpd:                                            [  OK  ]

4.设置开机自启动

[root@pxe ~]# chkconfig dhcpd on
[root@pxe ~]# chkconfig --list | grep dhcp
dhcpd          	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 configuration
firewall --disabled                                        #防火墙禁用
# Install OS instead of upgrade
install                                                    #表示是安装系统不是升级
# Use network installation
url --url="http://192.168.16.100/"                         #告诉安装程序,到http://ip/下面找安装介质
# Root password
rootpw --iscrypted $1$ZoLiOvI6$jV67RM98I/JKaKpE6vUDz0       #root密码
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text                                                        #文本安装方式
firstboot --disable
# System keyboard                                           #键盘类型
keyboard us                    
# System language                                           #系统语言
lang en_US
# SELinux configuration                                     #禁用selinux
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 --location=mbr                                    #系统引导相关信息
# Clear the Master Boot Record              
zerombr
# Partition clearing information                           #清除所有分区
clearpart --all --initlabel 
# Disk partitioning information                            #系统的三个分区
part /boot --fstype="ext4" --size=200
part swap --fstype="swap" --size=2048
part / --asprimary --fstype="ext4" --grow --size=1

%packages                                                #安装的软件包
@base
@compat-libraries
@debugging
@development
git

%end

给予ks.cfg权限

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

七.安装HTTP服务

1.检查是否安装

[root@pxe ~]# /usr/local/nginx/sbin/nginx -v		#这是我编译安装好的nginx
nginx 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 -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: 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这个平台,让自己学习更多知识,看到很多大牛的好文章,才能让自己进步。

本文出自 “你会更好” 博客,谢绝转载!

PXE+Kickstart无人值守安装系统