Moved all install functions into an AirtimeInstall class.
Formatted all the install files according to our code formatting standards. Output more info if something goes wrong during DB create or DB user create.
This commit is contained in:
parent
4b27fcc0c9
commit
ef0bb8ed78
|
@ -1,7 +1,6 @@
|
|||
<?php
|
||||
/**
|
||||
* @package Airtime
|
||||
* @subpackage StorageServer
|
||||
* @copyright 2010 Sourcefabric O.P.S.
|
||||
* @license http://www.gnu.org/licenses/gpl.txt
|
||||
*/
|
||||
|
@ -20,34 +19,33 @@ require_once(dirname(__FILE__).'/installInit.php');
|
|||
|
||||
echo "******************************** Install Begin *********************************".PHP_EOL;
|
||||
|
||||
checkIfRoot();
|
||||
createAPIKey();
|
||||
updateINIKeyValues('../build/build.properties', 'project.home', realpath(__dir__.'/../'));
|
||||
AirtimeInstall::ExitIfNotRoot();
|
||||
AirtimeInstall::CreateApiKey();
|
||||
AirtimeInstall::UpdateIniValue('../build/build.properties', 'project.home', realpath(__dir__.'/../'));
|
||||
|
||||
|
||||
echo PHP_EOL."*** Database Installation ***".PHP_EOL;
|
||||
|
||||
echo "* Creating Airtime Database User".PHP_EOL;
|
||||
createAirtimeDatabaseUser();
|
||||
AirtimeInstall::CreateDatabaseUser();
|
||||
|
||||
echo "* Creating Airtime Database".PHP_EOL;
|
||||
createAirtimeDatabase();
|
||||
AirtimeInstall::CreateDatabase();
|
||||
|
||||
|
||||
airtime_db_connect(true);
|
||||
AirtimeInstall::DbConnect(true);
|
||||
|
||||
echo "* Install Postgresql Scripting Language".PHP_EOL;
|
||||
installPostgresScriptingLanguage();
|
||||
AirtimeInstall::InstallPostgresScriptingLanguage();
|
||||
|
||||
echo "* Creating Database Tables".PHP_EOL;
|
||||
createAirtimeDatabaseTables();
|
||||
doctrineMigrateTables(__DIR__);
|
||||
AirtimeInstall::CreateDatabaseTables();
|
||||
AirtimeInstall::MigrateTables(__DIR__);
|
||||
|
||||
echo "* Storage Directory Setup".PHP_EOL;
|
||||
storageDirectorySetup($CC_CONFIG);
|
||||
AirtimeInstall::SetupStorageDirectory($CC_CONFIG);
|
||||
|
||||
echo "* Setting Dir Permissions".PHP_EOL;
|
||||
install_setDirPermissions($CC_CONFIG["storageDir"]);
|
||||
AirtimeInstall::ChangeDirOwnerToWebserver($CC_CONFIG["storageDir"]);
|
||||
|
||||
echo "* Importing Sample Audio Clips".PHP_EOL;
|
||||
system(__DIR__."/../utils/airtime-import --copy ../audio_samples/ > /dev/null");
|
||||
|
|
|
@ -18,13 +18,13 @@ require_once(dirname(__FILE__).'/../application/configs/conf.php');
|
|||
require_once(dirname(__FILE__).'/installInit.php');
|
||||
|
||||
// Need to check that we are superuser before running this.
|
||||
checkIfRoot();
|
||||
AirtimeInstall::ExitIfNotRoot();
|
||||
|
||||
|
||||
echo "******************************* Uninstall Begin ********************************".PHP_EOL;
|
||||
//------------------------------------------------------------------------
|
||||
// Delete the database
|
||||
// Note: Do not put a call to airtime_db_connect()
|
||||
// Note: Do not put a call to AirtimeInstall::DbConnect()
|
||||
// before this function, even if you called $CC_DBC->disconnect(), there will
|
||||
// still be a connection to the database and you wont be able to delete it.
|
||||
//------------------------------------------------------------------------
|
||||
|
@ -38,19 +38,22 @@ $command = "sudo -u postgres dropdb {$CC_CONFIG['dsn']['database']} 2> /dev/null
|
|||
//------------------------------------------------------------------------
|
||||
if ($dbDeleteFailed) {
|
||||
echo " * Couldn't delete the database, so deleting all the DB tables...".PHP_EOL;
|
||||
airtime_db_connect(true);
|
||||
AirtimeInstall::DbConnect(true);
|
||||
|
||||
if (!PEAR::isError($CC_DBC)) {
|
||||
$sql = "select * from pg_tables where tableowner = 'airtime'";
|
||||
$rows = airtime_get_query($sql);
|
||||
$rows = $CC_DBC->GetAll($sql);
|
||||
if (PEAR::isError($result)) {
|
||||
$rows = array();
|
||||
}
|
||||
|
||||
foreach ($rows as $row) {
|
||||
$tablename = $row["tablename"];
|
||||
echo " * Removing database table $tablename...";
|
||||
|
||||
if (airtime_db_table_exists($tablename)){
|
||||
if (AirtimeInstall::DbTableExists($tablename)){
|
||||
$sql = "DROP TABLE $tablename CASCADE";
|
||||
airtime_install_query($sql, false);
|
||||
AirtimeInstall::InstallQuery($sql, false);
|
||||
|
||||
$CC_DBC->dropSequence($tablename."_id");
|
||||
}
|
||||
|
@ -75,7 +78,7 @@ if ($results == 0) {
|
|||
//------------------------------------------------------------------------
|
||||
// Delete files
|
||||
//------------------------------------------------------------------------
|
||||
airtime_uninstall_delete_files($CC_CONFIG['storageDir']);
|
||||
AirtimeInstall::DeleteFilesRecursive($CC_CONFIG['storageDir']);
|
||||
|
||||
|
||||
$command = "python ".__DIR__."/../pypo/install/pypo-uninstall.py";
|
||||
|
|
|
@ -17,13 +17,13 @@ if (isset($arr["DOCUMENT_ROOT"]) && ($arr["DOCUMENT_ROOT"] != "") ) {
|
|||
|
||||
require_once(dirname(__FILE__).'/installInit.php');
|
||||
|
||||
checkIfRoot();
|
||||
AirtimeInstall::ExitIfNotRoot();
|
||||
|
||||
echo "******************************** Update Begin *********************************".PHP_EOL;
|
||||
updateINIKeyValues('../build/build.properties', 'project.home', realpath(__dir__.'/../'));
|
||||
AirtimeInstall::UpdateIniValue('../build/build.properties', 'project.home', realpath(__dir__.'/../'));
|
||||
|
||||
echo PHP_EOL."*** Updating Database Tables ***".PHP_EOL;
|
||||
doctrineMigrateTables(__DIR__);
|
||||
AirtimeInstall::MigrateTables(__DIR__);
|
||||
|
||||
echo PHP_EOL."*** Updating Pypo ***".PHP_EOL;
|
||||
system("python ".__DIR__."/../pypo/install/pypo-install.py");
|
||||
|
|
|
@ -7,7 +7,9 @@ if (!function_exists('pg_connect')) {
|
|||
require_once(dirname(__FILE__).'/../library/pear/DB.php');
|
||||
require_once(dirname(__FILE__).'/../application/configs/conf.php');
|
||||
|
||||
function airtime_db_table_exists($p_name)
|
||||
class AirtimeInstall {
|
||||
|
||||
static function DbTableExists($p_name)
|
||||
{
|
||||
global $CC_DBC;
|
||||
$sql = "SELECT * FROM ".$p_name;
|
||||
|
@ -18,17 +20,7 @@ function airtime_db_table_exists($p_name)
|
|||
return true;
|
||||
}
|
||||
|
||||
function airtime_get_query($sql)
|
||||
{
|
||||
global $CC_DBC;
|
||||
$result = $CC_DBC->GetAll($sql);
|
||||
if (PEAR::isError($result)) {
|
||||
return array();
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function airtime_install_query($sql, $verbose = true)
|
||||
static function InstallQuery($sql, $verbose = true)
|
||||
{
|
||||
global $CC_DBC;
|
||||
$result = $CC_DBC->query($sql);
|
||||
|
@ -43,7 +35,8 @@ function airtime_install_query($sql, $verbose = true)
|
|||
}
|
||||
}
|
||||
|
||||
function airtime_db_connect($p_exitOnError = true) {
|
||||
static function DbConnect($p_exitOnError = true)
|
||||
{
|
||||
global $CC_DBC, $CC_CONFIG;
|
||||
$CC_DBC = DB::connect($CC_CONFIG['dsn'], TRUE);
|
||||
if (PEAR::isError($CC_DBC)) {
|
||||
|
@ -61,7 +54,8 @@ function airtime_db_connect($p_exitOnError = true) {
|
|||
}
|
||||
}
|
||||
|
||||
function install_setDirPermissions($filePath) {
|
||||
static function ChangeDirOwnerToWebserver($filePath)
|
||||
{
|
||||
global $CC_CONFIG;
|
||||
$success = chgrp($filePath, $CC_CONFIG["webServerUser"]);
|
||||
$fileperms=@fileperms($filePath);
|
||||
|
@ -70,7 +64,7 @@ function install_setDirPermissions($filePath) {
|
|||
chmod($filePath, $fileperms);
|
||||
}
|
||||
|
||||
function rand_string($len=20, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
|
||||
private static function GenerateRandomString($len=20, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
|
||||
{
|
||||
$string = '';
|
||||
for ($i = 0; $i < $len; $i++)
|
||||
|
@ -81,14 +75,15 @@ function rand_string($len=20, $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789')
|
|||
return $string;
|
||||
}
|
||||
|
||||
function createAPIKey(){
|
||||
|
||||
$api_key = rand_string();
|
||||
updateINIKeyValues(__DIR__.'/../build/airtime.conf', 'api_key', $api_key);
|
||||
updateINIKeyValues(__DIR__.'/../pypo/config.cfg', 'api_key', "'$api_key'");
|
||||
public static function CreateApiKey()
|
||||
{
|
||||
$api_key = AirtimeInstall::GenerateRandomString();
|
||||
AirtimeInstall::UpdateIniValue(__DIR__.'/../build/airtime.conf', 'api_key', $api_key);
|
||||
AirtimeInstall::UpdateIniValue(__DIR__.'/../pypo/config.cfg', 'api_key', "'$api_key'");
|
||||
}
|
||||
|
||||
function checkIfRoot(){
|
||||
public static function ExitIfNotRoot()
|
||||
{
|
||||
// Need to check that we are superuser before running this.
|
||||
if(exec("whoami") != "root"){
|
||||
echo "Must be root user.\n";
|
||||
|
@ -96,7 +91,8 @@ function checkIfRoot(){
|
|||
}
|
||||
}
|
||||
|
||||
function updateINIKeyValues($filename, $property, $value){
|
||||
public static function UpdateIniValue($filename, $property, $value)
|
||||
{
|
||||
$lines = file($filename);
|
||||
$n=count($lines);
|
||||
for ($i=0; $i<$n; $i++) {
|
||||
|
@ -113,7 +109,8 @@ function updateINIKeyValues($filename, $property, $value){
|
|||
fclose($fp);
|
||||
}
|
||||
|
||||
function storageDirectorySetup($CC_CONFIG){
|
||||
public static function SetupStorageDirectory($CC_CONFIG)
|
||||
{
|
||||
global $CC_CONFIG, $CC_DBC;
|
||||
|
||||
echo PHP_EOL."*** Directory Setup ***".PHP_EOL;
|
||||
|
@ -138,7 +135,8 @@ function storageDirectorySetup($CC_CONFIG){
|
|||
}
|
||||
}
|
||||
|
||||
function createAirtimeDatabaseUser(){
|
||||
public static function CreateDatabaseUser()
|
||||
{
|
||||
global $CC_CONFIG;
|
||||
// Create the database user
|
||||
$command = "sudo -u postgres psql postgres --command \"CREATE USER {$CC_CONFIG['dsn']['username']} "
|
||||
|
@ -148,11 +146,12 @@ function createAirtimeDatabaseUser(){
|
|||
if ($results == 0) {
|
||||
echo "* User {$CC_CONFIG['dsn']['username']} created.".PHP_EOL;
|
||||
} else {
|
||||
echo "* User {$CC_CONFIG['dsn']['username']} already exists.".PHP_EOL;
|
||||
echo "* Could not create user {$CC_CONFIG['dsn']['username']}: $output".PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
function createAirtimeDatabase(){
|
||||
public static function CreateDatabase()
|
||||
{
|
||||
global $CC_CONFIG;
|
||||
|
||||
$command = "sudo -u postgres createdb {$CC_CONFIG['dsn']['database']} --owner {$CC_CONFIG['dsn']['username']} 2> /dev/null";
|
||||
|
@ -160,37 +159,41 @@ function createAirtimeDatabase(){
|
|||
if ($results == 0) {
|
||||
echo "* Database '{$CC_CONFIG['dsn']['database']}' created.".PHP_EOL;
|
||||
} else {
|
||||
echo "* Database '{$CC_CONFIG['dsn']['database']}' already exists.".PHP_EOL;
|
||||
echo "* Could not create database '{$CC_CONFIG['dsn']['database']}': $output".PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
function installPostgresScriptingLanguage(){
|
||||
public static function InstallPostgresScriptingLanguage()
|
||||
{
|
||||
global $CC_DBC;
|
||||
// Install postgres scripting language
|
||||
$langIsInstalled = $CC_DBC->GetOne('SELECT COUNT(*) FROM pg_language WHERE lanname = \'plpgsql\'');
|
||||
if ($langIsInstalled == '0') {
|
||||
echo "* Installing Postgres scripting language".PHP_EOL;
|
||||
$sql = "CREATE LANGUAGE 'plpgsql'";
|
||||
airtime_install_query($sql, false);
|
||||
AirtimeInstall::InstallQuery($sql, false);
|
||||
} else {
|
||||
echo "* Postgres scripting language already installed".PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function createAirtimeDatabaseTables(){
|
||||
public static function CreateDatabaseTables()
|
||||
{
|
||||
// Put Propel sql files in Database
|
||||
$command = __DIR__."/../library/propel/generator/bin/propel-gen ../build/ insert-sql 2>propel-error.log";
|
||||
@exec($command, $output, $results);
|
||||
}
|
||||
|
||||
function doctrineMigrateTables($dir){
|
||||
public static function MigrateTables($dir)
|
||||
{
|
||||
$command = "php $dir/../library/doctrine/migrations/doctrine-migrations.phar --configuration=$dir/DoctrineMigrations/migrations.xml --db-configuration=$dir/../library/doctrine/migrations/migrations-db.php --no-interaction migrations:migrate";
|
||||
system($command);
|
||||
}
|
||||
|
||||
function airtime_uninstall_delete_files($p_path)
|
||||
public static function DeleteFilesRecursive($p_path)
|
||||
{
|
||||
$command = "rm -rf $p_path";
|
||||
exec($command);
|
||||
}
|
||||
|
||||
}
|
|
@ -84,10 +84,10 @@ function airtime_empty_db($db) {
|
|||
global $CC_CONFIG;
|
||||
|
||||
if (!PEAR::isError($db)) {
|
||||
if (airtime_db_table_exists($CC_CONFIG['filesTable'])) {
|
||||
if (AirtimeInstall::DbTableExists($CC_CONFIG['filesTable'])) {
|
||||
echo " * Deleting from database table ".$CC_CONFIG['filesTable']."\n";
|
||||
$sql = "DELETE FROM ".$CC_CONFIG['filesTable'];
|
||||
airtime_install_query($sql, false);
|
||||
AirtimeInstall::InstallQuery($sql, false);
|
||||
}
|
||||
else {
|
||||
echo " * Skipping: database table ".$CC_CONFIG['filesTable']."\n";
|
||||
|
|
Loading…
Reference in New Issue