MOON
Server: Apache/2.2.31 (Unix) mod_ssl/2.2.31 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
System: Linux csr818.wilogic.com 2.6.18-419.el5xen #1 SMP Fri Feb 24 22:50:37 UTC 2017 x86_64
User: digitals (531)
PHP: 5.4.45
Disabled: NONE
Upload Files
File: //scripts.20110531.215904.25158/bandminup
#!/usr/bin/perl
# cpanel - bandminup                              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', '/scripts'; }

my $pkg = 'bandmin';

use strict;
use warnings;
use Cpanel::Hostname        ();
use Cpanel::Sys::OS         ();
use Cpanel::RpmStor         ();
use Cpanel::HttpRequest     ();
use Cpanel::SafeRun::Errors ();
use Cpanel::RpmUtils        ();
use Cpanel::SysPkgs         ();
use Cpanel::Update          ();
use cPpkgversions           ();
use IPC::Open3              ();

Cpanel::Update::safe_update_environment($pkg);
Cpanel::Update::init_UP_update($pkg);

my $now      = time;
my $hostname = Cpanel::Hostname::gethostname();
my $distro   = Cpanel::Sys::OS::getos();
my ( $version, $ises ) = Cpanel::Sys::OS::getreleaseversion($distro);

my $httpClient = Cpanel::HttpRequest->new( 'hideOutput' => 0 );

print "$pkg Setup Script Version 1.0\n";

my $latest = 0;
my $src    = 0;
my $force  = 0;

if ( grep( /force/,  @ARGV ) ) { $force  = 1; }
if ( grep( /source/, @ARGV ) ) { $src    = 1; }
if ( grep( /latest/, @ARGV ) ) { $latest = 1; }

my $basedir = $pkg;
my $xdir    = '';

if ( $distro eq 'freebsd' ) {
    print "Bandmin is currently not supported on FreeBSD\n";
    exit; # ? or do we want exit(1); ?
}

my %VINFO    = cPpkgversions::getpkgversioninfo($pkg);
my $buildnum = $VINFO{$pkg}{'release'};
my $pkgver   = $VINFO{$pkg}{'version'};
my $bsv      = $VINFO{$pkg}{'flags'};
my $arch     = 'noarch';

if ( $ises == 1 ) {
    $version = 'AS-' . $version;
}

my $cver = Cpanel::SafeRun::Errors::saferunnoerror( 'rpm', '-q', $pkg );
chomp $cver;

print "This is the $pkg $pkgver installer release number ${buildnum} for platform ${distro} ${version}\n";

if ( $cver eq "${pkg}-${pkgver}-${buildnum}_${bsv}" && !$force ) {
    print "$pkg is up to date.  Use ${pkg}up --force to force a reinstall\n";
    exit;
}

if ( -x "/scripts/pre${pkg}install" ) {
    system("/scripts/pre${pkg}install");
}

mkdir( "/home/${pkg}-install", 0700 );
chdir("/home/${pkg}-install");

my $url  = "http://diff.cpanel.net/${basedir}install/${pkgver}-${buildnum}${xdir}/${distro}/${version}/${pkg}-${pkgver}-${buildnum}_${bsv}.${arch}.rpm";
my @SLA  = split( /\//, $url );
my $file = $SLA[$#SLA];

die "File is not valid" if !$file;

if ( !$src ) {
    if ( !-e $file || ( stat(_) )[7] <= 0 ) {
        $httpClient->download( $url, $file );
    }
    if ( ( stat($file) )[7] <= 0 || !Cpanel::RpmUtils::checkrpm($file) ) {
        print "Failed to download $url .. using source instead\n";
        $latest = 1;
        $src    = 1;
    }
}
else {
    $file = buildrpm( $pkg, "http://diff.cpanel.net/${basedir}install/${pkgver}-${buildnum}${xdir}/src/${pkg}-${pkgver}-${buildnum}_${bsv}.src.rpm" );
    if ( $file eq '' ) {
        die 'Rpm failed to build!';
    }
}

if ( ( stat($file) )[7] <= 0 ) {
    $file = buildrpm( $pkg, "http://diff.cpanel.net/${basedir}install/${pkgver}-${buildnum}${xdir}/src/${pkg}-${pkgver}-${buildnum}_${bsv}.src.rpm" );
}

if ( ( stat($file) )[7] <= 0 ) {
    die "Failed to download or build rpm from $url ($file)";
}

if ( !Cpanel::RpmUtils::checkrpm($file) ) {
    die "$file is not a valid rpm file";
}

$ENV{'RPMINSTALL'} = 1;
Cpanel::RpmUtils::rpmpreinstall($file);
system 'rpm', '-Uvh', '--nodeps', '--force', $file;
$ENV{'RPMINSTALL'} = 0;
chdir '/';
system 'rm', '-rf', "/home/${pkg}-install";

if ( -x "/scripts/post${pkg}install" ) {
    system("/scripts/post${pkg}install");
}

print "Install Complete\n";

sub buildrpm {
    my $pkg = shift;
    my $url = shift;

    my $syspkgobj = Cpanel::SysPkgs->new();
    if ( !$syspkgobj ) { die print "Could not create SysPkgs object\n"; }
    my @pkgs = ( 'rpm', 'rpm-build', 'db-devel', 'gdbm-devel', 'db1-devel', 'db4-devel', 'compat-db', 'ndbm-devel', 'pam-devel', 'openssl-devel', 'gcc', 'glibc-devel' );
    $syspkgobj->install( 'pkglist' => \@pkgs );

    my $rpm = 'rpm';
    if ( -e '/usr/bin/rpmbuild' ) { $rpm = '/usr/bin/rpmbuild'; }

    $httpClient->download( $url, $pkg . '.src.rpm' );

    if ( !Cpanel::RpmUtils::checkrpm($file) ) {
        die "failed to download $url";
    }

    open( RNULL, '<', '/dev/null' );
    print 'Building RPM...';
    open( RPM, '>', 'rpmbuildlog' );
    my $pid = IPC::Open3::open3( '<&RNULL', '>&RPM', '>&RPM', $rpm, '--rebuild', $pkg . '.src.rpm' );
    while ( waitpid( $pid, 1 ) <= 0 ) {
        print '.';
        sleep(1);
    }
    close(RPM);
    close(RNULL);
    print "Done\n";

    open( RPM, '<', 'rpmbuildlog' );
    while (<RPM>) {
        if (/^Wrote: (\S+)/) {
            $file = $1;
            if ( $file =~ /.(noarch|64|86)\.rpm/ ) {
                Cpanel::RpmStor::rpmstor($file);

                return ($file);
            }
        }
    }
    close(RPM);

    open( RPM, '<', 'rpmbuildlog' );
    seek( RPM, -2048, 2 );
    while (<RPM>) {
        print "\t" . $_;
    }
    close(RPM);

    die 'Failed to build rpm';
}