Kickstart无人值守安装系统
1.导言
已经或未来将从事Linux系统运维工作的读者,经常会遇到一些机器式的重复的共走,例如:有时间同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。
q 光盘安装系统===>一个的服务器DVD内置光驱百千块,百台服务器都配光驱就浪费了,因为一台服务器也就开始装系统能用的上,以后用的机会屈指可数。用USB外置光驱,插来插去也是醉了。
q U盘安装系统===>还是同样的问题,要一台一台服务器插U盘。
q 网络安装系统(ftp,http,nfs) ===>这个方法不错,只要服务器能联网就可以安装系统了,但是还需要一台台服务器去敲键盘点鼠标。时刻想着偷懒的我们,有没有更好的方法!
1.1什么是PXE
严格来说,PXE并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是在要安装的计算机中必须包含一个PXE支持的网卡(NIC)即网卡中必须要有PXE Client。PXE(Pre-boot Execution Environment)协议可以使计算机通过网络启动。此协议分为Client端和Server端,而PXE Client则在网卡的ROM中。当计算机引导时,BIOS把PXE Client调入内存中执行,然后由PXE Client将放置在远端的文件通过网络下载到本地运行。运行PXE协议需要设置DHCP服务器和TFTP服务器。DHCP服务器会给PXE Client(将要安装系统的主机)分配一个IP地址,由于是给PXE Client分配IP地址,所以在配置DHCP服务器时需要增加2的PXE设置。此外,在PXE Client的ROM中,已经存在了TFTP Client,那么它就可以通过TFTP协议到TFTP Server上下载所需的文件了。
1.2什么是KickStart
KickStart是一种无人值守的安装方法。它的工作原理时在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成KickStart安装文件的机器)出现要填写参数的情况,安装程序首选会去查找KickStart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装着手工干预了。所以如果KickStart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装着完全可以只告诉安装程序从何处去ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置重启系统,并结束安装。
2.DHCP工作过程的六个主要步骤
对于学习 DHCP来说,很重要的一部分就是对于DHCP工作过程的理解。那么首先DHCP分为两个部分:一个是服务器端,另一个是客户端。所有客户机的IP地址设 定资料都由DHCP服务器集中管理,并负责处理客户端的DHCP要求;而客户端则会使用从服务器分配下来的IP地址。
DHCP服务器提供三 种IP分配方式:自动分配(Automatic Allocation)、动态分配(Dynamic Allocation)和手动分配。自动分配是当DHCP客户端第一次成功地从DHCP服务器端分配到一个IP地址之后,就永远使用这个地址。动态分配是 当DHCP客户端第一次从DHCP服务器分配到IP地址后,并非永久地使用该地址,每次使用完后,DHCP客户端就得释放这个IP地址,以给其他客户端使 用,而手动分配是由DHCP服务器管理员专门指定IP地址。
DHCP客户机在启动时,会搜寻网络中是否存在DHCP服务器。如果找到,则给 DHCP服务器发送一个请求。DHCP服务器接到请求后,为DHCP客户机选择TCP/IP配置的参数,并把这些参数发送给客户端。如果已配置冲突检测设置,则 DHCP 服务器在将租约中的地址提供给客户机之前会试用Ping测试作用域中每个可用地址的连通性。这可确保提供给客户的每个IP地址都没有被使用手动 TCP/IP配置的另一台非 DHCP 计算机使用。
根据客户端是否第一次登录网络,DHCP的工作形式会有所不同。客户端从DHCP服务器上获得IP地址的整个过程分为以下六个步骤:
2.1寻找DHCP服务器
当DHCP客户端第一次登录网络的时候,计算机发现本机上没有任何IP地址设定,将以广播方式发送DHCP discover发现信息来寻找DHCP服务器,即向255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会 介绍这个广播信息,但只有DHCP服务器才会做出响应。
4.2分配IP地址
在网络中接收到DHCP discover发现信息的DHCP服务器都会做出相应,它从尚未分配的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含分配的IP地址和其他设置的DHCP offer提供信息。
2.3接受 IP地址
DHCP客户端接受到DHCP offer提供信息之后,选择第一个接收到的提供信息,然后以广播的方式回答一个DHCP request请求信息,该信息包含向它所选定的DHCP服务器请求IP地址的内容。
2.4IP地址分配确认
当DHCP服务器收到DHCP客户端回答的DHCP request请求信息之后,便向DHCP客户端发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户端可以使用它提供的IP地址。然后,DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除了DHCP客户机选中的 服务器外,其他的DHCP服务器将收回曾经提供的IP地址。
2.5重新登录
以后DHCP客户端每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时,则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCPdiscover发现信息来请求新的IP地址。
客户端重新登录.如图1-1
图1-1
如果客户端DHCP request 内的IP地址在服务器端没有被使用,DHCP服务器回复DHCP ACK继续使用IP。如图1-2
图1-2
如果客户端DHCP request 内的IP地址在服务器端已被使用,DHCP服务器回复DHCP NACK告诉客户端IP已被使用。图1-3
图1-3
客户端重新开始DHCP流程。如图1-4
图1-4
2.6更新租约
DHCP 服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。
3.PXE+KickStart自动部署操作系统实战
执行PXE+KickStart安装需要的设备:
q DHCP服务器
q TFTP服务器
q KickStart所生成的ks.cfg配置文件
q 一台存放系统安装文件的服务器,如NFS、HTTP、或FTP服务器
q 一个带有PXE支持网卡的主机。
通过Kickstart+Dhcp+tftp+httpd实现
3.1查看当前系统版本
[root@kickstart ~]# cat /etc/redhat-release
CentOS release 6.7 (Final)
3.2准备环境
必须关闭selinux防火墙,临时关闭会不生效,建议修改配置文件后,重启操作系统。
[root@kickstart ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
测试环境IP地址:外网eth0为NAT模式,可以上网
[root@kickstart ~]# ifconfig eth0
eth0Link encap:Ethernet HWaddr 00:1C:42:C4:75:DD
inet addr:10.0.0.3 Bcast:10.0.0.255 Mask:255.255.255.0
inet6 addr: fe80::21c:42ff:fec4:75dd/64 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500 Metric:1
RX packets:501 errors:0 dropped:0 overruns:0 frame:0
TX packets:216 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:61453 (60.0 KiB) TX bytes:27706 (27.0 KiB)
3.3安装DHCP服务
[root@kickstart ~]# yum -y install dhcp
[root@kickstart ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf #拷贝dhcp配置文件
#修改配置文件/etc/dhcpd/dhcpd.conf;添加如下
ddns-update-style none;
ignore client-updates;
subnet 10.0.0.0 netmask 255.255.255.0 {
range 10.0.0.100 10.0.0.200;
option subnet-mask 255.255.255.0;
option domain-name "internal.example.org";
default-lease-time 600;
max-lease-time 7200;
next-server 10.0.0.3;
filename "/pxelinux.0";
}
[root@kickstart ~]# cat /etc/sysconfig/dhcpd #修改/etc/sysconfig/dhcpd配置文件, 表示dhcp将只在eth0网络接口上提供DHCP服务。
# Command line options here
DHCPDARGS=eth0
[root@kickstart ~]# /etc/init.d/dhcpd start #启动dhcpd服务
DHCP注释:
ddns-update-style none; #设置与DHCP服务相关联的DNS数据动态更新模式,实际的DHCP应用中很少用改参数,设置为none即可。
ignore client-updates; #不允许客户机更新DNS记录
subnet 172.16.10.0 netmask 255.255.255.0 {
range 172.16.10.100 172.16.10.200; #可分配的起始IP-结束IP
option subnet-mask 255.255.255.0; #设置netmask
default-lease-time 21600; #设置默认的IP租用期限
max-lease-time 43200; #设置最大的IP租用期限
next-server 172.16.10.20; #告知客户端TFTP服务器ip
filename "/pxelinux.0"; #告知客户端从TFTP根目录下载pexlinux.0
}
3.4安装TFTP服务
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。
[root@kickstart ~]# yum -y install tftp-server #安装tftp-server服务
#修改配置文件/etc/xinetd.d/tftp disabled修改为no
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
}
[root@kickstart ~]# /etc/init.d/xinetd start #启动服务xinetd代理服务
3.5安装httpd服务
可以用Apache或Nginx提供HTTP服务。Python的命令web服务不行,会有报错。
[root@kickstart ~]# yum -y install httpd #安装httpd服务
[root@kickstart ~]#sed -i "277i ServerName 127.0.0.1:80" /etc/httpd/conf/httpd.conf #修改apache配置文件
[root@kickstart ~]# /etc/init.d/httpd start #启动apache服务
[root@kickstart ~]# mkdir /var/www/html/centos6/ #创建centos66目录
[root@kickstart ~]# mount /dev/cdrom /var/www/html/centos6/ #挂载镜像文件
# 不管怎么弄,只要把安装光盘内容能通过web发布即可。因为是演示,如果复制镜像就有点浪费时间。但生产环境就一定要复制了,光盘读取速度有限。
3.6PXE配置引导
syslinux是一个功能强大的引导加载程序,而且兼容各种介质。SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。如果没有找到pxelinux.0这个文件,可以安装一下。
[root@kickstart ~]# yum -y install syslinux #安装syslinux
复制配置文件
[root@kickstart ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
[root@kickstart ~]# cp -a /var/www/html/centos6/isolinux/* /var/lib/tftpboot/
[root@kickstart ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg
[root@kickstart ~]# cp /var/www/html/centos6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
添加如下,配置文件
[root@kickstart ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default ks
prompt 0
label ks
kernel vmlinuz
append initrd=initrd.img ks=http://10.0.0.3/config/Centos6-ks.cfg ksdevice=eth0
# ksdevice=eth0代表当客户端有多块网卡的时候,要实现自动化需要设置从eth0安装,不指定的话,安装的时候系统会让你选择,那就不叫全自动化了。
3.6.1PXE配置文件default解析
[root@kickstart ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32 #默认加载一个菜单
#prompt 1 #开启会显示命令行’boot:’ 提示符。prompt值为0时则不提示,将会直接启动’default’参数中指定的内容
timeout 600#timeout时间是引导等待用户手动选择的时间,设为1可直接引导,单位为1/10秒。
display boot.msg
#菜单背景图片、标题、颜色。
menu background splash.jpg
menu title Welcome to CentOS 6.7!
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
#lable指定在boot:提示符下输入的关键字,比如boot:linux[ENTER],这个会启动lable linux下标记的kernel和initrd.img文件
label linux#一个标签就是前面图片的一行选项。
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz #指定要启动的内核。同样要注意路径,默认是/tftpboot目录
append initrd=initrd.img #指定追加给内核的参数,initrd.img是一个最小的linux系统
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img 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 -
3.7上传kscfg配置文件
[root@kickstart ~]# grub-crypt #配置root使用密码,加入修改Centos6-ks.cfg文件
Password:
Retype password:
$6$006TOzR9rk18CPQw$t/xTyZEw60OWqAho.J1oj3PRo2ib93blCIlVuFCPc6/fuCADB02LKHfNV4x7jtpNAX98TK3K8Zpem8Qkv92111
[root@kickstart ]#mkdir /var/www/html/config 创建配置文件及优化脚本站点目录
[root@kickstart html]# cat /var/www/html/config/Centos6-ks.cfg
install 安装
url --url="http://10.0.0.3/centos6" 系统文件地址,这里使用http
text 文本界面安装
lang en_US.UTF-8语言
keyboard us键盘
zerombr 清空mbr
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" 引导加载程序参数
network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS6eth1网络配置
timezone --utc Asia/Shanghai 时区
authconfig --enableshadow --passalgo=sha512 验证配置
rootpw--iscrypted $6$006TOzR9rk18CPQw$t/xTyZEw60OWqAho.J1oj3PRo2ib93blCIlVuFCPc6/fuCADB02LKHfNV4x7jtpNAX98TK3K8Zpem8Qkv92111root密码,使用grub-crypt生成
clearpart --all --initlabel 清空分区
part /boot --fstype=ext4 --asprimary --size=100 分区/boot 100M
part swap --size=1500 分区swap 1500M
part / --fstype=ext4 --grow --asprimary --size=200 分区/ 所有
firstboot --disable 关闭一系列服务
selinux --disabled
firewall --disabled
logging --level=info 日志记录等级info级别
reboot 重启
%packages 包组-软件名
@base
@compat-libraries
@debugging
@development
tree
nmap
sysstat
lrzsz
dos2unix
telnet
%post 安装完执行脚本
wget -O /tmp/optimization.sh http://10.0.0.3/config/optimization.sh &>/dev/null 下载脚本,然后执行
/bin/sh /tmp/optimization.sh 执行脚本
%end
3.8准备全新服务器
需要和pxe服务器内网同网段,开机通过dhcp自动获取,然后自动开始装机
3.9kickstart错误汇总
解决办法:
1)我们先证明安装源服务器是正常的,我们用其他机器下载install.img文件,使用下面的命令:
wget spacer.gifhttp://192.168.0.3/centos6/p_w_picpaths/install.img
若可以正常的下载这个文件,说明安装源服务器(即kickstart服务器)正常。
2)查找install.img文件的前一阶段是配置网卡、网关阶段,检查你的ks文件的配置的网卡部分,是否与安装源的ip不是一个网段,若不是一个网段就会造成网络不通,产生这个错误。这个问题也是困扰了我好几个小时的问题,迷惑性很大。
报错原因:selinux没关 解决办法:关闭Selinux防火墙,然后重启,否则不生效