Archivo kickstart de CentOS 7, agregue entrada a /etc/hosts

Archivo kickstart de CentOS 7, agregue entrada a /etc/hosts

Tengo un archivo kickstart de CentOS 7 que funciona bastante bien, en su mayoría. La %packagessecció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 %postsección sin preocupaciones, pero parece ejecutarse después de los paquetes. Intenté agregarlo a la %presecció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 %postsecció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/hostsy luego instalar paquetes adicionales.

información relacionada