質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

1回答

1853閲覧

kickstart完了時に A stop job is running for Anaconda と表示される

teityura

総合スコア84

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2020/09/29 20:28

編集2020/10/04 01:36

やりたいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mit0223

2020/09/30 01:50

%post を2個書かれていますが、1個にしても再現するのでしょうか? Anaconda が %post で起動したプロセスが生き残っている可能性が高いと思うのですが、/root/post-ks.log ではすべてのプロセスが終了しているのが見えているでしょうか?
mit0223

2020/10/01 07:32

/root/post-ks.log の内容を追加していただけますでしょうか。
teityura

2020/10/01 17:16

%post 1回なら、再現しませんでした。 ログを追加させていただきましたが、それらしいメッセージはないように思います。 しかし、現状 post を2回書くしかない状況です。 特定のIPリストのうち、使っていないIPを割り当てたいのですが、 post を 2回書く以外に何か良い方法はなどありますでしょうか。
guest

回答1

0

ベストアンサー

%post 1回なら、再現しませんでした。

%post を2個書かれているのは、 chroot 前の状態でネットワークを設定しないと、%post スクリプトの中で git clone などネットワークにアクセスする処理ができないからであると想定しました。
それであれば、 %post の2個めの処理を再起動後の初回起動時に実行するようにしてはどうでしょうか?

Kickstart後の初回起動時にスクリプトを実行する

を参考に

  • # Post script 2 以降のスクリプトを firstboot.sh に書き出す
  • %post で初回起動時に cron で firstboot.shを起動する
  • firstboot.sh の中で自分自身を cron から登録から解除する

参考サイトですと、 firstboot.sh を /var/tmp においてますが、 /var/tmp だと揮発性なので、/root などに置かないとダメなような気もします。しかし、/root に置くとゴミとして残ってしまうという問題もあります。
また、この変更で %post の中でネットワークが不要になったら、 --nochroot なしで nmcli できるかもしれないとも思います。

手元ですぐに検証できる環境を用意できず、推測ばかりで恐縮です。

投稿2020/10/02 01:12

mit0223

総合スコア3401

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teityura

2020/10/04 01:39

post を firstboot.sh に書いて、やりたいことを実現できました! シェル書いている部分が無理やり感があるので、 ・DHCPサーバでなんとかしたり、 ・Ansibleで設定したり、 を試してみたいと思います。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問