Linux Kickstart大规模部署安装
1,介绍
在安装RedHat Linux企业版的过程中,我们都知道它允许通过NFS、HTTP或FTP协议来进行网络安装。
但是在一般情况下我们需要有一个安装引导介质(引导光盘、引导软盘、U盘等)
一、基本原理
PXE到底是什么东东?
PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。
协议分为client和server两端,PXE client在网卡的ROM中,当计算机引导时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。
既然是通过网络传输,就需要IP地址;也就是说在其启动过程中,客户端请求服务器分配IP地址,之后PXE Client使用TFTP Client 通过TFTP(Trivial File Transfer Protocol)协议下载启动安装程序所需的文件。
简单地说PXE网络安装,客户机通过支持PXE的网卡向网络中发送请求DHCP信息的广播请求IP地址等信息,DHCP服务器给客户端提供IP地址和其它信息(TFTP服务器、启动文件等),之后请求并下载安装需要的文件。
在这个过程中需要一台服务器来提供启动文件、安装文件、以及安装过程中的自动应答文件等。
第一步:PXE Client向DHCP发送请求
首先,将支持PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,
通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。
第二步:DHCP服务器提供信息
DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。
第三步:PXE客户端请求下载启动文件
客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。
这些启动文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
第四步:Boot Server响应客户端请求并传送文件
当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。
BootROM 由 TFTP 通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。
default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。
第五步:请求下载自动应答文件
客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,
如果是通过网络安装(NFS, FTP, HTTP),
则会在这个时候初始化网络,并定位安装源位置。或许你会说,刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次?
这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。
由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。
接着会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
第六步:客户端安装操作系统
将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。
OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。
这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。
在上面介绍中PXE client是需要安装Linux的计算机,TFTP Server、DHCP Server和NFS Server运行在另外一台Linux Server上。
Bootstrap文件、配置文件、Linux内核都放置在Linux Server上TFTP服务器的根目录下。而Linux根文件系统存放于NFS Server的共享目录中。
PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,
它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。
二、配置过程
配置PXE安装,要进行如下步骤:
① 配置DHCP,用于给客户端提供IP地址及其它信息
② 配置TFTP服务器,用于提供客户端PXE引导所必须的文件
③ 配置NFS服务器,用于存放安装树
④ 配置Kickstart,用于自动应答安装
⑤ 使用网卡PXE功能引导客户机
其中,前4步是在服务器端操作的,这些服务器可以分别部署在不同的服务器上,
也可以多个服务部署在一台机器上
安装配置NFS服务
安装介质存储在服务器上的一个目录中,可以使用各种网络协议访问它,比如 HTTP,FTP,和NFS。也就是我们前面提到的OS Server。这里使用 NFS 服务来提供安装介质,只需要将系统光盘内容拷贝放到共享目录下即可。
创建共享目录,并将光盘内容拷贝到共享目录中:
1,创建共享目录,并将内容拷贝到共享目录中
mkdir /data/sys -p
mount /dev/cdrom /mnt
cp -a /mnt/* /data/sys
如果是虚拟机,只需在VM里使用ISO文件即可
2,将共享目录发布出去
echo "/data/sys *(ro,sync)" >> /etc/exports
cat /etc/exports
3,启动NFS服务
/etc/init.d/portmap start
/etc/init.d/nfs start
4,配置nfs和portmap服务开机启动
chkconfig nfs on
chkconfig portmap on
chkconfig --list nfs
chkconfig --list portmap
5,检查目录/data/sys 是否被正确共享
showmount -e ip
安装配置TFTP服务
在PXE安装过程中,客户机通过tftp协议从tftp服务器下载引导文件并执行。因此,需要通过配置tftp服务器和PXE的引导配置完成这个过程。
1,安装TFTP服务
通过yum 安装
yum install -y tftp-server*
提示---->如果在yum工具执行前进行下面处理,可以把yum安装的rpm包保留下来备用
sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
#tree /var/cache/yum/base
2,配置tftp服务
主要和xinted服务有关
vi /etc/xinetd.d/tftp 文件,将 '''disable = yes''' 改为:disable = no
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot -v #这里是默认tftp的路径,一会要把启动文件放在这里
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
配置完成后重启xinetd服务,使TFTP服务器生效
3,PXE引导配置(bootstrap)
XE启动映像文件由syslinux软件包提供,RedHat Enterprise Linux光盘中已提供,
如果没有此软件包可以到syslinux 主页:http://syslinux.zytor.com/下载rpm来安装。
rpm -ql syslinux |grep "pxelinux.0"
我们只要安装了syslinux,就会生成一个pxelinux.0,将 pxelinux.0
这个文件复制到 /tftpboot 目录即可:
cp /usr/lib/syslinux/pxelinux.0 /tftpboot
4,用于网络启动的内核文件
由于多个客户端可以从一个PXE服务器引导,PXE引导映像使用了一个复杂的配置文件搜索方式来查找针对客户机的配置文件。
如果客户机的网卡的MAC地址为'''88:99:AA:BB:CC:DD''',对应的IP地址为192.168.1.195,那么客户机首先尝试以MAC地址为文件名匹配的配置文件,
如果不存在就以IP地址来查找。根据上述环境针对这台主机要查找的以一个配置文件就是 /tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd。
如果该文件不存在,就会根据IP地址来查找配置文件了,这个算法更复杂些,PXE映像查找会根据IP地址16进制命名的客户机配置文件。
例如:192.168.1.195对应的16进制的形式为C0A801C3。(可以通过syslinux软件包提供的gethostip命令将10进制的IP转换为16进制)
如果C0A801C3文件不存在,就尝试查找C0A801C文件,如果C0A801C也不存在,那么就尝试C0A801文件,依次类推,直到查找C文件,
如果C也不存在的话,那么最后尝试default文件。
总体来说,pxelinux 搜索的文件的顺序是:
/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/tftpboot/pxelinux.cfg/ C0A801C3
/tftpboot/pxelinux.cfg/ C0A801C
/tftpboot/pxelinux.cfg/ C0A801
/tftpboot/pxelinux.cfg/ C0A80
/tftpboot/pxelinux.cfg/ C0A8
/tftpboot/pxelinux.cfg/ C0A
/tftpboot/pxelinux.cfg/ C0
/tftpboot/pxelinux.cfg/C
/tftpboot/pxelinux.cfg/default
对于一台需要支持很多安装机器的安装服务器来说,将配置写在与IP地址对应的文件里很不灵活。把所有配置都集中在default文件中是个不错的主意,
可以减轻配置文件维护负担。接下来创建/tftpboot/pxelinux.cfg/ 目录,该目录用于存放客户端的配置文件。
将 RedHat 安装光盘目录中的 images/pxeboot/{vmlinuz,initrd.img}
启动文件复制到某个安装目录,比如:/tftpboot/
cp /mnt/rhel5/images/pxeboot/{vmlinuxz,initrd.img} /tftpboot
mkdir /tftpboot/pxelinux.cfg
将光盘中的"isolinux/isolinux.cfg" 文件复制为 "/tftpboot/pxelinux.cfg/default"
cat default
default local(防止误安装) #这里选择none为默认安装方式,文本方式text(容易误安装),图形方式linux
prompt 1 #显示 'boot:' 提示符。为'0' 时则不提示,将会直接启动 'default' 参数中指定的内容
timeout 9999 #用户输入之前的超时时间,单位为 1/10 秒。#显示某个文件的内容,注意文件的路径,默认是在/tftoboot目录下。也可以类似这样“install/rhel-inst/boot.msg 路径+文件名
display boot.msg //显示的菜单,这些菜单文件都存放在/tftp目录下
F1 boot.msg #按下 'F1' 这样的键后显示的文件。注意路径。默认是 /tftpboot。注:syslinux 官方网站上说目前只能使用 F1-F10。
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label linux
kernel vmlinuz
append initrd=initrd.img
label text
kernel vmlinuz
append ks=nfs:ip:/data/sys/kickstart/ks.cfg ksdevice=eth0 initrd=initrd.img text
#这里的nfs:ip:/data/sys/kickstart/ks.cfg 为ks.cfg所在的NFS共享路径,
后面配置kickstart时要注意把ks.cfg放到/data/sys/kickstart/ks.cfg
#append initrd=initrd.img ks=ftp://192.168.1.8/ks.cfg
label ks
kernel vmlinuz
append ks initrd=initrd.img
label local
localboot 1
lable memtest86
kernel memtest
append -
label none
#'label' 指定你在 'boot:' 提示符下输入的关键字。 #boot: linux [enter]
#这个会启动 'label linux' 下标记的 kernel 和 initrd.img 文件
#boot: text
#boot: ks
#kernel 参数指定要启动的内核。同样要注意路径 ,默认是/tftpboot目录
#append 指定追加给内核的参数,能够在grub里使用的追加给内核的参数,在这里也都可以用
特别提示,部署无人值守安装,如果配置不当有时也会带来严重负面问题,列如:别人的个人计算机或服务器开机时可能直接安装了你定义的Linux系统
安装dhcp服务
DHCP的安装与配置
在PXE引导安装过程中,PXE客户端通过DHCP获取PXE服务器地址,PXE引导文件名称;然后客户机在使用TFTP协议从TFTP服务器下载引导文件并执行,
从而启动计算机安装程序。
引导文件执行后,接着下载安装程序启动安装。RedHat Linux使用了ISC的dhcpd软件,完成它的安装与配置。
1,安装
yum install -y dhcp*
yum install -y tftp-server*
提示---->如果在yum工具执行前进行下面处理,可以把yum安装的rpm包保留下来备用
sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
2,配置
vi /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
allow booting; #定义能够PXE启动
allow bootp; #定义支持bootp
subnet 192.168.1.0 netmask 255.255.255.0 {
option domain-name "linux.com"; #域名根据你自己的情况定
option domain-name-servers 192.168.0.2; #域名服务器也就是DNS服务器地址
range 192.168.1.10 192.168.1.80;
option routers 192.168.1.1;
option subnet-mask 255.255.255.0;
default-lease-time 21600;
max-server-time 43200;
filename "/data/sys/kickstart/ks.cfg";
next-server 192.168.1.1 #nfs or tftp server的ip地址
filename "pxelinux.0"; #pxelinux启动文件的位置
}
配置完成后,重启DHCP服务,并将它设为开机自启动
安装kickstart配置
1,配置Kickstart安装
通常,我们在安装操作系统的过程需要大量的人机交互过程,减少交互过程,为了提高安装效率Red Hat Linux 开始支持一个称为 kickstart 的功能。
使用这种方法,只需事先定义好一个Kickstart自动应答配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,
在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
我们可以通过多种方法生成Kickstart配置文件,无论使用哪种方法无非就是创建一个应答文件,当你安装好一台Red Hat Linux机器,
Red Hat Linux 安装程序都会创建一个 kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,
可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。 该文件位于/root/anaconda-ks.cfg。
这里我直接使用该文件,拷贝本文件到/data/sys下。
第一种方法:
mkdir -p /data/sys/kickstart
cp /root/anaconda-ks.cfg /data/sys/kickstart/ks.cfg
chmod 644 /data/sys/kickstart/ks.cfg
第二种方法:
Centos linux提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以容易创建自己的kickstart
配置文件。kickstart配置工具命令为redhat-config-kickstart(rhle3),system-config-kickstart(rhle4,rhle5)
2,kickstart配置文件的详解
install -->表示安装系统而不是升级
# X Window System configuration information
xconfig --defaultdesktop=GNOME --depth=8 --resolution=800x600 //配置显示的分辨率
# SELinux configuration
selinux --enforcing //启用selinuxs
key --skip //跳过序列号
nfs --server=ip --dir=/data/sys -->nfs的安装方式 ,--server为nfs的ip, --dir为nfs的共享路径
也可以使用http方式,url --url=http://ip/data/syscentos5.8
lang en_US.UTF-8 -->字符集设置
keyboard us -->键盘布局
network --device=eth0 --bootproto dhcp --hostname linux -->网络配置,eth0为第一块网卡,linux为机器名
rootpw 123456 -->root密码,可以使用明文,安装完成就会变成加密状态,如果使用加密的方式如下:
rootpw --iscrypted $3jfdugkffdu9
#network --device eth1 --bootproto dhcp -->也可以同时,对第二,三块网卡设置地址
authconfig --enableshadow --enablemd5 -->系统认证信息
selinux --disabled -->关闭selinux
firewall --disabled -->关闭防火墙
timezone --utc Asia/Shanghai -->设置系统时间
bootloader --location=mbr --driveorder=sda -->系统引导相关配置
firstboot --disable -->禁止安装后的Agent设置
logging --level=info -->设置日志级别
zerombr -->清除mbr引导信息
#############分区配置###############3
#clearpart --all --drives=sda --initlabel -->清除sda上的所有分区。如果sda不存在可能报错,还可以用下面的用法:
#clearpart --linux
clearpart --all
part /boot --fstype ext3 --size=200 --asprimary -->作为主分区
part swap --size=8192
part / --fstype ext3 --size=1 --grow --asprimary
#reboot -->安装完重启,也可以关机
###############安装包选择###################
%packages
@office
@admin-tools
@base
@core
@development-libs
@development-tools
@editors
@system-tools
@x-software-development
#############安装前的初始化############
%pre
#!/bin/sh
# You can do something here before the real installation
wget -nv -O /tmp/pre-install http://ip/pre-install
/bin/sh /tmp/pre-install
#############安装后的初始化############
%post
#base init configuration
echo "nameserver 202.106.0.20" >> /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
mkdir -p /application/tools
mkdir -p /server{scripts,backup}
touch "pls keep this server clean"
#add linux users
useradd hx
echo "qq:49000448"|passwd --stdin hx --->qq:49000448 密码
#allow hx sudo
echo "hx ALL=(ALL) NOPASSWD:ALL" >>/etc/sudoers
#service configuration
for service in `chkconfig --list|awk '{print $1}' |egrep -v "^$"|awk -F ":" '{print $1}'`;do chkconfig $service off;done
for service in crond sshd syslog network; do chkcofnig $service on; done
#config ssh
\cp /etc/ssh/sshd_config /etc/ssh/sshd_config.`date +"%Y-%m-%d_%H-%M-%S"`
sed -i 's%#Port 22%Port 52113%' /etc/ssh/sshd_config
sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config
sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config
sed -i 's%#UseDNS yes%UseDNS no%' /etc/ssh/sshd_config
#初始化内容也可以写成脚本
%post
#!/bin/sh
# You can do something here before the real installation
wget -nv -O /tmp/post-install http://ip/post-install
/bin/sh /tmp/post-install
3、配置客户端PXE引导安装
最后设置客户端BIOS选择从网卡启动(F2)。具体方法因BIOS版本不同而异。
安装完成后,安装程序会提示你重新启动机器。重新启动机器时切记要在BIOS里改成从硬盘启动。如果仍然从光盘启动机器,又会重复前面的自动安装步骤。