From 48ced1968e3194da84c699aa918c6211b3bc9131 Mon Sep 17 00:00:00 2001 From: tbrehm Date: Tue, 30 Sep 2008 21:00:13 +0000 Subject: [PATCH] Added server plugin for software update function. --- install/tpl/config.inc.php.master | 7 ++ interface/web/admin/software_package_list.php | 3 +- interface/web/admin/software_update_list.php | 3 +- .../software_update_plugin.inc.php | 119 ++++++++++++++++++ 4 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 server/plugins-available/software_update_plugin.inc.php diff --git a/install/tpl/config.inc.php.master b/install/tpl/config.inc.php.master index 3cfe1a5095..d02ffd0660 100644 --- a/install/tpl/config.inc.php.master +++ b/install/tpl/config.inc.php.master @@ -108,6 +108,13 @@ define("DB_PASSWORD",$conf["db_password"]); $conf["log_file"] = '/var/log/ispconfig/ispconfig.log'; $conf["log_priority"] = {ispconfig_log_priority}; // 0 = Debug, 1 = Warning, 2 = Error +/* + Allow software package installations +*/ + +$conf['software_updates_enabled'] = false; + + /* Themes */ diff --git a/interface/web/admin/software_package_list.php b/interface/web/admin/software_package_list.php index 2f632a6f8d..19a7518a12 100644 --- a/interface/web/admin/software_package_list.php +++ b/interface/web/admin/software_package_list.php @@ -74,7 +74,8 @@ if(isset($_GET['action']) && $_GET['action'] == 'install' && $_GET['package'] != $tmp = $app->db->queryOneRecord($sql); $software_update_id = $tmp['software_update_id']; - $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')"; + // $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')"; + $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')"; $app->db->datalogInsert('software_update_inst', $insert_data, 'software_update_inst_id'); } diff --git a/interface/web/admin/software_update_list.php b/interface/web/admin/software_update_list.php index 78cbbfe347..d4255b76c6 100644 --- a/interface/web/admin/software_update_list.php +++ b/interface/web/admin/software_update_list.php @@ -104,7 +104,8 @@ if(isset($_GET['action']) && $_GET['action'] == 'install' && $_GET['package'] != $server_id = intval($_GET['server_id']); $software_update_id = intval($_GET['id']); - $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')"; + // $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installing')"; + $insert_data = "(package_name, server_id, software_update_id, status) VALUES ('$package_name', '$server_id', '$software_update_id','installed')"; $app->db->datalogInsert('software_update_inst', $insert_data, 'software_update_inst_id'); } diff --git a/server/plugins-available/software_update_plugin.inc.php b/server/plugins-available/software_update_plugin.inc.php new file mode 100644 index 0000000000..0bc0081896 --- /dev/null +++ b/server/plugins-available/software_update_plugin.inc.php @@ -0,0 +1,119 @@ +plugins->registerEvent('software_update_inst_insert',$this->plugin_name,'process'); + //$app->plugins->registerEvent('software_update_inst_update',$this->plugin_name,'process'); + //$app->plugins->registerEvent('software_update_inst_delete',$this->plugin_name,'process'); + + + } + + + function process($event_name,$data) { + global $app, $conf; + + if(!$conf['software_updates_enabled'] == true) { + $app->log('Software Updates not eanbled on this server. To enable updates, set $conf["software_updates_enabled"] = true; in config.inc.php',LOGLEVEL_ERROR); + return false; + } + + //* Get the info of the package: + $software_update_id = intval($data["new"]["software_update_id"]); + $software_update = $app->db->queryOneRecord("SELECT * FROM software_update WHERE software_update_id = '$software_update_id'"); + + $temp_dir = '/tmp/'.md5 (uniqid (rand())); + $app->log("The temp dir is $temp_dir",LOGLEVEL_DEBUG); + mkdir($temp_dir); + if(!is_dir($temp_dir)) { + $app->log("Unable to create temp directory.",LOGLEVEL_ERROR); + return false; + } + + exec("cd $temp_dir && wget ".$software_update["update_url"]); + $app->log("Downloading the update file from: ".$software_update["update_url"],LOGLEVEL_DEBUG); + + $url_parts = parse_url($software_update["update_url"]); + $update_filename = basename($url_parts["path"]); + $app->log("The update filename is $update_filename",LOGLEVEL_DEBUG); + + if(is_file($temp_dir.'/'.$update_filename)) { + + //* Checking the md5sum + if(md5_file($temp_dir.'/'.$update_filename) != $software_update["update_md5"]) { + $app->log("The md5 sum of the downloaded file is incorrect. Update aborted.",LOGLEVEL_ERROR); + exec("rm -rf $temp_dir"); + $app->log("Deleting the temp directory $temp_dir",LOGLEVEL_DEBUG); + return false; + } + + + //* unpacking the update + exec("cd $temp_dir && unzip $update_filename"); + + if(is_file($temp_dir.'/setup.sh')) { + // Execute the setup script + exec('chmod +x '.$temp_dir.'/setup.sh'); + $app->log("Executing setup.sh file in directory $temp_dir",LOGLEVEL_DEBUG); + exec('cd '.$temp_dir.' && ./setup.sh'); + $app->db->query("UPDATE software_update_inst SET status = 'installed' WHERE software_update_inst_id = ".$data["new"]["software_update_inst_id"]); + } else { + $app->log("setup.sh file not found",LOGLEVEL_ERROR); + } + } else { + $app->log("Download of the update file failed",LOGLEVEL_ERROR); + } + + exec("rm -rf $temp_dir"); + $app->log("Deleting the temp directory $temp_dir",LOGLEVEL_DEBUG); + + } + + +} // end class + +?> \ No newline at end of file -- GitLab