forked from librenms/librenms
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feature: Improved install experience (librenms#6915)
always check that the base sql has been imported. async db building After this merge, we could move install.php to the end of the install documentation. Makes a more natural flow.
- Loading branch information
Showing
7 changed files
with
218 additions
and
141 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,53 +1,54 @@ | ||
#!/usr/bin/env php | ||
<?php | ||
/** | ||
* build-base.php | ||
* | ||
* Create database structure. | ||
* | ||
* 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, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* 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. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
* @package LibreNMS | ||
* @link http://librenms.org | ||
* @copyright 2017 Tony Murray | ||
* @author Tony Murray <[email protected]> | ||
*/ | ||
|
||
if (!isset($init_modules)) { | ||
$opts = getopt('dh:u:p:n:t:s:'); | ||
|
||
$db_vars = array( | ||
'db_host' => 'h', | ||
'db_user' => 'u', | ||
'db_pass' => 'p', | ||
'db_name' => 'n', | ||
'db_port' => 't', | ||
'db_socket' => 's', | ||
); | ||
|
||
$config = array(); | ||
foreach ($db_vars as $setting => $opt) { | ||
if (isset($opts[$opt])) { | ||
$config[$setting] = $opts[$opt]; | ||
} | ||
} | ||
|
||
$init_modules = array(); | ||
require __DIR__ . '/includes/init.php'; | ||
|
||
$options = getopt('d'); | ||
$debug = isset($options['d']); | ||
} | ||
|
||
if (!isset($sql_file)) { | ||
$sql_file = 'build.sql'; | ||
} | ||
|
||
$sql_fh = fopen($sql_file, 'r'); | ||
if ($sql_fh === false) { | ||
echo 'ERROR: Cannot open SQL build script '.$sql_file.PHP_EOL; | ||
exit(1); | ||
} | ||
|
||
// only import build.sql to an empty database | ||
$tables = dbFetchRows("SHOW TABLES FROM {$config['db_name']}"); | ||
if (empty($tables)) { | ||
$limit = 0; | ||
|
||
while (!feof($sql_fh)) { | ||
$line = fgetss($sql_fh); | ||
if (isset($_SESSION['stage'])) { | ||
$limit++; | ||
if (isset($_SESSION['offset']) && $limit < $_REQUEST['offset']) { | ||
continue; | ||
} elseif (time()-$_SESSION['last'] > 45) { | ||
$_SESSION['offset'] = $limit; | ||
$GLOBALS['refresh'] = '<b>Installing, please wait..</b><sub>'.date('r').'</sub><script>window.location.href = "install.php?offset='.$limit.'";</script>'; | ||
return; | ||
} else { | ||
echo 'Step #'.$limit.' ...'.PHP_EOL; | ||
} | ||
} | ||
|
||
if (!empty($line)) { | ||
$creation = dbQuery($line); | ||
if (!$creation) { | ||
echo 'WARNING: Cannot execute query ('.$line.'): '.mysqli_error($database_link)."\n"; | ||
} | ||
} | ||
} | ||
$debug = isset($opts['d']); | ||
} | ||
|
||
fclose($sql_fh); | ||
|
||
require 'includes/sql-schema/update.php'; | ||
|
||
exit($return); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
<?php | ||
/** | ||
* db-update.inc.php | ||
* | ||
* Run database update/deploy for installer | ||
* | ||
* 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, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* 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. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
* | ||
* @package LibreNMS | ||
* @link http://librenms.org | ||
* @copyright 2017 Tony Murray | ||
* @author Tony Murray <[email protected]> | ||
*/ | ||
|
||
if (file_exists($config['install_dir'] . '/config.php')) { | ||
echo("This should only be called during install"); | ||
exit; | ||
} | ||
|
||
header("Content-type: text/plain"); | ||
header('X-Accel-Buffering: no'); | ||
|
||
$db_vars = array( | ||
'dbhost' => 'h', | ||
'dbuser' => 'u', | ||
'dbpass' => 'p', | ||
'dbname' => 'n', | ||
'dbport' => 't', | ||
'dbsocket' => 's', | ||
); | ||
|
||
$cmd = $config['install_dir'] . '/build-base.php'; | ||
|
||
foreach ($db_vars as $var => $opt) { | ||
if ($_SESSION[$var]) { | ||
$cmd .= " -$opt {$_SESSION[$var]}"; | ||
} | ||
} | ||
|
||
echo "Starting Update...\n"; | ||
|
||
if (($fp = popen($cmd . ' 2>&1', "r"))) { | ||
while (!feof($fp)) { | ||
$line = stream_get_line($fp, 1024, "\n"); | ||
echo preg_replace('/\033\[[\d;]+m/', '', $line) . PHP_EOL; | ||
ob_flush(); | ||
flush(); // you have to flush the buffer | ||
} | ||
|
||
if (pclose($fp) === 0) { | ||
echo "Database is up to date!"; | ||
$_SESSION['build-ok'] = true; | ||
} | ||
} | ||
|
||
session_write_close(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.