要想同时上线几十甚至上百台服务器,在短时间内完成系统安装,如果通过光驱、U盘的方式逐台安装,不仅效率低,也不利于维护。
Kickstart 是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为 ks.cfg
的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找 ks.cfg
文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果 ks.cfg
文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载 ks.cfg
文件,然后就去忙自己的事情。等安装完毕,安装程序会根据 ks.cfg
中的设置重启/关闭系统,并结束安装。
题外话:
Cobbler 集中和简化了通过网络安装操作系统需要使用到的 DHCP、TFTP 和 DNS 服务的配置,它不仅有一个命令行界面,还提供了一个 Web 界面,大大降低了使用者的入门水平。
简单地说,Cobbler 是对 Kickstart 的封装,简化安装步骤、使用流程,降低使用者的门槛
PXE
什么是PXE?
PXE(Pre-boot Execution Environment,预启动执行环境)是由 Intel 公司开发的最新技术,工作于 Client/Serve r的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统。
通过网络接口启动计算机,不依赖本地存储设备(如硬盘)或本地已安装的操作系统。
在启动过程中,PXE 客户端会调用网际协议(IP)、用户数据报协议(UDP)、动态主机设定协议(DHCP)、小型文件传输协议(TFTP)等网络协议。
终端要求服务器分配IP地址,再用 TFTP(trivial file transfer protocol)或 MTFTP(multicast trivial file transfer protocol) 协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。
严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 Client端 和 Server 端,而 PXE Client 则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。
PXE 技术与 RPL 技术不同之处为 RPL 是静态路由,PXE 是动态路由。RPL 是根据网卡上的ID号加上其他记录组成的一个 Frame(帧)向服务器发出请求。而服务器中已有这个ID数据,匹配成功则进行远程启动。PXE 则是根据服务器端收到的工件站MAC地址,使用DHCP 服务为这个MAC地址指定一个IP地址。每次启动可能同一台工作站有与上次启动有不同的IP,即动态分配地址。
PXE工作过程
1、PXE Client 向 DHCP 发送请求
PXE Client开机后,PXE BootROM(自启动芯片)获得控制权之前执行自我测试,然后以UDP发送一个广播请求(FIND帧) ,向本网络中的DHCP服务器索取IP;
2、DHCP服务器提供信息
DHCP 收到客户端的请求,送回DHCP响应应,包括用户端的IP地址、预设通信通道、PXE文件的放置位置(一般放在一台TFTP服务器上) 以及开机映像文件;
3、 PXE客户端请求下载启动文件
- 客户端收到服务器发回的响应后则会回应一个帧,以请求传送启动所需文件,并把自己的MAC地址写到服务器端的Netnames.db文件中。
- 启动所需文件包含:pxelinux.0、pxelinux.cfg / default、vmlinuz、initrd.img等文件。
4、Boot Server响应客户端请求并传送文件
- 当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。
- BootROM基于TFTP通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg / default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。
5、请求下载自动应答文件
客户端通过pxelinux.cfg / default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。接着会读取default文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。
注意: 在第2步和第5步初始化2次网络,这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。因此PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序,从而进行两次获取IP地址过程,但IP地址在DHCP的租期内是一样的。
6、客户端安装操作系统
将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。
OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。
PXE + Kickstart 配置并安装系统
流程图
系统服务器 OS Server 可以使用 http、nfs、ftp 服务器,此处使用 http 作为系统文件下载服务器。
系统环境
虚拟机:VMware® Workstation 12 Pro
系统:CentOS release 6.8
1 | service iptables stop |
网络环境
虚拟机 NAT 模式的地址段 192.168.247.0 255.255.255.0,可以在虚拟网络编辑器自定义。
DHCP、TFTP、HTTP 均安装在一台服务器,IP地址为 192.168.247.6,网络模式为 NAT
注意:
虚拟机网卡采用NAT模式,不要使用桥接模式,因为后续会搭建DHCP服务器,在同一局域网多个DHCP服务会有冲突。
VMware的NAT模式的dhcp服务也关闭,避免干扰。
- “编辑” - “虚拟网络编辑器” - “使用本地DHCP服务将IP地址分配给虚拟机”,将其关闭
基本设置完成后,可以在 Windows 物理机中看到
VMware Network Adapter VMnet8
的网卡上的IP为192.168.247.1,子网掩码是 255.255.255.0,此网卡作为本子网的网关。
DHCP配置
1 | yum -y install dhcp |
TFTP配置
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为 69 。
1 | yum -y install tftp-server |
HTTP配置
可以用 Apache 或 Nginx 提供 HTTP 服务。Python 的模块 web 服务会有报错,不建议采用。
1 | yum -y install httpd |
OS Server
准备 CentOS 6.8 的镜像,插入服务器,拷贝系统安装文件。
1 | install -cdv /mnt/cdrom |
浏览器访问 http://192.168.247.6/CentOS-6.8/
检验配置是否正确。
配置 PXE 启动程序
syslinux 是一个功能强大的引导加载程序,而且兼容各种介质。它是一个小型的 Linux 操作系统,它的目的是简化首次安装 Linux 的时间,并建立修护或其它特殊用途的启动盘。如果没有找到 pxelinux.0 这个文件,可以安装一下。
1 | yum -y install syslinux |
pxe的配置文件default参数配置
1 | vim /var/lib/tftpboot/pxelinux.cfg/default |
配置后的文件内容
1 | default linux # 默认启动的是 'label linux' 中标记的启动内核 |
ks.cfg
通常,在安装操作系统的过程中,需要大量的和服务器交互操作,为了减少这个交互过程,Kickstart 就诞生了。使用这种 Kickstart,只需事先定义好一个 Kickstart 自动应答配置文件 ks.cfg(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了在安装过程中多次的人机交互,从而实现无人值守的自动化安装。
生成 Kickstart 配置文件的三种方法
- 每安装好一台 CentOS 机器,CentOS 安装程序都会创建一个 Kickstart 配置文件,记录你的真实安装配置(生成的文件
/root/anaconda-ks.cfg
)。如果你希望实现和某系统类似的安装,可以基于该系统的 Kickstart 配置文件来生成你自己的 Kickstart 配置文件。 - CentOS 提供了一个图形化的 Kickstart 配置工具。在任何一个安装好的 Linux 系统上运行该工具,就可以很容易地创建你自己的 Kickstart 配置文件。Kickstart 配置工具命令为
redhat-config-kickstart
(RHEL3)或system-config-kickstart
(RHEL4,RHEL5)。网上有很多用 CentOS 桌面版生成 ks 文件的文章。 - 阅读 Kickstart 配置文件的手册。用任何一个文本编辑器都可以创建你自己的 Kickstart 配置文件。
ks.cfg文件组成
命令段:键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项
软件包段:在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。
1 | %packages |
脚本段(可选)
1 | %pre |
这里使用 anaconda-ks.cfg 并做了更改,内容如下:
1 | # Kickstart file automatically generated by anaconda. |
注意事项
- 保证网络配置正常,避免发生网络冲突(比如虚拟机使用本网段的第二个地址作为tftp服务器有可能导致tftp无法响应客户端)
iptables
均为关闭状态- 安装模式最好保持默认(某些系统使用文本模式安装将导致失败)
- 确保配置了自动清除分区的参数
- 如果有多网卡环境的待安装服务器,
pxelinux.cfg/default
中要使用ksdevice
选择默认网卡 - 确保 selinux 状态
setenforce 0
ks.cfg文件参数
关键字 | 含义 |
---|---|
install | 告知安装程序,这是一次全新安装,而不是upgrade(升级) |
url --url="http://192.168.247.6/CentOS-6.8/" |
通过HTTP从远程服务器上的安装树中安装。 |
url --url ftp://<username>:<password>@<server>/<dir> |
通过FTP从远程服务器上的安装树中安装。 |
nfs --server=nfsserver.example.com --dir=/tmp/install-tree |
从指定的NFS服务器安装 |
text | 使用文本模式安装 |
lang | 设置在安装过程中使用的语言以及系统的缺省语言。lang en_US.UTF-8 |
keyboard | 设置系统键盘类型。keyboard us |
zerombr | 清除mbr引导信息。 |
bootloader | bootloader --location=mbr --driveorder=sda --append=”crashkernel=auto rhgb quiet” |
--location= 指定引导记录被写入的位置.有效的值如下:mbr(缺省),partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序)。 | |
--driveorder,指定在BIOS引导顺序中居首的驱动器。 | |
--append=,指定内核参数.要指定多个参数,使用空格分隔它们。 | |
network | 为通过网络的kickstart安装以及所安装的系统配置联网信息。 |
network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6 | --bootproto=[dhcp/bootp/static]中的一种,缺省值是dhcp。bootp和dhcp被认为是相同的。 |
static方法要求在kickstart文件里输入所有的网络信息。 | |
network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2 | |
请注意所有配置信息都必须在一行上指定,不能使用反斜线来换行。 | |
--ip=,要安装的机器的IP地址. | |
--gateway=,IP地址格式的默认网关. | |
--netmask=,安装的系统的子网掩码. | |
--hostname=,安装的系统的主机名. | |
--onboot=,是否在引导时启用该设备. | |
--noipv6=,禁用此设备的IPv6. | |
--nameserver=,配置dns解析. | |
timezone | 设置系统时区 timezone Asia/Shanghai |
authconfig | 系统认证信息。authconfig --enableshadow --passalgo=sha512 设置密码加密方式为sha512 启用shadow文件。 |
rootpw | root密码 |
clearpart | 清空分区。clearpart --all --initlabel --all 从系统中清除所有分区--initlable 初始化磁盘标签 |
part | 磁盘分区。 |
part /boot --fstype=ext4 --asprimary –size=500 | |
part swap --size=2048 | |
part / --fstype=ext4 --grow --asprimary --size=200 | |
--fstype=,为分区设置文件系统类型.有效的类型为ext2,ext3,ext4,swap和vfat。 | |
--asprimary,强迫把分区分配为主分区,否则提示分区失败。 | |
--size=,以MB为单位的分区最小值.在此处指定一个整数值,如500.不要在数字后面加MB。 | |
--grow,告诉分区使用所有可用空间(若有),或使用设置的最大值。 | |
selinux | 关闭selinux。selinux –disabled |
firewall | 关闭防火墙。firewall –disabled |
logging | 设置日志级别。logging --level=info |
参考文档: