여러 서버에서 이 설치 작업을 수행해야 하므로 자동 설치 스크립트를 만들려고 합니다.
내 변수를 사용하여 모든 바인드9 구성 파일을 설정했으며 변수가 설정되면 작동할 것이라고 생각했지만 바인드 서비스가 시작되면 변수가 인식되지 않는다는 오류가 발생합니다.
예를 들어 /var/log/syslog에 표시된 오류 중 하나는 다음과 같습니다.
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