WindowsでDNSサーバを立てるにあたってBINDを使ったのですが、標準のBINDInstall.exeが使いにくいのと、サイレントインストールしたかったので、NSISを使ってインストーラーを作る方向にしました。
基本的には全部展開して設置したあと、VC2005再頒布可能パッケージをインストールして、named.exeをサービス登録するだけです。
ファイアウォールの許可もしています。
プラグインを3つ使っています。
Nsisunz plug-in – NSIS Zipの展開
NSIS Simple Service Plugin – NSIS サービス登録
NSIS Simple Firewall Plugin – NSIS ファイアウォール登録
Zipを二重にするのももったいないので、あらかじめ展開しておくのが妥当かとは思います。
設定ファイルは適当に作ってください。
あと肝心のBINDはこちら。
BIND | Internet Systems Consortium
!include "MUI.nsh" !include "Sections.nsh" !define TEMP $R0 !define TEMP2 $R1 !define VAL1 $R2 !define VAL2 $R3 Name "BIND9 Installer" OutFile "setup.exe" InstallDir "C:\dns" !define BIND9_FILENAME "BIND9.8.1-P1.zip" Section auto_setup SetOutPath "$TEMP" File "${BIND9_FILENAME}" SetOutPath "$INSTDIR\bin" nsisunz::Unzip "$TEMP\${BIND9_FILENAME}" "$INSTDIR\bin" ; VC++ 2005 redistインストール ExecWait '"$INSTDIR\bin\vcredist_x86.exe" /q:a /c:"VCREDI~1.EXE /q:a /c:""msiexec /i vcredist.msi /qb!"" "' ; BINDのインストールディレクトリをレジストリに登録 WriteRegStr HKLM "SOFTWARE\ISC\BIND" "InstallDir" "$INSTDIR" ; etcとconfに設定ファイルを配置する SetOutPath "$INSTDIR\conf" File /r "conf\*.txt" SetOutPath "$INSTDIR\etc" File "named.conf" ExecWait '"$INSTDIR\bin\rndc-confgen" -a -b 512' ; Firewall許可 SimpleFC::AddApplication "ISC BIND" "$INSTDIR\bin\named.exe" 0 2 "" 1 ; BINDをサービスに登録 SimpleSC::InstallService "BIND" "ISC BIND" "16" "2" "$INSTDIR\bin\named.exe" "" "NT AUTHORITY\NetworkService" "" ; BINDサービス起動 SimpleSC::StartService "BIND" "" 30 SectionEnd Section "Uninstall" ; サービス停止と解除 SimpleSC::StopService "BIND" 1 30 SimpleSC::RemoveService "BIND" ; レジストリ削除 DeleteRegKey HKLM "SOFTWARE\ISC\BIND" ; Firewall解除 SimpleFC::RemoveApplication "$INSTDIR\bin\named.exe" ; ファイル削除 RMDir /r "$INSTDIR" SectionEnd