RHEL 7/CentOS 7 的 kickstart 配置示例文件

在本文中,将介绍可根据要求使用的 kickstart 文件的不同部分。

如果我们从头开始创建自定义 kickstart 文件,最好使用“anaconda-ks.cfg”,它位于“root”用户的主文件夹中,可以为我们提供所需的不同部分进行临时安装。

我将尝试解释可以为 kickstart 中的不同部分选择的各种选项。

重要说明:本文中的某些参数可能会过期或者在基于 RHEL 开发的时间段内不起作用,因为它们可能会更改或者删除变量,因此使用 ksvalidator工具验证 kickstart 始终是一个好主意。
这个工具是pykickstartrpm 的一部分。

# ksvalidator kickstart.conf

如果 kickstart 文件有任何错误/警告,并且输出为空,则这意味着该文件非常适合使用。

创建自定义存储库

理想情况下,Red Hat 中包含所有 rpm 列表的默认目录是“Packages”,但假设我们希望将另外的 repo 包含到列表中,并带有一些另外的 rpm。

例如,在我将使用这些 kickstart 文件启动 PXE 安装的 TFTP 服务器上,我有如下路径的存储库

# cd /root/repo/rhel7_64

在这里,我将创建一个添加目录,该目录将包含我想包含在我的存储库中的所有添加 rpm

# mkdir ExtraPackages

一旦所有的 rpms 都复制到这里,我必须执行

# createrepo /root/repo/rhel7_64/ExtraPackages/

这将通过创建所需的 xml 文件和 repodata 将其配置为 repo。

接下来在 kickstart 文件中添加这一行

## Additional repository
repo --name="ExtraPackages" --baseurl=file:///run/install/repo/ExtraPackages

安装方式

根据要求选择选项

对于基于文本的安装

text

对于基于图形的安装

graphical

键盘布局和系统语言

我们大多数人通常使用标准的“我们”和“美国英语”,但根据我们所在的地区,还有更多选项可供使用。

获取支持的键盘布局列表

# localectl list-keymaps

获取支持的系统语言列表

# localectl list-locales

检查当前设置的值

# localectl
System Locale: LANG=en_US.utf8
       VC Keymap: us
      X11 Layout: us

根据要求填写 kickstart 文件中的值

# System keyboard
keyboard us
# System language
lang en_US.UTF-8

安装介质详细信息

我们必须提供启动 RHEL 安装的服务器/位置的详细信息。

例如:如果使用 DVD 进行安装,则使用

# Installation Media
cdrom

对于 NFS 服务器

# Installation Media
nfs --server=10.43.138.1 --dir=/root/repo/rhel7_64

对于 HTTP、HTTPS、FTP 服务器

url --url http://server/path
url --url ftp://username:password@server/path

网络信息

我们可以在此处根据要求定义目标节点的网络配置。

如果我们有一个 DHCP 服务器,它将提供网络的详细信息,然后

#Network Information
network --bootproto=dhcp

下面是一些示例配置,用于分配静态 IP 详细信息

对于使用 MII 绑定和 IPv6 禁用绑定配置的多个接口

network --bootproto=static --hostname=deep-node2 --device=bond0 --gateway=10.43.138.30 --ip=10.43.138.5 --netmask=255.255.255.224 --noipv6 --nodns --onboot=on --activate --bondopts=mode=active-backup,miimon=100,updelay=1000,downdelay=1000,primary=eth0 --bondslaves=eth0,eth1
network --bootproto=static  --device=bond1 --ip=192.168.130.5 --netmask=255.255.255.0 --noipv6 --nodns --onboot=on --activate --bondopts=mode=active-backup,miimon=100,updelay=1000,downdelay=1000,primary=eth2 --bondslaves=eth2,eth3
network --bootproto=static  --device=bond2  --ip=192.168.131.5 --netmask=255.255.255.0 --noipv6 --nodns --onboot=on --activate --bondopts=mode=active-backup,miimon=100,updelay=1000,downdelay=1000,primary=eth4 --bondslaves=eth4,eth5
network --bootproto=static  --device=bond3 --ip=192.168.132.5 --netmask=255.255.255.0 --noipv6 --nodns --onboot=on --activate --bondopts=mode=active-backup,miimon=100,updelay=1000,downdelay=1000,primary=eth6 --bondslaves=eth6,eth7

对于使用 ARP 绑定和 IPv6 禁用绑定配置的多个接口

network --bootproto=static --hostname=deep-node1 --device=bond0 --gateway=10.43.138.30 --ip=10.43.138.5 --netmask=255.255.255.224 --noipv6 --nodns --onboot=on --activate --bondopts=mode=active-backup,arp_interval=1000,arp_ip_target=,arp_validate=all,primary=eth0 --bondslaves=eth0,eth1
network --bootproto=static  --device=bond1 --ip=192.168.130.5 --netmask=255.255.255.0 --noipv6 --nodns --onboot=on --activate --bondopts=mode=active-backup,arp_interval=1000,arp_ip_target=192.168.130.254,arp_validate=all,primary=eth2 --bondslaves=eth2,eth3
network --bootproto=static  --device=bond2  --ip=192.168.131.5 --netmask=255.255.255.0 --noipv6 --nodns --onboot=on --activate --bondopts=mode=active-backup,arp_interval=1000,arp_ip_target=192.168.131.254,arp_validate=all,primary=eth4 --bondslaves=eth4,eth5
network --bootproto=static  --device=bond3 --ip=192.168.132.5 --netmask=255.255.255.0 --noipv6 --nodns --onboot=on --activate --bondopts=mode=active-backup,arp_interval=1000,arp_ip_target=192.168.132.254,arp_validate=all,primary=eth6 --bondslaves=eth6,eth7

对于单个接口(无绑定)

network --bootproto=static --hostname=deep-node3 --device=eth0 --gateway=192.168.10.100 --ip=192.168.10.1 --netmask=255.255.255.0 --noipv6 --nodns --onboot=on --activate
network --bootproto=static --device=eth1 --gateway=192.168.10.100 --ip=192.168.10.2 --netmask=255.255.255.0 --noipv6 --nodns --onboot=on --activate
network --bootproto=static --device=eth2 --gateway=192.168.10.100 --ip=192.168.10.3 --netmask=255.255.255.0 --noipv6 --nodns --onboot=on --activate

配置磁盘分区

这是 kickstart 配置的另一个重要部分之一,我们必须其中给出分区方案的完整布局

第一部分总是清除现有的分区表,除非我们想保留一些磁盘。

对于我的情况,我想完全从头开始安装我的系统

# Clear existing data
clearpart --all --initlabel

重要说明:上述命令将清除所有磁盘驱动器,包括任何连接的网络驱动器,如果我们不想清除完整数据,假设我们有两个磁盘(sda,sdb)并且我们只想销毁 sda,那么参数应该是

clearpart --drives=sda
zerombr

zerombr 命令初始化未使用的分区表。

注意:为了这篇文章,我将使用“clearpart --all”,因为我必须清除完整的磁盘驱动器

用于设置具有简单布局的 ext4 分区

# Disk Partitioning
autopart --type=plain --fstype=ext4

用于使用软件 RAID 1 + LVM 设置 ext4 分区。

这里我的设置有两个磁盘(每个磁盘有 838GB 空间),因此我相应地创建了物理卷,我们可以根据磁盘大小修改该值。
如果我们不想限制性地定义物理卷的大小,也可以使用“--size 1 --grow”,这将占用磁盘中的最大可用空间。

# -- raid part for boot -
part raid.sda0 --size 512 --asprimary --ondrive=sda
part raid.sdb0 --size 512 --asprimary --ondrive=sdb
# -- raid part for pv.1 -
part raid.sda2 --size 821616 --ondrive=sda
part raid.sdb2 --size 821616 --ondrive=sdb
# -- raid part for root -
part raid.sda1 --size 12288 --ondrive=sda
part raid.sdb1 --size 12288 --ondrive=sdb
# -- raid part for swap -
part raid.sda3 --size 12288 --ondrive=sda
part raid.sdb3 --size 12288 --ondrive=sdb
# Raid device creation
raid /boot --fstype ext4 --device md0 --level=RAID1 raid.sda0 raid.sdb0
raid pv.1 --device md2 --level=RAID1 raid.sda2 raid.sdb2
raid/--fstype ext4 --device md1 --level=RAID1 raid.sda1 raid.sdb1
raid swap --fstype swap --device md3 --level=RAID1 raid.sda3 raid.sdb3
# Volume group and logical volume creation
volgroup vg00 --pesize=65536 pv.1
logvol /var --fstype ext4 --vgname vg00 --size=16384 --name=var
logvol /tmp --fstype ext4 --vgname vg00 --size=24576 --name=tmp
logvol /home --fstype ext4 --vgname vg00 --size=8192 --name=home
logvol /opt --fstype ext4 --vgname vg00 --size=16384 --name=opt
logvol /usr --fstype ext4 --vgname vg00 --size=32768 --name=usr
logvol /var/log --fstype ext4 --vgname vg00 --size=1 --grow --name=log
For setting an ext4 partition with only LVM.
Here my setup has a single disk (sda) and my physical volume is configured to use all the available space on the disk to create and configure the partition layout
part /boot --size 512 --asprimary --fstype=ext4 --ondrive=sda
part pv.1 --size 1 --grow --fstype=ext4 --ondrive=sda
volgroup system --pesize=32768 pv.1
logvol/--fstype ext4 --vgname system --size=8192 --name=root
logvol /var --fstype ext4 --vgname system --size=16384 --name=var
logvol /tmp --fstype ext4 --vgname system --size=40960 --name=tmp
logvol swap --vgname system --size=4096 --name=swap
logvol /opt --fstype ext4 --vgname system --size=8192 --name=opt
logvol /opt/deep --fstype ext4 --vgname system --size=6144 --name=deep
logvol /opt/deep/log --fstype ext4 --vgname system --size=20480 --name=deeplog
logvol /var/opt/data--fstype ext4 --vgname system --size=1 --grow --name=mybackup

时区

要在 RHEL 7 节点上的 kickstart 中获取支持的时区变量列表,请执行以下命令

# timedatectl list-timezones

这将为我提供一长串可用时区列表,可在此处使用

# System timezone
timezone --utc Asia/Kolkata

root密码

在这里,我们必须提供“root”用户的密码,该密码可以采用以下格式

  • 加密密码
  • 纯文本

我们可以使用以下命令使用 sha512 crypt-compatible hash 创建加密密码

# python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) if (pw==getpass.getpass("Confirm: ")) else exit())'

一旦你有了加密的密码

#Root password
rootpw --iscrypted $oVhMpzpsFeGBc1uF2JmG2xTeSWML0

我们还可以使用“--lock”通过控制台锁定“root”用户登录。
此选项还将在图形和基于文本的手动安装中禁用 Root Passwordscreens。

要安装的软件包列表

在这里,我们可以提供要安装在节点上的组或者单个 rpm 的列表,此外,我们还可以提供要从节点中删除的 rpm 的列表。
这在我们为软件包安装选择了“组”但仍然不需要该组中的某些 rpm 的情况下很有用,因此可以在安装过程中将其删除

获取 RHEL 7 DVD 中可用组的详细信息

注意:在 RHEL 系统上,我们必须有 RHN 的有效订阅,或者我们可以配置本地离线存储库,使用“yum”包管理器可以安装提供的 rpm 及其依赖项。

# yum group list ids
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Available Environment Groups:
Minimal Install (minimal)
   Infrastructure Server (infrastructure-server-environment)
   File and Print Server (file-print-server-environment)
   Basic Web Server (web-server-environment)
   Virtualization Host (virtualization-host-environment)
   Server with GUI (graphical-server-environment)
Available Groups:
   Compatibility Libraries (compat-libraries)
   Console Internet Tools (console-internet)
   Development Tools (development)
   Graphical Administration Tools (graphical-admin-tools)
   Legacy UNIX Compatibility (legacy-unix)
   Scientific Support (scientific)
   Security Tools (security-tools)
   Smart Card Support (smart-card)
   System Administration Tools (system-admin-tools)
   System Management (system-management)
Done
So here the id mentioned within ( ) can be used in the below section, By default we use @Core and @Base for minimal installation
# list of packages to be installed
%packages
# Groups to be installed
@ Core
@ Base --nodefaults
# Additional rpms to be installed
dos2unix
expect
ksh
libhbaapi
nfs-utils
python-devel
perl
# rpms to be removed
-iwl2000-firmware
-iwl5150-firmware
-iwl3160-firmware
-iwl1000-firmware
-iwl3945-firmware
-iwl100-firmware
%end

注意:要删除的 rpm 必须以减号 (-) 开头,但要另外安装的任何 rpm 不需要 (+)

安装前和安装后脚本

此部分是最有用的功能之一,因为我们可以在此处根据组织要求进行真正的自定义。
我写了一篇详细的文章,其中包含我们可以使用 %pre 和 %post 安装阶段执行的所有操作。

例如,一旦安装完成,节点上就有一些自定义脚本可用,我想执行这些脚本并保存安装完成时的日期和时间。

%post --interpreter=shell --log=/var/log/kickstart_post.log
echo "Executing post installation scripts"
/tmp/post_scripts.sh
echo "Installation Completed"
date
%end

同样, %pre 部分可用于根据要求在开始安装之前执行一些活动。

日期:2020-06-02 22:17:15 来源:oir作者:oir