I just ran this script on an old system (somewhere between rex and bo)
with lots of -dev packages installed. found and fixed two bugs.
- libc6 conflicts with libpthread0
- i made a typo... PKGS_GPP instead of PKGS_LIBGPP.
- some old version of perl's postrm didn't delete a .packlist file
from /usr/lib/perl5/i486-linux/5.003/auto/Mail/.packlist. check for
it and delete if found before installing perl.
apart from those problems, it ran through cleanly. i think it's nearly
finished (but i said that around version 0.2 didn't I :-)
---cut here---
#! /bin/sh
DPKG=`which dpkg`
LDCONFIG=`which ldconfig`
# uncomment for debugging
#set -x
#DPKG=echo dpkg
#LDCONFIG=echo LDCONFIG
# upgrade a libc5 (bo) machine to libc6 (hamm).
# based on Scott Ellis' excellent Debian libc5 to libc6 Mini-HOWTO
# document at http://www.gate.net/~storm/FAQ/libc5-libc6-Mini-HOWTO.html
# Author: Craig Sanders [EMAIL PROTECTED]
#
# Copyright Status: This script is hereby placed in the public domain
#
# Revision History:
# v0.0: 1998-01-08 (morning)
# - a rough transcript of scott's doc and my own experiences
# v0.1: 1998-01-08 (night)
# - a few bugfixes
# - i got unlazy and put in the right subdirectories for each package.
# should run a lot faster.
# - now checks for failure at critical points and exits with a different
# exit code for each failure.
# - now uses 'binary-$(dpkg --print-installation-architecture)' instead
# of 'binary-i386'.
# v0.2: 1998-01-09
# - fixed the perl-base/perl install (thanks Lindsay!)
# - improved the DEVPACKAGES=$(dpkg --get-selections...) and added -dbg
# packages.
# v0.3: 1998-01-09 (p.m.)
# - fixed some directories
# - changed -iB to -iBE so that if the script fails and is run again
# it will not disturb things already in place.
# - added a final dpkg --configure --pending.
# - sanity check that we are in the right place added
# v0.4: 1998-01-10 (Igor Grobman)
# - made it possible to place all packages in current dir.
# - added -pic packages to removal list.
# - make sure dpkg-dev does not get selected for removal.
# - moved dpkg-ftp and dpkg-mounted to the end.
#v0.5: 1998-01-10 (Igor Grobman)
# - added a note about upgrading libraries
#v0.6: 1998-01-11 (Craig Sanders)
# - restructured code to avoid code duplication.
# - cleaned up a few things
# - prints advisory notes telling user what's happening.
# - added some more instructions on what to do about development packages.
# - added code to guess some obvious locations for the mirror, otherwise
# ask user.
#v0.7: 1998-01-11 (Craig Sanders)
# - uh oh. i hard-coded in binary-i386. quick...better release another
# version before James notices.
#v0.8: 1998-01-11 (Craig Sanders)
# - added libpthread0 to the remove list.
# - fixed PKGS_LIBGPP (i mistyped it as PKGS_GPP)
# - some old version of perl's postrm didn't delete a .packlist file
# from /usr/lib/perl5/i486-linux/5.003/auto/Mail/.packlist. check for
# it and delete if found before installing perl.
#
# TODO: (probably by somebody else. this script is mostly good enough imo)
# - this script _still_ needs more error checking :-)
ARCH=binary-$(dpkg --print-installation-architecture)
PKGS_LIBC6=base/ldso_*.deb base/libc5_*.deb base/libc6_*.deb \
base/timezones_*.deb admin/locales_*.deb
PKGS_NCURSES=libs/ncurses3.0_*.deb base/ncurses3.4_*.deb
PKGS_LIBRL=oldlibs/libreadline2_*.deb
PKGS_LIBRLG=base/libreadlineg2_*.deb
PKGS_BASH=base/bash_*.deb
PKGS_LIBGPP=devel/libg++272_*.deb
PKGS_DPKG=base/dpkg_*.deb utils/dpkg-dev_*.deb
PKGS_LIBGDBM=base/libgdbm1_*.deb devel/libgdbmg1_*.deb
PKGS_PERLBASE=base/perl-base_*.deb
PKGS_PERL=interpreters/perl_*.deb
PKGS_MOREDPKG=base/dpkg-ftp_*.deb admin/dpkg-mountable_*.deb
cat __EOF__
This script will install the packages necessary to ensure a safe upgrade
to hamm.
You need to either have a local or remote mirror mounted, or have the
latest versions of the following packages from hamm available in the
current directory:
ldso, libc5, libc6, timezones, locales, ncurses3.0, ncurses3.4,
libreadline2, libreadlineg2, bash, libg++272, dpkg, dpkg-dev,
dpkg-ftp, dpkg-mountable, libgdbm1, libgdbmg1, perl-base, and perl.
If you are using a mirror, press 'm'.
__EOF__
echo -n if you have the files in the current dir, press 'c': (m/c)
read answer
case $answer in
m|M)
# local mirror available
# ask where the mirror is (this could do with some error checking)
echo
echo enter the full path to your local mirror of debian:
echo e.g. /debian/dists/unstable/main/$ARCH/
echo
TRY=/debian/dists/unstable/main/$ARCH
~ftp/debian/dists/unstable/main/$ARCH
for i in $TRY ; do
if [ -d $i ] ; then
DEFAULT=$i
fi
done
[ -n $DEFAULT ] echo or just hit enter to use $i.
read DM
[ -z $DM ]