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.
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
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
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.