Diff for /loncom/build/check-rpms between versions 1.2 and 1.5

version 1.2, 2002/02/27 01:47:31 version 1.5, 2002/09/05 17:20:46
Line 1 Line 1
 #!/usr/bin/perl  #!/usr/bin/perl
 #  #
 # check-rpms, version 2.1.0  # check-rpms, version 2.1.1
 # Martin Siegert, SFU, siegert@sfu.ca, Feb 02  # Martin Siegert, SFU, siegert@sfu.ca, Feb 02
 #  #
   # documentation and minor patches,
   # Scott Harrison sharrison@users.sourceforge.net 2002
   
 =pod  =pod
   
 =head1 NAME  =head1 NAME
Line 87  use Getopt::Long; Line 90  use Getopt::Long;
   
 my $retval = &GetOptions("verbose|v","lm|list-missing","lq|list-questionable",  my $retval = &GetOptions("verbose|v","lm|list-missing","lq|list-questionable",
                          "dir|d=s","ftp:s","noftp","download|dl","recheck|r",                           "dir|d=s","ftp:s","noftp","download|dl","recheck|r",
                          "nk|no-kernel","update","c=s");                           "nk|no-kernel","update","c=s","rpmuser=s");
   
 =pod  =pod
   
Line 200  example configuration file is given belo Line 203  example configuration file is given belo
 is omitted, I<check-rpms> will use the default configuration  is omitted, I<check-rpms> will use the default configuration
 file I</usr/local/etc/check-rpms.conf>, if it exists.  file I</usr/local/etc/check-rpms.conf>, if it exists.
   
   =item B<--rpmuser> I<user name>
   
   Specifying $RPMUSER on the command line.
   
 =back  =back
   
 =head1 EXAMPLES  =head1 EXAMPLES
Line 294  Example configuration file: Line 301  Example configuration file:
   
  # $RPMUSER is the user name that check-rpms switches to for most of   # $RPMUSER is the user name that check-rpms switches to for most of
  # the script when run as root   # the script when run as root
  $RPMUSER = "joe";   $RPMUSER = "adminjoe";
   
  # $FTPSERVER and $FTPUPDATES are the hostname of a ftp server and the   # $FTPSERVER and $FTPUPDATES are the hostname of a ftp server and the
  # directory where RPM updates can be found without the <arch> directory.   # directory where RPM updates can be found without the <arch> directory.
Line 315  if ( -f $CONF) { Line 322  if ( -f $CONF) {
    $FTPUPDATES = $DEFFTPUPDATES;     $FTPUPDATES = $DEFFTPUPDATES;
 }  }
   
   if ($opt_rpmuser) {
      $DEFRPMUSER = $opt_rpmuser;
   }
   
 # check whether we are running as root  # check whether we are running as root
 if ($< == 0){  if ($< == 0){
    if (! $RPMUSER) {     if (! $RPMUSER) {
Line 371  if (defined $opt_ftp || $FTP) { Line 382  if (defined $opt_ftp || $FTP) {
   
    if ($download || $recheck) {     if ($download || $recheck) {
        if ( ! -d $RPMDIR) {         if ( ! -d $RPMDIR) {
           $retval = system("mkdir -p $RPMDIR; chmod 700 $RPMDIR");            if ($verbose) { print "Creating $RPMDIR ...\n"; }
             if ($< == 0) {
                $retval = system("su $RPMUSER -c \'mkdir -p $RPMDIR\'; chmod 700 $RPMDIR");
             } else {
                $retval = system("mkdir -p $RPMDIR; chmod 700 $RPMDIR");
             }
           if ($retval) { die "error: could not create $RPMDIR\n"; }            if ($retval) { die "error: could not create $RPMDIR\n"; }
       }        }
    }     }
Line 387  if (defined $opt_update || defined $opt_ Line 403  if (defined $opt_update || defined $opt_
     $no_kernel=1;      $no_kernel=1;
 }  }
   
 $PROC = `grep -i athlon /proc/cpuinfo`;  $PROC = `grep -i "athlon\|amd" /proc/cpuinfo`;
 if ( ! "$PROC" ) {  if ( ! "$PROC" ) {
     $PROC = `uname -m`;      $PROC = `uname -m`;
     chomp($PROC);      chomp($PROC);
Line 458  if ($ftp) { Line 474  if ($ftp) {
 $giveup = 0;  $giveup = 0;
 for (@templist) {  for (@templist) {
    ($rpm, $pkg, $pver, $arch) = m/(([^ ]*)-([^- ]+-[^-]+\.(\w+)\.rpm))/;     ($rpm, $pkg, $pver, $arch) = m/(([^ ]*)-([^- ]+-[^-]+\.(\w+)\.rpm))/;
      if (! defined $local_rpm{$pkg}) { next; }
    if ($remote_rpm{$pkg}) {     if ($remote_rpm{$pkg}) {
       # problem: there are several versions of the same package.        # problem: there are several versions of the same package.
       # this means that the package exists for different architectures        # this means that the package exists for different architectures
Line 540  for (@local_rpm_list) { Line 557  for (@local_rpm_list) {
             push(@q_updates, $rpm);              push(@q_updates, $rpm);
         } elsif ( $vcmp < 0 ) {          } elsif ( $vcmp < 0 ) {
             # local version is lower              # local version is lower
             if ( $qflag ) {              push(@updates, $rpm);
                push(@q_updates, $rpm);  
             } else {  
                push(@updates, $rpm);  
             }  
  }   }
     } elsif ($list_missing) {      } elsif ($list_missing) {
  print "Package '$pkg' missing from remote repository\n";   print "Package '$pkg' missing from remote repository\n";
Line 698  sub pkg_compare($$$) { Line 711  sub pkg_compare($$$) {
    }     }
    my $serial1 = `rpm -qp --queryformat '%{SERIAL}' $RPMDIR/$pkg1`;     my $serial1 = `rpm -qp --queryformat '%{SERIAL}' $RPMDIR/$pkg1`;
    my $serial2 = `rpm -qp --queryformat '%{SERIAL}' $RPMDIR/$pkg2`;     my $serial2 = `rpm -qp --queryformat '%{SERIAL}' $RPMDIR/$pkg2`;
    ($serial2 > $serial1) ? return 1 : return 0;     if ($serial2 > $serial1) {
         remove_pkg("$RPMDIR/$pkg1");
         return 1;
      } else {
         remove_pkg("$RPMDIR/$pkg2");
         return 0;
      }
   }
   
   sub remove_pkg($) {
      my ($pkg) = @_;
      if ($verbose) {
         print "Removing $pkg ...\n";
      }
      my $status = system("rm -f $pkg");
      if ($status) {
         printf STDERR "error: could not remove $pkg. You must remove this file before updating.\n";
         if ($update) { $giveup = 1; }
      }
 }  }
   
 sub mulpkg_msg($$$) {  sub mulpkg_msg($$$) {

Removed from v.1.2  
changed lines
  Added in v.1.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>