Kickstart 自动装机

Kickstart 自动装机

Acha
2023-05-15 / 0 评论 / 89 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年05月15日,已超过339天没有更新,若内容或图片失效,请留言反馈。

Kickstart 自动装机

参考: Kickstart Installations :: CentOS Docs Site

Kickstart 命令选项

* 示例

#version=DEVEL
# System authorization information
# 系统 身份验证
auth --enableshadow --passalgo=sha512

# Use CDROM installation media
# 使用 光驱 执行安装
cdrom

# Use graphical install
# 使用 图形化 安装界面
graphical

# Run the Setup Agent on first boot
# 系统第一次引导时启动 初始化设置
# 设置语言、鼠标、键盘、root 密码、安全级别、时区以及默认网络配置
firstboot --enable --reconfig

# 接受最终用户许可证协议
# eula --agreed

# 忽略其他盘,指定使用 sda
# ignoredisk --only-use=sda


# Keyboard layouts
# 使用 美式键盘
keyboard --vckeymap=us --xlayouts='us'

# System language
# 系统 默认语言
lang en_US.UTF-8

# Network information
# 网络 信息
# 设置主机名
network --hostname=localhost.localdomain
# IP 设置,需指定 device,否则会取消后续所有network指令
# network  --bootproto=static --device=ens33 --ip=172.16.1.10 --netmask=255.255.255.0 --gateway=172.16.1.2 --nameserver=8.8.8.8 --ipv6=auto --activate

# Root password
# root 密码
rootpw --iscrypted $6$CRq8DBBEWuqc6LMC$IsuckHWPV8S3mpq0WfceGChzqA6nNVZZGni5oTgQ/tZisMqOrHlmGHqbZKCZchcmuFEBEF8OVT78qzZTiTrNK.

user --name=acha --plaintext --password=q --groups=wheel

# System services
# 系统 服务
services --enabled="chronyd"

# 禁用 firewalld & selinux
firewall --disabled
selinux --disabled

# System timezone
# 系统 时间
timezone Asia/Shanghai --utc --ntpservers=ntp.aliyun.com

# System bootloader configuration
# 启动 引导配置 | grub2-mkpasswd-pbkdf2 设置密码
# bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda --password=grub.pbkdf2.sha512.10000.6CCA5D020DF908F98F2F5DA077E18800D514B85BAAF2376812A62CF772803CB14D0A134DDFFA87E7D6B4509CEA9ADEAFACE98ACCF2028C7830583C51361F1F08.13A6610E8A0FBF7D0CAA7C80B4DEC4C4CC22F8BD8CCC669412A9F028B22F25E38BB8B89879B0A75F60D2D05417E9CCBA057C7AD18A75F8F32D768814B5416208 

# Partition clearing information
# 清除分区 
# --all、清除所有分区、--drives= 指定清除硬盘、--none 不删除任何分区
# clearpart --drives=sda --initlabel



# Disk partitioning information
# part / --fstype="xfs" --ondisk=sda --size=17407
# part swap --fstype="swap" --ondisk=sda --size=2048
# part /boot --fstype="xfs" --ondisk=sda --size=1024

%include /tmp/part.cfg
# 安装完重启
reboot --eject 

%packages
@^minimal
chrony
%end

%addon com_redhat_kdump --enable --reserve-mb='auto'
%end

%pre
#!/bin/sh
aa=$(whiptail --title "disk info" --nocancel --menu "Please select a disk device." 15 50 5 $(lsblk | grep -v 'loop\|sr\|zraw' |awk '/^[a-z]/ {printf $1" "$4" "}') 3>&1 1>&2 2>&3 >/dev/console)
> /tmp/part.cfg
echo "bootloader --append=\" crashkernel=auto\" --location=mbr --boot-drive=$aa --driveorder=$aa --iscrypted --password=grub.pbkdf2.sha512.10000.56A0BDCD566915642A113EA15395992ACB55225783A26E5C1AF7AF101651F60EAE52F869DCEF59A319C8A57EB0EFDD22C6D5D8D1046385C05879699CA0A33D06.2432DEC1D876C30F41C8B307CDEFF2F8D6072FD36D8D68D752F96DD9CD99AE126F2E87FD5C5DF59543391B8DE28F82A73D735BDD8863FD439E9BB2C96EC77A2C" >> /tmp/part.cfg

echo "ignoredisk --only-use=$aa" >> /tmp/part.cfg
echo "clearpart --drives=$aa --all" >> /tmp/part.cfg
echo "part /boot --fstype=xfs --ondisk=$aa --size=1024" >> /tmp/part.cfg
echo "part swap --fstype=swap --ondisk=$aa --size=2048" >> /tmp/part.cfg
echo "part / --fstype=xfs --ondisk=$aa --grow --maxsize=51200" >> /tmp/part.cfg

%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

用户认证

- auth

设置身份验证选项

--enableshadow
    使用 用户密码

--passalgo=sha512
    指定 SHA-512 哈希算法

例:auth --enableshadow --passalgo=sha512

- rootpw

设置 root 密码

rootpw [--iscrypted|--plaintext] [--lock] password

--iscrypted
    创建 加密的密码

--plaintext
    纯文本

--lock
    锁定 root 帐户

例:rootpw --iscrypted $6$CRq8DBBEWuqc6LMC$IsuckHWPV8S3mpq0WfceGChzqA6nNVZZGni5oTgQ/tZisMqOrHlmGHqbZKCZchcmuFEBEF8OVT78qzZTiTrNK.

tip: 
  生成密码
  python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) \
             if (pw==getpass.getpass("Confirm: ")) else exit())'

- User

在系统上创建新用户

user --name=username [options]

--name=
    用户名称

--groups=
    组名列表

--shell=
    shell 类型

--iscrypted
    创建 加密的密码

--plaintext
    纯文本

例: user --name=acha --plaintext --password=q --groups=wheel

tip: 
  生成密码
  python -c 'import crypt,getpass;pw=getpass.getpass();print(crypt.crypt(pw) \
             if (pw==getpass.getpass("Confirm: ")) else exit())'

用户设置

- Keyboard

设置 键盘布局

--vckeymap
    键映射

--xlayouts
    键盘布局

例: keyboard --vckeymap=us --xlayouts='us'

- lang

设置 默认语言

--addsupport=
    添加对其他语言的支持

例: lang en_US.UTF-8

- timezone

设置 系统时区

timezone timezone [options]

--utc
    设置 utc 时区
--nontp
    不启用 ntp
--ntpservers=
    ntp 服务地址
例: timezone Asia/Shanghai --utc --ntpservers=ntp.aliyun.com

安装

- cdrom

CDROM

例: cdrom

- url

使用 FTP、HTTP 或 HTTPS 从远程服务器上的安装树进行安装

--url=
     安装位置
例; url --url=

服务

- firewall

指定 已安装系统的防火墙配置

firewall --enabled|--disabled device [options]

- selinux

设置 已安装系统上 SELinux 的状态

selinux [--disabled|--enforcing|--permissive]

- services

修改 将在默认 systemd 目标下运行的默认服务集

services [--disabled=list] [--enabled=list]

引导参数

- firstboot

首次引导系统。启用,则必须安装初始安装

--enable
    启用

--disable
    禁用

--reconfig
    重新配置

例: firstboot --enable --reconfig

- bootloader

指定应如何安装引导加载程序

--append=
    指定其他内核参数

--boot-drive=
    指定 引导加载程序 写入哪个驱动器

--leavebootorder
    CentOS 7 添加到引导加载程序 顶部

--driveorder=
    BIOS 引导顺序中排在第一位

--password=
    GRUB2 菜单密码

--iscrypted
    加密的密码

--timeout=
    等待时间

--default=
    设置默认引导映像

--disabled
    禁用引导加载程序安装

例: bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=$aa --driveorder=$aa --password=3214

tip:
 生成 grub2 密码: grub2-mkpasswd-pbkdf2 

磁盘

- ignoredisk

忽略指定的磁盘

ignoredisk --drives=drive1,drive2,...

- clearpart

在创建新分区之前从系统中删除分区

--all
    擦除系统中的所有分区

--drives=
    清除分区的驱动器

--initlabel
    通过为各自体系结构中已指定用于格式化的所有磁盘

--list=
    指定要清除的分区

--linux
     擦除所有 Linux 分区

--none
    不删除任何分区

例: clearpart --drives=$aa --all

- part

创建分区

--size=
    设置 分区大小

--grow
    自适应大小

--maxsize=
    分区设置的最大分区大小

--fstype=
    文件系统类型

--ondisk= 
    在磁盘上创建一个分区

例: part / --fstype=xfs --ondisk=$aa --grow --maxsize=51200

网络

- network

配置目标系统的网络信息

--activate
    在安装环境中激活此设备

--bootproto
    网络模式

--device=
    指定网卡

--ip=
    IP地址

--netmask=
    子网掩码

--gateway=
    网关

--nameserver=
    dns解析

 --onboot=
     自启

--noipv6
     禁用 ipv6

例: network  
    --bootproto=static --device=ens33 --ip=172.16.1.10 --netmask=255.255.255.0 --gateway=172.16.1.2 --nameserver=8.8.8.8 -noipv6 --onboot=yes --activate

状态

- reboot

安装成功完成后重新启动

--eject
     尝试在重新启动之前弹出可启动媒体

--kexec
    将已安装的系统加载到内存中

例: reboot --eject

- shutdown

安装成功完成后关闭系统

例: shutdown

- halt

等待用户在重新启动之前按下某个键

例: halt

- eula

接受许可协议

--agreed
    接受最终用户许可协议

例: eula --agreed

软件包选择

%packages

%end

选项

  • @^ 整个环境
  • @ 指定组
  • wget 软件包
  • - 排除软件包或组

参数

--default
    安装默认软件包组

--excludedocs
    不要安装软件包中的任何文档

--ignoremissing
    忽略安装源中缺少的软件包、组和环境

--instLangs=
    指定要安装的语言列表

--multilib
    允许在 64 位系统中安装 32 位软件包

预安装脚本

%pre

%end

参数

--interpreter=
    指定不同的脚本语言

--erroronfail
    显示错误并在脚本失败时暂停安装

--log=
    将脚本的输出记录到指定的日志文件

#!/bin/sh
hds=""
mymedia=""
for file in /proc/ide/h* do
    mymedia=`cat $file/media`
    if [ $mymedia == "disk" ] ; then
        hds="$hds `basename $file`"
    fi
done

set $hds
numhd=`echo $#`
drive1=`echo $hds | cut -d' ' -f1`
drive2=`echo $hds | cut -d' ' -f2`

#Write out partition scheme based on whether there are 1 or 2 hard drives
if [ $numhd == "2" ] ; then
    #2 drives
    echo "#partitioning scheme generated in %pre for 2 drives" > /tmp/part-include
    echo "clearpart --all" >> /tmp/part-include
    echo "part /boot --fstype xfs --size 75 --ondisk hda" >> /tmp/part-include
    echo "part / --fstype xfs --size 1 --grow --ondisk hda" >> /tmp/part-include
    echo "part swap --recommended --ondisk $drive1" >> /tmp/part-include
    echo "part /home --fstype xfs --size 1 --grow --ondisk hdb" >> /tmp/part-include
else
    #1 drive
    echo "#partitioning scheme generated in %pre for 1 drive" > /tmp/part-include
    echo "clearpart --all" >> /tmp/part-include
    echo "part /boot --fstype xfs --size 75" >> /tmp/part-include
    echo "part swap --recommended" >> /tmp/part-include
    echo "part / --fstype xfs --size 2048" >> /tmp/part-include
    echo "part /home --fstype xfs --size 2048 --grow" >> /tmp/part-include
fi

安装后脚本

%post 

%end

参数

--interpreter=
    指定不同的脚本语言

--nochroot
    在 chroot 环境之外运行

--erroronfail
    显示错误并在脚本失败时暂停安装

--log=
    将脚本的输出记录到指定的日志文件中

%post --log=/var/log/post.log
#!/bin/bash

#change net device to ethx
#sed -i 's/quiet"/quiet net.ifnames=0 biosdevname=0"/g' /etc/default/grub
#grub2-mkconfig -o /boot/grub2/grub.cfg

cd /etc/sysconfig/network-scripts
before_network_script=$(ls ifcfg-*|grep -v lo|grep -v eth*)
net_dev_num=$(ls ifcfg-*|grep -v lo|wc -l)
rm -rf $before_network_script

for ((i=0;i<$net_dev_num;i++)); do

echo "TYPE=Ethernet
BOOTPROTO=static
DEVICE=eth$i
ONBOOT=no
DNS1=
IPADDR=
GATEWAY=
NETMASK=" |tee > /etc/sysconfig/network-scripts/ifcfg-eth$i

done

#add pcadmin to sudoers
echo "tmpos ALL=(ALL)       ALL" >> /etc/sudoers
# add tmpos to group users
usermod -a -G users tmpos

# kolla
systemctl disable postfix
systemctl disable NetworkManager
systemctl enable docker
systemctl enable ntpd.service

mkdir -p /etc/systemd/system/docker.service.d
tee /etc/systemd/system/docker.service.d/kolla.conf <<'EOF'
[Service]
MountFlags=shared
EOF

cp -r /usr/share/kolla-ansible/etc_examples/kolla /etc/kolla/
cp -r /usr/share/kystack /opt

%end

Anaconda 配置

设置密码策略

pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty

软件包

rpm -qa >> /root/install.log

awk '{print $2}'  /root/install.log | xargs -i cp /media/Packages/{}.rpm /root/PanIOS/Packages/

yum -y install --downloadonly --downloaddir=

[root@localhost data]# cat exp.sh 
#!/bin/bash
cat << EOF
  <group>
    <id>$0</id>
    <name>$0</name>
    <name xml:lang="en_US">$0</name>
    <description>$0 packages</description>
    <default>false</default>
    <uservisible>false</uservisible>
    <packagelist>
EOF

for i in $* ; do
    echo "      <packagereq type="default">$i</packagereq>"
done
cat << EOF
    </packagelist>
  </group>
EOF

[root@localhost data]# sh exp.sh wget unzip lrzsz tree

 USEAGE:
    mv exp.sh [groupid]
    sh [groupid] [pkg]...

制作镜像

mkisofs -o ../autoinstall_centos_79.iso \
  -b isolinux/isolinux.bin \
  -c isolinux/boot.cat \
  -no-emul-boot \
  -boot-load-size 4 \
  -boot-info-table \
  -R -J -v -T ./
1

评论

博主关闭了当前页面的评论