应答文件编写

1.编写介绍

#平台=x86, AMD64, 或 Intel EM64T
#版本=DEVEL
# 防火墙配置
firewall --disabled
# 安装操作系统而非升级
install
# 使用网络进行安装
url --url="http://my.centos.server/centos/8/"
# Root 密码
rootpw --iscrypted $1$somesalt$someencryptedstring
# 系统授权信息
auth --useshadow --passalgo=sha512
# 使用文本模式安装
text
# 系统键盘
keyboard us
# 系统语言
lang en_US
# SELinux 配置
selinux --enforcing
# 安装日志记录级别
logging --level=info
# 系统时区
timezone America/New_York
# 系统引导程序配置
bootloader --location=mbr
# 清除主引导记录
zerombr
# 分区清理信息
clearpart --all --initlabel
# 磁盘分区信息
part / --fstype="xfs" --size=1 --grow --asprimary
part swap --fstype="swap" --size=1024
# 系统引导程序配置
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# 基础安装的源
repo --name="BaseOS" --baseurl=file:///run/install/repo/BaseOS
# 附加源
repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream
%packages
@^minimal-environment
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end

1.1 命令介绍

# 1.url:指定安装源的 URL。例如:
url --url=http://mirror.centos.org/centos/7/os/x86_64/

# 2.lang:设置系统的语言。例如:
lang en_US.UTF-8

# 3.keyboard:设置键盘布局。例如:
keyboard us

# 4.rootpw:设置 root 用户的密码。可以是明文密码或加密密码。例如:
rootpw --iscrypted $1$2TeoFGRN$EeykyMirEiMIya57QmbG71   # 加密写法
rootpw --plaintext "yourpassword" # 明文写法

# 5.timezone:设置系统时区。例如:
timezone America/New_York --isUtc

# 6.autopart:自动分区。例如:
autopart --type=lvm

# 7.part 或 partition:创建一个分区。例如:
part / --fstype="ext4" --grow --size=1
将创建一个 ext4 文件系统的根分区,大小至少为 1 MB,并尽可能大。

# 8.network:配置网络设置。例如:
network --bootproto=dhcp --device=eth0 --onboot=on
将配置网络接口 eth0 使用 DHCP 获取 IP 地址,并在启动时激活。

# 9.%packages ... %end:指定要安装的软件包和软件包组。例如:
%packages
@^minimal
wget
curl
%end
这将安装 minimal 软件包组,以及 wget 和 curl 软件包。

# 10.%post ... %end:安装完成后执行的脚本。例如:
%post
echo "Installation completed!" > /root/install.log
%end
这将在安装完成后,在 /root 目录下创建一个名为 install.log 的文件。

# 11.安装方式和媒体
cdrom:从 CD 或 DVD 安装。
harddrive:从硬盘安装。
nfs:从 NFS 服务器安装。

# 12.引导装载程序
bootloader:指定引导装载程序的安装位置和选项。

# 13.用户和账户
user:创建一个新用户。例如:
user --name=john --password=$1$2TeoFGRN$EeykyMirEiMIya57QmbG71 --iscrypted --gecos="John Doe"
group:创建一个新组。

# 14.防火墙
firewall:配置防火墙。

# 15.服务
services:启动或停止服务。

# 16.硬件
device:配置硬件设备。
driverdisk:指定驱动磁盘。

# 17.系统
auth:配置认证设置。
selinux:配置 SELinux。
firstboot:配置首次启动行为。

# 18.X 窗口系统
xconfig:配置 X 窗口系统。

# 19.预安装脚本
%pre ... %end:在安装开始前执行的脚本。

# 20.其他
reboot:安装完成后重启。
poweroff:安装完成后关闭电源。

2.CentOS 7应答文件

#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --iscrypted $1$kIe7kyAB$s6vXjTrLuOq6AJ.cDRvE51
# System language
lang en_US
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
text
firstboot --disable
# SELinux configuration
selinux --disabled
# Firewall configuration
firewall --disabled
# Network information
network  --bootproto=dhcp --device=eth0
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="http://10.0.0.109/centos/7/os/x86_64"
# System bootloader configuration
bootloader --append="net.ifnames=0" --location=mbr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part / --fstype="ext4" --size=10000
part /boot --fstype="ext4" --size=10000
part swap --fstype="swap" --size=2048

%post
releasever=7
basearch=x86_64
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
cat > /etc/yum.repos.d/Base.repo <<EOF
[base]
name=BaseOS
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
        https://mirrors.cloud.tencent.com/centos/$releasever/os/$basearch/
        https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
gpgcheck=0

[extras]
name=extras
baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
        https://mirrors.cloud.tencent.com/centos/$releasever/extras/$basearch/
        https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/
gpgcheck=0
enabled=1

[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch/
        https://mirrors.cloud.tencent.com/epel/$releasever/$basearch/
        https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/$basearch/
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/epel/RPM-GPG-KEY-EPEL-7
EOF
%end

3.CentOS 8应答文件

#version=RHEL8
# Use graphical install
text
reboot
selinux --disabled
firewall --disabled
url --url="http://10.0.0.109/centos/8"

%packages
@^minimal-environment

%end

# Keyboard layouts
keyboard --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=dhcp --device=eth0 --ipv6=auto --activate
network  --hostname=centos8.5

# Use CDROM installation media

# Run the Setup Agent on first boot
firstboot --enable

# 初始化硬盘
zerombr
# 清理标签
#clearpart -all --initlabel
bootloader --append="net.ifnames=0" --location=mbr
ignoredisk --only-use=sda
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
part /data --fstype="xfs" --ondisk=sda --size=51200
part swap --fstype="swap" --ondisk=sda --size=2048
part / --fstype="xfs" --ondisk=sda --size=102400
part /boot --fstype="ext4" --ondisk=sda --size=1024

# System timezone
timezone Asia/Shanghai
# Root password
rootpw --iscrypted $1$kIe7kyAB$s6vXjTrLuOq6AJ.cDRvE51

%addon com_redhat_kdump --disable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

%post
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak
cat > /etc/yum.repos.d/Base.repo <<EOF
[xyyBaseOS]
name=BaseOS
baseurl=https://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/
        https://mirrors.cloud.tencent.com/centos/$releasever/BaseOS/$basearch/os/
        https://mirrors.tuna.tsinghua.edu.cn/cc/$releasever/BaseOS/$basearch/os/
gpgcheck=0

[xyyAppStream]
name=AppStream
baseurl=file:///misc/cd/AppStream
        https://mirrors.aliyun.com/centos/$releasever/AppStream/$basearch/os/
        https://mirrors.cloud.tencent.com/centos/$releasever/AppStream/$basearch/os/
        https://mirrors.tuna.tsinghua.edu.cn/cc/$releasever/AppStream/$basearch/os/
gpgcheck=0

[xyyextras]
name=extras
baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/os
        https://mirrors.cloud.tencent.com/centos/$releasever/extras/$basearch/os/
        https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/extras/$basearch/os/
gpgcheck=0
enabled=1

[xyyepel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch/
        https://mirrors.cloud.tencent.com/epel/$releasever/Everything/$basearch/
        https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/Everything/$basearch/
gpgcheck=0
enabled=1
%end

4.DHCP工作原理

DHCP (动态主机配置协议,Dynamic Host Configuration Protocol) 是一种网络协议,用于动态地分配 IP 地址给网络中的设备。它使得设备能够自动获取网络配置,无需手动设置,这大大简化了网络管理。

下面是 DHCP 的工作流程:

  1. 发现(Discover):设备(称为客户端)加入网络时,会广播一个 DHCP Discover 消息,以寻找 DHCP 服务器。这个消息就是在询问“有 DHCP 服务器在吗?”。
  2. 提供(Offer):DHCP 服务器会响应 DHCP Discover 消息,发送一个 DHCP Offer 消息给客户端。这个消息包含了一个可用的 IP 地址和其他网络配置的提议。
  3. 请求(Request):客户端收到 DHCP Offer 消息后,会选择一个 DHCP 服务器(如果有多个的话),并向它发送一个 DHCP Request 消息。这个消息告诉服务器,客户端接受其提供的 IP 地址和其他配置。
  4. 应答(Acknowledge):DHCP 服务器收到 DHCP Request 消息后,会发送一个 DHCP Acknowledge 消息给客户端,确认已经为客户端分配了 IP 地址。
  5. 租期(Lease):分配给客户端的 IP 地址并不是永久的,它有一个“租期”。租期过期后,客户端必须重新请求 IP 地址。客户端也可以在租期结束之前,提前请求续租。
  6. 释放(Release):当客户端不再需要该 IP 地址时(例如,设备被关闭或离开网络),它会发送一个 DHCP Release 消息,将 IP 地址返回给 DHCP 服务器。然后这个 IP 地址可以被分配给其他设备。
  7. NACK(Negative Acknowledgement):如果客户端请求一个无效或者不再可用的 IP 地址(例如,如果 IP 地址已经被其他设备占用,或者客户端移动到了一个新的子网),DHCP 服务器可能会发送一个 NACK 消息给客户端,拒绝其请求。在收到 NACK 消息后,客户端会开始一个新的 DHCP 请求过程。
  8. 拒绝(Decline):如果客户端检测到提供的 IP 地址已经在网络上被其他设备使用,它会发送一个 Decline 消息给 DHCP 服务器,拒绝这个 IP 地址。然后开始一个新的 DHCP 请求过程。
  9. 静态 DHCP(或称为 DHCP 预留):在 DHCP 服务器上,管理员可以设置一些特定的规则,使得特定的设备(基于其 MAC 地址)总是获得同一个 IP 地址。这种机制允许网络中的某些设备有固定的 IP 地址,但仍然使用 DHCP 协议来获取网络配置。
  10. DHCP 中继代理(DHCP Relay Agent):在某些大型网络中,DHCP 服务器可能无法直接到达所有的客户端。在这种情况下,可以使用 DHCP 中继代理。DHCP 中继代理会接收客户端的 DHCP Discover 消息,并将其转发到 DHCP 服务器。然后它再将服务器的回应转发回客户端。
  11. DHCP 选项(DHCP Options):DHCP 不仅可以分配 IP 地址,还可以提供其他网络配置,例如 DNS 服务器地址、默认网关地址、网络时间协议(NTP)服务器地址等。这些都是通过 DHCP 选项来设置的。

5.搭建DHCP服务器

# 要在公司内网中设置 DHCP 服务器,可以选择各种不同的 DHCP 服务器软件,如 dnsmasq、ISC DHCP server 等。以下是使用 CentOS 系统和 ISC DHCP server 搭建 DHCP 服务器的一般步骤:

# 1.安装 DHCP:
sudo yum install dhcp -y

# 2.配置 DHCP:
# DHCP 的配置文件位于 /etc/dhcp/dhcpd.conf。你需要编辑这个文件来设置你的 DHCP 服务器。以下是一个基本的配置例子:

subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.100 192.168.1.200;
   option domain-name-servers 8.8.8.8;
   option domain-name "yourdomain.com";
   option routers 192.168.1.1;
   option broadcast-address 192.168.1.255;
   default-lease-time 600;
   max-lease-time 7200;
}
# 在这个配置中,DHCP 服务器会分配 IP 地址范围从 192.168.1.100 到 192.168.1.200 的地址,使用 8.8.8.8 作为 DNS 服务器,网络域名为 yourdomain.com,网关地址为 192.168.1.1,广播地址为 192.168.1.255,租期限制为 600 到 7200 秒。

# 3.启动 DHCP 服务:
# 配置完成后,你可以使用以下命令启动 DHCP 服务:
sudo systemctl start dhcpd

# 并设置为开机自启动:
sudo systemctl enable dhcpd

# 4.验证 DHCP 服务:
sudo systemctl status dhcpd

6.dhcpd.conf

选项

# 如下:
subnet:这个声明定义了一个网络子网。你需要为每个 DHCP 服务管理的子网提供一个 subnet 声明。
netmask:这是子网掩码,用于确定子网的大小。
range:这个选项定义了 DHCP 服务器可以分配的 IP 地址范围。
option domain-name-servers:这个选项定义了你的 DNS 服务器的 IP 地址。你可以用逗号分隔多个 IP 地址。
option domain-name:这个选项定义了域名。
option routers:这个选项定义了默认网关的 IP 地址。
option broadcast-address:这个选项定义了子网的广播地址。
default-lease-time:这个选项定义了客户端如果没有请求特定的租赁期限,则 DHCP 服务器将提供多长时间的租赁(以秒为单位)。默认情况下,这通常设置为 600 秒,也就是 10 分钟。
max-lease-time:这个选项定义了 DHCP 服务器提供的最长租赁期限(以秒为单位)。默认情况下,这通常设置为 7200 秒,也就是 2 小时。
host:这个声明定义了一台主机,可以对其进行特殊配置,如静态 IP 分配。
hardware ethernet:这个选项定义了主机的 MAC 地址。
fixed-address:这个选项定义了分配给特定 MAC 地址的固定 IP 地址。

基本参数

# option 表示客户端的,没加表示服务器的
# 1.subnet 和 netmask:这两个命令定义了你想要 DHCP 服务器管理的网络和子网掩码。例如:
subnet 192.168.1.0 netmask 255.255.255.0 {
...
}
# 这表示 DHCP 服务器将管理 192.168.1.0 网络。

# 2.range:这个命令定义了 DHCP 服务器可以分配的 IP 地址范围。例如:
range 192.168.1.100 192.168.1.200;
# 这表示 DHCP 服务器可以分配从 192.168.1.100 到 192.168.1.200 的 IP 地址。

# 3.option domain-name-servers:这个命令设置了客户端应使用的 DNS 服务器的 IP 地址。例如:
option domain-name-servers 8.8.8.8;
# 这表示客户端应使用 8.8.8.8 作为 DNS 服务器。

# 4.option domain-name:这个命令设置了客户端的 DNS 域名。例如:
option domain-name "yourdomain.com";
# 这表示客户端的 DNS 域名应为 "yourdomain.com"。

# 5.option routers:这个命令设置了客户端的默认网关。例如:
option routers 192.168.1.1;
# 这表示客户端的默认网关应为 192.168.1.1。

# 6.option broadcast-address:这个命令设置了客户端的广播地址。例如:
option broadcast-address 192.168.1.255;
# 这表示客户端的广播地址应为 192.168.1.255。

# 7.default-lease-time 和 max-lease-time:这两个命令设置了客户端租约的默认和最大时间(以秒为单位)。例如:
default-lease-time 600;
max-lease-time 7200;

# 这表示默认租约时间是 600 秒,最大租约时间是 7200 秒。

# 8.host:这个命令可以用于设置预留的 IP 地址,这样特定的客户端(基于其 MAC 地址)可以总是获得相同的 IP 地址。例如:
host myclient {
   hardware ethernet 00:11:22:33:44:55;
   fixed-address 192.168.1.50;
}
# 这表示 MAC 地址为 00:11:22:33:44:55 的客户端总是会获得 IP 地址 192.168.1.50。

# 9.option subnet-mask:这个命令用于指定子网掩码。例如:
option subnet-mask 255.255.255.0;

# 10.option time-offset:这个命令用于指定时区偏移(以秒为单位)。例如:
option time-offset -18000; # Eastern Standard Time

# 11.option ntp-servers:这个命令用于指定 NTP(网络时间协议)服务器的地址。例如:
option ntp-servers ntp.your-provider.example;

# 12.option netbios-name-servers:这个命令用于指定 NetBIOS 名称服务器的地址。例如:
option netbios-name-servers 192.168.1.1;

# 13.option netbios-node-type:这个命令用于指定 NetBIOS 节点类型。例如:
option netbios-node-type 2;

# 14.group:这个命令用于创建一个 DHCP 参数组,使得一组设备可以共享相同的 DHCP 参数。例如:
group {
  next-server 192.168.1.1;
  host tftpclient {
     hardware ethernet 00:11:22:33:44:55;
     filename "pxelinux.0";
  }
}
# 这个例子中,next-server 和 filename 参数将被应用于组中的所有设备。

# 15.allow 和 deny:这两个命令用于控制哪些客户端可以获取 DHCP 租约。例如:
subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.100 192.168.1.200;
   deny unknown-clients;
}
# 这个例子中,只有已知的(在 DHCP 配置文件中明确指定的)客户端可以获取 IP 地址。

范例

# 1.基础的DHCP配置,定义了一个子网和一个地址池
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.10 192.168.1.100;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    option domain-name "mydomain.example";
    option routers 192.168.1.1;
    option broadcast-address 192.168.1.255;
    default-lease-time 600;
    max-lease-time 7200;
}

# 2.静态IP分配(通过指定特定的 MAC 地址为特定的设备分配固定的 IP 地址)
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.10 192.168.1.100;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    option domain-name "mydomain.example";
    option routers 192.168.1.1;
    option broadcast-address 192.168.1.255;
    default-lease-time 600;
    max-lease-time 7200;

# 定义一台主机
    host myhost {
        hardware ethernet 00:11:22:33:44:55;
        fixed-address 192.168.1.200;
    }
}

# 3.多个子网
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.10 192.168.1.100;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    option domain-name "mydomain.example";
    option routers 192.168.1.1;
    option broadcast-address 192.168.1.255;
    default-lease-time 600;
    max-lease-time 7200;
}

subnet 192.168.2.0 netmask 255.255.255.0 {
    range 192.168.2.10 192.168.2.100;
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    option domain-name "myotherdomain.example";
    option routers 192.168.2.1;
    option broadcast-address 192.168.2.255;
    default-lease-time 600;
    max-lease-time 7200;
}

配置文件

}
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#

option domain-name "example.org";
option domain-name-servers 180.76.76.76,223.5.5.5;

default-lease-time 86400;
max-lease-time 106400;

log-facility local7;

subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.120 10.0.0.150;
    option routers 10.0.0.2;
    next-server 10.0.0.109; #tftp Server
    filename "pxelinux.0";
}

host testhost {
    hardware ethernet 00:0c:29:a5:07:6c;
    fixed-address 10.0.0.122;
}

7.Rocky9.2制作应答文件注意事项

1.启动菜单文件里面
label linux9
    menu label Auto Install Rocky Linux ^9
    kernel rocky9/vmlinuz
    append initrd=rocky9/initrd.img inst.ks=http://10.0.0.109/ks/rocky9.cfg
这里的"inst.ks"之前在centos当中直接使用ks就可以,但是在Rocky 9.2当中弃用了,必须写成inst.ks

2.装机过程中提示空间不足,那么就是内存分配少了,2G不行,需要4G才能启动,装机成功以后再改成1G

3.虚拟机装Rocky9.2提示,没有sda这块硬盘,那么很可能选择错了硬盘类型
IDE
SCSI
SATA
NvMe
这里选择SCSI才会有sda这块硬盘,如果选择了nvme,那么设备名可能是"nvme0n1";如果不是的话,那么在安装程序的命令行,输入"shell",使用lsblk或者fdisk -l查看硬盘的设备名,然后根据根据实际的硬盘设备名更改 Kickstart 文件中的 ignoredisk 对应的硬盘名。

8.Rocky9.2应答文件

#version=RHEL8
# Use graphical install
text
reboot
selinux --disabled
firewall --disabled
url --url="http://10.0.0.109/rocky/9/os/x86_64"

%packages
@^minimal-environment
lrzsz
vim
bash-completion
%end

# Keyboard layouts
keyboard --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=dhcp --device=eth0 --ipv6=auto --activate
network  --hostname=Rocky9.2

# Use CDROM installation media

# Run the Setup Agent on first boot
firstboot --enable

# 初始化硬盘
zerombr
# 清理标签
#clearpart -all --initlabel
bootloader --append="net.ifnames=0" --location=mbr
ignoredisk --only-use=sda
# Partition clearing information
clearpart --none --initlabel
# Disk partitioning information
part /data --fstype="xfs" --ondisk=sda --size=51200
part swap --fstype="swap" --ondisk=sda --size=2048
# System timezone
timezone Asia/Shanghai
# Root password
rootpw --iscrypted $1$vH7uEXwe$tNNw5sVlMl3dvNXk0Hx/i1

%addon com_redhat_kdump --disable --reserve-mb='auto'

%end

%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
Categories: kickstartLinux

邢宇宇

我是一名热情的云原生架构师和Java开发者,专注于构建可扩展的大数据解决方案。我的职业旅程始于对代码的热爱和创新技术的追求。我拥有在云计算和大数据领域深厚的技术背景,这使我能够设计和实现高效、稳健的系统。 我擅长使用Java来开发高性能的应用程序,同时也深入研究了如何利用云服务来优化数据处理过程。我热衷于探索新技术,如容器化、微服务架构和自动化,这些都是当今构建和部署现代软件解决方案的关键元素。 在我的博客中,我分享我的专业知识和行业见解,探讨最佳实践,以及如何克服在云原生生态系统中遇到的挑战。我相信通过共享和协作,我们可以推动技术的发展,创造出更好的解决方案来解决复杂问题。欢迎加入我的技术之旅,与我一起深入云原生的世界!

0 Comments

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注