安装
应答文件(kickstart文件)
实现自动安装前,需要制作对应的安装应答文件,称为kickstart文件,用于保存安装过程需要指定的选项。
#kickstart文件在每个安装完的Linux系统家目录中存在
#其中记录了安装操作系统的整个过程
[root@centos8 ~]$ls ~
anaconda-ks.cfg
#对此文件稍作修改,即可实现自动安装
#注意!centos6和7,8文件格式略有不同文件格式说明
kickstart文件主要包括三个部分:命令段,程序包段,脚本段
命令段:指明各种安装前配置,如键盘类型等
#命令段中的常见命令:
keyboard: #设定键盘类型
lang: #语言类型
zerombr:#清除mbr
clearpart:#清除分区
part: #创建分区
rootpw: #指明root的密码
timezone: #时区
text: #文本安装界面
network:#指定网络设置
firewall:#设置防火墙设置
selinux:#设置selinux设置
reboot:#安装完自动重启
user:#安装完成后为系统创建新用户
url: #指明安装源#加密密码生成方式:
程序包段:指明要安装的程序包组或程序包,不安装的程序包等
%packages
@^environment group: #@……指定环境包组,(安装方法)如:@^minimal-environment
@group_name #@开头为指定包组
package
-package
%end脚本段
%pre: #安装前脚本
%post: #安装后脚本注意!:
- CentOS 8,7,6 不同版本的kickstart文件格式不尽相同,不可混用
- %addon, %packages, %onerror, %pre 、 %post 必须以%end结束,否则安装失败
文件使用过程
**1.**Create a Kickstart file.
**2.**Make the Kickstart file available on removable media, a hard drive or a network location.
**3.**Create boot media, which will be used to begin the installation.
**4.**Make the installation source available.
**5.**Start the Kickstart installation.
文件创建
- 依据某模板修改并生成新配置,CentOS安装完后,会自动参考当前系统的安装过程,生成一个kickstart文件,所在位置:/root/anaconda-ks.cfg
文件语法检查
使用 ksvalidator 工具可以检查kickstart的文件格式是否有语法错误,来自于 pykickstart 包
#格式
ksvalidator kickstart.cfg #如果有提示即说明有错误,没提示表示没错误CentOS7应答文件参考
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Install OS instead of upgrade
install
# Keyboard layouts
keyboard 'us'
# Root password
rootpw --plaintext magedu
# 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=static --device=eth0 --ip=10.0.0.123 --netmask=255.255.255.0
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Use network installation
url --url="http://10.0.0.8/centos/7/os/x86_64"
# System bootloader configuration
bootloader --append="net.ifnames=0" --location=mbr
# Partition clearing information
clearpart --all
# Disk partitioning information
part / --fstype="xfs" --size=100000
%post
useradd mage
echo magedu |passwd --stdin mage
mkdir /etc/yum.repos.d/backup
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
cat > /etc/yum.repos.d/base.repo <<EOF
[base]
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
EOF
mkdir /root/.ssh -m 700
cat > /root/.ssh/authorized_keys <<EOF
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC4fLgICiPzngrZ3J55lqfGH/yAifTe39nHi/9Z/2kC0WLYyyLvQGmyXP2I+y0sIaIpqvGHSglrXpsMszu2YoO72ydm+baSCazoH3pBUKvNa34+nukm9kUXsuNchFSzJGt6yOMEZNfvdenFYAAkRo5/hYNy/jgaGbCSejxxBjx1oPB1ik7DQUXuZJKeNQEHYuQLMeNOatR7eQSWPH/e6vSgu6kERtn4QKvIa7VTt1hL8oE2VaxlmtuQEEhuuU1TELn5atkoGX2bSCxPjJxfBLqLKA75DGmaIKZl849JCOsQH/4nSGnGsF1BDrV/JqfeTsDBlt3/DKIlNZ+5/BVBg4UPgAnKWFrrE52ub3L87SsqteES5Zh1K6yv3qA4Xagf1UTKFA7KhGZA2y+AwUTglQMeoYB1CNDQQjf35RDqjW25FD2IzqFurnVSkVEOU7u9mdN6v6KVZjAadOrFhXRoWtsJnEbwD/Dh1g8RWt55xIE0f4RekLNsmfgQxp3MiZSv8XU= root@centos8.localdomain
EOF
chmod 600 /root/.ssh/authorized_keys
%end
%packages
@web-server
%endCentOS8应答文件参考
ignoredisk --only-use=sda
zerombr
text
reboot
clearpart --all --initlabel
selinux --disabled
firewall --disabled
url --url=http://10.0.0.8/centos/8/os/x86_64/
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network --bootproto=dhcp --device=eth0 --ipv6=auto --activate
network --hostname=autosystem
rootpw --iscrypted $6$j9YhzDUnQVnxaAk8$qv7rkMcPAEbV5yvwsP666DXWYadd3jYjkA9fpxAo9qYotjGGBUclCGoP1TRvgHBpqgc5n0RypMsPTQnVDcpO01
firstboot --enable
skipx
services --disabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
user --name=xiang --password=6oUfb/02CWfLb5l8f$sgEZeR7c7DpqfpmFDH6huSmDbW1XQNR4qKl2EPns.gOXqlnAIgv9pTogtFVaDtEpMOC.SWXKYqxfVtd9MCwxb1 --iscrypted --gecos="wang"
part / --fstype="xfs" --ondisk=sda --size=102400
part /data --fstype="xfs" --ondisk=sda --size=51200
part swap --fstype="swap" --ondisk=sda --size=2048
part /boot --fstype="ext4" --ondisk=sda --size=1024
%packages
@^minimal-environment
kexec-tools
vim
%end
%addon com_redhat_kdump --enable --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
sed -Ei.bak '/^GRUB_CMDLINE_LINUX/s/(.*)(")$/\1 net.ifnames=0\2/' /etc/default/grub
systemctl mask ctrl-alt-del.target
echo "PS1='\e[31;1m[\u@\h \W]$\e[0m'" > ssh_color.sh
mkdir /etc/yum.repos.d/repobak
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repobak/
cat > /etc/yum.repos.d/CentOS-Base.repo << EOF
[base]
name=CentOS-\$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=https://mirrors.aliyun.com/centos/\$releasever/BaseOS/\$basearch/os/
http://mirrors.aliyuncs.com/centos/\$releasever/BaseOS/\$basearch/os/
http://mirrors.cloud.aliyuncs.com/centos/\$releasever/BaseOS/\$basearch/os/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
#additional packages that may be useful
[extras]
name=CentOS-\$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=https://mirrors.aliyun.com/centos/\$releasever/extras/\$basearch/os/
http://mirrors.aliyuncs.com/centos/\$releasever/extras/\$basearch/os/
http://mirrors.cloud.aliyuncs.com/centos/\$releasever/extras/\$basearch/os/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-\$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=https://mirrors.aliyun.com/centos/\$releasever/centosplus/\$basearch/os/
http://mirrors.aliyuncs.com/centos/\$releasever/centosplus/\$basearch/os/
http://mirrors.cloud.aliyuncs.com/centos/\$releasever/centosplus/\$basearch/os/
gpgcheck=1
enabled=0
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
[PowerTools]
name=CentOS-\$releasever - PowerTools - mirrors.aliyun.com
failovermethod=priority
baseurl=https://mirrors.aliyun.com/centos/\$releasever/PowerTools/\$basearch/os/
http://mirrors.aliyuncs.com/centos/\$releasever/PowerTools/\$basearch/os/
http://mirrors.cloud.aliyuncs.com/centos/\$releasever/PowerTools/\$basearch/os/
gpgcheck=1
enabled=0
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
[AppStream]
name=CentOS-\$releasever - AppStream - mirrors.aliyun.com
failovermethod=priority
baseurl=https://mirrors.aliyun.com/centos/\$releasever/AppStream/\$basearch/os/
http://mirrors.aliyuncs.com/centos/\$releasever/AppStream/$basearch/os/
http://mirrors.cloud.aliyuncs.com/centos/\$releasever/AppStream/\$basearch/os/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
EOF
%end通过网络实现自动安装(PXE)
基于网络实现自动安装操作系统是基于PXE实现的,但实现自动安装前需要装备dhcp服务器,tftp服务器,http服务器,以及安装syslinux-nonlinux包来获取pxelinux.0这个文件(可以在同一台主机搭建)
-
此方式是针对传统的BIOS安装,如果遇到FEFI启动方式,还需添加几个文件,详情参考官方文档
-
安装前准备
关闭防火墙和SELINUX,DHCP服务器静态IP
网络要求:关闭Vmware软件中的DHCP服务,基于NAT模式
内存建议2G以上
-
准备dhcp服务器
yum install dhcp-server
cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
option domain-name "xiangzheng.com"; #ping的时候自动补全地址
option domain-name-servers 180.76.76.76, 223.6.6.6; #指定互联网的dns服务器
default-lease-time 86400; #IP地址租期,默认以秒为单位,86400为一天的秒数,根据企业情况设置
max-lease-time 106400; #最大租期
#长租期:IP相对稳定,网络资源消耗较少,但是浪费IP资源
#短租期:IP相对不稳定,网络资源消耗较多,但是IP资源可以充分利用,可以实现较少IP为较多的主机服务
subnet 10.0.0.0 netmask 255.255.255.0 { #指定地址池,网段
range 10.0.0.100 10.0.0.200; #指定地址范围
option routers 10.0.0.2;#指定网关
next-server 192.168.1.100; #指向TFTP服务器地址
filename "pxelinux.0"; #bootloader启动文件的名称,实现基于网卡启动
}
systemctl enable --now dhcpd #开机启动并立刻开启dhcp服务
ss -ntul #udp的67端口开启表示dhcp的服务端已启动- 准备tftp服务器
yum install tftp-server
systemctl enable --now tftpd
- 准备http服务器
yum -y install httpd
systemctl enable --now httpd - 安装syslinux-nonlinux
yum -y install syslinux-nonlinux
#主要为了获取pxelinux.0和menu.32文件-
准备仓库路径和yum源
mkdir -p /var/www/html/centos/8/os/x86_64/ mount /dev/sr0 /var/www/html/centos/8/os/x86_64/ #正常生产中应该把光盘拷贝到服务器在挂载,注意挂载重启失效的问题,必要的话写到fstab文件中 mount /data/iso/CentOS-8.3.2011-x86_64-dvd1.iso /var/www/html/centos/8/os/x86_64/ -
准备ks文件并拷入到http中,并稍作修改
mkdir /var/www/html/ks ls /var/www/html/ks centos8.cfg vim /var/www/html/ks/centos8.cfg url --url=http://10.0.0.28/centos/8/os/x86_64/ #指向yum源的路径,可以复制粘贴到网页中查看是否有问题 -
准备PXE启动相关文件,放入到tftp服务器中
mkdir /var/lib/tftpboot/centos8 #在tftp启动数据目录中创建文件夹(自己规划) #将centos8的内核相关文件拷入 cp /var/www/html/centos/8/os/x86_64/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos8 #将syslinux-nonlinux包中的pxelinux.0和menu.32文件拷入 cp /usr/share/syslinux/{menu.c32,pxelinux.0} /var/lib/tftpboot/ #以下三个文件是CentOS8安装所必须文件,CentOS6,7则不需要 [root@centos8 ~]#cp /var/www/html/centos/8/os/x86_64/isolinux/{ldlinux.c32,libcom32.c32,libutil.c32} /var/lib/tftpboot/ #生成菜单文件 mkdir /var/lib/tftpboot/pxelinux.cfg/ cp /var/www/html/centos/8/os/x86_64/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default -
准备菜单文件
#vim /var/lib/tftpboot/pxelinux.cfg/default default menu.c32 timeout 600 menu title Azheng CentOS Linux 8 label linux menu label ^Install CentOS Linux 8 kernel centos8/vmlinuz append initrd=centos8/initrd.img ks=http://10.0.0.28/ks/centos8.cfg label manual menu label ^Manual Install CentOS Linux 8.0 kernel centos8/vmlinuz append initrd=centos8/initrd.img inst.repo=http://10.0.0.28/centos/8/os/x86_64/ label rescue menu label ^Rescue a CentOS Linux system kernel centos8/vmlinuz append initrd=centos8/initrd.img ks=http://10.0.0.28/ks/centos8.cfg inst.repo=http://10.0.0.28/centos/8/os/x86_64/ rescue label local menu default menu label Boot from ^local drive localboot 0xffff label returntomain menu label Return to ^main menu menu exit menu end
通过串口安装
- 有的时候,服务器没有显卡,只能通过串口安装,主要是通过修改grub.cfg文件,在启动菜单中添加串口参数:
- 串口参数:
console=ttyS0,115200n8 - 其中,
ttyS0表示串口0,115200表示波特率,n8表示数据位8位,无校验位,1位停止位
- 串口参数:
- 下面是
openEuler 24.03 (LTS-SP3)的 grub.cfg 文件配置示例(注意,以下配置针对UEFI引导):
# 串口输出配置
# serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1
# terminal_input serial console
# terminal_output serial console
# 设置默认启动项为第一个菜单项(索引从 0 开始)
set default="0"
set timeout=10 # 10 秒后自动启动默认项
# 加载必要的模块
function load_video {
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
}
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
# 寻找分区 (确保卷标正确)
search --no-floppy --set=root -l 'OPENEULER-2'
# 唯一的安装入口
menuentry 'Install openEuler 24.03-LTS-SP3 (Auto Kickstart)' --class openEuler --class gnu-linux --class gnu --class os {
# 输出到串口
linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=OPENEULER-2 inst.ks=hd:LABEL=OPENEULER-2:/ks/ks.cfg net.ifnames=0 biosdevname=0 console=tty0 console=ttyS0,115200n8 inst.text
initrdefi /images/pxeboot/initrd.img
}制作引导光盘实现自动安装
- 可以将定制安装光盘,并结合 kickstar t实现基于光盘启动的半自动化安装;
- 主要是修改
grub.cfg文件和ks.cfg文件;
# 串口输出配置
# serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1
# terminal_input serial console
# terminal_output serial console
# 设置默认启动项为第一个菜单项(索引从 0 开始)
set default="0"
set timeout=10 # 10 秒后自动启动默认项
# 加载必要的模块
function load_video {
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
}
load_video
set gfxpayload=keep
insmod gzio
insmod part_gpt
insmod ext2
# 寻找分区 (确保卷标正确)
search --no-floppy --set=root -l 'OPENEULER-2'
# 唯一的安装入口
menuentry 'Install openEuler 24.03-LTS-SP3 (Auto Kickstart)' --class openEuler --class gnu-linux --class gnu --class os {
# 输出到屏幕
linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=OPENEULER-2 inst.ks=hd:LABEL=OPENEULER-2:/ks/ks.cfg net.ifnames=0 biosdevname=0 console=tty0 inst.text
initrdefi /images/pxeboot/initrd.img
}# openEuler 24.03 Kickstart Config
# 1. 纯文本安装模式(速度快)
text
# 2. 自动同意许可协议(必须有,否则卡住)
eula --agreed
# 3. 安装完成后自动重启
reboot
# 键盘与语言
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
# 4. 网络配置
# 安装阶段建议使用 DHCP,避免4台机器同时安装时 IP 冲突
# 具体的静态 IP 由下方的 %post 脚本在首次开机时配置
network --bootproto=dhcp --device=eth0 --onboot=yes --activate
# 5. 安装源(U盘)
# 确保你的 U 盘卷标是 OPENEULER-2
harddrive --dir= --partition=LABEL=OPENEULER-2
# 6. 磁盘与分区配置
# 注意:如果你的硬盘是 NVMe (如 nvme0n1),请修改下面的 sda
ignoredisk --only-use=sda
clearpart --all --initlabel --drives=sda
# UEFI 引导必须的分区 (通常 200-600MB)
part /boot/efi --fstype="efi" --size=600 --fsoptions="umask=0077,shortname=winnt"
# 你要求的 1G boot 分区
part /boot --fstype="xfs" --size=1024
# 剩下的所有空间给根目录 (grow)
part / --fstype="xfs" --grow --size=1
# 7. 引导程序
bootloader --location=mbr --boot-drive=sda --append="net.ifnames=0 biosdevname=0"
# Root 密码 (当前是明文 P@ssw0rd)
rootpw --plaintext P@ssw0rd
# 软件包(最小化)
%packages
@^minimal-environment
%end
# 禁用首次启动向导
firstboot --disable
skipx
# 时区
timezone Asia/Shanghai --utc
%post
# 生成静态网卡配置文件模板,系统安装完成后按需修改
cat > /etc/sysconfig/network-scripts/ifcfg-demo <<EOF
DEVICE=eth0
TYPE=Ethernet
BOOTPROTO=none
ONBOOT=yes
IPADDR=172.172.17.31
PREFIX=16
GATEWAY=172.172.0.1
DNS1=223.5.5.5
DNS2=223.6.6.6
%end