PowerDNS是建立DNS服務器的軟件,它不僅支持普通的BIND配制文件文件,還可以從MySQL,PostgreSQL,Oracle等數據庫中讀取數據。 Poweradmin則是它的Web管理軟件,以實現WEB管理DNS記錄。 這裏以在Gentoo Linux中的安裝為例。

安裝PowerDNS(net-dns/pdns),poweradmin,PHP,Apache組件

   1 echo "dev-lang/php fpm" >> /etc/portage/package.use                 # 為PHP套件啟用FastCGI Process Manager (FPM)支持。
   2 echo "net-dns/pdns postgres" >> /etc/portage/package.use            # PowerDNS使用PostgreSQL
   3 emerge -av net-dns/pdns dev-lang/php poweradmin

開始安裝并創建PowerDNS,poweradmin用戶和數據庫文件

PostgreSQL的配制過程如下:

postgres@brightmoon ~ $ initdb --encoding UTF8 --locale=zh_CN.UTF-8 -D /srv/postgres/
postgres@brightmoon ~ $ postgres -D /srv/postgres/ &
[1] 22904
postgres@brightmoon ~ $ LOG:  database system was shut down at 2012-12-01 16:12:44 HKT
LOG:  database system is ready to accept connections
LOG:  autovacuum launcher started

postgres@brightmoon ~ $ psql
psql (9.2.1)
Type "help" for help.

postgres=# CREATE USER powerdns WITH PASSWORD '654321^%$#@!';
CREATE ROLE
postgres=# select * from pg_shadow;
 usename  | usesysid | usecreatedb | usesuper | usecatupd | userepl |               passwd                | valuntil | useconfig 
----------+----------+-------------+----------+-----------+---------+-------------------------------------+----------+-----------
 postgres |       10 | t           | t        | t         | t       |                                     |          | 
 powerdns |    16384 | f           | f        | f         | f       | md52e403b2f716b7cf1edb457cf4c32206a |          | 
(2 rows)

postgres=# CREATE DATABASE powerdns;
CREATE DATABASE
postgres=# \connect powerdns;
You are now connected to database "powerdns" as user "postgres".
powerdns=# 

PostgreSQL輸入以下psql. PostgreSQL PowerDNS

   1 create table domains (
   2  id              SERIAL PRIMARY KEY,
   3  name            VARCHAR(255) NOT NULL,
   4  master          VARCHAR(128) DEFAULT NULL,
   5  last_check      INT DEFAULT NULL,
   6  type            VARCHAR(6) NOT NULL,
   7  notified_serial INT DEFAULT NULL, 
   8  account         VARCHAR(40) DEFAULT NULL
   9 );
  10 CREATE UNIQUE INDEX name_index ON domains(name);
  11   
  12 CREATE TABLE records (
  13         id              SERIAL PRIMARY KEY,
  14         domain_id       INT DEFAULT NULL,
  15         name            VARCHAR(255) DEFAULT NULL,
  16         type            VARCHAR(10) DEFAULT NULL,
  17         content         VARCHAR(65535) DEFAULT NULL,
  18         ttl             INT DEFAULT NULL,
  19         prio            INT DEFAULT NULL,
  20         change_date     INT DEFAULT NULL, 
  21         CONSTRAINT domain_exists 
  22         FOREIGN KEY(domain_id) REFERENCES domains(id)
  23         ON DELETE CASCADE,
  24         CONSTRAINT c_lowercase_name CHECK (((name)::text = lower((name)::text)))
  25 );
  26 
  27 CREATE INDEX rec_name_index ON records(name);
  28 CREATE INDEX nametype_index ON records(name,type);
  29 CREATE INDEX domain_id ON records(domain_id);
  30 
  31 create table supermasters (
  32           ip VARCHAR(25) NOT NULL, 
  33           nameserver VARCHAR(255) NOT NULL, 
  34           account VARCHAR(40) DEFAULT NULL
  35 );
  36 
  37 -- GRANT SELECT ON supermasters TO powerdns;
  38 -- GRANT ALL ON domains TO powerdns;
  39 -- GRANT ALL ON domains_id_seq TO powerdns;
  40 -- GRANT ALL ON records TO powerdns;
  41 -- GRANT ALL ON records_id_seq TO powerdns;

MySQL的配制過程如下

# /etc/init.d/mysql start
$ mysql -u root -p
CREATE DATABASE powerdns;
GRANT ALL ON powerdns.* TO 'power_admin'@'localhost' IDENTIFIED BY '654321^%$#@!';
FLUSH PRIVILEGES;

USE powerdns;
create table domains (
 id              INT auto_increment,
 name            VARCHAR(255) NOT NULL,
 master          VARCHAR(128) 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)
) Engine=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(10) DEFAULT NULL,
  content         VARCHAR(64000) DEFAULT NULL,
  ttl             INT DEFAULT NULL,
  prio            INT DEFAULT NULL,
  change_date     INT DEFAULT NULL,
  primary key(id)
) Engine=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
) Engine=InnoDB;

$ sed '/\#/d;/^$/d' /etc/powerdns/pdns.conf

setgid=pdns
setuid=pdns
launch=gpgsql
gpgsql-host=127.0.0.1
gpgsql-user=powerdns
gpgsql-dbname=powerdns
gpgsql-password=654321^%$#@!

# MySQL引擎配制。
#launch=gmysql
#gmysql-host=127.0.0.1
#gmysql-user=powerdns
#gmysql-password=654321^%$#@!
#gmysql-dbname=powerdns

   1 su - postgres -C initdb --encoding UTF8 --locale=zh_CN.UTF-8 -D /srv/postgres/
   2 su - postgres -C postgres -D /srv/postgres/
   3 /etc/init.d/pdns start

在第三步時填寫powerdns數據庫的用戶名和密碼。以及poweradmin(admin)的密碼。

在第四步時為收集信息,需填寫poweradmin的用戶名和密碼及hostmaster等信息。

在第五步時運行如下腳本。

$ createuser -E -P poweradmin
Enter password for new role: 654321
Enter it again: 654321
Shall the new role be a superuser? (y/n) n
Shall the new user be allowed to create databases? (y/n) n
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER
$ psql powerdns
psql> GRANT SELECT, INSERT, DELETE, UPDATE ON supermasters TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON domains TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON records TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON perm_items TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON perm_templ TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON perm_templ_items TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON users TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON zones TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON zone_templ TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON zone_templ_records TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE domains_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE records_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE perm_items_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE perm_templ_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE perm_templ_items_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE users_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE zones_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE zone_templ_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE zone_templ_records_id_seq TO poweradmin;

mysql

在第六步的時候運行以下命令/腳本。

for PostgreSQL

$ createuser -E -P poweradmin
Enter password for new role: 654321^%$#@!
Enter it again: 654321^%$#@!
Shall the new role be a superuser? (y/n) n
Shall the new user be allowed to create databases? (y/n) n
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER
$ psql powerdns
psql> GRANT SELECT, INSERT, DELETE, UPDATE ON supermasters TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON domains TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON records TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON perm_items TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON perm_templ TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON perm_templ_items TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON users TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON zones TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON zone_templ TO poweradmin;
GRANT SELECT, INSERT, DELETE, UPDATE ON zone_templ_records TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE domains_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE records_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE perm_items_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE perm_templ_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE perm_templ_items_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE users_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE zones_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE zone_templ_id_seq TO poweradmin;
GRANT USAGE, SELECT ON SEQUENCE zone_templ_records_id_seq TO poweradmin;

After you have added the new user, proceed with this installation procedure.

For MySQL(none)


完成安裝

Installation step 7

Now we have finished the configuration, you should (must!) remove the directory "install/" from the Poweradmin root directory. You will not be able to use Poweradmin if it exists. Do it now.

After you have removed the directory, you can login to Poweradmin with username "admin" and password "654321^%$#@!". You are highly encouraged to change these as soon as you are logged in.

http://serverfault.com/questions/235963/mamp-unable-to-turn-off-php-e-strict-error-reporting

http://comments.gmane.org/gmane.mail.roundcube.user/2129

https://www.poweradmin.org/trac/wiki/Documentation/Install

désert/Linux/PowerDNS (last edited 2015-04-19 15:34:12 by merlyn)