<?php // Pandora FMS - http://pandorafms.com // ================================================== // Copyright (c) 2005-2009 Artica Soluciones Tecnologicas // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation for version 2. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Pandora FMS - Installation Wizard</title> <meta http-equiv="expires" content="0"> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta name="resource-type" content="document"> <meta name="distribution" content="global"> <meta name="author" content="Sancho Lerena, Raul Mateos"> <meta name="copyright" content="This is GPL software. Created by Sancho Lerena and others"> <meta name="keywords" content="pandora, fms, monitoring, network, system, GPL, software"> <meta name="robots" content="index, follow"> <link rel="icon" href="images/pandora.ico" type="image/ico"> <link rel="stylesheet" href="include/styles/pandora_minimal.css" type="text/css"> <link rel="stylesheet" href="include/styles/install.css" type="text/css"> </head> <body bgcolor="#555555"> <?php $version = "3.1-dev"; $build = "100317"; $banner = "v$version Build $build"; error_reporting(0); function check_extension ( $ext, $label ){ echo "<tr><td>"; echo "<span class='arr'> $label </span>"; echo "</td><td>"; if (!extension_loaded($ext)){ echo "<img src='images/dot_red.png'>"; return 1; } else { echo "<img src='images/dot_green.png'>"; return 0; } echo "</td></tr>"; } function check_include ( $ext, $label ){ echo "<tr><td>"; echo "<span class='arr'> $label </span>"; echo "</td><td>"; if (!include($ext)){ echo "<img src='images/dot_red.png'>"; return 1; } else { echo "<img src='images/dot_green.png'>"; return 0; } echo "</td></tr>"; } function check_exists ( $file, $label ){ echo "<tr><td>"; echo "<span class='arr'> $label </span>"; echo "</td><td>"; if (!file_exists ($file)){ echo " <img src='images/dot_red.png'>"; return 1; } else { echo " <img src='images/dot_green.png'>"; return 0; } echo "</td></tr>"; } function check_generic ( $ok, $label ){ echo "<tr><td>"; echo "<span class='arr'> $label </span>"; echo "</td><td>"; if ($ok == 0 ){ echo " <img src='images/dot_red.png'>"; return 1; } else { echo " <img src='images/dot_green.png'>"; return 0; } echo "</td></tr>"; } function check_writable ( $fullpath, $label ){ echo "<tr><td>"; echo "<span class='arr'> $label </span>"; echo "</td><td>"; if (file_exists($fullpath)) if (is_writable($fullpath)){ echo " <img src='images/dot_green.png'>"; echo "</td></tr>"; return 0; } else { echo " <img src='images/dot_red.png'>"; echo "</td></tr>"; return 1; } else { echo " <img src='images/dot_red.png'>"; echo "</td></tr>"; return 1; } } function check_variable ( $var, $value, $label, $mode ){ echo "<tr><td>"; echo "<span class='arr'> $label </span>"; echo "</td><td>"; if ($mode == 1){ if ($var >= $value){ echo " <img src='images/dot_green.png'>"; return 0; } else { echo " <img src='images/dot_red.png'>"; return 1; } } elseif ($var == $value){ echo " <img src='images/dot_green.png'>"; return 0; } else { echo " <img src='images/dot_red.png'>"; return 1; } echo "</td></tr>"; } function parse_mysql_dump($url){ if (file_exists($url)){ $file_content = file($url); $query = ""; foreach($file_content as $sql_line){ if(trim($sql_line) != "" && strpos($sql_line, "--") === false){ $query .= $sql_line; if(preg_match("/;[\040]*\$/", $sql_line)){ if (!$result = mysql_query($query)) { echo mysql_error(); //Uncomment for debug echo "<i><br>$query<br></i>"; return 0; } $query = ""; } } } return 1; } else return 0; } function random_name ($size){ $temp = ""; for ($a=0;$a< $size;$a++) $temp = $temp. chr(rand(122,97)); return $temp; } function print_logo_status ($step, $step_total){ global $banner; echo " <div id='logo_img'> <img src='images/pandora_logo.png' border='0'><br> <span style='font-size: 8px;'>$banner</span> <br><br> <b>Install step $step of $step_total</b> </div>"; } function install_step1() { global $banner; echo " <div id='install_container'> <h1>Pandora FMS installation wizard. Step #1 of 5</h1> <div id='wizard' style='height: 490px;'> <div id='install_box'> <h2>Welcome to Pandora FMS installation Wizard</h2> <p>This wizard helps you to quick install Pandora FMS console in your system.</p> <p>In four steps checks all dependencies and make your configuration for a quick installation.</p> <p>For more information, please refer to documentation.</p> <i>Pandora FMS Development Team</i> "; if (file_exists("include/config.php")){ echo "<div class='warn'><b>Warning:</b> You already have a config.php file. Configuration and database would be overwritten if you continued.</div>"; } echo "<table width=100%>"; $writable = check_writable ( "include", "Checking if ./include is writable"); if (file_exists("include/config.php")) $writable += check_writable ( "include/config.php", "Checking if include/config.php is writable"); echo "</table>"; echo "<div class='warn'><b>Warning:</b> This installer will <b>overwrite and destroy</b> your existing Pandora FMS configuration and <b>Database</b>. Before continue, please <b>be sure that you have no valuable Pandora FMS data in your Database</b>.<br> </div>"; echo "<div class='info'><b>Upgrade</b>: If you want to upgrade from Pandora FMS 2.x to 3.0 version, please download the migration tool from our website at <a href='http://www.pandorafms.com'>PandoraFMS.com web site</a>.</div>"; echo "</div>"; print_logo_status (1, 5); echo "<div id='install_img'>"; if ($writable == 0) { echo " <br><br> <a href='install.php?step=11'><img align='right' src='images/arrow_next.png' border='0'></a>"; } else echo "<div class='warn'><b>ERROR:</b>You need to setup permissions to be able to write in ./include directory</div>"; echo " </div> </div> <div id='foot_install'> <i>Pandora FMS is an OpenSource Software project registered at <a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i> </div> </div>"; } function install_step1_licence() { echo " <div id='install_container'> <h1>Pandora FMS installation wizard. Step #2 of 5</h1> <div id='wizard' style='height: 520px;'> <div id='install_box'> <h2>GPL2 Licence terms agreement</h2> <p>Pandora FMS is an OpenSource software project licensed under the GPL2 licence. Pandora FMS includes, as well, another software also licensed under LGPL and BSD licenses. Before continue, <i>you must accept the licence terms.</i>. <p>For more information, please refer to our website at http://pandorafms.org and contact us if you have any kind of question about the usage of Pandora FMS</p> <p>If you dont accept the licence terms, please, close your browser and delete Pandora FMS files.</p> "; if (!file_exists("COPYING")){ echo "<div class='warn'><b>Licence file 'COPYING' is not present in your distribution. This means you have some 'partial' Pandora FMS distribution. We cannot continue without accepting the licence file."; echo "</div>"; } else { echo "<form method=post action='install.php?step=2'>"; echo "<textarea name='gpl2' cols=50 rows=17>"; echo file_get_contents ("COPYING"); echo "</textarea>"; echo "<p>"; echo "<input type=submit value='Yes, I accept licence terms'>"; } echo "</div>"; print_logo_status (2, 5); echo "</div> <div style='clear: both;height: 1px;'><!-- --></div> <div id='foot_install'> <i>Pandora FMS is an OpenSource Software project registered at <a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i> </div> </div>"; } function install_step2() { echo " <div id='install_container'> <h1>Pandora FMS console installation wizard. Step #3 of 5</h1> <div id='wizard' style='min-height: 390px;'> <div id='install_box'>"; echo "<h2>Checking software dependencies</h2>"; echo "<table border=0 width=230>"; $res = 0; $res += check_variable(phpversion(),"5.2","PHP version >= 5.2",1); $res += check_extension("mysql","PHP MySQL extension"); $res += check_extension("gd","PHP GD extension"); $res += check_extension("ldap","PHP LDAP extension"); $res += check_extension("snmp","PHP SNMP extension"); $res += check_extension("session","PHP session extension"); $res += check_extension("gettext","PHP gettext extension"); $res += check_include("PEAR.php","PEAR PHP Library"); $res += check_include("DB.php","PEAR:DB PHP Library"); $res += check_include("XML/RPC.php","PEAR::XML_RPC PHP Library"); $res += check_exists ("/usr/bin/twopi","Graphviz Binary"); echo "</table>"; echo "</div>"; print_logo_status (3,5); echo "<div id='install_img'>"; if ($res > 0) { echo " <div class='warn'>You have some incomplete dependencies. Please correct them or this installer will not be able to finish your installation. </div> Ignore it. <a href='install.php?step=3' style='font-weight: bolder;'>Force install Step #4</a>"; } else { echo "<a href='install.php?step=3'><br> <img align='right' src='images/arrow_next.png' border='0' alt=''></a>"; } echo " </div> <div style='clear: both;'><!-- --></div> </div> <div id='foot_install'> <i>Pandora FMS is an OpenSource Software project registered at <a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i> </div> </div>"; } function install_step3() { echo " <div id='install_container'> <h1>Pandora FMS console installation wizard. Step #4 of 5 </h1> <div id='wizard' style='height: 640px;'> <div id='install_box'> <h2>Environment and database setup</h2> <p> This wizard will create your Pandora FMS database, and populate it with all the data needed to run for the first time. </p> <p> You need a privileged user to create database schema, this is usually <b>root</b> user. Information about <b>root</b> user will not be used or stored anymore. </p> <p> Now, please, complete all details to configure your database and environment setup. </p> <div class='warn'> <b>Warning:</b> This installer will <b>overwrite and destroy</b> your existing Pandora FMS configuration and <b>Database</b>. Before continue, please <b>be sure that you have no valuable Pandora FMS data in your Database.</b> <br><br> </div> <form method='post' action='install.php?step=4'> <div>DB User with privileges on MySQL</div> <input class='login' type='text' name='user' value='root'> <div>DB Password for this user</div> <input class='login' type='password' name='pass' value=''> <div>DB Hostname of MySQL</div> <input class='login' type='text' name='host' value='localhost'> <div>DB Name (pandora by default)</div> <input class='login' type='text' name='dbname' value='pandora'> <input class='login' type='checkbox' name='drop' value=1> Drop Database if exists <div>Full path to HTTP publication directory<br> <span class='f9b'>For example /var/www/pandora_console/. Needed for graphs and attachments. </span> </div> <input class='login' type='text' name='path' style='width: 190px;' value='".dirname (__FILE__)."'> <div>URL path to Pandora FMS Console<br> <span class='f9b'>For example '/pandora_console'</span> </div> <input class='login' type='text' name='url' style='width: 250px;' value='".dirname ($_SERVER["SCRIPT_NAME"])."'> <div align='right'><br> <input type='image' src='images/arrow_next.png' value='Step #4' id='step4'> </div> </form> </div>"; print_logo_status (4,5); echo "</div> <div id='foot_install'> <i>Pandora FMS is an OpenSource Software project registered at <a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i> </div> </div>"; } function install_step4() { $pandora_config = "include/config.php"; if ( (! isset($_POST["user"])) || (! isset($_POST["dbname"])) || (! isset($_POST["host"])) || (! isset($_POST["pass"])) ) { $dbpassword = ""; $dbuser = ""; $dbhost = ""; $dbname = ""; } else { $dbpassword = $_POST["pass"]; $dbuser = $_POST["user"]; $dbhost = $_POST["host"]; if (isset($_POST["drop"])) $dbdrop = $_POST["drop"]; else $dbdrop = 0; $dbname = $_POST["dbname"]; if (isset($_POST["url"])) $url = $_POST["url"]; else $url = "http://localhost"; if (isset($_POST["path"])) $path = $_POST["path"]; else $path = "/var/www"; } $everything_ok = 0; $step1=0; $step2=0; $step3=0; $step4=0; $step5=0; $step6=0; $step7=0; echo " <div id='install_container'> <h1>Pandora FMS Console installation wizard. Step #5 of 5</h1> <div id='wizard' style='height: 480px;'> <div id='install_box'> <h2>Creating database and default configuration file</h2> <table>"; if (! mysql_connect ($dbhost,$dbuser,$dbpassword)) { check_generic ( 0, "Connection with Database"); } else { check_generic ( 1, "Connection with Database"); // Drop database if needed if ($dbdrop == 1) mysql_query ("DROP DATABASE IF EXISTS $dbname"); // Create schema $step1 = mysql_query ("CREATE DATABASE $dbname"); check_generic ($step1, "Creating database '$dbname'"); if ($step1 == 1) { $step2 = mysql_select_db($dbname); check_generic ($step2, "Opening database '$dbname'"); $step3 = parse_mysql_dump("pandoradb.sql"); check_generic ($step3, "Creating schema"); $step4 = parse_mysql_dump("pandoradb_data.sql"); check_generic ($step4, "Populating database"); $random_password = random_name (8); $host = 'localhost'; if ($dbhost != 'localhost') $host = $_SERVER['SERVER_ADDR']; $step5 = mysql_query ("GRANT ALL PRIVILEGES ON $dbname.* to pandora@$host IDENTIFIED BY '".$random_password."'"); mysql_query ("FLUSH PRIVILEGES"); check_generic ($step5, "Established privileges for user pandora. A new random password has been generated: <b>$random_password</b><div class='warn'>Please write it down, you will need to setup your Pandora FMS server, editing the </i>/etc/pandora/pandora_server.conf</i> file</div>"); $step6 = is_writable("include"); check_generic ($step6, "Write permissions to save config file in './include'"); $cfgin = fopen ("include/config.inc.php","r"); $cfgout = fopen ($pandora_config,"w"); $config_contents = fread ($cfgin, filesize("include/config.inc.php")); $config_new = '<?php // Begin of automatic config file $config["dbname"]="'.$dbname.'"; // MySQL DataBase name $config["dbuser"]="pandora"; // DB User $config["dbpass"]="'.$random_password.'"; // DB Password $config["dbhost"]="'.$dbhost.'"; // DB Host $config["homedir"]="'.$path.'"; // Config homedir $config["homeurl"]="'.$url.'"; // Base URL // End of automatic config file ?>'; $step7 = fputs ($cfgout, $config_new); $step7 = $step7 + fputs ($cfgout, $config_contents); if ($step7 > 0) $step7 = 1; fclose ($cfgin); fclose ($cfgout); chmod ($pandora_config, 0600); check_generic ($step7, "Created new config file at '".$pandora_config."'"); } } if (($step7 + $step6 + $step5 + $step4 + $step3 + $step2 + $step1) == 7) { $everything_ok = 1; } echo "</table></div>"; print_logo_status (4,5); echo "<div id='install_img'>"; if ($everything_ok == 1) { echo "<br><br><a href='install.php?step=5'> <img align='right' src='images/arrow_next.png' border='0' alt=''></a>"; } else { echo "<div class='warn'><b>There were some problems. Installation was not completed.</b> <p>Please correct failures before trying again. All database schemes created in this step have been dropped. </p> </div>"; if (mysql_error() != "") echo "<div class='warn'> <b>ERROR:</b> ". mysql_error().".</div>"; if ($step1 == 1) mysql_query ("DROP DATABASE $dbname"); } echo " </div> </div> <div id='foot_install'> <i>Pandora FMS is an Open Source Software project registered at <a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i> </div> </div>"; } function install_step5() { echo " <div id='install_container'> <h1>Pandora FMS console installation wizard. Finished</h1> <div id='wizard' style='height: 300px;'> <div id='install_box'> <h2>Installation complete</h2> <p>For security, you now must manually delete this installer ('<i>install.php</i>') file before trying to access to your Pandora FMS console. <p>You should also install Pandora FMS Servers before trying to monitor anything; please read documentation on how to install it.</p> <p>Default user is <b>'admin'</b> with password <b>'pandora'</b>, please change it both as soon as possible.</p> <p>Don't forget to check <a href='http://pandorafms.com'>http://pandorafms.com</a> for updates. <p><br><b><a href='index.php'>Click here to access to your Pandora FMS console</a>.</b> </p> </div>"; print_logo_status (5,5); echo "</div> <div id='foot_install'> <i>Pandora FMS is an OpenSource Software project registered at <a target='_new' href='http://pandora.sourceforge.net'>SourceForge</a></i> </div> </div>"; } // --------------- // Main page code // --------------- if (! isset($_GET["step"])){ install_step1(); } else { $step = $_GET["step"]; switch ($step) { case 11: install_step1_licence(); break; case 2: install_step2(); break; case 3: install_step3(); break; case 4: install_step4(); break; case 5: install_step5(); break; } } ?> </body> </html>