# HG changeset patch # User rejo # Date 1209406686 0 # Node ID edd0c3ee3e1ddf8ffed02e16b11c4f90b279d6d1 # Parent 1ede5203910d467956bfdc44152bd1909ca19da1 [feladat @ 248] Added basic installation procedure. This closes ticket:10. diff -r 1ede5203910d -r edd0c3ee3e1d inc/database.inc.php --- a/inc/database.inc.php Thu Apr 24 22:33:28 2008 +0000 +++ b/inc/database.inc.php Mon Apr 28 18:18:06 2008 +0000 @@ -23,12 +23,7 @@ function dbError($msg) { - // General function for printing critical errors. - include_once("header.inc.php"); - ?> -

-

getDebugInfo(); ?>

- Error: " . $msg->getDebugInfo() . "\n"; include_once("footer.inc.php"); die(); } diff -r 1ede5203910d -r edd0c3ee3e1d install/database-structure.inc.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/install/database-structure.inc.php Mon Apr 28 18:18:06 2008 +0000 @@ -0,0 +1,290 @@ + 'perm_items', + 'fields' => array( + 'id' => array( + 'type' => 'integer', + 'notnull' => 1, + 'length' => 4, + 'unsigned' => 0, + 'autoincrement' => 1, + 'name' => 'id', + 'table' => 'perm_items', + 'flags' => 'primary_keynot_null' + ), + 'name' => array( + 'type' => 'text', + 'notnull' => 1, + 'length' => 64, + 'fixed' => 0, + 'default' => 0, + 'name' => 'name', + 'table' => 'perm_items', + 'flags' => 'not_null' + ), + 'descr' => array( + 'type' => 'text', + 'length' => 1024, + 'notnull' => 1, + 'fixed' => 0, + 'default' => 0, + 'name' => 'descr', + 'table' => 'perm_items', + 'flags' => 'not_null' + ) + ) + ), + array( + 'table_name' => 'perm_templ', + 'fields' => array( + 'id' => array( + 'type' => 'integer', + 'notnull' => 1, + 'length' => 4, + 'unsigned' => 0, + 'default' => 0, + 'autoincrement' => 1, + 'name' => 'id', + 'table' => 'perm_templ', + 'flags' => 'primary_keynot_null' + ), + 'name' => array( + 'type' => 'integer', + 'notnull' => 1, + 'length' => 128, + 'fixed' => 0, + 'default' => 0, + 'name' => 'name', + 'table' => 'perm_templ', + 'flags' => 'not_null' + ), + 'descr' => array( + 'notnull' => 1, + 'fixed' => 0, + 'default' => 0, + 'type' => 'text', + 'length' => 1024, + 'name' => 'descr', + 'table' => 'perm_templ', + 'flags' => 'not_null' + ) + ) + ), + array( + 'table_name' => 'perm_templ_items', + 'fields' => array( + 'id' => array( + 'notnull' => 1, + 'length' => 4, + 'unsigned' => 0, + 'default' => 0, + 'autoincrement' => 1, + 'type' => 'integer', + 'name' => 'id', + 'table' => 'perm_templ_items', + 'flags' => 'primary_keynot_null' + ), + 'templ_id' => array( + 'notnull' => 1, + 'length' => 4, + 'unsigned' => 0, + 'default' => 0, + 'type' => 'integer', + 'name' => 'templ_id', + 'table' => 'perm_templ_items', + 'flags' => 'not_null' + ), + 'perm_id' => array( + 'notnull' => 1, + 'length' => 4, + 'unsigned' => 0, + 'default' => 0, + 'type' => 'integer', + 'name' => 'perm_id', + 'table' => 'perm_templ_items', + 'flags' => 'not_null' + ) + ) + ), + array( + 'table_name' => 'users', + 'fields' => array( + 'id' => array + ( + 'notnull' => 1, + 'length' => 4, + 'unsigned' => 0, + 'default' => 0, + 'autoincrement' => 1, + 'type' => 'integer', + 'name' => 'id', + 'table' => 'users', + 'flags' => 'primary_keynot_null' + ), + 'username' => array + ( + 'notnull' => 1, + 'length' => 16, + 'fixed' => 0, + 'default' => 0, + 'type' => 'text', + 'name' => 'username', + 'table' => 'users', + 'flags' => 'not_null' + ), + 'password' => array + ( + 'notnull' => 1, + 'length' => 34, + 'fixed' => 0, + 'default' => 0, + 'type' => 'text', + 'name' => 'password', + 'table' => 'users', + 'flags' => 'not_null' + ), + 'fullname' => array + ( + 'notnull' => 1, + 'length' => 255, + 'fixed' => 0, + 'default' => 0, + 'type' => 'text', + 'name' => 'fullname', + 'table' => 'users', + 'flags' => 'not_null' + ), + 'email' => array + ( + 'notnull' => 1, + 'length' => 255, + 'fixed' => 0, + 'default' => 0, + 'type' => 'text', + 'name' => 'email', + 'table' => 'users', + 'flags' => 'not_null' + ), + 'description' => array + ( + 'notnull' => 1, + 'fixed' => 0, + 'default' => 0, + 'type' => 'text', + 'length' => 1024, + 'name' => 'description', + 'table' => 'users', + 'flags' => 'not_null' + ), + 'perm_templ' => array + ( + 'notnull' => 1, + 'length' => 1, + 'unsigned' => 0, + 'default' => 0, + 'type' => 'integer', + 'name' => 'perm_templ', + 'table' => 'users', + 'flags' => 'not_null' + ), + 'active' => array + ( + 'notnull' => 1, + 'length' => 1, + 'unsigned' => 0, + 'default' => 0, + 'type' => 'integer', + 'name' => 'active', + 'table' => 'users', + 'flags' => 'not_null' + ) + ) + ), + array( + 'table_name' => 'zones', + 'fields' => array( + 'id' => array + ( + 'notnull' => 1, + 'length' => 4, + 'unsigned' => 0, + 'default' => 0, + 'autoincrement' => 1, + 'type' => 'integer', + 'name' => 'id', + 'table' => 'zones', + 'flags' => 'primary_keynot_null' + ), + 'domain_id' => array + ( + 'notnull' => 1, + 'length' => 4, + 'unsigned' => 0, + 'default' => 0, + 'type' => 'integer', + 'name' => 'domain_id', + 'table' => 'zones', + 'flags' => 'not_null' + ), + 'owner' => array + ( + 'notnull' => 1, + 'length' => 4, + 'unsigned' => 0, + 'default' => 0, + 'type' => 'integer', + 'name' => 'owner', + 'table' => 'zones', + 'flags' => 'not_null' + ), + 'comment' => array + ( + 'notnull' => 0, + 'length' => 1024, + 'fixed' => 0, + 'default' => 0, + 'type' => 'text', + 'name' => 'comment', + 'table' => 'zones', + 'flags' => '' + ) + ) + ) + ); + +$def_permissions = array( + array(41,'zone_master_add','User is allowed to add new master zones.'), + array(42,'zone_slave_add','User is allowed to add new slave zones.'), + array(43,'zone_content_view_own','User is allowed to see the content and meta data of zones he owns.'), + array(44,'zone_content_edit_own','User is allowed to edit the content of zones he owns.'), + array(45,'zone_meta_edit_own','User is allowed to edit the meta data of zones he owns.'), + array(46,'zone_content_view_others','User is allowed to see the content and meta data of zones he does not own.'), + array(47,'zone_content_edit_others','User is allowed to edit the content of zones he does not own.'), + array(48,'zone_meta_edit_others','User is allowed to edit the meta data of zones he does not own.'), + array(49,'search','User is allowed to perform searches.'), + array(50,'supermaster_view','User is allowed to view supermasters.'), + array(51,'supermaster_add','User is allowed to add new supermasters.'), + array(52,'supermaster_edit','User is allowed to edit supermasters.'), + array(53,'user_is_ueberuser','User has full access. God-like. Redeemer.'), + array(54,'user_view_others','User is allowed to see other users and their details.'), + array(55,'user_add_new','User is allowed to add new users.'), + array(56,'user_edit_own','User is allowed to edit their own details.'), + array(57,'user_edit_others','User is allowed to edit other users.'), + array(58,'user_passwd_edit_others','User is allowed to edit the password of other users.'), + array(59,'user_edit_templ_perm','User is allowed to change the permission template that is assigned to a user.'), + array(60,'templ_perm_add','User is allowed to add new permission templates.'), + array(61,'templ_perm_edit','User is allowed to edit existing permission templates.') + ); + +$def_remaining_queries = array( + "INSERT INTO users VALUES (1,'admin','21232f297a57a5a743894a0e4a801fc3','Administrator','admin@example.net','Administrator with full rights.',1,1)", + "INSERT INTO perm_templ VALUES (1,'Administrator','Administrator template with full rights.')", + "INSERT INTO perm_templ_items VALUES (249,1,53)" + ); + + + diff -r 1ede5203910d -r edd0c3ee3e1d install/index.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/install/index.php Mon Apr 28 18:18:06 2008 +0000 @@ -0,0 +1,157 @@ +\n"; +echo "\n"; +echo " \n"; +echo " Poweradmin\n"; +echo " \n"; +echo " \n"; +echo " \n"; + +if (!isset($_POST['step']) || !is_numeric($_POST['step'])) { + $step = 1; +} else { + $step = $_POST['step']; +} + +echo "

Poweradmin

"; +echo "

Installation step " . $step . "

"; + +switch($step) { + case 1: + $step++; + echo "

This installer expects you to have a PowerDNS database accessable from this server. This installer also expects you to have never ran Poweradmin before, or that you want to overwrite the Poweradmin part of the database. If you have had Poweradmin running before, any data in the following tables will be destroyed:

\n"; + echo "\n"; + echo "

This installer will, of course, not touch the data in the PowerDNS tables of the database. However, it is, of course, recommended you create a backup of your database before proceeding.

"; + echo "

Finaly, if you see any errors during the installation process, a problem report would be. You can report problems (and ask for help) on the poweradmin-users mailinglist or you can create a ticket in the ticketsystem.

"; + echo "

Do you want to proceed now?

\n"; + echo "
"; + echo ""; + echo ""; + echo "
"; + break; + + case 2: + $step++; + echo "

To prepare the database for using Poweradmin, the installer needs to modify the PowerDNS database. It'll add a number of tables and it'll fill these tables with some data. If the tables are already present, the installer will drop them first.

"; + echo "

To do all of this, the installer needs to access the database with an account which has sufficient rights. If you trust the installer, you may give it the username and password of the database user root. Otherwise, make sure the user has enough rights, before actually proceeding.

"; + echo "
"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "\n"; + echo "
UsernameThe username to use to connect to the database, make sure the username has sufficient rights to perform administrative task to the PowerDNS database (e.g. \"root\").
PasswordThe password for this username.
HostnameThe hostname on which the PowerDNS database resides. Frequently, this will be \"localhost\".
DatabaseThe name of the PowerDNS database.
\n"; + echo ""; + echo ""; + echo "
"; + break; + + case 3: + $step++; + echo "

Updating database... "; + include_once("../inc/config-me.inc.php"); + include_once("database-structure.inc.php"); + $db_user = $_POST['user']; + $db_pass = $_POST['pass']; + $db_host = $_POST['host']; + $db_name = $_POST['name']; + $db_type = "mysql"; + require_once("../inc/database.inc.php"); + $db = dbConnect(); + $db->loadModule('Manager'); + $db->loadModule('Extended'); + + $current_tables = $db->listTables(); + + foreach ($def_tables as $table) { + if (in_array($table['table_name'], $current_tables)) $db->dropTable($table['table_name']); + $db->createTable($table['table_name'], $table['fields']); + } + + $fill_perm_items = $db->prepare('INSERT INTO perm_items VALUES (?, ?, ?)'); + $db->extended->executeMultiple($fill_perm_items, $def_permissions); + $fill_perm_items->free(); + + foreach ($def_remaining_queries as $query) { + $db->query($query); + } + + echo "done!

"; + + echo "

We have now updated the PowerDNS database to work with Poweradmin. You now want to give limited rights to Poweraadmin so it can update the data in the tables. To do this, you should create a new user and give it rights to select, delete, insert and update records in the PowerDNS database. In MySQL should now perform the following command:

"; + echo "

GRANT SELECT, INSERT, UPDATE, DELETE
ON powerdns-database.*
TO 'poweradmin-user'@'localhost'
IDENTIFIED BY 'poweradmin-password';

"; + echo "

On PgSQL you would use:

"; + echo "

$ createuser poweradmin-user
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-database
psql> GRANT SELECT, INSERT, DELETE, UPDATE
ON powerdns-database
TO poweradmin-user;

"; + echo "

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

\n"; + echo "
"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
"; + break; + + case 4: + $step++; + $db_host = $_POST['host']; + $db_name = $_POST['name']; + $db_type = $_POST['type']; + echo "

Now we will put together the configuration. To do so, I need some details:

"; + echo "
"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
UsernameThe username as created in the previous step.
PasswordThe password for this username.
HostmasterWhen creating SOA records and no hostmaster is provided, this value here will be used. Should be in the form \"hostmaster.example.net\".
Primary nameserverWhen creating new zones using the template, this value will be used as primary nameserver. Should be like \"ns1.example.net\".
Secondary nameserverWhen creating new zones using the template, this value will be used as secondary nameserver. Should be like \"ns2.example.net\".
"; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo "
"; + break; + + case 5: + $step++; + echo "

The configuration is printed here. You should now create the file " . $local_config_file . " in the Poweradmin root directory yourself. It should contain the following few lines:

"; + + echo "
";
+		echo "\$db_host\t\t= \"" . $_POST['db_host'] . "\";\n" .
+			"\$db_user\t\t= \"" . $_POST['db_user'] . "\";\n" .
+			"\$db_pass\t\t= \"" . $_POST['db_pass'] . "\";\n" .
+			"\$db_name\t\t= \"" . $_POST['db_name'] . "\";\n" .
+			"\$db_type\t\t= \"" . $_POST['db_type'] . "\";\n" .
+			"\n" .
+			"\$dns_hostmaster\t\t= \"" . $_POST['dns_hostmaster'] . "\";\n" .
+			"\$dns_ns1\t\t= \"" . $_POST['dns_ns1'] . "\";\n" .
+			"\$dns_ns2\t\t= \"" . $_POST['dns_ns2'] . "\";\n" .
+			"\n";
+		echo "
"; + echo "
"; + echo ""; + echo ""; + echo "
"; + break; + + case 6: + $step++; + echo "

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

"; + echo "

After you have removed the file, you can login to Poweradmin with username \"admin\" and password \"admin\". You are highly encouraged to change these as soon as you are logged in.

"; + break; + + default: + break; +} + +echo "
"; +echo "a complete(r) poweradmin - credits"; +echo "
"; + +?> + + +