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
它將建立應有的表/序列/索引等等??赡軙笠恍㎞otice,但只要顯示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,也沒有問題。