CentOS 7 kickstart 파일, /etc/hosts에 항목 추가

CentOS 7 kickstart 파일, /etc/hosts에 항목 추가

대부분 꽤 잘 작동하는 CentOS 7 kickstart 파일이 있습니다. %packagesmirrorlist.centos.org가 회사 내부 저장소를 가리키도록 /etc/hosts에 항목을 추가해야 하기 때문에 섹션이 실패합니다 . 걱정하지 않고 섹션 에 항목을 추가할 수 있지만 %post이는 패키지 이후에 실행되는 것 같습니다. 섹션 에 추가하려고 했지만 %pre/etc/hosts에는 나타나지 않습니다. 문서에 따르면 pre 섹션은 ​​설치가 시작되기 전에 실행되므로 파일 시스템이 아직 존재하지 않는 것으로 추측됩니다. 패키지를 섹션으로 이동 %post하고 실행하면 되지만 yum install <my package>패키지 섹션을 사용하는 것이 좀 더 깔끔할 것이라고 생각했습니다. 내 전체 킥 스타트 파일은 다음과 같습니다.

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

답변1

@HBruijn의 정보를 바탕으로 내 질문에 답해 보겠습니다. 패키지 섹션은 설치 미디어에서만 패키지를 설치하도록 설계된 것으로 보입니다. 일반적으로 OS 설치 단계에서는 외부 저장소를 사용하지 않으므로 이는 의미가 있습니다. 일반적으로 OS를 설치한 다음 추가 패키지를 설치합니다. 따라서 이를 위해 post 섹션을 사용하는 것이 합리적입니다. 여기서는 항목을 추가한 /etc/hosts다음 추가 패키지를 설치하는 것이 쉽습니다 .

관련 정보