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>