FreeBSD 4.x 下安装配置具web管理功能的pdns
前言:
——有时做点笔记,挺好,有清空大脑内存,不必在下次搞类似工作时需要寻觅尘封的记忆。
关键词:
FreeBSD dns pdns mysql apache php phpMyAdmin PowerAdmin Pear
测试主机关于IP配置等原始状况
/etc/rc.conf 中是
hostname="bsd.test.com"
ifconfig_lnc0="inet 192.168.0.244 netmask 255.255.255.0"
/etc/hosts
::1 localhost.test.com localhost
127.0.0.1 localhost.test.com localhost
192.168.0.244 bsd.test.com bsd
为了方便目录管理,将一些工具软件安装在与系统目录相对独立的目录
root 身份下
#mysql
mkdir /home/soft/mysql4
#apache
mkdir /home/soft/apache
#pdns
mkdir /home/soft/dns
#mysql/pdns管理页面全在此
mkdir /home/soft/www
1. 安装 mysql
先下载 mysql-max-4.0.24-unknown-freebsd4.7-i386.tar.gz 的源代码版,地址:
http://dev.mysql.com/downloads/mysql/4.0.html
mv mysql-max-4.0.24-unknown-freebsd4.7-i386.tar.gz mysql-4.0.24.tar.gz
tar xvfz mysql-4.0.24.tar.gz
cd mysql-4.0.24
=========================================================
#建立mysql组 (Linux 下 groupadd mysql)
pw groupadd mysql
#建立mysql用户并且加入到mysql组中(Linux 下 useradd mysql)
pw useradd mysql -g mysql
cd mysql_src_home
./configure --prefix=/home/soft/mysql4 --without-debug
make
make install
#至此已经算是安装完了,安装在/home/soft/mysql4下
#初始化数据字典
scripts/mysql_install_db
# 先令mysql 的整个目录/home/soft/mysql4的属主为root
chown -R root:mysql /home/soft/mysql4
# 再令mysql 的根目录/home/soft/mysql4/var的属主及属组为mysql,因为最终以mysql身份运行
chown -R mysql:mysql /home/soft/mysql4/var
# 再令mysql 的整个目录/home/soft/mysql4的属组为mysql
chgrp -R mysql /usr/local/mysql
# 以下这步做不做影响不大,是说以中模式启动mysql
cp support-files/my-medium.cnf /etc/my.cnf
#
数据库管理者用户口令设定......
mysqladmin -uroot -pr00tr00t # 这是设口令时这么设
mysqladmin -uroot -pr00tr00t password r00t2005 # 这是改口令时这么改
安全考虑
最好干掉无关用户,可在装好管理页面后再在页面上干掉,此是后话
启动服务方法
/home/soft/mysql4/bin/safe_mysqld --user=mysql &
或者
/home/soft/mysql4/share/mysql/mysql.server start
停止服务方法
/home/soft/mysql4/bin/mysqladmin shutdown
或者
/home/soft/mysql4/share/mysql/mysql.server stop
可以看一看mysql.server的内容,其中目录指向是正确的,俺们有configure时就已经确定了
加在FreeBSD的启动目录中:
cd /usr/local/etc
echo ":">startmysql.sh
echo "">>startmysql.sh
echo "/home/soft/mysql4/share/mysql/mysql.server start" >>startmysql.sh
=========================================================
2. 安装 apache
先下载安装包, 然后解开
./configure --prefix=/home/soft/apache --enable-modules="deflate headers proxy proxy-connect proxy-ftp proxy-http static-ab rewrite so cache file-cache disk-cache mem-cache"
make
make install
好了,apache 已经安装在/home/soft/apache下了。
3. 安装 php 成为 apache 的一个模块
先下载php4.X.XX的安装包, 然后解开
# --with-apxs=/home/soft/apache 就是说要编出来成为apache的一个模块,会放在apache的lib目录下的
#特别注意 --enable-pear,因为pdns的前台管理程序要用到它的数据库抽象层
./configure --with-mysql=/home/soft/mysql4 --with-apxs=/home/soft/apache --enable-track-vars --enable-pear
make
make install
cp php.ini-dist /usr/local/lib/php.ini
pear应当会被安装在/usr/local/lib/pear下,其中应有DB目录,对后续的pdns前台安装很重要,如果没有
这个扩展组件,pdns 前台跑不动
此时,可以看到 /home/soft/apache/conf/httpd.conf 中被新添加了
LoadModule php4_module modules/libphp4.so
表明 php 模块在 apache 中已被激活
首先,找到DocumentRoot,将它改为俺们规划的/home/soft/www
然后,再在
/home/soft/apache/conf/httpd.conf 尾部添加下行
AddType application/x-httpd-php .php .php3 .phtml
令 apache 识别到 php 文档可直接调用 php 模块进行解释
还有,
改
DirectoryIndex index.html index.html.var
为
DirectoryIndex index.php index.html index.html.var
这样,当前台访问一个目录时,将被认为是访问这三个文件之一
加在FreeBSD的启动目录中:
cd /usr/local/etc
echo ":">startapache.sh
echo "">>startapache.sh
echo "/home/soft/apache/bin/apachectl start" >>startapache.sh
chmod +x startapache.sh
4. 安装 mysql 的管理前台
phpMyAdmin主页:http://www.htmlwizard.net/phpMyAdmin/
#下载安装包
#解开
tar xvfz phpMyAdmin.2.6.2.tgz
#打算放在/home/soft/www/dbmanager下
mkdir -p /home/soft/www/dbmanager
cp -R phpMyAdmin2.6.2/* /home/soft/www/dbmanager
#改变一下文件权限
chown -R nobody:nobody /home/soft/www/dbmanager
#更改 config.inc.php 中
......
//$cfg['PmaAbsoluteUri'] = '';
$cfg['PmaAbsoluteUri'] = 'http://192.168.0.244/dbmanager'; // 原为空,改为入口路径
......
$i=0; // 用于多数据库时的管理,所以是个管理参数数组
$i++; // 此时 i=1, 由于Default是1 所以以下改的就是它
// 所以要注意在第一个 i++ 后改以下内容
//$cfg['Servers'][$i]['auth_type'] = 'config'; // 原为config,表示只在后台手工管理
$cfg['Servers'][$i]['auth_type'] = 'http'; // 改为 http,表示通过 Web 进行管理
// MySQL user,此处是 mysql 管理用户的名字,注意,必须先用 mysqladmin 为它设置口令,否则危险
// 这样,Web 前台登陆时,用户名/口令即是数据库管理用户 root 及它的数据库口令
//前面用mysqladmin设置的r00t2005
//
$cfg['Servers'][$i]['user'] = 'root';
//注意,$cfg['Servers'][$i]['password'] = ''; 不必修改。因为反正是到数据库内认证
......
// 不想受英文折磨而想要中文显示:
//$cfg['DefaultLang'] = 'en-iso-8859-1';
$cfg['DefaultLang'] = 'zh';
......
//$cfg['DefaultCharset'] = 'iso-8859-1';
$cfg['DefaultCharset'] = 'gb2312';
——至此,mysql的前台管理基本已经搞定
5. 安装 pdns
下载安装包,http://sourceforge.net/projects/poweradmin/注意版本不能太高,因为咱这可是 FreeBSD 4.9
从 ports 中看到的版本为 2.9.11
够用就行,太新的说不好,可以试试。总之在 4.9 下 pdns_recurse 是编不过,libc 太低
首先要安装 gmake,因为使用 FreeBSD 自带 make 出来的东东易死菜,俺没试过,不过听人说过
cd /usr/ports/devel/gmake
make
这样,gmake 就装在了 /usr/local/bin 下
然后安装 pdns
./configure --prefix=/home/soft/dns --with-mysql=/home/soft/mysql4 --enable-pdns_server
缺省会把 gmysql 编进去的,放心好了。
# 后来发现 make 也是可以的,但 pdns 官方网站上说会有问题,因此俺们尊重始作俑者
/usr/local/bin/gmake
# make install 也可行,反正就是一个拷贝的过程
/usr/local/bin/gmake install
此时,可以看到 /home/soft/dns下有了几个目录,sbin 下便是俺们的pdns_server二进制程序
/home/soft/dns/sbin/pdns_server便可启动,但此时它会一闪而过不工作,因为俺们未进行参
数配置,它起码是要连数据库找数据,所以俺们还要准备数据及配置
以后台进程启动,则是
/pdns_server --daemon
6. 为 pdns 初始化数据库表
关于配置文件及数据库表较详细的内容需参考:
http://doc.powerdns.com/generic-mypgsql-backends.html
http://doc.powerdns.com/configuring-db-connection.html
在 Mysql 的 Web 界面中建 pdns 用户,密码为 pdns,主机为 localhost,即只可由本地主机
登录;同样的,检查一下其他用户。多余用户全都干掉。
在前台中增加pdns后,应当出现两条记录,一条的“主机”字段是localhost,另一条的的则
是"%"。
此时,下到字符界面测试一下:
/home/soft/mysql4/bin/mysql -updns -ppdns -hlocalhost
/home/soft/mysql4/bin/mysql -updns -ppdns -h127.0.0.1
都应当能进入数据库
然后
/home/soft/mysql4/bin/mysql -uroot -pr00t2005 -hlocalhost
进入 mysql
此时为何不用pdns用户呢,因为它目前什么数据库操作的权限都没有。
Create database pdns;
use pdns;
create table domains (
id INT auto_increment,
name VARCHAR(255) NOT NULL,
master VARCHAR(20) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
aclearcase/" target="_blank" >ccount VARCHAR(40) DEFAULT NULL,
primary key (id)
)type=InnoDB;
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
id INT auto_increment,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(6) DEFAULT NULL,
content VARCHAR(255) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id)
)type=InnoDB;
CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
create table supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);
GRANT SELECT ON supermasters TO pdns;
GRANT ALL ON domains TO pdns;
GRANT ALL ON records TO pdns;
这个时候,俺们很吝啬地给了点儿权限给pdns用户。
不过,在俺们要使用管理前台时,必须还大方些,不然它不干活儿。
插入一些数据:
INSERT INTO domains (name, type) values ('test.com', 'NATIVE');
INSERT INTO records (domain_id, name, content, type,ttl,prio)
VALUES (1,'test.com','localhost ahu@ds9a.nl 1','SOA',86400,NULL);
INSERT INTO records (domain_id, name, content, type,ttl,prio)
VALUES (1,'test.com','dns-us1.powerdns.net','NS',86400,NULL);
INSERT INTO records (domain_id, name, content, type,ttl,prio)
VALUES (1,'test.com','dns-eu1.powerdns.net','NS',86400,NULL);
INSERT INTO records (domain_id, name, content, type,ttl,prio)
VALUES (1,'www.test.com','199.198.197.196','A',120,NULL);
INSERT INTO records (domain_id, name, content, type,ttl,prio)
VALUES (1,'mail.test.com','195.194.193.192','A',120,NULL);
INSERT INTO records (domain_id, name, content, type,ttl,prio)
VALUES (1,'localhost.test.com','127.0.0.1','A',120,NULL);
INSERT INTO records (domain_id, name, content, type,ttl,prio)
VALUES (1,'test.com','mail.test.com','MX',120,25);
此时开始配置文件
cd /home/soft/pdns/etc
前面编译完后有个标准这里应当有 pdns-dist.conf
cp pdns-dist.conf pdns.conf
加上如下几行:
launch=gmysql
#配置连mysql之本地址配为127.0.0.1,于是才不致出现鸡蛋谁先有的问题(即无需再解析)
gmysql-host=127.0.0.1
gmysql-user=pdns
gmysql-password=pdns
gmysql-dbname=pdns
启动 pdns
#如果报错说找不到mysql相关的so
#/sbin/ldconfig /home/soft/mysql4/lib/mysql
cd /home/soft/pdns
cd sbin
./pdns_server --daemon
pdns_server 会自己找到 ../etc 下的 pdns.conf 来使用的,呵呵。
这样就作为后台进程执行了,这是手工启动,别忘了放在随主机一起启动的脚本中
另外,如果担心它会死菜,可以用 supervise 来进行监视,呵呵,罗嗦了。
想看调试信息,直接
./pdns_server
就行
以后不想看调试信息了,在前面 pdns 进行 configure 时,增加关闭调试信息的选项即可。
还有就是用启动脚本来启动,前面编译完后有执行脚本为 pdns ,它在 源程序目录/pdns 下
它当中已经记录了安装目录
例如你放在 /home/soft/pdns/bin 下,那么
/home/soft/pdns/bin/pdns monitor
然后是如下一堆东东打印在你的终端上让你看,此时已经可以进行测试了。
May 19 04:22:04 This is a standalone pdns
May 19 04:22:04 Listening on controlsocket in '/var/run/pdns.controlsocket'
May 19 04:22:04 UDP server bound to 127.0.0.1:53
May 19 04:22:04 TCP server bound to 127.0.0.1:53
May 19 04:22:04 PowerDNS 2.9.11 (C) 2001-2003 PowerDNS.COM BV (May 18 2005, 03:12:43) starting up
May 19 04:22:04 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.
May 19 04:22:04 Creating backend connection for TCP
May 19 04:22:04 gmysql Connection succesful
May 19 04:22:04 About to create 3 backend threads
May 19 04:22:04 gmysql Connection succesful
May 19 04:22:04 gmysql Connection succesful
May 19 04:22:04 gmysql Connection succesful
如果显示connection 失败,必然是你的配置文件中mysql的连接用户及密码写错了,或前述的用户
建得不对。
/home/soft/pdns/bin/pdns start 是启动,与前述手工进行/home/soft/pdns/sbin/pdns_server --daemon一样
这时进行测试,反正前面已经灌进了数据
$ host www.test.com 127.0.0.1
www.test.com A 199.198.197.196
$ host -v -t mx test.com 127.0.0.1
Address: 127.0.0.1
Aliases: localhost
Query about test.com for record types MX
Trying test.com ...
Query done, 1 answer, authoritative status: no error
test.com 120 IN MX 25 mail.test.com
Additional information:
mail.test.com 120 IN A 195.194.193.192
当然你也可用 dig 进行测试:
dig @127.0.0.1 www.test.com
; <<>> DiG 8.3 <<>> @127.0.0.1 www.test.com
; (1 server found)
;; res options: init recurs defnam dnsrch
;; res_nsend: Connection refused
bsd# dig @127.0.0.1 www.test.com
; <<>> DiG 8.3 <<>> @127.0.0.1 www.test.com
; (1 server found)
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10086
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUERY SECTION:
;; www.test.com, type = A, class = IN
;; ANSWER SECTION:
www.test.com. 2M IN A 199.198.197.196
;; Total query time: 214 msec
;; FROM: bsd.test.com to SERVER: 127.0.0.1
;; WHEN: Thu May 19 04:26:20 2005
;; MSG SIZE sent: 30 rcvd: 46
用nslookup也行,但要注意
如果你将本机的/etc/resolv.conf中,nameserver设定为127.0.0.1
直接进行nslookup 会有些问题。这与它的处理流程有关。
它会先去米国的dns-root反解析127.0.0.1是不是一个合法的NameServer
然后是当然地报错。
nslookup
*** Can't find server name for address 127.0.0.1: Server failed
*** Can't find server name for address ::: No response from server
*** Default servers are not available
此时可以这么办——
/etc/resolv.conf的内容还是用一个众所周知的DNS做nameserver如211.94.33.194
nslookup
>server 127.0.0.1 #指定本机为要测试的nameserver
>set type=A
>www.test.com
结果也会问出来的,于是证明安装无误。
cd /usr/local/etc
echo ":">startpdns.sh
echo "">>startpdns.sh
echo "/home/soft/pdns/sbin/pdns_server --daemon" >>startpdns.sh
chmod +x startpdns.sh
6. 安装 pdns 管理前台
在
下载pdns管理前台poweradmin1.x.x.tar.gz
放在 /home/soft/www 下,解开,得到poweradmin.1.x.x目录,改名为 PowerAdmin
下面有README,一看就明白的。
先把inc/config-block.inc.php拷贝成为config-inc.php
在其中去更改相关参数:
$dbhost = 'localhost'; //这个不用改
$dbuser = '';//这里是pdns用户
$dbpass = '';//这里是pdns
$dbdatabase = ''; //这里是pdns库
$BASE_URL = "http://wwww.poweradmin.org"; //URL前缀:如http://192.168.0.244
$BASE_PATH = "/poweradmin.1.x.x/" // 相对路径:即刚才改的"/PowerAdmin/"
此时,俺们要放手让pdns去干活,于是需要mysql的管理前台去大胆地给pdns分配对于pdns库
的权限,凡非管理性的权限都给它吧,如增删改查,create/drop/alter等等。因为执行install.php时
要建新表,所以要求pdns有建表的权限
然后在确认apache启动的情况下:
访问http://192.168.0.244/PowerAdmin/install.php
它将建立应有的表/序列/索引等等。可能会报一些Notice,但只要显示successfull即宣告成功。
需要俺们在这里建立初始管理者及其口令等,要记住可别忘了。因为数据库
中将是MD5过后的密文。这里俺们建了pdnsadmin用户,口令是pdnsadmin2005
然后,你可以http://192.168.0.244/PowerAdmin/test_setup.php 来检查一下,如有问题,
页面会有红色框提示然后,需将install.php删去或改名,不然index.php不干活。俺们
把它改名为install.php.bk
于是 http://192.168.0.244/PowerAdmin 俺们将看到index.php干活了。
这时以先前的管理者及口令登入,即可看到一个test.com的域,那是俺们测pdns_server时测试用。
你可以干掉,然后重新添加域及记录。
新建域时,缺省是按模板建立,然后,俺们会发现有些记录中有非本域的内容,例如soa记录中
即不是本域的东东,可以修改它。那个域名其实是PowerAdmin作者的个人网站,俺们可访问访问,
可以欣赏他们的家庭照片。
7. 给 pdns 找个监工
注意,俺听说pdns_server有不干活而自行退出的情况,没关系,俺们可以下载一个daemonTools
来当监工监视着它干活。一旦它莫名退出,supervise会立即启动它。
关于daemonTools的使用非常简单,俺在这里就不做详述了。累。
——至此,俺们终于功德圆满了。好生休息一下。
——后来俺用pdns-2.9.17,也没有问题。