web-dev-qa-db-ja.com

定義済みの静的IPとホスト名(%pre)を備え、KSで使用されるCentOS 7をキックスタートできますか?

これが可能かどうかはわかりませんが、とにかく尋ねます。

私はCentOS 7で新しいサーバーをキックスタートしようとしています。これまでのところほとんど機能していますが、何らかの理由でキックスタートスクリプトの%preセクションで変数を使用すると、構成に解析されません。 。したがって、これは不可能だと私は思い始めていますか?

これはキックスタートの%preセクションにあるものです:

%pre --log /tmp/pre-install.log

hostname=serverA120
ip=100.110.120.130
IFS=. read ip1 ip2 ip3 ip4 <<< "$ip"

キックスタート中は、上記の情報を使用する必要があります:

network  --bootproto=static --device=eth0 --gateway=100.110.$ip3.1 --ip=$ip --nameserver=1.1.1.1 --netmask=255.255.255.0
network  --hostname=$hostname.example.com

また、%postセクションでは、%preの変数を使用しようとします。

sed -i'' -e '/HOSTNAME=/d' /etc/sysconfig/network
echo HOSTNAME=$hostname.example.com >> /etc/sysconfig/network
echo GATEWAY=100.110.$ip3.1 >> /etc/sysconfig/network

echo BOOTPROTO=static >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo IPADDR=$ip >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo NETMASK=255.255.255.0 >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo BROADCAST=100.110.$ip3.255 >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo NETWORK=100.110.$ip3.0 >> /etc/sysconfig/network-scripts/ifcfg-eth0
echo GATEWAY=100.110.$ip3.1  >> /etc/sysconfig/network-scripts/ifcfg-eth0

echo $hostname.example.com >> /etc/hostname
Sudo hostnamectl set-hostname $hostname.example.com

サーバーに到達できなくなった後、ifcfg-eth0を物理的にチェックしたところ、次のように表示されました。

IPADDR=
BROADCAST=100.110..255
NETWORK=100.110..0
GATEWAY=100.110..1

/ etc/hostnameも確認しました:

$hostname.example.com

したがって、変数はキックスタートに解析されていません。私は何か間違ったことをしていますか、それとも単に不可能ですか?そして、おそらくこれのための代替ソリューションはありますか?

もちろん、すべての行を手動で前後に手動で調整することもできますが、すべてを手動で編集せずに、これをできるだけ簡単にしたかったのです。つまり、2行を入力するだけで、残りは希望どおりに構成されます。これは、長期的に複数のサーバーをキックスタートすることで物事を簡単にします。

私は何が間違っているのかわかりませんが、ifcfg-eth0とホスト名を確認すると、事前に入力された変数が使用されていないことが明確に示されていますか?しかし、私が上で言ったように、多分それは単に不可能であるかもしれません、あるいはそれを間違って使用しています。

DHCPや同様のものを使用したくありません。後で手動で変更する必要があるためです。最初の2行を%pre(ホスト名とip)に入力し、インストール全体(および%post)で自動的に使用されるようにします。

1
HudsonHawk

それらは異なる時点で実行される別個のスクリプトであるため、あるブロックの変数を別のブロックで使用することはできません。これらのコードセクションは分割されて1つの個別のファイルに配置され、記述した順序で(均等ではなく)実行されます。つまり、3つの%preセクションがある場合、それらは必ずしも順番に実行されるとは限らないため、それを維持アカウントに。また、これらの変数をキックスタートの他のセクションで使用することはできません。

1つのアイデアは、データを保存する場所に衛星ファイルを使用することです(/tmp/file%preを書き込んで、%post...あれできます)

私は別の方法で、文字通りアナコンダ用の完全な餌とスイッチを作成しました。これにより、偽のキックスタートをディスクに配置し、スクリプトを実行して%%IP%%などの変数を置き換えることができます。 %%HOSTNAME%%とsed。

とにかく、これを行う必要はありません。ip1 ip2 ip3 ip4ブロックの上部に%postの設定を配置するだけで、変数を設定できます。

その後、postブロックで以前と同じようにファイルを書き込むだけです。

キックスタートの「ネットワーク」行をスキップし、network --activate [--device=DEVICENAME]を使用します(複数のデバイスがあり、1を使用したい場合は--deviceを追加します)

以下は参考までです。

%pre%postを使用する場合、BASHへのアクセス権はありません。BourneShellのみです。

キックスタートを使用すると、%pre /%post行で「--interpreter =/bin/bash」を使用できますが、過去の大規模なテストの結果、動作が不安定で常に機能しないことがわかったため、通常は次のように追加しますブロックの最初の行にあるシバン。

    %post --log=/root/post.log
    #!/bin/bash
    ##
    [... code ...]
    %end

これにより、Bourne Shellの代わりにBASHを使用できるようになります。

1
MatteoBee

私はDHCP設定を取得するために似たようなものを使用しています。静的IPアドレスを取得するには、追加の手順をいくつか実行できると思います。

%pre
echo "network  --bootproto=dhcp --device=eth0 --ipv6=auto --activate --hostname renameme.ipa.smith122.com" > /tmp/network.ks
for x in $( cat /proc/cmdline );
do
   case $x in
      SERVERNAME*)
         eval $x
         echo "network  --bootproto=dhcp --device=eth0 --ipv6=auto --activate --hostname ${SERVERNAME}.ipa.example.com" > /tmp/network.ks
         ;;
      NOTIFYEMAIL*)
         eval $x
         echo "${NOTIFYEMAIL}" > /mnt/sysroot/root/notifyemail.txt
         ;;
   esac
done

そして、%preと%postの外で、一般的にはファイル内で、次のものが必要です。

%include /tmp/network.ks

あなたにとっては、おそらく次のような行が必要でしょう:

network --bootproto=static --ip=10.0.2.15 --netmask=255.255.255.0 --gateway=10.0.2.254 --nameserver=10.0.2.1

参考文献

  1. https://sysadmin.compxtreme.ro/automatically-set-the-hostname-during-kickstart-installation/
  2. 私自身のブログ投稿: https://bgstack15.wordpress.com/2019/07/25/use-virt-install-to-fully-automate-the-install-for-centos-Fedora-with-kickstart /
  3. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/installation_guide/s1-kickstart2-optionskickstart networkのインターネット検索で見つかりました
1
bgStack15