Arrghpm
Version 0.7
written by John Newbigin
Copyright © 2003 John Newbigin
jn@it.swin.edu.au

http://uranus.it.swin.edu.au/~jn/linux/arrghpm

Introduction

Arrghpm is a tool which aims to simplify the installation of errata on RPM based linux distributions, predominantly Red Hat Linux.  By simpler I mean simpler than the RedHat Network and RpmFind.

Motivation

I used to use rpmfind to find the patches for my machines.  I made some improvements so I could use a local http mirror of the patches.  The was acceptable though sometimes it would fail to download some rpms and sometimes it could not work out the correct installation order.  Rpmfind has now been abandoned so I thought it was about time to write my own tool which is designed to do what I want it to do.

Why not use apt, yum etc?

Arrghpm is build on the KISS principle.  All you need is a list of .rpm files.  No need to generate .hdr files.  It is written in c and does not use rpmlib but runs rpm directly.  This way there is heaps less library version problems and rpm still gets to do all of its normal checks. Arrghpm does not attempt to solve dependencies, nor is it designed to install new packages.  There is however a small amount of external dependency information you can add to aid in the installation of patches with new dependencies.

How do I pronounce arrghpm?

Like a pirate ;). Arrrrrrrr-pm!  Why a pirate?  Pirates often wear a patch.  Arrghpm can install a patch.

How does it work?

The first thing to do is find your local mirror of the updates for your OS.  I have many machines so I have an on site http mirror which is rsynced from a local mirror (aarnet).

You add the URL's of your mirror to the config file .arrghpm

update=http://mirror.aarnet.edu.au/pub/linux/redhat/updates/7.2/en/os/i686/
update=http://mirror.aarnet.edu.au/pub/linux/redhat/updates/7.2/en/os/i386/
update=http://mirror.aarnet.edu.au/pub/linux/redhat/updates/7.2/en/os/noarch/

When you run arrghpm it will create a list of your installed rpms by invoking rpm.  This list is called the current list.

Using http it will get a list of the available rpms, called the available list.

A third list of external dependencies can also be loaded.

It then compares the rpms using the following algorithm:

For each rpm in the available list

Is there an rpm with the same name & arch in current?
If no then continue (the package is not installed)

Is there an rpm with the same name, version, release & arch in current?
If yes then continue (the package is already installed)

Is the package in current with the same name and arch and older version?
If yes then continue (the patch has been superseded)

If the file does not exist locally then download it

Does the package pass a verification test?
If no then flag as an error (corrupt download or missing gpg key)

Are there more than 1 installed instances of this package?
If yes then set the install flag (as opposed to upgrade)

Does the package pass an install test?
If no then set the group flag. (it might have a co-dependency)

Some of the files in available are now flagged as Install, Upgrade or Group.

Install means that there are multiple copies of the package installed which we do not want to overwrite (such as the kernel)

Upgrade is a normal package

Group is all the packages which will not cleanly upgrade.  This is normally because there are packages with co-dependencies but sometimes there are missing dependencies or conflicts.

There is an added feature of a user interface written with newt which allows you to select which patches you want to install/upgrade/group or skip.

Download

Red Hat Linux 7.2
Red Hat Enterprise Linux 2.1AS
Red Hat Enterprise Linux 2.1ES
arrghpm-0.7-3.i386.rpm
Red Hat 9 arrghpm-0.7-3.i386.rpm

Last modified 20031016
Maintained by John Newbigin http://uranus.it.swin.edu.au/~jn