File: //scripts.20110531.215904.25158/installpostgres
#!/usr/bin/perl
# cpanel - installpostgres Copyright(c) 2010 cPanel, Inc.
# All rights Reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cpanel license. Unauthorized copying is prohibited
BEGIN { unshift @INC, '/usr/local/cpanel'; }
use strict;
use Cpanel::SysPkgs ();
use Cpanel::Sys::OS ();
use Cpanel::Logger ();
use Cpanel::SafeRun::Simple ();
if ( -e "/etc/gentoo-release" ) {
my $syspkgobj = Cpanel::SysPkgs->new();
if ( !$syspkgobj ) { die print "Could not create SysPkgs object\n"; }
my @pkgs = ("postgresql");
$syspkgobj->install( 'pkglist' => \@pkgs );
print "You should now configure PostgreSQL from WHM!\n" x 4;
exit();
}
my $system = $^O;
if ( $system =~ /freebsd/i ) {
print "Please install PostgreSQL from ports\n";
print "If you are using bsd packages you can do this as well:\n\n";
print <<EOM;
/scripts/installpkg postgresql74-server
/scripts/installpkg postgresql74-client
/scripts/installpkg postgresql-server postgresql-client
echo postgresql_enable="YES" >> /etc/rc.conf
/usr/local/etc/rc.d/postgresql initdb
/usr/local/etc/rc.d/postgresql start
/scripts/makecpphp (freebsd 5.x+ only)
EOM
exit();
}
if ( -d "/root/.cpupdates" ) {
system("rm -f /root/.cpupdates/*");
}
print "This script will install PostgreSQL 7.3.x or later\n";
print "If you have an older version installed you wil need to\n";
print "Dump your databases to a file and then restore them\n";
print "after the install as 7.3.x is not backwards compatible.\n";
print "If you do not have any databases, you can just run:\n";
print " mv /var/lib/pgsql /var/lib/pgsql.old\n";
print " /sbin/service postgresql stop\n";
print " /sbin/service postgresql start\n";
print "to force creating a 7.3.x style setup. Do not do this if\n";
print "you have databases that you wish to keep!\n";
print "\n";
print "Are you sure you wish to proceed? ";
if ( $ARGV[0] !~ /\-\-yes/ ) {
my $res = <STDIN>;
if ( $res !~ /^y/i ) {
print "Bailing out!\n";
exit();
}
}
my $version = '';
my $ises = '';
if ( -e "/etc/redhat-release" ) {
( $version, $ises ) = Cpanel::Sys::OS::getversionfromfile('/etc/redhat-release');
}
my $syspkgobj = Cpanel::SysPkgs->new();
if ( !$syspkgobj ) { die print "Could not create SysPkgs object\n"; }
if ($ises) {
my @pkgs = ( "rh-postgresql", "rh-postgresql-devel", "rh-postgresql-libs", "rh-postgresql-server", "postgresql", "postgresql-devel", "postgresql-libs", "postgresql-server" );
$syspkgobj->install( 'pkglist' => \@pkgs );
}
else { # used --no-mirrors option previously as @pkgs[0] , not sure what it really did..
my @pkgs = ( "rh-postgresql", "rh-postgresql-devel", "rh-postgresql-libs", "rh-postgresql-server", "postgresql", "postgresql-devel", "postgresql-libs", "postgresql-server" );
$syspkgobj->install( 'pkglist' => \@pkgs );
}
if ( !-e "/etc/rc.d/init.d/postgresql" && -e "/etc/rc.d/init.d/rhdb" ) {
symlink( "rhdb", "/etc/rc.d/init.d/postgresql" );
}
#----------------------------------------------------------------------
my $logger = Cpanel::Logger->new();
if ( -x '/scripts/cpservice' ) {
# Stop old process and restart new one
Cpanel::SafeRun::Simple::saferun( '/scripts/cpservice', 'postgresql', 'stop' );
Cpanel::SafeRun::Simple::saferun( 'killall', '-TERM', 'postmaster' );
Cpanel::SafeRun::Simple::saferun( 'killall', '-9', 'postmaster' );
Cpanel::SafeRun::Simple::saferun( '/scripts/killall', '-9', 'postmaster' );
Cpanel::SafeRun::Simple::saferun( '/scripts/cpservice', 'postgresql', 'enable', '35' );
Cpanel::SafeRun::Simple::saferun( '/scripts/cpservice', 'postgresql', 'start' );
}
else {
$logger->warn("/scripts/cpservice is not available. Please check its status.");
}
#----------------------------------------------------------------------
print "Installing DBD::Pg\n";
fork_code(
{
wait => 1,
dots => 1,
code => sub {
sleep(2);
system( '/scripts/checkperlmodules', 'Bundle::DBD::Pg' );
},
}
);
print "You should now configure PostgreSQL from WHM!\n";
sub fork_code {
my ($args) = @_;
if ( ref( $args->{'code'} ) ne 'CODE' ) {
print 'Argument not a code ref' . "\n";
exit(1);
}
if ( ( exists $args->{'args'} ) && ( ref $args->{'args'} ne 'ARRAY' ) ) {
print 'args must be an array ref.' . "\n";
exit(1);
}
my $user = $args->{'user'} || '';
my $code = $args->{'code'};
my $wait = $args->{'wait'} ? 1 : 0;
my $dots = $args->{'dots'} ? 1 : 0;
my $stdout = $args->{'stdout'} ? $args->{'stdout'} : '/dev/null';
my @args = exists $args->{'args'} ? @{ $args->{'args'} } : ();
my ( $uid, $gid ) = ( getpwnam($user) )[ 2, 3 ];
my $pid;
if ( $pid = fork() ) {
my $dotcount = 5;
if ($wait) {
while ( waitpid( $pid, 1 ) != -1 ) {
if ( $dotcount % 5 == 0 ) {
print "\t" . ".........\n" if $dots;
}
sleep(1);
$dotcount++;
}
}
}
else {
if ( defined $uid && $< == 0 ) {
$< = int $uid;
$> = int $uid;
$( = int $gid;
$) = "$gid $gid";
}
open( STDIN, '<', '/dev/null' );
open( STDOUT, '>', $stdout );
open( STDERR, '>', '/dev/null' );
$code->(@args);
exit;
}
}