Fedora Core 5 - how to install everything

One of the big surprises in Fedora Core 5, was that the option to install everything on the CD's went away. And the Fedora crew says it is never going to come back, and for some reason they are downright huffy about it. (When I got on the Fedora forums and posted expressing my exasperation, inconvenience, and annoyance, I was told that the ability to install everything isn't coming back, they know what is best for me, and I better learn to like it....)

When I did my best effort to do a maximal install, I found that I did not have:

I was able to get wine easily via the new pirut dingus (ultimately a front end to yum). Getting ethereal of the CD's manually is nasty, so you may as well get it via yum, or do the exercise I describe later in this note.

Details will follow, but as it turns out, I have in my hands a set of 5 CD's, of which the maximum install for the most part just loads what is on the first two CD's. I just want a way to load the contents of all 5 CD's on my system, and I pretty much worked this out as you will discover if you read on.

I can't even begin to guess what they are thinking. There is some double talk about "everything" being a moving target, and so on. All I want is for the install to load whatever they ship on the set of install CD's. Now deciding what should be on those CD's is yet another thing. If there were only two install CD's (as there should be if they want to be logically consistent), then we could debate if that was really the right minimal set of packages.

These days disks are big and cheap, and it makes my life much simpler to just install everything including the kitchen sink, rather than going out to find packages as I discover I need them.

This is a particular nuisance when doing an install on an isolated machine (such as a friends machine with a slow dial up connection). My laptop still won't run a network given the out of the box package set. (I have 3 pcmcia network cards, one a 10/100 ne2000 clone, another is an Orinoco Gold wireless). All in all quite a disappointment.

Let's look at the install CD's

A little poking around with rpm -qa shows me that 1162 out of the 2185 packages on the install CD's were installed.

We know we can do better!!

Looks like we are on our own here, lets examine the CD's and see what we can do to rememdy this sad situation. What I did to inspect the contents of the CD's was:

mount -t iso9660 -o ro,loop=/dev/loop0 FC-5-i386-disc1.iso /mnt/test
ls /mnt/test/Fedora/RPMS >disc1.list

I did this for all 5 CD's and present the results to you here:

I also wrote a little ruby program to put all 5 lists together, sort the results and give you an index to what is on which CD, as well as marking the packages that were actually installed for me.

Of course if you have the whole mess on a DVD, this won't be quite as useful to you. It has already been useful to me, I can see that the f-spot RPM is on CD number 3, ethereal is on CD number 4.

The impression I am getting is that fedora now intends to rely in a far greater way upon yum, and you are expected to use yum to get additional things as you need them. If so this is bad. Anyway, why the heck are there 5 CD's then if the installer really only uses the first two?

Anyway, back to what is on the CD's the breakdown by architecture is:

i386  1797
noarch  375
i686  12
i586  1

Getting what we missed off the first two CD's

Let's see if we can force the issue and load all the packages on the CD's.

It turns out there are only 6 packages on CD number 1 that weren't loaded and these are kernel packages that I don't want (I got kernel-smp and that is just fine), so we can just skip CD-1.

On CD number 2 there are 3 trivial packages, but let's get them:

mount /dev/cdrom /mnt
cd /mnt/Fedora/RPMS
rpm -Uvh *.rpm

The above fails (craps out is the technical term) because rpm throws its hands in the air when it discovers some of the rpms are already installed. The following scheme works fine (proving that yum is smarter than rpm and can handle lumps of rpms on a disk just fine):

mount /dev/cdrom /mnt
cd /mnt/Fedora/RPMS
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
yum install *.rpm

The rpm -import line is a well kept secret that can be used to import the GPG keys necessary into the rpm database. Using yum install does poke around and check against repositories, and would use them to satisfy dependencies if needed, but ultimately it just loads the packages from the CD.

Ugly dependencies

Now I had hopes (now quite shattered), of being able to load rest of the CD's one by one using the above procedure. Simple me. First off this blows up because the rpm program kicks a fit the first time it finds an rpm that is already installed. We could get around this via a clever script that used rpm -qa to discover and omit the already installed rpms (or just using yum install *.rpm) but that doesn't solve the dependency issues we soon run into. Good old ethereal reveals the first of these, heaven knows how many others there might be:

The ethereal-gnome RPM is on CD 3, and the ethereal RPM is on CD 4. Ethereal-gnome needs (depends on) ethereal. This means that any simple thing like rpm -Uvh *.rpm on all of the uninstalled RPM's on CD 3 is doomed to fail. That kind of thing will only work if you have all the RPM's together, perhaps on a DVD (probably the way they tested things). What I will do is copy all of the rpms onto my hard disk and then work from a full set to avoid this.

One way to force an everything install

The following little script was posted by a fellow named Ronald Cole on the fedora forums (see bugzilla bug 183871). While it doesn't work for me because I am using CD's which split the world into pieces, the approach it uses is interesting. It makes a list of what is installed and what is on the CD, and forms the difference (the stuff not installed), then feeds that big list to rpm, getting around the stupid behavior of rpm when given a list with some things already installed.
(
    cd /media/cdrecorder/Fedora/RPMS
    rpm -qa --queryformat "%{name}-%{version}-%{release}.%{arch}.rpm\n"
    ls *.rpm
) | sort | uniq -u >/tmp/$$
rpm -Uvh --nosignature $(< /tmp/$$)
rm -f /tmp/$$

When things no longer fit on a single DVD, something more clever will be needed.

Another way to force an everything install

What I did is to mount the CD's one by one and copy all the rpms on each into directories called disk1, disk2, ... Didn't I say disks are big and cheap these days? Then I used the following script to make a directory full of links to all the yet uninstalled rpm's
#!/usr/bin/ruby

# Find out what rpm's are already installed.
have = Array.new

`rpm -qa`.each { |l|
	have << l.chomp
}

(1..5).each { |d|
	dir = "../disk#{d}"
	Dir.foreach(dir) { |f|
		yy = f.split(".")

		base = yy[0..-3].join(".")

		if have.include?(base)
			print "Already installed: #{f}\n"
		else
			print "Need: #{f}\n"
			fdir = dir + "/" + f
			cmd = "ln -s #{fdir} #{f}"
			system( cmd )
		end
	}
}
After doing this in a directory all next to the disk1 ... directories, I do:
cd all ; rpm -Uvh *.rpm
There are some issues still. I take the lazy approach and just delete the offending packages, taking note of them, and expecting to either deal with them later or just forget them altogether:
rm cman*
rm dlm*
rm gnbd*
rm magma*
rm ccs*
rm rgmanager*
rm gulm*
Many of these seem related to cluster management, which I don't care about anyway (but you might). After this hand pruning, away it goes, loading 1002 packages.

I did this on another system that I had tinkered a bit with and had to also prune away some packages that I had updated to later versions:

rm kernel*
rm gkrellm*

On both systems I do get one warning

warning: adaptx-0.9.6-1jpp_3fc.1.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 4f2a6fd2
(but the adaptx package goes in anyway):

Do I need all of these packages? Certainly not! But I definitely need some of them, and this is by far the easiest way to get them. For example, I now have ethereal. I get f-spot (which the release notes got me excited about, but then was nowhere to be found after doing the install). I get the mono-devel stuff, which I will need later to build hugin. I get mailman, expect, and much much more.


Have any comments? Questions? Drop me a line!

Adventures in Computing / tom@mmto.org