Centos 8 kickstart四, 13/08/2020 - 11:39 的修訂版本


最後更新: 2020-08-04


Anaconda is a free and open-source system installer for Linux distributions.

It is mainly written in Python with some modules written in C.




After the installation completes, all choices made during the installation are saved into a file named anaconda-ks.cfg


Verify tools

yum install pykickstart

ksvalidator /path/to/kickstart.ks



To load your Kickstart file automatically without having to specify the "inst.ks=" boot option

file ks.cfg and place it on a storage volume labeled OEMDRV

ls cd


genisoimage -V OEMDRV -o ks.iso cd




Sections must be specified in order. Items within the sections do not have to be in a specific order unless otherwise specified.


Syntax Reference


---- Disk ----

ignoredisk (optional)

Causes the installation program to ignore the specified disks.

--only-use - Specifies a list of disks for the installation program to use. All other disks are ignored.

                  用唔到, 因為唔知會係 sda 還是 vda


ignoredisk --only-use=vda

clearpart (optional)

Removes partitions from the system, prior to creation of new partitions. By default, no partitions are removed.

--none (default) - Do not remove any partitions.

--initlabel - Initializes a disk (or disks) by creating a default disk label for ALL disks

                 in their respective architecture that have been designated for formatting (for example, msdos for x86).


Erases all partitions from the system.

This option will erase all disks which can be reached by the installer, including any attached network storage.

autopart (optional)

Automatically creates partitions:

  • a root (/) partition (1 GB or larger),
  • a swap partition, and
  • an appropriate /boot partition for the architecture.
  • On large enough drives (50 GB and larger), this also creates a /home partition.

The autopart option cannot be used together with the part/partition, raid, logvol, or volgroup


# type: lvm, btrfs, plain, thinp

# plain: Regular partitions with no LVM or Btrfs

autopart --type=plain --nohome


要配合 clearpart 使用

part (optional)


part|partition mntpoint --name=name --device=device --rule=rule [options]


part /boot --fstype="xfs" --size=200 --label="boot" --ondisk=vda
part biosboot --fstype="biosboot" --size=1 --ondisk=vda
part /boot/efi --fstype="xfs" --size=200 --label="efi" --ondisk=vda
part swap --fstype="swap" --size=2000 --label="swap" --ondisk=vda
part / --fstype="xfs" --size=2000 --label="centos8-root" --ondisk=vda



The partition is used as swap space.

# To determine the size of the swap partition automatically

swap --recommended


# The partition will be used for a BIOS Boot partition.

# A 1 MiB BIOS boot partition is necessary on BIOS-based AMD64 and Intel 64 systems using a GUID Partition Table (GPT);

# the boot loader will be installed into it. It is not necessary on UEFI systems.


# An EFI System Partition.

# A 50 MiB EFI partition is necessary on UEFI-based AMD, Intel, and ARM; the recommended size is 200 MiB.

# It is not necessary on BIOS systems. See also the bootloader command.


assign a label to an individual partition.

--ondisk= or --ondrive=

Forces the partition to be created on a particular disk.


用了 ignoredisk 就不用 "--ondisk=vda" 了

要配合 clearpart 使用

zerombr (optional)

Reinitialize Partition Tables

If zerombr is specified, any invalid partition tables found on disks are initialized.


bootloader (required)

mbr - The default option.

Depends on whether the drive uses the Master Boot Record (MBR) or GUID Partition Table (GPT) scheme:

  •  On a GPT-formatted disk, this option will install stage 1.5 of the boot loader into the BIOS boot partition.
  •  On an MBR-formatted disk, stage 1.5 will be installed into the empty space between the MBR and the first partition.


bootloader --location=mbr

eula (optional)

Use this option to accept the End User License Agreement (EULA) without user interaction.

eula --agreed




Determine whether the Initial Setup application starts the first time the system is booted.

If enabled, the "initial-setup" package must be installed.


UI: graphical(default), text, or cmdline

graphical (optional)

Perform the installation in graphical mode.

text (optional)

Perform the Kickstart installation in text mode.

cmdline (optional)

Perform the installation in a completely non-interactive command line mode.

Any prompt for interaction halts the installation.


Install (optional)

You must specify the type of installation from cdrom, harddrive, nfs, liveimg, or url


%addon com_redhat_kdump (optional)

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

keyboard (required)

keyboard --vckeymap=us --xlayouts='us'

lang (required)

lang en_US.UTF-8

network (optional)

network  --bootproto=dhcp --device=ens4 --nameserver=, --noipv6 --activate

network  --hostname=c8

network --bootproto=static --ip= --gateway= --netmask= --nameserver=


specifies the device to be configured

If the --device= option is missing on the first use of the network command,

the value of the ksdevice= Anaconda boot option is used, if available.

part or partition (optional)

Creates a partition on the system.

# Device names in the sdX (or /dev/sdX) format are not guaranteed to be consistent across reboots

part / --fstype=xfs --onpart=sda1

# 所以要用

part / --fstype=xfs --onpart=/dev/disk/by-path/pci-0000:00:05.0-scsi-0:0:0:0-part1


part / --fstype=xfs --onpart=/dev/disk/by-id/ata-ST3160815AS_6RA0C882-part1

Other Opts

--label= - assign a label to an individual partition.

reboot (optional)

Normally, Kickstart displays a message and waits for the user to press a key before rebooting.

reboot --eject

reboot --kexec        # 唔 work

rootpw (required)

Sets the system 's root password to the password argument.

rootpw --plaintext xxxx

selinux (optional)

selinux --disabled

services (optional)

services --disabled="chronyd"

timezone (required)


# --nontp - Disable the NTP service automatic starting.

timezone Asia/Hong_Kong --isUtc --nontp

timezone --ntpservers=stdtime.gov.hk

user (optional)

Creates a new user on the system.

vnc (optional)

Allows the graphical installation to be viewed remotely through VNC.

skipx (optional)

If present, X is not configured on the installed system.


自動安裝 Package


repo (optional)

Configures additional yum repositories that can be used as sources for package installation.


repo --name="Minimal" --baseurl=file:///run/install/repo/MyPackage


Kickstart ISO Path: CD 的 "/" => "/run/install/repo"

Package Selection

# Specifying Individual Packages

 * 當 repo 沒有此 package 時就會 error


More Info.



Custom ISO


mkdir -p /home/myiso/unzip

cd /home/myiso/unzip

7z x /path/to/CentOS-8.2.2004-x86_64-minimal.iso -o.

cp ~/anaconda-ks.cfg /ks.cfg

yum install -y pykickstart

ksvalidator ~/ks.cfg

Add label to isolinux/isolinux.cfg

label Kickstart
menu label Kickstart
menu default
kernel vmlinuz
append initrd=initrd.img inst.stage2=hd:LABEL=CentOS8_x86_64 inst.ks=cdrom:/dev/cdrom:/ks.cfg net.ifnames=0 biosdevname=0

Build ISO

genisoimage -o ../centos8-custom.iso \
-boot-load-size 4 -boot-info-table -J -r -R -T \
-V 'CentOS8_x86_64' \
-no-emul-boot -b isolinux/isolinux.bin -c isolinux/boot.cat \
-eltorito-alt-boot  \
-no-emul-boot -eltorito-boot images/efiboot.img ./




  • %pre ... %end
  • %post ... %end


Copy file to new system


The post-install script is run in a chroot environment, therefore, performing tasks such as copying scripts or

RPM packages from the installation media do not work by default.


Default: bash

%post --interpreter=/usr/bin/python
--- Python script omitted --


  • CD 的 '/'        /run/install/repo
  • SYS 的 '/'       /mnt/sysimage
%post --nochroot
cd /mnt/sysimage
cp /run/install/repo/files/.screenrc /root
cp /run/install/repo/files/.vimrc    /root
rm -f /root/anaconda-ks.cfg  /root/original-ks.cfg


# Determine disk type for clearpart on kickstarts (sda / sdb)


kickstart run script after reboot


# By cron job


@reboot /root/firstboot > /var/log/firstboot.log 2>&1


# Cleanup job
grep -v firstboot /etc/crontab > /etc/crontab.tmp
mv -f /etc/crontab.tmp /etc/crontab
service cron restart

# do something

# By Service

在 ks.cfg 的 %post Section 加入以下設定

Prior to Red Hat Enterprise Linux 7:

touch /tmp/runonce
cat << EOF >> /etc/rc.local
if [ -e /tmp/runonce ]
   rm /tmp/runonce
   exec > /root/runonce.log 2>&1
   /path/to/my/script      # 此 script 要做 cleanup jobs, 比如清 /etc/rc.local

Red Hat Enterprise Linux 7 and later:

cat << EOF > /etc/systemd/system/runonce.service
Description=Run once



chmod 664 /etc/systemd/system/runonce.service

systemctl enable runonce