이 글에서는 PDNS 3.4버전에 대해 compile 설치하는 방법을 다룬다.
1. PDNS소개
http://ko.wikipedia.org/wiki/PowerDNS
2. PDNS 다운로드
- pdns 3.4 소스 다운
# wget http://downloads.powerdns.com/releases/pdns-3.4.1.tar.bz2
- 다운받은 소스 압축해제
# tar xvjf pdns-3.4.1.tar.bz2
3. 설치
- 컴파일에 필요한 패키지 설치
# yum -y install libtool boost-devel
- 컴파일
# cd pdns-3.4.1
# ./bootstrap
# ./configure --prefix=/usr/local/pdns
--with-mysql=/usr/local/mysql
--with-modules="gmysql pipe remote geo"
--without-lua
# make
# make install
Note : 컴파일 옵션 설명
--prefix : pdns 설치 경로 --with-mysql : pdns를 mysql과 연동할 예정이므로 mysql PATH를 설정해 준다. --with-modules : 사용할 백앤드를 나열해 함께 컴파일 한다. 컴파일 옵션에 대한 자세한 설명은 configure --help 에 나온다.
- 구동스크립트 생성 다음 스크립트를 /etc/rc.d/init.d/pdns 파일로 생성
#!/bin/sh
# chkconfig: - 80 75
# description: PDNS is a versatile high performance authoritative nameserver
### BEGIN INIT INFO
# Provides: pdns
# Required-Start: $remote_fs $network $syslog
# Required-Stop: $remote_fs $network $syslog
# Should-Start:
# Should-Stop:
# Default-Start:
# Default-Stop: 0 1 6
# Short-Description: PowerDNS authoritative server
# Description: PowerDNS authoritative server
### END INIT INFO
set -e
prefix=/usr
exec_prefix=/usr
BINARYPATH=/usr/bin
SBINARYPATH=/usr/sbin
SOCKETPATH=/var/run
[ -f "$SBINARYPATH/pdns_server" ] || exit 0
[ -r /etc/default/pdns ] && . /etc/default/pdns
cd $SOCKETPATH
suffix=$(basename $0 | cut -d- -f2- -s)
if [ -n "$suffix" ]
then
EXTRAOPTS=--config-name=$suffix
PROGNAME=pdns-$suffix
else
PROGNAME=pdns
fi
pdns_server="$SBINARYPATH/pdns_server $EXTRAOPTS"
doPC()
{
ret=$($BINARYPATH/pdns_control $EXTRAOPTS $1 $2 2> /dev/null)
}
NOTRUNNING=0
doPC ping || NOTRUNNING=$?
case "$1" in
status)
if test "$NOTRUNNING" = "0"
then
doPC status
echo $ret
else
echo "not running"
exit 3
fi
;;
stop)
echo -n "Stopping PowerDNS authoritative nameserver: "
if test "$NOTRUNNING" = "0"
then
doPC quit
rm -f /var/lock/subsys/pdns
echo $ret
else
echo "not running"
fi
;;
force-stop)
echo -n "Stopping PowerDNS authoritative nameserver: "
killall -v -9 pdns_server
rm -f /var/lock/subsys/pdns
echo "killed"
;;
start)
echo -n "Starting PowerDNS authoritative nameserver: "
if test "$NOTRUNNING" = "0"
then
echo "already running"
else
if $pdns_server --daemon --guardian=yes
then
touch /var/lock/subsys/pdns
echo "started"
else
echo "starting failed"
exit 1
fi
fi
;;
condrestart)
if [ -f /var/lock/subsys/pdns ];
then
echo "running, restarting"
$0 restart
else
echo "not running"
fi
;;
force-reload | restart)
echo -n "Restarting PowerDNS authoritative nameserver: "
if test "$NOTRUNNING" = "1"
then
echo "not running, starting"
else
echo -n stopping and waiting..
doPC quit
sleep 3
echo done
fi
$0 start
;;
reload)
echo -n "Reloading PowerDNS authoritative nameserver: "
if test "$NOTRUNNING" = "0"
then
doPC cycle
echo requested reload
else
echo not running yet
$0 start
fi
;;
monitor)
if test "$NOTRUNNING" = "0"
then
echo "already running"
else
$pdns_server --daemon=no --guardian=no --control-console --loglevel=9
fi
;;
dump)
if test "$NOTRUNNING" = "0"
then
doPC list
echo $ret
else
echo "not running"
fi
;;
show)
if [ $# -lt 2 ]
then
echo Insufficient parameters
exit
fi
if test "$NOTRUNNING" = "0"
then
echo -n "$2="
doPC show $2 ; echo $ret
else
echo "not running"
fi
;;
mrtg)
if [ $# -lt 2 ]
then
echo Insufficient parameters
exit
fi
if test "$NOTRUNNING" = "0"
then
doPC show $2 ; echo $ret
if [ "$3x" != "x" ]
then
doPC show $3 ; echo $ret
else
echo 0
fi
doPC uptime ; echo $ret
echo PowerDNS daemon
else
echo "not running"
fi
;;
cricket)
if [ $# -lt 2 ]
then
echo Insufficient parameters
exit
fi
if test "$NOTRUNNING" = "0"
then
doPC show $2 ; echo $ret
else
echo "not running"
fi
;;
*)
echo pdns [start|stop|condrestart|force-reload|reload|restart|status|dump|show|mrtg|cricket|monitor]
;;
esac
- ## pdns를 서비스에 등록
# chkconfig pdns on
4. 설정
- Database(mysql)설정 PDNS에 mysql을 연동해서 사용할 예정이므로 데이터베이스와 테이블을 만든다.
pdns 에서 사용할 테이블 생성
mysql> CREATE DATABASE pdns;
pdns에서 사용할 mysql 유저 생성 및 권한 부여
mysql> GRANT ALL PRIVILEGES ON pdns.* TO 'pdns'@'localhost' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
테이블 생성 앞에 다운받아서 컴파일한 PDNS 소스 디렉토리의 modules/gmysqlbackend 로 이동 후 table 스키마 파일로 테이블 생성.
# cd /usr/local/src/pdns-3.4.0/modules/gmysqlbackend
# mysql -u pdns -p pdns < schema.mysql.sql
- PDNS 서버 설정 /usr/local/pdns/etc/pdns.conf-dist 를 /usr/local/pdns/etc/pdns.conf 로 복사 후 pdns.conf 파일을 열어 다음 내용을 추가 또는 수정한다.
setuid=pdns
setgid=pdns
launch=gmysql
gmysql-host=localhost
gmysql-user=pdns
gmysql-password=password
gmysql-dbname=pdns
gmysql-socket=/tmp/mysql.sock
config-dir=/usr/local/pdns/etc
daemon=no
guardian=yes
local-address=0.0.0.0
local-port=53
module-dir=/usr/local/pdns/lib/pdns
socket-dir=/var/run
version-string=DNS
- PDNS 구동
# service pdns start