返回介绍

最佳实践 85:Kickstart 精要

发布于 2025-04-20 17:44:51 字数 8435 浏览 0 评论 0 收藏

对于 PXE 环境的安装,本章就不做介绍了,大家只需要搜索“PXE 实现 Linux 系统无人值守批量安装”就能得到非常多很详细的安装说明文档。需要注意的是,在 PXE 安装 Linux 系统时,如果 PXE 安装服务器和待安装系统的服务器是连接在同一交换机上的话,建议划分单独的 VLAN,避免使用默认 VLAN。

PXE 启动过程及原理

从服务器加电到载入 Kickstart,完成服务器安装,这个过程如下。

1)客户服务器加电启动。

2)加电后服务器网卡向网段内的 DHCP 服务器发出 IP 请求。

3)DHCP 服务器获得请求并响应客户端,并为其分配资源(IP、掩码、网关、DNS 信息)。此外,DHCP 服务器还将为客户端提供 TFTP 服务器及启动镜像的地址信息。

4)客户端获得这些信息,其中包括含有启动镜像的 TFTP 服务器。

5)TFTP 服务器将启动镜像(pxelinux.0),发送给客户端,客户端拿到之后执行它。

6)默认情况下,启动镜像会在 TFTP 服务器的 pxelinux.cfg 目录下查找配置文件,客户端查找配置文件的顺序是先查找与 MAC 地址对应的,比如网卡 MAC 为 00:0c:29:f0:a6:7f,那么客户端将先查找 01-00-0c-29-f0-a6-7f,如果不存在,则开始查找以 IP 所对应 16 进制数为文件名的配置文件,比如 IP 是 172.16.100.100,则先查找 AC106464 文件,存在则加载,不存在则继续按 AC10646 文件名依次去末尾操作,直到最后一位 A,也未找到的话,才会查找默认的 default 配置文件。如图 17-1 所示,显示了启动镜像查找配置文件的顺序。

图 17-1 pxelinux.0 配置文件查找顺序

7)客户端得到配置文件之后,就安装配置文件的内容下载内核和 root 文件系统。

8)客户端开始安装系统的时候,还需要一个应答文件也就是 Kickstart 文件,通过 Kickstart 文件中定义的配置,完成操作系统的安装。

Kickstart 创建及结构组成

创建 Kickstart 以下文件有三种方式。

- 完全手动创建 Kickstart。

- 使用 Redhat 图形化工具 system-config-kickstart 创建 Kickstart。

- 通过标准化安装程序 Anaconda 安装系统,Anaconda 会生成一个当前系统的 Kickstart 文件,以此来创建 Kickstart 文件。

这三种方式都是非常常用的,以下就主要介绍一下,如何用 system-config-kickstart 来创建一个标准的 Kickstart 文件。

1)使用 system-config-kickstart 之前先安装 EPEL 源,再安装 GNOME 桌面,使用的命令如下。

[root@localhost ~]#rpm -Uvh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@localhost ~]#yum groupinstall -y "Desktop" "Desktop Platform" "Desktop Platform Development" "Fonts" "General Purpose Desktop" "Graphical Administration Tools" "Graphics Creation Tools" "Input Methods" "X Window System" "Chinese Support [zh]" "Internet Browser"

2)安装 system-config-kickstart。

[root@localhost ~]#yum install -y system-config-kickstart

3)如果读者朋友是在一台 vmware 的虚拟机里操作的话,那么这个时候只要把/etc/inittab 中的启动模式改为 5,重启系统,通过虚拟机控制台就能通过图形界面登录了。如果不是在虚拟机里操作,那么还需要安装 vnc-server。使用的命令如下。

[root@localhost ~]# yum install -y tigervnc-server tigervnc
[root@localhost ~]# vim /etc/sysconfig/vncservers
 VNCSERVERS="2:root"  //表示 vnc 的监听端口是 5902,用户是 root
 VNCSERVERARGS[1]="-geometry 800x600 -nolisten tcp -localhost"  //方括号中的 1 表示监听 0.0.0.0,默认是 2,表示监听 127.0.0.1
[root@localhost ~]# vncpasswd   //配置 root 的 vnc 密码
Password:
Verify:
[root@localhost ~]# service vncserver start   //启动 vncserver
Starting VNC server: 2:root 
New 'localhost.localdomain:2 (root)' desktop is localhost.localdomain:2
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/localhost.localdomain:2.log    [  OK  ]

vnc 配置完成之后,在 Windows 下使用 VNC Viewer,在 VNC Server 处输入“IP:5902”,如图 17-2 所示。

输入刚才设置的密码,登录 GNOME 桌面,如图 17-3 所示,选择 Applications→System Tools→Kickstart 选项。

图 17-2 vnc 登录

图 17-3 system-config-kickstartnc 应用路径

打开 Kickstart 应用之后,依次将 Basic Configuration、Installation Method 等所有的菜单都配置完成,保存即可得到一个 Kickstart 应答文件。

Kickstart 应答文件的结构可以分为以下这些部分。

1)基础配置:依次为安装类型、如何安装、语言、键盘、时区、日志。

 install    //安装类型是 install 或者 upgrade
 text       //安装模式是 text(文字模式) 还是 graphical(图形模式)
 lang en_US  //语言类型模式是 en_US,中文是 lang zh_CN
 keyboard us  //键盘类型默认英文键盘
 timezone  Asia/Shanghai  //指定时区
 logging --level=info   //安装日志级别,默认--level=info

2)网络配置。

 network  --bootproto=dhcp --device=eth0 --onboot=on

配置网卡,启动 DHCP 或者静态 IP,PXE 安装一般使用 DHCP 获取 IP,如果服务器有多块网卡,此处可以配置多个,但需要注意,如果 Kickstart 中定义了多个网卡,而实际安装服务器中的网卡数量小于定义的个数,安装过程会报错,提示未发现网卡。

3)安装镜像路径。

 url --url=http://172.16.100.100/centos6.5

安装镜像路径可以是 cd-rom、nfs、ftp、http、hard Drive,例如:

 nfs --server=172.16.100.100 --dir=/ centos6.5
 url --url=ftp://ftpuser:ftppasswd@172.16.100.100/ centos6.5
 harddrive --dir=install --partition=1

4)密码及安全配置。

 rootpw --plaintext Test@Install // root 密码 --plaintext 明文,--iscrypted 密文
 selinux --disabled   //关闭 selinux
 firewall --disabled  //关闭防火墙
 auth  --passalgo=md5  //身份机制,默认选 md5

5)硬盘分区。

 clearpart --all --initlabel  //清空现有分区信息
 part swap --fstype="swap" --size=2048
 part / --fstype="ext4" --grow --size=1   //--grow 表示使用剩余全部空间
 part /boot --fstype="ext4" --size=100

配置硬盘分区,可选手动或自动分区,也可以使用 pre-installation 来自适应,之后章节会有介绍。

6)引导方式。

 bootloader --location=mbr   //全新安装默认就是 mbr

7)软件包安装。

 %packages
 @base
 @core

8)安装前及安装后的一些操作。

 %include  /tmp/xx.cfg //引用,可以将%pre 执行之后结果作为某个配置项的内容
 %pre   //定义在此标签下的脚本或者命令会在系统安装之前执行
 %end
 %post  //此标签下定义系统安装完成之后的一些操作,通常可以定义一些系统前期任务
 %end

由于篇幅有限,笔者将一个完整的 system-config-kickstart 生成的 Kickstart 文件 ks-custom.cfg 放在了 github 中,通过如下命令可以获取。

 git clone https://github.com/nameyjj/pre-installation.git

pre-installation 与 post-installation 应用实践

在 Kickstart 文件中,有两个非常好用的标记,pre-installation 和 post-installation,分别定义在%pre%end 和%post%end 中。

首先介绍 pre-installation,在 Kickstart 文件中用%pre 表示,在其中定义的命令或者脚本会在 Kickstart 文件中最先被执行,定义的时候需要注意,必须把%pre 的定义写在 Kickstart 文件的底下,可以将某些需要先于系统安装之前执行的部分放在%pre 里面。默认情况下,在%pre 标签下可以执行 shell 脚本,如果需要执行其他语言的脚本,需要加参数 interpreter,比如 python 脚本的话,需要添加 interpreter/usr/bin/python。

利用 pre-installation 可以做系统环境的检查,差异化系统配置,通过两个实例再进一步说明。

1)系统环境检查

在安装系统之前,对系统的配置,不如对 CPU 型号,内存容量,硬盘容量,网卡型号这些做一个提前检查,这步的作用是为了在自动安装开始之前再次确认硬件信息,避免在提交时再出现服务器硬盘配置有问题。笔者将脚本 pre_Analyzing_Hardware.sh 放在了 github,通过 git clone 可以获得。

 git clone https://github.com/nameyjj/pre-installation.git

将 pre_Analyzing_Hardware.sh 中的内容粘贴到%pre%end 之间即可。图 17-4 所示为在安装之前先显示的当前服务器的配置信息。

2)差异化系统配置

对于配置一样的服务器,使用 Kickstart 安装完成之后,系统是完全一致的。但对于配置不一样的服务器,有些部分就需要定制,有如下两种场景。

A 服务器有 8 块 SAS 盘,做 RAID10,系统里面会看到 1 个硬盘设备;B 服务器有 10 块盘,其中 2 块 SSD 和 8 块 SAS 盘各做一个 RAID10,系统里面会看到 2 个硬盘设备。

图 17-4 pre-installation 检查硬件配置

安装系统时要求,分区如下。

1)A 服务器只做一个 RAID 时,/boot 100MB,swap 8GB,/20GB,/datapool 剩余全部容量。

2)B 服务器做两个 RAID 时,第一个逻辑盘上,/boot 100MB,swap 8GB,/剩余全部,第二个逻辑盘上/datapool 全部容量。

通过 pre-installation 就可以实现,在 Kickstart 文件中,有一个%include,它后面可以跟一个文件,而这个文件可以通过定义在%pre 中的脚本动态生成。此处就可以通过一个脚本先生成出不同个数逻辑盘的情况下,不同的分区表。

1)A 服务器只做一个 RAID 时的分区表。

 #Disk partitioning information,datapool in sda
 clearpart --all --initlabel
 part swap --fstype="swap" --size=8192 --ondisk=sda
 part / --fstype="ext4" --size=20480 --ondisk=sda
 part /boot --fstype=ext4 --size=100 --ondisk=sda
 part /datapool --fstype=ext4 --grow --size=1  --ondisk=sda

2)B 服务器只做两个 RAID 时的分区表。

 #Disk partitioning information,datapool in sdb
 clearpart --all --initlabel
 part swap --fstype="swap" --size=8192 --ondisk=sda
 part / --fstype="ext4" --grow --size=1 --ondisk=sda
 part /boot --fstype=ext4 --size=100 --ondisk=sda
 part /datapool --fstype=ext4 --grow --size=1  --ondisk=sdb

通过脚本生成的分区文件保存在/tmp/part-file,然后在 Kickstart 文件中使用%include/tmp/part-file 来引用。

笔者将脚本该脚本 pre_Disk_Partition.sh 放在了 github 上,通过 git clone 可以获得。

 git clone https://github.com/nameyjj/pre-installation.git

获取到脚本之后,将 pre_Disk_Partition.sh 的内容添加到 Kiskstart 文件的%pre%end 中,并添加%include/tmp/part-file 即可。

如图 17-5 所示,第一块逻辑盘安装系统,第二块逻辑盘空间被全部分给了 datapool 目录。

图 17-5 pre-installation 差异化定制分区

post-installation 在平时用的比 pre-installation 多,因为它是定义在系统安装之后执行的脚本。需要注意的是,在定义的时候,必须将其写在 Kiskstart 文件末尾,是标签%post 开始%end 结束。

通常可以将一些系统的前期操作放在 post-installation 里面来完成,比如,有项目要求,所有的 CentOS 6.264 位系统在安装完成之后,升级内核 kernel-2.6.32-220.17.1.el6.x86_64.rpm,kernel-firmware-2.6.32-220.17.1.el6.noarch.rpm,因为所有的服务器都需要这样的内核升级,所以就能直接写在%post%end 中。

 %post
 cd /root
 wget http://172.16.100.100/kernel-2.6.32-220.17.1.el6.x86_64.rpm 
 wget http://172.16.100.100/kernel-firmware-2.6.32-220.17.1.el6.noarch.rpm  
 rpm -ivh  kernel-2.6.32-220.17.1.el6.x86_64.rpm
 rpm -ivh kernel-firmware-2.6.32-220.17.1.el6.noarch.rpm
 %end

上面举的只是一个非常简单的内核升级任务,post-installation 可以做到事情还有很多很多,读者朋友甚至可以将前期脚本放在里面,在系统安装完成之后,直接就执行。最后拿到的系统,就能直接用了。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。