12. Linux 2.0 Upgrade

If you have a pre July-Sept 96 CDROM, you will want to upgrade from 1.2.13 to 2.0.0

This section is for those who want to do so, most people will have recent CDROMS with all this (and MUCH more) pre-done.

12.1 Out of date updates ...
12.2 GCC 2.7.2
12.3 upgrade to Linux 2.0
12.4 Kernel Build
12.5 Other Upgrades
12.6 Happy Now ?


Out of date updates ...

Many people may have older CDROMS, which didn't have the 2.0 series on them.

Many packages got renamed to "2.0" to match the kernel, and maybe a few minor bug fixes, but there are many CDROM's with usable packages (modules PPP etc), with the older numbers.

Packages intended for Linux 1.3.nn are "correct" for Linux 2.0, but may be hard to find on older CDROM's. To assist thoses with older CDROM's I have not updated the version numbers of packages which made early versions of Linux-1.3 or 2.0 work.

Instead I shall simply delete it, when everyone has moved to 2.0.

IE If you can find these packages, they should work with Linux 2.0. If you can find more recent versions, good.

You will have to compare your favourite distribution with the current version levels, and ask your supplier what they think they are up to.

#### quoted from /usr/src/linux-2.0.0/Documentation/Changes ####

- Kernel modules         Stable: 1.3.57, Exp: 1.3.69k
- PPP daemon             Stable: 2.2.0f
- Dynamic linker (ld.so) 1.7.14
- GNU CC                 2.7.2
- Binutils     
- Linux C Library        Stable:  5.2.18, Beta:  5.3.12
- Linux C++ Library
- Termcap                2.0.8
- Procps                 0.99a
- Gpm                    1.09
- SysVinit               2.62
- Util-linux             2.5

Since then many packages have moved on. When everyone is up-to-date, I shall re-work this section.


GCC 2.7.2

I have an older Slackware with GCC 2.7.0, and it all compiles ok, (settings for i486). You may need to upgrade to 2.7.2, and if you do, you should check that everything that used to compile and run, still does.


upgrade to Linux 2.0

Linux 2.0 is vastly different from Linux-1.2.13, but is much the same as Linux-1.3.100+.

Other system components (such as libc) have also changed, so you should spend a few hours upgrading the various components.

Distributions of the 1.3.90+ era, didn't really follow the changes, and used 1.2.13 as the base of their distributions, the result being that you have to.

If your distribution is already configured for Linux 2.0, great!

Scratch build

If you are at home, and only have one machine, you should still have a second disk to buid the new system on. If you don't, you only have yourself to blame. However, boot diskettes may be enough.

If you are in an office, you really MUST have a second machine, for a week or so. The cost of your services being down may be much more! When the process is finished, you will be able to use that second machine as a general backup, or as your personal workstation.

Offices should have a general approach to backup systems (as well as backup tapes). There will always be a new kernel to test, or a new configuration to play with, and there is always the risk of a disk developing a fatal error.

The benefit of scratch building, is that you know what went into the system, and are starting from nothing. When you have tested your new machine, you can rename it, change the IP address and swop out the system being upgraded.

This does add to the cost, in that you need a spare machine, AND you may need to upgrade each machine twice!

The loss (and gain) of scratch building, is that a lot of rubbish on the disks gets dropped. Just hope that the runnish didn't contain any gems!


There are several interconnected components, that need to be changed together, and some of the components are the ground that you are standing on!

For example, libc is needed by virtually every program on the disk, if it doesn't exist, you won't be able to put it back! Unless you have a boot disk, or other bootable partition, or you have statically linked mv or cp program.

The first thing you should do is locate a boot-disk-set, and use it to see what it look like. You might also like to try booting to single user mode, by adding "single" to the LILO boot line.

You should also locate and save all configuration files that might be lost during the process (/etc/passwd, /etc/hosts and many many others).

You should also be careful when connecting a machine with a broken sendmail, to the internet. You don't want any gaps in service, but you certainly don't want any email to actually be lost!

Fetching the components

This is one of the reasons for having a second working machine! I fetched what I wanted from the Internet, but you might only have the CDROM's for company. Be lucky.

Collect the list of things from this document. Don't be supprised if more recent versions are available. Be optimistic.


Kernel Build

You need to rebuild a kernel to suit your exact needs, with things that you might play with, enabled as modules. Then you know that if you add one more feature, that you will be able to find the others.

You also need to read up on modules. They existed with 1.2.13, but are used much more now, and some of the LILO options have changed with the times.


Other Upgrades


If you upgrade from 1.2.13 to 1.3 or 2.0, you MUST upgrade ppp (if you use it). If you dont, you get:

Sorry: PPP not available on this system

It's easiest to upgrade the kernel first, then install ppp-2.2. Un-tar it under /usr/src, and follow the instructions. It just builds and installs out of the box.

The 2.0.0+ kernal sources already contain the correct code, so you can build the kernel first, then build PPP, then later build a new kernel from clean sources. You need this package to build the (non-kernel) pppd command. The 2.2.0e version on the CDROM's is OK.

Your PPP configuration should be much the same as it ever was, but there is a new "persist", option, that will automatically redial if the phone line gets cut (ie pppd got a SIGHUP from the modem losing carrier-detect). Note that pppd will NOT redial, if the chat script fails (phone BUSY). Then you should try diald, or your own cron job.

If you find the line disconnects after 15 minutes of inactivity, look in /var/log/messages, for pppd reporting that the remote pppd requested a disconnect. Then try ping -i60 remote to spoof activity on the line.

You should also locate dial_ppp, from Raven Issue-3, or as a package on http://sunsite.unc.edu/pub/Linux/system/Network/Serial/ It works for me (static IP_ADDR) and allows non-root users to establish a particular link.


This is on sunsite, in system/Status/ps.

Basically the new kernels have a new /proc format, which makes the old ps and top commands fail (segmentation fault). Most systems will run without this upgrade, but it is nice to be able to run the ps command, so upgrade as soon as you can.


The old LILO is still OK, but if you want to play with initrd, you want the new LILO and LOADLIN.EXE

This compiles and installs quite easily, and uses the same /etc/lilo.conf file.

Don't forget that modules take their parameters from /etc/conf.modules instead of the LILO prompt line, so that is where you put the NE2000 IO_ADDR (or whatever devices and parameters you need).


You need to recompile sendmail without the flock option. Now is a good time to locate the original package and rebuild it.

You might want to edit the Makefile to say:

  DBMDEF=              -DNEWDB	# YES


This might break your 'man' command, or other programs that have an alloc/free bug. If so, you can use MC to view man pages (but it is a hassle to have to do so).

When upgrading, be very careful when changing the symbolic link over. I created the new link then used the mv command to delete the old and install the new, without getting caught without any libc file at all!

If that happens to you, you won't be able to run any commands, as they ALL need libc.so.5 to run! The system won't boot, because init needs it! Use a boot disk or second root partition.

It would be nice to have a statically linked ln command, but by the time I needed it, it was too late. I couldn't even CTRL-ALT-DEL, because the reboot program needed libc. sync-sync-click.

make 3.74

Upgrading libc, kills make (it fixes a bug that make expected). To recompile make without the make command, run the ./configure --prefix=/usr command, and run the build.sh script, and use ./make to run ./make install.

If you don't have make 3.74 around, you can try pmake (Slackware called it that anyway).


Happy Now ?

This upgrades list is not exhaustive, but I hope that having it, saves you a days work, or a downed machine. You should also check elsewhere for other lists of things that you need. eg SYS-V-INIT ?

Now you should be able to build a new system, and immediately upgrade it, so that you can use the new Linux-2.0 kernel.

What special goodies does that bring you? I don't know. I'm so miffed with upgrading those naff distributions that I have not had the time or energy to find out!

Basically, if you have been using 1.2.13 a lot has changed. Many more things are modules, and kerneld is rather nifty! New devices are supported, and new code may be better then old code. Userfs now expects a 1.3 or 2.0 kernel, and it is rather sweet (though the old userfs ran on 1.2 ok).

Some new devices and ideas include initrd, which is an optimised ramdisk, that can have modules loaded into it, so that you can then access the CDROM (eg SCSI module + isofs module) and boot from a CDROM. The loopback-disk is new, it converts a file to a block device, maybe with encryption. And of course the kernel is now very similar to those on other architectures.

All very nice, but why is it 2.0 and not 1.4 ?? Maybe it's a race to reach 3.1, when customers will be able to identify it as mature, and distant from 0.99. Who knows? Who cares? It's excellent!

Other places

You already know about /usr/src/linux/Documentation/Changes, you might also want to try