やりたいこと
PXEBoot, kickstart で OSインストールする際、
[192.168.1.151, 192.168.1.152, 192.168.1.153] のうち、
使用されてないIPを設定するように、postスクリプト等を設定したいです。
(インストールするOSは CentOS8.2 になります)
kickstart で network を 使わず nmcli を使っているのは、
・スクリプトで割り当てる際に便利そう
・今後、VLAN等ややこしい設定をする可能性がある
という理由からです。
困っていたこと1
A stop job is running for Anaconda と表示され、1分30秒待たされます。
待たされるだけで、OSインストール, post script は
問題なく完了してそうなのですが、
間違くないのと、表示がなんとなく気持ち悪いので、
標示させず、待たずにすむようにしたいです。
->postスクリプトを2回書いてることで、表示されているようでした
困っていたこと2
nmcliでネットワーク設定をする場合、--nochroot 環境で nmcliを実行してから、
cp -p /etc/sysconfig/network-scripts/ifcfg-* /mnt/sysimage/etc/sysconfig/network-scripts/
する必要があるみたいで、2回 post を書いています。
試してみたこと
・postを2回書くのをやめて、pre, postに分けた。
・IPを振る部分をshellscriptに分けて、cron@rebootで呼び出すようにした
Kickstartの内容について
最終的な kickstart は 以下のような内容になりました。
cat << 'EOC' > /var/pxe/ks/centos82-minimal.cfg #version=RHEL8 # Reboot after installation reboot # Use network installation url --url http://10.10.10.100/centos82-minimal/ repo --name=Minimal --baseurl=http://10.10.10.100/centos82-minimal/Minimal # Use text mode install text ignoredisk --only-use=nvme0n1 # Keyboard layouts keyboard --vckeymap=jp --xlayouts="jp" # System language lang en_US.UTF-8 # Logging rsyslog logging --host=10.10.10.100 --port=514 --level=debug # Network information # network --bootproto=static --device=br0 --bridgeslaves=eth0 --ip=10.10.10.222 --netmask=255.255.255.0 --gateway=10.10.10.1 --nameserver=8.8.8.8 --noipv6 --activate network --hostname=localhost.localdomain # Root password rootpw --iscrypted passpassworddd # SELinux configuration selinux --disabled # System services services --enabled="chronyd" # System timezone timezone Asia/Tokyo --isUtc --nontp # System bootloader configuration bootloader --location=mbr --append="crashkernel=auto net.ifnames=0 biosdevname=0" --boot-drive=nvme0n1 # Partition clearing information clearpart --all --drives=nvme0n1 # Disk partitioning information part /boot --fstype=xfs --size=500 --label=boot --ondisk=nvme0n1 part pv.777 --fstype=lvmpv --size=1 --grow --ondisk=nvme0n1 volgroup vg1 pv.777 logvol none --fstype=None --name=pool1 --size=1 --grow --vgname=vg1 --thinpool logvol swap --fstype=swap --name=lv_swap --recommended --vgname=vg1 --thin --poolname=pool1 logvol /home --fstype=xfs --name=lv_home --size=10240 --vgname=vg1 --thin --poolname=pool1 logvol / --fstype=xfs --name=lv_root --size=307200 --vgname=vg1 --thin --poolname=pool1 logvol /dstore --fstype=xfs --name=dstore --size=512000 --vgname=vg1 --thin --poolname=pool1 # If system used EFI part /boot/efi --fstype=efi --grow --maxsize=200 --size=20 # Is take Snapshot snapshot vg1/lv_home --name=lv_home_01_deployed --when=post-install %packages @^server-product-environment kexec-tools bash-completion %end %addon com_redhat_kdump --enable --reserve-mb='auto' %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 # Pre script %pre --log=/tmp/ks-pre.log # %post # exec < /dev/tty3 | tee -a /tmp/ks-pre.log > /dev/tty3 # /usr/bin/chvt 3 # set -x echo "################################" echo "# Running Pre Configuration #" echo "################################" nmcli c nmcli c a type bridge con-name br0 ifname br0 stp no autoconnect yes nmcli c m br0 ipv4.method auto nmcli c a type bridge-slave con-name eth0 ifname eth0 master br0 autoconnect yes nmcli c cp -p /etc/sysconfig/network-scripts/ifcfg-* /mnt/sysimage/etc/sysconfig/network-scripts/ # /usr/bin/chvt 1 %end # Post script %post --log=/root/ks-post.log # %post # exec < /dev/tty3 | tee -a /root/ks-post.log > /dev/tty3 # /usr/bin/chvt 3 # set -x echo "################################" echo "# Running Post Configuration #" echo "################################" # Save post script log cat << "EOF" > /root/ks-pre.log %include /tmp/ks-pre.log EOF # Delete default nic ls -al /etc/sysconfig/network-scripts/ find /etc/sysconfig/network-scripts/ -type f -name 'ifcfg-*' | grep -v -e lo$ -e br0$ -e eth0$ | xargs rm -f ls -al /etc/sysconfig/network-scripts/ # Set shellscript # ============================================================================================================================= cat << 'EOS' > /root/firstboot.sh #/bin/bash set -x limit=300 for i in $(seq 1 $limit); do echo -n "${i} @ $(date '+%Y-%m-%d %H:%M:%S,%3N')" ; ping -c3 -i0.5 10.10.10.1 > /dev/null 2>&1 && break ; sleep 0.3s ; done if [ $i -eq $limit ]; then echo 'orz_OTZ @ cannot ping default gateway' ; exit ; fi logger -n 10.10.10.100 -t "firstboot.sh[$$]" -p user.info 'script started' rm -f $0 rm -f /etc/cron.d/firstboot.cron for i in 151 152 153 999 ; do ping -c3 10.10.10.$i && continue ip="10.10.10.${i}" break done if [ "$ip" = "10.10.10.999" ]; then logger -n 10.10.10.100 -t "firstboot.sh[$$]" -p user.warning "orz_OTZ @ 10.10.10.151-153 is already used" else logger -n 10.10.10.100 -t "firstboot.sh[$$]" -p user.info "ping ${ip} is ok" nmcli c m br0 ipv4.method manual ipv4.address 10.10.10.$i/24 ipv4.gateway 10.10.10.1 ipv4.dns 8.8.8.8 nmcli c up br0 fi nmcli c ls -al /etc/sysconfig/network-scripts/ifcfg-* logger -n 10.10.10.100 -t "firstboot.sh[$$]" -p user.info "yum update" yum update -y yum install -y rsyslog bash-completion vim git rsync cat << 'EOF' > /etc/rsyslog.d/pxe.conf *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg :omusrmsg:* uucp,news.crit /var/log/spooler local7.* /var/log/boot.log *.* @10.10.10.100 EOF mkdir -p /root/git cd /root/git/ git clone https://github.com/teityura/dotfiles.git cd dotfiles/ rsync -av ./. /root/ --exclude .git/ lvcreate -s -n lv_root_01_deployed vg1/lv_root yum install -y epel-release yum install -y sl export TERM=xterm (sl ; clear ; echo 'Please enter login user, password ! q-(-_-)-p') > /dev/tty1 & logger -n 10.10.10.100 -t "firstboot.sh[$$]" -p user.info 'script ended' exec $SHELL --login EOS # ============================================================================================================================= # Set cron cat << 'EOF' > /etc/cron.d/firstboot.cron SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/root @reboot root bash firstboot.sh > /root/firstboot-sh.log 2>&1 EOF # /usr/bin/chvt 1 %end EOC
回答1件
あなたの回答
tips
プレビュー