複数のサーバーでこのインストール作業を実行する必要があるため、サイレントインストールスクリプトを作成しようとしています。
私は変数を使用してすべてのBind9設定ファイルを設定し、変数が設定されていると機能すると思いましたが、バインドサービスが起動すると変数が認識されないというエラーが発生します。
たとえば、/var/log/syslogに表示されるエラーの1つは次のとおりです。
dns_rdata_fromtext: /etc/bind/db.override:16: near ''$IP'': bad dotted quad
私の設定ファイル:
;The Variables here are NIC and IP
; BIND data file for overridden IPs
;
$TTL 86400
@ IN SOA ns1 root (
2012100401 ; serial
604800 ; refresh 1w
86400 ; retry 1d
2419200 ; expiry 4w
86400 ; minimum TTL 1d
)
; need atleast a nameserver
IN NS ns1
; specify nameserver IP address
ns1 IN A $IP ; external IP from $NIC
; provide IP address for domain itself
@ IN A $IP ; external IP from $NIC
; resolve everything with the same IP address as ns1
* IN A $IP ; external IP from $NIC
オンラインで検索しましたが、ここでやりたいことを反映する解決策が見つかりませんでした。私はシェルスクリプトの専門家ではなく、バインディングと他のプログラムが両方に変数を実装していることがわかりました。上記のように、構成ファイルに変数が含まれていると変数を処理できないようです。
ベストアンサー1
バインディングプロファイルを使用すると、ここでやりたいことはできません。この変数は$IP
環境変数に設定できません。
通常、この場合はスクリプトまたはテンプレートエンジンを使用してこれらの変数を拡張します(技術的にはマクロと呼ばれることがよくあります)。ここで、テンプレートエンジンは展開中にファイルを拡張します。
私にもっとおなじみの名前はチーター。これは、システムの展開に使用する構成システムで使用されます。靴修理工。などのシステムがたくさんあります。人形、シェフ、CFエンジン、塩、等。
チーターテンプレートの例
これは、Cheetahのいくつかの基本的な構文を示す非常に簡単な例です。
源泉:http://www.cheetahtemplate.org/examples.html
<html>
<head><title>$title</title></head>
<body>
<table>
#for $client in $clients
<tr>
<td>$client.surname, $client.firstname</td>
<td><a href="mailto:$client.email">$client.email</a></td>
</tr>
#end for
</table>
</body>
</html>
マクロ$client.email
、、、$client.firstname
およびマクロ$title
は、実行時に実際の値としてCheetahによって拡張されます。これらのエンジンは非常に強力で、上記のforループを実行することもできます$client
。
$IP
ただし、要件が最小化されている場合は、展開時にこれらのマクロを拡張するためにシェルスクリプトを一緒に使用します。作成が難しくないスクリプトを使用sed
または作成できます。bash
結局、次の種類のゲームをプレイすることになります。
はい
$ IP=1.2.3.4
$ sed -i "s/\$IP/$IP/g" sample.conf
$ cat sample.conf
;The Variables here are NIC and IP
; BIND data file for overridden IPs
;
$TTL 86400
@ IN SOA ns1 root (
2012100401 ; serial
604800 ; refresh 1w
86400 ; retry 1d
2419200 ; expiry 4w
86400 ; minimum TTL 1d
)
; need atleast a nameserver
IN NS ns1
; specify nameserver IP address
ns1 IN A 1.2.3.4 ; external IP from $NIC
; provide IP address for domain itself
@ IN A 1.2.3.4 ; external IP from $NIC
; resolve everything with the same IP address as ns1
* IN A 1.2.3.4 ; external IP from $NIC