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, account 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,也没有问题。
|