これが可能かどうかはわかりませんが、とにかく尋ねます。
私は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つの個別のファイルに配置され、記述した順序で(均等ではなく)実行されます。つまり、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を使用できるようになります。
私は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
kickstart network
のインターネット検索で見つかりました