在本文中,将介绍可根据要求使用的 kickstart 文件的不同部分。
如果我们从头开始创建自定义 kickstart 文件,最好使用“anaconda-ks.cfg”,它位于“root”用户的主文件夹中,可以为我们提供所需的不同部分进行临时安装。
我将尝试解释可以为 kickstart 中的不同部分选择的各种选项。
重要说明:本文中的某些参数可能会过期或者在基于 RHEL 开发的时间段内不起作用,因为它们可能会更改或者删除变量,因此使用 ksvalidator
工具验证 kickstart 始终是一个好主意。
这个工具是pykickstart
rpm 的一部分。
# 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 部分可用于根据要求在开始安装之前执行一些活动。