Annotation of loncom/build/kirs.pl, revision 1.1

1.1     ! harris41    1: #!/usr/bin/perl
        !             2: #
        !             3: # kirs.pl
        !             4: # 
        !             5: # RPM installation.  Keeping It Ridiculously Simple.
        !             6: 
        !             7: # YEAR=2001
        !             8: # 10/1 Scott Harrison
        !             9: 
        !            10: # Brief essay:
        !            11: #
        !            12: # This program automates what SHOULD be automated
        !            13: # in an RPM upgrade process.  That is to say, it
        !            14: # automatically tells the system administrator
        !            15: # what should be updated.  In addition to a streaming
        !            16: # terminal output, it creates two files:
        !            17: # updatenow.txt - a list of rpms that should upgrade
        !            18: #                  on the system with no problems
        !            19: # updateproblems.txt - a list of rpms with potential upgrade
        !            20: #                       problems such as dependencies and/or
        !            21: #                       file conflicts
        !            22: #
        !            23: # What this program does not do, is make the decisions based
        !            24: # on dependencies, file conflicts, or even the decision to
        !            25: # update an RPM.
        !            26: #
        !            27: # Why?  Because in my experience, the implementation of rpm
        !            28: # information is often buggy, the actual rpm information is often
        !            29: # buggy, and taking care of exceptional cases (such as kernel
        !            30: # rpm's) is buggy.  And, in principle, I view it as serious
        !            31: # business when it comes to keeping a server in a well-defined
        !            32: # state that is not screwed up by unknown bugs.
        !            33: #
        !            34: # Usage, can be non-root: perl kirs.pl
        !            35: #
        !            36: # As befits the name, a very simple invocation.
        !            37: #
        !            38: # After running the program, as root, the administrator
        !            39: # can:
        !            40: #
        !            41: # cat updatenow.txt | xargs rpm -Uvh 
        !            42: # and then
        !            43: # look at the contents of updateproblems.txt in an editor
        !            44: # and make appropriate decisions
        !            45: #
        !            46: # This program relies on the following executables
        !            47: # to be in the path: cat, grep, rpm
        !            48: #
        !            49: # And for the bad attributes of this program:
        !            50: # * It downloads the ENTIRE i386 update RPM directory
        !            51: #   (specific to the redhat release)
        !            52: # * It is hardcoded to use 
        !            53: #   ftp://mirror.pa.msu.edu/linux/redhat/linux/updates/RELEASENUM/en/os/i386/
        !            54: #   where RELEASENUM is 6.2, 7.1, etc
        !            55: # * It creates a lot of files in the current directory in which it
        !            56: #   resides (basically all the update *.rpm's)
        !            57: #
        !            58: # WARNING
        !            59: # THIS PROGRAM IS PROVIDED "AS IS" WITHOUT
        !            60: # WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLICIT.
        !            61: # IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
        !            62: # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            63: # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            64: # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            65: # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            66: # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            67: # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            68: # SUCH DAMAGE.
        !            69: 
        !            70: my $issue=`cat /etc/issue`;
        !            71: $issue=~/Linux release (\S+)/;
        !            72: my $releasenum=$1;
        !            73: print "Detecting a RedHat version $releasenum system\n";
        !            74: 
        !            75: open NOW,">updatenow.txt";
        !            76: open PROBLEMS,">updateproblems.txt";
        !            77: 
        !            78: my $ftpbase="ftp://mirror.pa.msu.edu/linux/redhat/linux/updates/";
        !            79: 
        !            80: $|=1;
        !            81: print "Downloading update repository...$ftpbase...\n";
        !            82: system('wget','-q',
        !            83:        "$ftpbase$releasenum/en/os/i386/*.rpm");
        !            84: die "bad ftp connection" if $?;
        !            85: print "Finished downloading\n";
        !            86: 
        !            87: my @list=`rpm -qp *.rpm --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm\t%{NAME}\t%{VERSION}-%{RELEASE}\n"`;
        !            88: 
        !            89: for (@list) {
        !            90:     chop;
        !            91:     next if /^kernel/;
        !            92:     my ($file,$name,$version)=split(/\t/);
        !            93:     my $currentversion=`rpm -q $name --queryformat="\%{VERSION}-%{RELEASE}"`;
        !            94:     if ($currentversion!~/is not installed/) {
        !            95: 	if ($version ne $currentversion) {
        !            96: 	    print "$name compare $currentversion to $version\n";
        !            97: 	    my $status=`rpm -Uvh --test $file 2>&1| grep -v ^Preparing`;
        !            98: 	    system("rpm -Uvh --test $file 1>/dev/null");
        !            99: 	    if ($?) {
        !           100: 		print PROBLEMS "$file\n$status";
        !           101: 	    }
        !           102: 	    else {
        !           103: 		print NOW "$file\n";
        !           104: 	    }
        !           105: 	    print $status;
        !           106: 	}
        !           107:     }
        !           108: }
        !           109: close PROBLEMS;
        !           110: close NOW;
        !           111: 
        !           112: print <<END;
        !           113: # The program has completed.  As root, the administrator
        !           114: # can now:
        !           115: #
        !           116: # cat updatenow.txt | xargs rpm -Uvh 
        !           117: # and then
        !           118: # look at the contents of updateproblems.txt in an editor
        !           119: # and make appropriate decisions
        !           120: END

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