web-dev-qa-db-ja.com

キックスタートで変数を渡す

%preセクションにホスト名をとるキックスタートファイルがあります。最初に2つ取得する方法がわからないようです。ご覧のとおり、サーバー情報を別のデバイスに送信し、別のデバイスが別のデータベースに基づいてサーバーをカスタマイズします。ただし、preでhostnameパラメーターを取得し、postに送信する方法を理解する必要があります。

%pre
#!/bin/sh
exec < /dev/tty6 > /dev/tty6
chvt 6
clear
echo "################################"
echo "# Running Pre Configuration    #"
echo "################################"
echo -n "Give hostname: "
read hostname
hostname $hostname
echo $hostname > /home/hostname
echo $hostname > /mnt/sysimage/home/hostname
exec < /dev/tty1 > /dev/tty1
chvt 1

%packages
@base
@core

%post
exec < /dev/tty6 > /dev/tty6
chvt 6
ip0=`ifconfig eth0 |grep -e addr:10.0|cut -d':' -f2|awk '{print $1}'`;
ip1=`ifconfig eth1 |grep -e addr:10.0|cut -d':' -f2|awk '{print $1}'`;
mac0=`ifconfig eth0 |grep HWaddr|awk '{print $5}'`;
mac1=`ifconfig eth1 |grep HWaddr|awk '{print $5}'`;
os=`cat /home/hostname` ;
hostname=`cat /home/hostname`;
service sshd start
echo "$ip0^$mac0^$ip1^$mac1^$os^$hostname^none"  >/dev/tcp/10.0.0.1/999
exec < /dev/tty1 > /dev/tty1
chvt 1

上記では、「hostname $ hostname」は一部のOSで機能しますが、すべてではありません。事前に提出された情報をもとにダイナミックにしたいと思いますが、運が悪いです。

2
ThatGuy

Nochroot %postスニペットを作成し、代わりにホスト名をそこに移動します。

%post --nochroot 
echo $hostname > /mnt/sysimage/home/hostname

$hostname変数が変更された場合は、$hostname%preを一時的な場所にエコーし、代わりに%post --nochrootのファイルを移動します。

これは、%preが行われるためですbeforeインストールし、まだ/mnt/sysimage/homeがありません。だからあなたは魔法を使いたいのです OSがインストールされ、%preはchrootの外部で動作し、通常の%postは内部で動作するため、nochrootで移動する必要があります%post

3
Petter H