이 글에서는 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

5. 참고자료

http://doc.powerdns.com/html/index.html


0개의 댓글

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다