Using apt + rpm package to perform automatic updates of RH9 Linux
"apt" is a package to update linux automatically. "apt" is a Debian tool, but
it was also adaped to run with RedHat RPM files.
0) read first:
http://bazar.conectiva.com.br/~godoy/apt-howto/index.html
which is a HOWTO for apt and RedHat RPMs. (local copy is
here.
1) got binary RPMs of apt for RedHat 9 from the TuxFamily.org site
(http://apt-rpm.tuxfamily.org/scripts/apt-rpm.html), namely:
ftp://apt-rpm.tuxfamily.org/apt/redhat/9/en/i386/RPMS.extra/. Local copy is here.
At the time of this writing they were:
apt-0.5.5cnc5-fr2.i386.rpm 852 Kb Wed Apr 16 10:11:00 2003
apt-devel-0.5.5cnc5-fr2.i386.rpm 515 Kb Wed Apr 16 10:13:00 2003
and saved them under /root/apt directory
2) I Installed apt on the system:
cd /root/apt
rpm -Uhv *.rpm
3) It comes with the config file which tells it where to find updates.
I looked at /etc/apt/sources.list and considered adding there:
rpm http://mirror.usu.edu/mirrors/apt redhat/9/en/i386 os updates extra
rpm-src http://mirror.usu.edu/mirrors/apt redhat/9/en/i386 os updates extra
as the pointer to the update site. But ended up commenting these lines out
and keepintg the pointer to the original site given in the file, i.e.,:
# Red Hat Linux 9
rpm http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms
rpm-src http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms
since it up-to-date. Whatever you do keep only one site uncommented.
The original site for updates, which was suggested in the docs
(http://apt-rpm.tuxfamily.org/scripts/apt-rpm.html):
rpm ftp://apt-rpm.tuxfamily.org/apt redhat/9/en/i386 os updates extra
rpm-src ftp://apt-rpm.tuxfamily.org/apt redhat/9/en/i386 os updates extra
is unfortunately quite stale.
4) Then I ran the apt-get tool.
In this case, I started with the original RH9 distribution and it was
Aug. 22, 2003 and the processor was Pentium III.
apt-get update (run twice -- they say it is safer to run it twice...)
apt-get check
apt-get upgrade (it takes a while)
The "apt-get" will not upgrade kernel. This you need to do yourself
manually (later in this writeup).
The small problem is that the "apt" will upgrade all packages as if they
were for the i386 architecture. While 99% of packages are compiled for the
i386 (since they would not benefit in any substantial way from the extended
instruction set), some packages are specifically compiled for Pentium or
Athlon for efficiency. Of course, you most likely have Pentium or Athlon,
and you need to install these few CPU architecture specific RPMs by hand.
They will work much more efficient and use the extended instruction set of
the newer processors compared to the ancient 80386 which did not even have
the floating point operations integrated within CPU (Remember? you had to
use the "math coprocessor"). To find out what processor you have, do:
cat /proc/cpuinfo | grep model
If it says
model name : AMD Athlon(tm) Processor
you have "athlon" CPU. If it tells you something like:
model name : Pentium 75 - 200
you have an i586 CPU. And ft it tells you
model name : Pentium II
or
model name : Pentium III
or
model name : Pentium IV
you have the i686 cpu. If you get something else, you probably do not
have the Pentium compatible CPU. In this case, list all of /proc/cpuinfo
cat /proc/cpuinfo | more and see what you have.
Once you find the type of the CPU architecture, you need to get
specific RPM packages for this architecture and install them manually.
Note that the automatic update WILL install the latest i386 version
of each package. The packages for newer architectures need to be
installed in such a way that they "overwrite" the current i386 versions.
To get a list of sites which carry updates for Red Hat linux go to:
http://www.redhat.com/mirrors.html and get a site
nearby for speed. Also check if it really carries the latest RPMs by
checking a few site and dates on files. Some site are quite slow in
keeping their updates fresh. I personally use the
ftp://linux.nssl.noaa.gov/pub/linux/redhat/linux/updates/
but your best site should be close to you. In my case, beside the
kernel, I found the following packages which need to be updated:
glibc-2.3.2-27.9.i686.rpm 4763 Kb Wed Apr 9 16:13:00 2003
nptl-devel-2.3.2-27.9.i686.rpm 809 Kb Wed Apr 9 16:14:00 2003
openssl-0.9.7a-5.i686.rpm 1095 Kb Sat Mar 29 01:30:00 2003
I uploaded the to /tmp directory
cd /tmp
wget ftp://linux.nssl.noaa.gov/pub/linux/redhat/linux/updates/9/en/os/i686/glibc-2.3.2-27.9.i686.rpm
wget ftp://linux.nssl.noaa.gov/pub/linux/redhat/linux/updates/9/en/os/i686/nptl-devel-2.3.2-27.9.i686.rpm
wget ftp://linux.nssl.noaa.gov/pub/linux/redhat/linux/updates/9/en/os/i686/openssl-0.9.7a-5.i686.rpm
and then did:
cd /tmp
rpm --force -Uhv glibc-2.3.2-27.9.i686.rpm
rpm --force -Uhv nptl-devel-2.3.2-27.9.i686.rpm
rpm --force -Uhv openssl-0.9.7a-5.i686.rpm
and rebooted the machine just in case.
5) As mentioned before, the ftp://apt-rpm.tuxfamily.org update repository is
quite dated, and you should not put it in /etc/apt/sources.list.
Beside the ones listed by default in /etc/apt/sources.list there
are also other, quite up-to-date, repositories:
rpm http://mirror.usu.edu/mirrors/apt redhat/9/en/i386 os updates extra
rpm-src http://mirror.usu.edu/mirrors/apt redhat/9/en/i386 os updates extra
or at http://ftp.silug.org/pub/apt/redhat/9/en/, namely:
rpm http://ftp.silug.org/pub/apt redhat/9/en/i386 os updates extra
rpm-src http://ftp.silug.org/pub/ap redhat/9/en/i386 os updates extra
6) Updating kernel.
The apt thing does not update kernel, and for a good reason. This
requires manual operations and reconfiguration of the boot loader.
Read the chapter 30 of the " Red Hat Linux Customization Guide"
(e.g., at:
http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/custom-guide/).
In my case, I did the following:
a) checked what kernel is actually installed and which pieces are there:
rpm -qa | grep kernel
In my case, the kernel related packages were:
kernel-pcmcia-cs-3.1.31-13
kernel-source-2.4.20-8
kernel-utils-2.4-8.29
kernel-doc-2.4.20-8
kernel-2.4.20-8
(note that I even had the kernel-pcmcia package installed, though I do
not need it, since it is not a laptop computer. It was installed since
I chose Custom/Everything during installation. Once installed I need
to upgrade it or delete it -- I decided to upgrade).
b) Get the latest kernel packages from Red Hat update sites as described
above. Get only the packages which are already installed, There
are many specialty kernels (like big memory support or SMP support)
and if you do not see them installed on your system, do not take
the upgrades for those.
Note that most of the kernel related packages are in the i386
directory. Only the kernel itself is in the corresponding advanced
CPU architecture directory (in my case, the i686).
Get them to some convenient directory. In my case I had put them
to /tmp/kernel directory:
mkdir /tmp/kernel
cd /tmp/kernel
wget ftp://linux.nssl.noaa.gov/pub/linux/redhat/linux/updates/9/en/os/i686/kernel-2.4.20-20.9.i686.rpm
wget ftp://linux.nssl.noaa.gov/pub/linux/redhat/linux/updates/9/en/os/i386/kernel-source-2.4.20-20.9.i386.rpm
wget ftp://linux.nssl.noaa.gov/pub/linux/redhat/linux/updates/9/en/os/i386/kernel-doc-2.4.20-20.9.i386.rpm
Note that not all kernel components which are installed on your
system are being upgraded. Some of them are current, and do not
have any upgrades available.
c) before you install the new packages you should make the emergency
boot disk which points to your old kernel (in our case:
2.4.20-8 as rpm -qa tells us) in case something does not work out:
/sbin/mkbootdisk 2.4.20-8
d) Then you need to upgrade the kernel. Note, you WANT to keep old
kernel arround (just in case -- e.g., driver incompatibilities, etc.).
You do not want to keep documentation and sources for the old kernel.
To keep the old package use -i option to rpm. To update (i.e.,
remove the old package) use -U.
AGAIN!!! You want to KEEP old kernel (and kernel-pcmcia-cs package,
and smp or bigmem, if they are installed on your system), but you
want to update source, docs, and utilities. With the pcmcia kernel
you may have problems due to dependencies. In this case use the
--force option ( rpm -ivh --force kernel-pcmcia-cs-n.n.nn-n.i386.rpm ).
So, in my case the upgrade was looking like:
cd /tmp
rpm -ihv kernel-2.4.20-20.9.i686.rpm
rpm -Uhv kernel-source-2.4.20-20.9.i386.rpm kernel-doc-2.4.20-20.9.i386.rpm
Make sure that the initial Ram disk was created from RPM by listing
your /boot directory. In my case:
ls -l /boot/initrd-2.4.20-20.9.img
e) Now you need to update the boot loader configureation. For GRUB
you need to check a file: /boot/grub/grub.conf which
It should have beed updated automatically and should look like
(in my case):
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda2
# initrd /initrd-version.img
#boot=/dev/hda
default=1
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-20.9)
root (hd0,0)
kernel /vmlinuz-2.4.20-20.9 ro root=LABEL=/
initrd /initrd-2.4.20-20.9.img
title Red Hat Linux (2.4.20-8)
root (hd0,0)
kernel /vmlinuz-2.4.20-8 ro root=LABEL=/
initrd /initrd-2.4.20-8.img
If you use LILO (I do...) you need to edit/check file /etc/lilo.conf
This file was most likely patched for you by the RPM installation
process and should have your new kernel there as:
prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
lba32
image=/boot/vmlinuz-2.4.20-20.9
label=2.4.20-20.9
initrd=/boot/initrd-2.4.20-20.9.img
read-only
append="root=LABEL=/"
image=/boot/vmlinuz-2.4.20-8
label=linux
initrd=/boot/initrd-2.4.20-8.img
read-only
append="root=LABEL=/"
Note, however, that your default kernel still points at the old kernel
(default label is linux). Change it to default=2.4.20-20.9 or
you can actually rename the new kernel as linux and change the
lilo.conf as:
prompt
timeout=50
default=linux
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
lba32
image=/boot/vmlinuz-2.4.20-20.9
label=linux
initrd=/boot/initrd-2.4.20-20.9.img
read-only
append="root=LABEL=/"
image=/boot/vmlinuz-2.4.20-8
label=2.4.20-8
initrd=/boot/initrd-2.4.20-8.img
read-only
append="root=LABEL=/"
You need to run lilo -v to make these changes written to
the boot sector on the hard drive:
/sbin/lilo -v
f) You are also well advised to do ANOTHER boot diskette with the new
kernel. In our case:
/sbin/mkbootdisk 2.4.20-20.9
Now, `REMOVE the diskette, and reboot the machine... (CTRL/ALT/DEL or
/sbin/shutdown -r now) and you should be in business with updated
installation.
Written in Aug, 2003 by Jan K. Labanowski: jkl@ccl.net
All rights released... If it does not work for you, do not blame me...