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/rpmup2
#!/usr/bin/perl
# cpanel - rpmup2                                 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, '/scripts', '/usr/local/cpanel';
    if ( -e '/var/cpanel/brokenfutex' ) {
        $ENV{'LD_ASSUME_KERNEL'} = '2.4.1';
    }
}

use strict;
use Cpanel::Config  ();
use Cpanel::Sys::OS ();
use Cpanel::OSSys   ();

my $system = Cpanel::OSSys::get_system();
exit if $system eq 'freebsd';

my %UPCONF = Cpanel::Config::loadConfig('/etc/cpupdate.conf');
exit if $UPCONF{'RPMUP'} eq 'never';

my $distro = Cpanel::Sys::OS::getos();

if ( $distro eq 'mandrake' ) {
    require Cpanel::SysPkgs;
    my $syspkgobj = Cpanel::SysPkgs->new();
    if ( !$syspkgobj ) { die print "Could not create SysPkgs object\n"; }
    $syspkgobj->update();
}
elsif ( -e '/var/cpanel/useyum' ) {
    system '/scripts/checkyum', '--kernel';
    system 'yum', '-y', 'update';
    exec '/scripts/checkyum', '--nokernel';
    die "Failed to update /etc/yum.conf";
}
elsif ( -e '/var/cpanel/useapt' ) {
    $ENV{'DEBIAN_FRONTEND'}  = 'noninteractive';
    $ENV{'DEBCONF_FRONTEND'} = 'noninteractive';
    exec 'apt-get', '-y', 'upgrade';
}
elsif ( -e '/var/cpanel/useup2date' ) {
    exec 'up2date', '--nox', '-u';
}
elsif ( -e '/var/cpanel/useswup' ) {
    exec '/usr/bin/swup', '--upgrade';
}
elsif ( -e '/var/cpanel/userug' ) {
    exec '/usr/bin/rug', '-y', 'update';
}
elsif ( -e '/var/cpanel/useemerge' ) {
    exec '/usr/bin/emerge', '-uk', 'world';
}
else {

    # Using Legacy RPM update methods
    my $version = Cpanel::Sys::OS::getreleaseversion();    # This will die on unsupported distros

    require cPanelRPM;

    my $rpm = cPanelRPM->new;

    my @IGNORERPMS = ( 'wu-ftpd', 'perl', 'k_', 'kernel', 'httpd', 'apache', 'php', 'exim', 'proftpd', 'MySQL', 'webmin', 'postfix', 'libmysql', 'mrtg' );
    my @POSTUP;

    my $arch = 'x86';                                        #we only support x86 right now

    if ( -e '/proc/vz/veinfo' ) {
        push( @IGNORERPMS, 'quota' );
        my $quotarpm = `rpm -q quota`;
        if ( $quotarpm !~ m/swsoft/ && $quotarpm !~ m/sw-soft/ && $quotarpm !~ m/zzo/ ) {
            require Cpanel::RpmUtils;
            Cpanel::RpmUtils::rpmcmd( '-Uvh', '--force', "http://httpupdate.cpanel.net/vzzo-rpms/${distro}/${version}/quota.rpm" );
        }
    }

    my %INSTALLED = $rpm->installedlist();

    my $priarch = `rpm -q glibc --qf "%{ARCH}"`;
    chomp $priarch;

    if ( !$priarch ) {
        die "Unable to determine ARCH from glibc rpm!";
    }
    print 'Fetching rpmup update list....';

    my @TUPDATES = Chttpreq( $arch, 'httpupdate.cpanel.net', "/pub/rpmup/$distro/$version/$arch/updates.db" );

    my @NOARCHUPDATES = Chttpreq( 'noarch', 'httpupdate.cpanel.net', "/pub/rpmup/$distro/$version/noarch/updates.db" );

    foreach (@NOARCHUPDATES) {
        push( @TUPDATES, $_ );
    }

    my $parch;
    my @PUPDATES;
    my @UPDATES;

    if ( $priarch eq 'i586' ) {
        $parch = '586';
        @PUPDATES = Chttpreq( '586', 'httpupdate.cpanel.net', "/pub/rpmup/$distro/$version/586/updates.db" );
    }
    elsif ( $priarch eq 'i686' ) {
        $parch = '686';
        @PUPDATES = Chttpreq( '686', 'httpupdate.cpanel.net', "/pub/rpmup/$distro/$version/686/updates.db" );
    }

    print "Done\n";

    my ($rpmrpm) = '';
    foreach my $tupdate (@TUPDATES) {
        my ( $tname, $trpmv, $tfile, undef, $trpmbuilddate ) = split( /=/, $tupdate, 5 );
        my $hasopt = 0;
        foreach my $pupdate (@PUPDATES) {
            my ( $pname, $prpmv, $pfile, undef, $prpmbuilddate ) = split( /=/, $pupdate, 5 );
            if ( $pname eq $tname ) {

                #add optimzed update
                $pupdate =~ s/\n//g;
                $pupdate .= "=${parch}";
                if ( $pname eq 'rpm' ) { $rpmrpm = $pupdate; }
                else {
                    push( @UPDATES, $pupdate );
                }
                $hasopt = 1;
            }
        }
        if ( !$hasopt ) {

            #add standard update
            if ( $tname eq 'rpm' ) {
                $rpmrpm = $tupdate;
            }
            else {
                push( @UPDATES, $tupdate );
            }
        }
    }

    if ( $rpmrpm ne '' ) {
        unshift( @UPDATES, $rpmrpm );
    }

    my (@TRUEUPDATES);

    foreach (@UPDATES) {
        if (/^glibc=/) { push( @TRUEUPDATES, $_ ); }
    }
    foreach (@UPDATES) {
        if ( !/^glibc=/ ) { push( @TRUEUPDATES, $_ ); }
    }
    undef @UPDATES;

    foreach (@TRUEUPDATES) {
        s/\n//g;
        my ( $name, $rpmv, $file, undef, $rpmbuilddate, $installarch ) = split( /=/, $_, 6 );

        if ( $ARGV[0] ne '' ) {
            if ( $name ne $ARGV[0] ) {
                next;
            }
        }

        my $crpmv = $INSTALLED{$name};
        if ( $crpmv eq '' ) { $crpmv = 'not installed'; }

        my $ignore = 0;
        foreach my $ignorerpms (@IGNORERPMS) {
            if ( $name =~ /^${ignorerpms}/ ) {
                $ignore = 1;
            }
        }
        if ( $crpmv =~ /^bind/ && $crpmv =~ /LARGEFD/ ) {
            $ignore = 1;
        }
        if ( $crpmv =~ /^bind/ && $crpmv =~ /NOCAP/ ) {
            $ignore = 1;
        }
        if ($ignore) {
            print "Ignoring $name\n";
            next;
        }
        if ( $crpmv =~ /not installed/ ) {

            #print "Skipping $name, not installed\n";
            next;
        }
        my @CRPMS = split( /\n/, $crpmv );
        my $up2date = 0;
        foreach my $rpml (@CRPMS) {
            if ( $rpml eq $rpmv ) { $up2date = 1; }
        }
        if ( !$up2date ) {
            foreach my $rpml (@CRPMS) {
                my ($wants)     = $rpmv;
                my ($has)       = $rpml;
                my ($regexname) = $name;
                $regexname =~ s/\+/\\\+/g;
                $wants     =~ s/^${regexname}-//g;
                $has       =~ s/^${regexname}-//g;

                my $compareopt = cPanelRPM::compareversion( $wants, $has );
                if ( $compareopt >= 0 ) { $up2date = 1; }
            }
        }
        if ( !$up2date ) {
            my $builddate = `rpm -q --qf "%{BUILDTIME}" $name 2>/dev/null`;
            $builddate =~ /^(\d+)$/;
            $builddate = $1;
            if ( $builddate > 0 ) {
                if ( $builddate > $rpmbuilddate ) {
                    $up2date = 1;
                }
            }
        }
        if ($up2date) {
            print "$name is up to date\n";
        }
        else {
            print "Updating $name\n";
            $rpm->install($name);
        }
    }
}

sub getmd5sum {
    my ($file) = @_;
    my ($md5);
    open( MD5, "-|" ) || exec 'md5sum', $file;
    while (<MD5>) {
        chomp();
        ( $md5, undef ) = split( /\s+/, $_ );
        last();
    }
    close(MD5);
    return ($md5);
}

sub Chttpreq {
    my ( $cf, $host, $url ) = @_;

    my $dest = "/root/.cpupdates/rpmup.${cf}.db";

    if ( -e $dest && ( ( stat($dest) )[9] + 360 ) > time() ) {
        print "\n\tcached ${cf} database: ok (new)\n";
    }
    else {
        my $localmd5sum;
        if ( -e $dest ) {
            $localmd5sum = getmd5sum("/root/.cpupdates/rpmup.${cf}.db");
        }

        my $md5sum = cPanelRPM::httpreq( $host, $url . ".md5" );
        if ( $md5sum ne $localmd5sum ) {
            cPanelRPM::httpreq( $host, $url . ".gz", $dest . ".gz" );
            if ( -e $dest . ".gz" ) {
                system( "gzip", "-d", "-f", $dest . ".gz" );
            }
        }
        else {
            print "\n\tcached ${cf} database: ok\n";
        }
    }

    open( DDF, "<", $dest );
    my @DDFC = <DDF>;
    close(DDF);

    return @DDFC;
}