OpenSUSE 12.1 에서 powerdns 3.2 & pdns_gui with MySQL backend 설치/설정 과정 정리


[사전 환경 점검]

- DB server: MySQL(5.1 or 5.5) 설치

- Web server: 

  Apache2 + php + poweradmin 2.1.6 or pdns gui 0.3.3

  또는 lighttpd with php(php-fpm)(http://bryans.tistory.com/76, http://bryans.tistory.com/77 참고) + poweradmin 2.1.6


* 본 문서에서는 pdns 3.2 + MySQL(Percona 5.5.*) + Apache2 + php + pdns gui 0.3.3 을 채택한다


[pdns 3.2 설치]


1. libz.so 소프트 링크 설정


# cd /lib64/

# ln -s libz.so.1 libz.so

# ldconfig

# ls -l /lib64/libz.so*

lrwxrwxrwx 1 root root     9 Feb  8 15:34 /lib64/libz.so -> libz.so.1

lrwxrwxrwx 1 root root    13 Apr  1  2012 /lib64/libz.so.1 -> libz.so.1.2.5

-rwxr-xr-x 1 root root 96488 Feb  9  2012 /lib64/libz.so.1.2.5


2. MySQL, LUA 를 위한 라이브러리 설정


# zypper in -y libmysqlclient18 libmysqlclient-devel libmysqlclient18-32bit  libmysqlclient_r18 libmysqlclient_r18-32bit gcc-c++ boost-devel

# zypper in -y lua lua-devel


3. pdns 3.2 소스 다운로드 및 설치

설치 디렉토리는 /user/service/powerDNS 로 가정


# cd /user/service/download

# wget http://downloads.powerdns.com/releases/pdns-3.2.tar.gz

# tar xvzf pdns-3.2.tar.gz

# cd pdns-3.2

./configure --with-modules="gmysql" --prefix=/user/service/powerDNS

# make

# make install


4. pdns 설정


# vi /etc/init.d/pdns

#!/bin/sh

# chkconfig: 345 80 75

# description: PDNS is a versatile high performance authoritative nameserver


prefix=/user/service/powerDNS

exec_prefix=${prefix}

BINARYPATH=${exec_prefix}/bin

SBINARYPATH=${exec_prefix}/sbin

SOCKETPATH=/var/run


[ -f "$SBINARYPATH/pdns_server" ] || exit 0


cd $SOCKETPATH

suffix=`basename $0 | awk -F- '{print $2}'`

if [ $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)

}


doPC ping

NOTRUNNING=$?


case "$1" in

status)

if test "$NOTRUNNING" = "0" 

then 

doPC status

echo $ret

else

echo "not running"

fi 

;;

stop)

echo -n "Stopping PowerDNS authoritative nameserver: "

if test "$NOTRUNNING" = "0" 

then 

doPC quit

echo $ret

else

echo "not running"

fi 

;;

force-stop)

echo -n "Stopping PowerDNS authoritative nameserver: "

killall -v -9 pdns_server

echo "killed"

;;

start)

echo -n "Starting PowerDNS authoritative nameserver: "

if test "$NOTRUNNING" = "0" 

then 

echo "already running"

else

$pdns_server --daemon --guardian=yes

if test "$?" = "0"

then

echo "started"

fi

fi 

;;

force-reload | restart)

echo -n "Restarting PowerDNS authoritative nameserver: "

echo -n stopping and waiting.. 

doPC quit

sleep 3

echo done

$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\|force-reload\|restart\|status\|dump\|show\|mrtg\|cricket\|monitor]

;;

esac


# chmod a+x /etc/init.d/pdns


# cd /user/service/powerDNS/etc

# cp pdns-dist.conf pdns.conf

## 주의: linux 에서 설치시 pdns-dist.conf 파일에 CR 문자가 포함되어 pdns.conf 의 설정을 pdns_server가 읽지 못하는 경우가  생길 수 있다.

# /etc/init.d/pdns monitor

Feb 12 17:35:23 Reading random entropy from '/dev/urandom'

Feb 12 17:35:23 Unable to launch, no backends configured for querying

 이 때는 pdns.conf 파일의 모든 라인을 지우고, pdns-dist.conf 의 내용만 복사(Copy/Paste)하여 사용한다.


# vi pdns.conf -- 파일 마지막에 내용 추가, 저장

launch                    =gmysql

gmysql-host            =127.0.0.1

gmysql-user            =pdns

gmysql-password    =password

gmysql-dbname       =pdnsdb

#recursor=a.b.c.d


MySQL 에 root로 접속하여 pdnsdb 데이터베이스를 생성(또는 기존 스키마 사용도 가능)하고 아래의 테이블들을 생성한다.

CREATE TABLE domains (

  ID INT(11) NOT NULL AUTO_INCREMENT,

  NAME VARCHAR(255) NOT NULL,

  MASTER VARCHAR(128) DEFAULT NULL,

  TYPE VARCHAR(6) NOT NULL,

  ACCOUNT VARCHAR(40) DEFAULT NULL,

  LAST_CHECK INT(11) DEFAULT NULL,

  NOTIFIED_SERIAL INT(11) DEFAULT NULL,

  PRIMARY KEY (ID),

  UNIQUE KEY XPKT_DNS_DOMAINS (ID),

  UNIQUE KEY XAK1T_DNS_DOMAINS (NAME)

) Engine=InnoDB;


CREATE TABLE records (

  ID INT(11) NOT NULL AUTO_INCREMENT,

  DOMAIN_ID INT(11) DEFAULT NULL,

  NAME VARCHAR(255) DEFAULT NULL,

  TYPE VARCHAR(6) DEFAULT NULL,

  CONTENT VARCHAR(255) DEFAULT NULL,

  TTL INT(11) DEFAULT NULL,

  PRIO INT(11) DEFAULT NULL,

  CHANGE_DATE INT(11) DEFAULT NULL,

  PRIMARY KEY (ID),

  UNIQUE KEY XPKT_DNS_RECORDS (ID),

  KEY XIE1T_DNS_RECORDS (NAME),

  KEY XIE2T_DNS_RECORDS (NAME,TYPE),

  KEY XIE3T_DNS_RECORDS (DOMAIN_ID)

) Engine=InnoDB;


CREATE TABLE supermasters (

  SUPERMASTERS_SEQ INT(11) NOT NULL AUTO_INCREMENT,

  IP VARCHAR(25) NOT NULL,

  NAMESERVER VARCHAR(255) NOT NULL,

  ACCOUNT VARCHAR(40) DEFAULT NULL,

  PRIMARY KEY (SUPERMASTERS_SEQ),

  UNIQUE KEY XPKT_DNS_SUPERMASTERS (SUPERMASTERS_SEQ)

) Engine=InnoDB;


pdns 계정으로 해당 테이블들을 처리할 수 있도록 권한을 설정한다.

> GRANT SELECT ON supermasters TO pdns;

> GRANT ALL ON domains TO pdns;

> GRANT ALL ON records TO pdns;

> flush privileges;


pdns 정상 설치 확인

# /etc/init.d/pdns monitor

Feb 12 18:22:30 Reading random entropy from '/dev/urandom'

Feb 12 18:22:30 This is a standalone pdns

Feb 12 18:22:30 UDP server bound to 0.0.0.0:53

Feb 12 18:22:30 TCP server bound to 0.0.0.0:53

Feb 12 18:22:30 PowerDNS 3.2 (C) 2001-2013 PowerDNS.COM BV (Feb  8 2013, 16:53:55, gcc 4.6.2) starting up

Feb 12 18:22:30 PowerDNS comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it according to the terms of the GPL version 2.

Feb 12 18:22:30 Creating backend connection for TCP

% Feb 12 18:22:30 gmysql Connection successful

Feb 12 18:22:30 gmysql Connection successful

Feb 12 18:22:30 About to create 3 backend threads for UDP

Feb 12 18:22:30 gmysql Connection successful

Feb 12 18:22:30 gmysql Connection successful

Feb 12 18:22:30 gmysql Connection successful

Feb 12 18:22:30 gmysql Connection successful

Feb 12 18:22:30 gmysql Connection successful

Feb 12 18:22:30 gmysql Connection successful

Feb 12 18:22:30 Done launching threads, ready to distribute questions


위와 같은 메시지를 확인하였다면, ctrl-C로 종료한 후 아래와 같이 pdns 데몬을 시작하고 프로세스를 확인한다.

# /etc/init.d/pdns start

Starting PowerDNS authoritative nameserver: started


# ps -eaf | grep -v grep | grep pdns

root     15998     1  0 18:54 ?        00:00:00 /user/service/powerDNS/sbin/pdns_server --daemon --guardian=yes

root     16000 15998  0 18:54 ?        00:00:00 /user/service/powerDNS/sbin/pdns_server-instance --daemon --guardian=yes



[pdns gui 설치]


1. Apache2 설치, mod_rewrite 모듈 추가

# zypper in -y apache2 apache2-mod_php5 apache2-mod_dnssd apache2-prefork apache2-utils

# chkconfig --add apache2

# chkconfig apache2 on

# service apache2 start


# a2enmod rewrite

# service apache2 restart


2. php5 및 기본 & 추가 패키지 설치

# zypper in -y php5 apache2-mod_php5 php5-bz2 php5-ctype php5-curl php5-devel php5-fpm php5-gettext php5-iconv php5-mcrypt php5-mysql php5-openssl php5-pcntl php5-pdo php5-pear php5-zlib

# zypper in -y php5-pear-MDB2, php5-pear-MDB2_Driver_mysql


3. pdns_gui 다운로드 및 압축 해제, 설치

http://code.google.com/p/pdns-gui 에서 pdns-gui.0.3.3.tgz 다운로드

MYSQL> create database pdns;


# cd /srv/www/htdocs

# tar xvzf DOWNLOADED_DIR/pdns-gui.0.3.3.tgz

# cd pdns-gui.0.3.3/batch

# ./install.sh

DB접속ip(local서버일 경우 localhost가 아닌 127.0.0.1 사용), database명, DB계정/암호 입력


4. apache2 설정 및 pdns_gui 웹 기동

# vi /etc/apache2/default-server.conf

DocumentRoot "/srv/www/htdocs"


<VirtualHost *:8888>

  DocumentRoot /srv/www/htdocs/pdns-gui.0.3.3/web

  DirectoryIndex index.php

  <Directory /srv/www/htdocs/pdns-gui.0.3.3/web>

    AllowOverride All

  </Directory>

</VirtualHost>


# service apache2 restart


http://pdns-gui webserver ip:8888/ 접속


저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들

Opensuse 12.1 환경에서 PHP5 + lighttpd fastcgi + mongodb + mysql 개발/운영 환경 설정

* howtoforge.com 내용 참조, 테스트 실행 & 보완


1. Lighttpd & php5 환경 설정


# zypper in -y lighttpd

# systemctl enable lighttpd.service

# systemctl start lighttpd.service


* 기존의 php5 fastcgi 가 php5-fpm 패키지로 통합 업그레이드 되었고 별도 daemon으로 동작한다.

# zypper in -y php5-fpm


# mv /etc/php5/fpm/php-fpm.conf.default /etc/php5/fpm/php-fpm.conf

# chmod 1733 /var/lib/php5


* error_log 부분을 un-comment 하고 아래와 같이 수정한다

# vi /etc/php5/fpm/php-fpm.conf

error_log = /var/log/php-fpm.log


* 아래 라인들을 찾아서 확인하고 몇 가지 mandatory 설정을 un-comment 한다(pm=dynamic 일 경우)

* howtoforge.com 에서는 해당 설정 부분이 누락되어 있다

pm = dynamic

pm.max_children = 50

pm.min_spare_servers = 5

pm.max_spare_servers = 35


* fpm용으로 별도의 php.ini 파일이 없으므로 cli용을 복사한다.

# cp /etc/php5/cli/php.ini /etc/php5/fpm/


* 아래 해당 라인을 찾아서 un-comment 한다.

# vi /etc/php5/fpm/php.ini

cgi.fix_pathinfo=1


# systemctl enable php-fpm.service

# systemctl start php-fpm.service


# vi /etc/lighttpd/modules.conf -> 아래 라인을 찾아서 un-comment

include "conf.d/fastcgi.conf"


server.modules = (

...

  "mod_auth",

...

)


* 아래 라인을 추가

# vi /etc/lighttpd/lighttpd.conf

include "conf.d/auth.conf"


* 아래 라인들을 un-comment 하고 내용을 수정

# vi /etc/lighttpd/conf.d/auth.conf

auth.debug = 2

auth.backend = "plain"

auth.backend.plain.userfile  = "/etc/lighttpd/lighttpd.user"


auth.require = ( "/" =>

                      (

                        "method"  => "basic",

                        "realm"   => "Password protected area",

                        "require" => "user=loginid"

                      ),

                    )


* 아래 로그인 정보를 등록하고 저장

# vi /etc/lighttpd/lighttpd.user

loginid:loginpassword


# vi /etc/lighttpd/conf.d/fastcgi.conf -> 아래 라인이 있는지 확인

server.modules += ( "mod_fastcgi" )


* 아래 내용을 추가(기존의 fastcgi.server 부분의 comment 는 그대로 둔다)

fastcgi.server += ( ".php" =>

        ((

                "host" => "127.0.0.1",

                "port" => "9000",

                "broken-scriptfilename" => "enable"

        ))

)


# systemctl restart lighttpd.service


* lighttpd의  default 문서 홈디렉토리는 /srv/www/htdocs 이다


# vi /srv/www/htdocs/info.php

<?php

phpinfo();

?>


* 브라우저로 접속 확인




2. MySQL과 utility 패키지 설치


* Web 을 통하지 않고 직접 DB접속을 위해 접속 클라이언트를 사용할 경우에는 아래와 같이 클라이언트를 설치한다.

# zypper in -y mysql-community-server-client


* MySQL 및 일반적으로 많이 사용하는 드라이버 설치

# zypper in -y php5-mysql php5-bcmath php5-bz2 php5-calendar php5-ctype php5-curl php5-dom php5-ftp php5-gd php5-gettext php5-gmp php5-iconv php5-imap php5-ldap php5-mbstring php5-mcrypt php5-odbc php5-openssl php5-pcntl php5-pgsql php5-posix php5-shmop php5-snmp php5-soap php5-sockets php5-sqlite php5-sysvsem php5-tokenizer php5-wddx php5-xmlrpc php5-xsl php5-zlib php5-exif php5-pear php5-sysvmsg php5-sysvshm


3. mongodb 드라이버 설치


* 11.x 환경과는 다르게 12.1 부터는 pecl 을 통해 php용 mongo 드라이버를 쉽게 설치할 수 있다


# pecl install mongo


# vi /etc/php5/fastcgi/php.ini -> 아래 라인을 추가

extension=mongo.so


# systemctl restart lighttpd.service

# systemctl restart php-fpm.service


* 1의 과정과 같이 브라우저를 통해 php 환경에 맞게 설치된 드라이버들을 최종 확인한다.






저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들


* 본 정보는 Opensuse 12.1 에도 그대로 적용 가능하다.

Opensuse 에 기본으로 제공되는 scim(xim)은 terminal 에서 한글 입력이 거의 안된다. 무슨 말인지 모르겠다면 직접 설치해서 gedit 이나 chrome 에서 한글을 입력해 보면 된다. 아마도 '우리는' 이라고 치면 '우루는' 이라고 입력되는 꼬락서니를 볼 수 있을 것이다.

* 선행 패키지 설치(su - 로 root 로 변신)

  # zypper in -y gcc make autoconf libhangul libhangul-devel

  -> http://code.google.com/p/libhangul/downloads/list 에서 libhangul 최신 버전 확인

  -> wget http://libhangul.googlecode.com/files/libhangul-0.1.0.tar.gz

  -> configure --prefix=/usr; make; make install



* Nabi source download & build

  # wget http://kldp.net/projects/nabi/download/5926?filename=nabi-0.99.9.tar.gz

  -> http://code.google.com/p/nabi/downloads/list 에서 최신 버전 확인 

  -> wget http://nabi.googlecode.com/files/nabi-0.99.11.tar.gz


  # tar xvzf nabi-0.99.11.tar.gz

  # ./configure --prefix=/usr
  # make && make install


* nabi 설정

  # vi /etc/X11/xim.d/nabi

  OLD_PATH=$PATH
  PATH=/usr/bin:/usr/X11R6/bin:$PATH

  if ! type -p nabi > /dev/null 2>&1 ; then
    echo "nabi is not available."
    return 1
  fi

  export XMODIFIERS="@im=nabi"
  export GTK_IM_MODULE=xim
  export QT_IM_SWITCHER=imsw-multi
  export QT_IM_MODULE=xim

  case $WINDOWMANAGER in
    *kde|*windowmaker|*wmaker)
    nabi -wm -wait &
    ;;
  *)
    nabi &
    ;;
  esac

  PATH=$OLD_PATH

  # success:
  return 0


# vi /etc/sysconfig/language, 아래 내용으로 편집/수정

  INPUT_METHOD="nabi"



* Logout하고 다시 Login 하면 우측하단 Tray에서 nabi icon 을 확인할 수 있다 


저작자 표시 비영리 변경 금지
신고
블로그 이미지

Barracuda

Bryan의 MemoLog. 쉽게 익혀 보는 IT 실습과 개념원리, 코딩 세계의 얕은 맛보기들, 평범한 삶 주변의 현상 그리고 進上, 眞想, 진상들