Wednesday, June 9, 2010

Upgrade to Slackware 13.1

Slackware 13.1 has been released on 24 May 2010. There are updates for some packages and kernel. Usually every Slackware released I will choose fresh install before use it, but now I won't choose that, I'll choose to upgrade.

Before going further. To keep my configuration files safe I need to backup my /etc folder. In this case I backup it by creating iso image of /etc and keep the owner and permission of those files. You can do below method for your important files aswell.
# mkisof -o ~/etc-backup.iso -R /etc
And then check it
# mount -t iso9660 -o loop=/dev/loop0 ~/etc-backup.iso /mnt/tmp
# ls -ll /mnt/tmp

Next step is based on UPGRADE.TXT instructions, you can find it in root directory of Slackware distribution package. There area some steps to do to Upgrade your slackaware:
  • Create packages folder
  • Switch to single user
  • Upgrade package utility and related tools
  • Upgrade glibc shared libraries
  • Upgrade packages and install new packages
  • Remove obsolete packages
  • Fix or install new configuration files
  • Finishing
  • Reboot

Create packages directory
You need to create directory which contains Slackware 13.1, you can download it one by one or download it in ISO format. In my case I download ISO file from one of this mirror and extract it into "Slackware packages" directory
# mount -t iso9660 -o loop=/dev/loop0 slackware-13.1-install-dvd.iso /mnt/tmp
# mkdir /slackware
# cp -rf /mnt/tmp/* /slackware/*

Basically I can use /mnt/tmp as "Slackware packages directory" but I prefer to copy it to another directory as my "Slackware packages" directory. It's only for safety and stability.

Switch to single user
I just do a simple command to switch into single user
# telinit 1

Upgrade package utility and related tools
Before going further we need to upgrade tools that related to packaging
# upgradepkg /slackware/a/pkgtools-*.tgz
# upgradepkg /slackware/a/tar-*.tgz
# installpkg /slackware/a/xz-*.tgz
# upgradepkg /slackware/a/findutils-*.txz

Upgrade glibc shared libraries
# upgradepkg /root/slackware/a/glibc-solibs-*.t?z

Upgrade packages and install new packages
If you want to upgrade and install all new packages, you can use command below
# upgradepkg --install-new /root/slackware/*/*.t?z
If you want to uprage and install new package based on package group you can use command below, just add and remove package group in looping.
for dir in a ap d e f k kde l n t tcl x xap y ; do
    ( cd $dir ; upgradepkg --install-new *.t?z )

You can check the description of those package group below:
A : The base system.
AP : Various applications that do not require the X Window System.
D : Program development tools.
E : GNU Emacs.
F : FAQs, HOWTOs, and other miscellaneous documentation.
K : The source code for the Linux kernel.
KDE : The K Desktop Environment.
KDEI : Language support for the K Desktop Environment.
L : System libraries.
N : Networking programs.
T : teTeX document formatting system.
TCL : The Tool Command Language, Tk, TclX, and TkDesk.
X : The base X Window System.
XAP : X applications that are not part of a major desktop environment.
Y : Games (the BSD games collection, Sasteroids, Koules, and Lizards).

Remove obsolete packages
You can remove obsolete packages in Slackware 13.1 by using command below:
#removepkg bluez-libs bluez-utils cupsddk device-mapper epic4 gqview \
     kdelibs-experimental lbxproxy libgtkhtml liblbxutil libungif \
     libv4l loadlin mpg321 mplayerthumbs proxymngr xf86-input-citron \
     xf86-input-elographics xf86-input-fpit xf86-input-hyperpen \
     xf86-input-mutouch xf86-video-newport xf86-video-xgixp

Fix or Install New Configuration file
Upgrading means you will have new configuration files in etc, if you brave enough you can apply script below to apply it.
cd /etc
find . -name "*.new" | while read configfile ; do
if [ ! "$configfile" = "./rc.d/" \
    -a ! "$configfile" = "./rc.d/" \
    -a ! "$configfile" = "./" \
    -a ! "$configfile" = "./" \
    -a ! "$configfile" = "./" ]; then
    cp -a $(echo $configfile | rev | cut -f 2- -d . | rev) \
        $(echo $configfile | rev | cut -f 2- -d . | rev).bak 2> /dev/null
    mv $configfile $(echo $configfile | rev | cut -f 2- -d . | rev)

You should upgrade/merge your man.conf file and vimrc with these file:

# reboot

If you've installed some packages that are not in Slackware default, you need to recheck it functionality, and if you find problem I think you need to recompile the software or it's dependency.