Tengo un archivo kickstart de CentOS 7 que funciona bastante bien, en su mayoría. La %packages
sección falla porque necesito agregar una entrada a /etc/hosts para apuntar mirrorlist.centos.org al repositorio interno de nuestra empresa. Puedo agregar la entrada en la %post
sección sin preocupaciones, pero parece ejecutarse después de los paquetes. Intenté agregarlo a la %pre
sección pero nunca aparece en /etc/hosts. Según la documentación, la sección previa se ejecuta antes de que comience la instalación, por lo que supongo que el sistema de archivos ni siquiera existe todavía. Puedo mover los paquetes a la %post
sección y simplemente ejecutarlos yum install <my package>
, pero pensé que sería un poco más ordenado usar la sección de paquetes. Aquí está mi archivo de inicio completo:
install
cdrom
lang en_US.UTF-8
keyboard us
network --bootproto=dhcp --noipv6 --onboot=on --device=eth0
rootpw --plaintext XXXX
firewall --disabled
selinux --permissive
timezone UTC
unsupported_hardware
bootloader --timeout=1 --location=mbr --append="net.ifnames=0 biosdevname=0"
text
skipx
zerombr
clearpart --all --initlabel
autopart --nohome --nolvm
auth --enableshadow --passalgo=sha512 --kickstart
firstboot --disabled
reboot --eject
user --name=vagrant --plaintext --password XXXX
%packages --nobase --ignoremissing --excludedocs --instLangs=en_US.utf8
# vagrant needs this to copy initial files via scp
openssh-clients
sudo
selinux-policy-devel
wget
nfs-utils
net-tools
tar
bzip2
deltarpm
rsync
qemu-guest-agent
-fprintd-pam
-intltool
# unnecessary firmware
-*firmware
-microcode_ctl
%end
%pre --log=/mnt/ks-pre.log
#!/bin/sh
echo X.X.X.X mirrorlist.centos.org >> /etc/hosts
touch /mnt/hello
touch /root/hello
%end
%post --log=/root/ks-post.log
echo X.X.X.X mirrorlist.centos.org >> /etc/hosts
# sudo
echo 'Defaults:vagrant !requiretty' > /etc/sudoers.d/vagrant
echo '%vagrant ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers.d/vagrant
chmod 440 /etc/sudoers.d/vagrant
# Enable hyper-v daemons only if using hyper-v virtualization
if [ $(virt-what) == "hyperv" ]; then
yum -y install hyperv-daemons cifs-utils
systemctl enable hypervvssd
systemctl enable hypervkvpd
fi
# Since we disable consistent network naming, we need to make sure the eth0
# configuration file is in place so it will come up.
# Delete other network configuration first because RHEL/C7 networking will not
# restart successfully if there are configuration files for devices that do not
# exist.
rm -f /etc/sysconfig/network-scripts/ifcfg-e*
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << _EOF_
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
DEVICE=eth0
ONBOOT=yes
_EOF_
#add our SSH key as a login method
mkdir /root/.ssh
chmod 700 /root/.ssh
cat >> /root/.ssh/authorized_keys << _EOF_
ssh-rsa xxxxxx
_EOF_
chmod 600 /root/.ssh/authorized_keys
#cloud init
yum install -y cloud-init
cat > /etc/cloud/cloud.cfg.d/90_dpkg.cfg << _EOF_
datasource_list: [ NoCloud, None ]
_EOF_
systemctl enable cloud-init
cat > /etc/cloud/cloud.cfg << _EOF_
users:
- default
disable_root: 0
ssh_pwauth: 1
mount_default_fields: [~, ~, 'auto', 'defaults,nofail,x-systemd.requires=cloud-init.service', '0', '2']
resize_rootfs_tmp: /dev
ssh_deletekeys: 0
ssh_genkeytypes: ~
syslog_fix_perms: ~
disable_vmware_customization: true
cloud_init_modules:
- disk_setup
- migrator
- bootcmd
- write-files
- growpart
- resizefs
- set_hostname
- update_hostname
- update_etc_hosts
- rsyslog
- users-groups
- ssh
cloud_config_modules:
- mounts
- locale
- set-passwords
- rh_subscription
- yum-add-repo
- package-update-upgrade-install
- timezone
- puppet
- chef
- salt-minion
- mcollective
- disable-ec2-metadata
- runcmd
cloud_final_modules:
- rightscale_userdata
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- ssh-authkey-fingerprints
- keys-to-console
- phone-home
- final-message
- power-state-change
system_info:
default_user:
name: centos
lock_passwd: true
gecos: Cloud User
groups: [adm, systemd-journal]
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
distro: rhel
paths:
cloud_dir: /var/lib/cloud
templates_dir: /etc/cloud/templates
ssh_svcname: sshd
# vim:syntax=yaml
_EOF_
echo Complete
%end
Respuesta1
Solo para responder mi propia pregunta, basada en información de @HBruijn. Parece que la sección de paquetes solo está diseñada para instalar paquetes desde los medios de instalación. Esto tiene sentido ya que generalmente no utilizaría repositorios externos durante la fase de instalación del sistema operativo. Generalmente instalaría el sistema operativo y luego instalaría paquetes adicionales. Por lo tanto, tiene sentido utilizar la sección de publicaciones para esto. Allí es fácil agregar una entrada /etc/hosts
y luego instalar paquetes adicionales.