Update SL57 and later i386 and x86_64
=====================================

Introduction
------------

Keep the following order:

- Get the latest security updates from the SL mirror for the
  "update.$ARCH" repository.

- Build kernel modules.

- Get updates for the "psi" repository.

- Get updates for the "other" repository.

- Get updates for the "nonfree" repository.

- Create new snapshots.

- Release "unstable" from new snapshots.

- Create a new PSI version.

- Release "testing".

- Release "stable".


Update The Different Repositories
---------------------------------

Get the Latest Security Update RPMS From SL Mirror
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Get the latest security update RPMS from the local SL57 mirror for
both architectures, i386 and x86_64, by invoking
`rsync_security_updates_to_all_directories.sh` on tux50.

They will be copied to the corresponding `.../updates.${ARCH}/all/`
directories.  This will take some time::

    # cd /afs/psi.ch/software/linux/dist/scientific/57/scripts/
    # nohup ./rsync_security_updates_to_all_directories.sh > \
    #       UPDATE_LOG/$(date +%Y-%m-%d)-rsync_security_updates_to_all_directories.log 2>&1 &

Then, check for errors in the log file::

    # grep -i error UPDATE_LOG/20091221-rsync_security_updates_to_all_directories.log
    ...

Finally, run `update_symlinks_in_rpms_all.sh` to keep all symlinks in
the directory
`/afs/psi.ch/software/linux/dist/scientific/57/RPMS_all/` up to date.

The script removes dead links and creates new links to the new RPMS.
It is basically not necessary for running PSI updates, rather it's
just convenient to have a directory with the list of all RPMS of a
distribution::

    # ./update_symlinks_in_RPMS_all.sh

Build Kernel Modules
~~~~~~~~~~~~~~~~~~~~

First install the latest kernel and kernel-devel packages on the
respective build systems.

Then build the RPMS on the corresponding build systems using the
scripts below.

32 bit::

    # [gasser_m@tukan50-32]
    # cd /afs/psi.ch/software/linux/dist/scientific/57/scripts
    # sh build_kernel_modules.sh 2.6.18-194.3.1.el5 > \
    #       UPDATE_LOG/20100630-build_kernel_modules-2.6.18-194.3.1.el5.i686.log 2>&1

    # check-set-of-built-kernel-modules.bash /tmp/rpms_for_2.6.18-194.3.1.el5 \
    #       KERNEL_MODULES_TO_BUILD/sl5.i386.kms-to-be-built

    # sh build-gpfs.sl5x.i386.sh


64 bit::

    # [gasser_m@tux50-64]
    # cd /afs/psi.ch/software/linux/dist/scientific/57/scripts
    # sh build_kernel_modules.sh 2.6.18-194.3.1.el5 > \
    #       UPDATE_LOG/20100630-build_kernel_modules-2.6.18-194.3.1.el5.x86_64.log 2>&1

    # check-set-of-built-kernel-modules.bash /tmp/rpms_for_2.6.18-194.3.1.el5 \
    #       KERNEL_MODULES_TO_BUILD/sl5.x86_64.kms-to-be-built

    # sh build-gpfs.sl5x.x86_64.sh


Finally, from both build systems, copy the built kernel modules to the
psi repository::

    # cp -av `cat /tmp/rpms_for_2.6.18-194.3.1.el5` /afs/psi.ch/software/linux/dist/scientific/57/psi/all/


Get Updates For The Psi Repository
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Get Updates For The Other Repository
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Get Updates For The Nonfree Repository
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Create New Snapshots
--------------------

The script `create_new_snapshots.sh` will pick out the latest version
of each RPM found in the active repositories.

It will create a subdirectory (snapshot) in each repository and name
it after the current date using the format YYYYMMDD.

Then it will place a symbolic link into this subdirectory for each
latest RPM found in the `all` subdirectory of the currently processed
repository.

To invoke it run the following command::

    # nohup  ./create_new_snapshots.sh alldirs > UPDATE_LOG/$(date +%Y-%m-%d)-create_new_snapshots.log 2>&1 &


Release Unstable, Create A New PSI Version And Release The Other SLP Snapshots
------------------------------------------------------------------------------

Release Unstable
~~~~~~~~~~~~~~~~

The "unstable" distribution is where active development of SLP occurs.
Generally, this distribution is run by developers and those who like
to live on the edge.

The command `release_unstable.sh` will update the respective symlinks
`.../unstable` to the latest snapshots.

Because `release_unstable.sh` is interactive, you should not redirect
the output to a file, as you won't be able to see the questions asked.

Before `release_unstable.sh`::

    # [gasser_m@tux50]
    # cd /afs/psi.ch/software/linux/dist/scientific/57/
    # ls -l */unstable

    # ./release_unstable.sh


After `release_unstable.sh`::

    # ls -l */unstable


As soon as an unstable distribution has become testing a new unstable
can be generated which again points to the new latest snapshots.


Create A New PSI Version
~~~~~~~~~~~~~~~~~~~~~~~~

Run::

    # cd /afs/psi.ch/software/linux/dist/scientific/57/scripts
    # sh create_new_psi_version.sh

As soon as the new PSI version is created, i.e. the symbolic links
which point to the same target snapshots as the latest unstable
snapshots, the psi-version-info.txt file has to be actualized to
activate the PSI auto-update again for the hosts which are set to
unstable::

    # ./create_file_psiversion-info.sh

Eventually, test the unstable release.


Release Testing
~~~~~~~~~~~~~~~

The "testing" distribution contains packages that haven't been
accepted into a "stable" release yet, but they are in the queue for
that.  The main advantage of using this distribution is that it has
more recent versions of software.

The command `release_testing.sh` will update the respective symlinks
`.../testing` to the latest unstable snapshots.

If the puppet environment DesktopSL5Unstable was modified and the
changes should be made in DesktopSL5Testing, too, run
`rsync_puppet_env_testing_with_unstable.sh` before
`release_testing.sh`.

Because `release_testing.sh` is interactive, you should not redirect
the output to a file, as you won't be able to see the questions asked::

    # [gasser_m@tux50]
    # cd /afs/psi.ch/software/linux/dist/scientific/57/scripts

    # ./rsync_puppet_env_testing_with_unstable.sh
    # ./rsync_kickstart_dir_DesktopTesting_with_DesktopUnstable.sh
    # ./release_testing.sh

    # ./create_file_psiversion-info.sh


Release Stable
~~~~~~~~~~~~~~

To activate the PSI auto-update again for testing hosts the
psi-version-info.txt file has to be actualized.

The "stable" distribution, formerly known as "current", contains the
latest officially released distribution of SLP.

This is the production release of SLP, the one which we primarily
recommend using.

The command `release_stable.sh` will update the respective symlinks
`.../stable` to the latest unstable snapshots.

The procedure is analogous to the procedure described in the "Release
Testing" section::

    # ./rsync_puppet_env_stable_with_testing.sh
    # ./rsync_kickstart_dir_DesktopStable_with_DesktopTesting.sh
    # ./release_stable.sh
    # ./create_file_psiversion-info.sh


    ### begin ./release_stable.sh ###
    Sourcing configuration file ./dist-config

    TOP_DIR is /afs/psi.ch/software/linux/dist/scientific/57

    Running ./release_stable.sh ...

        Latest snapshot in psi:
            /afs/psi.ch/software/linux/dist/scientific/57/psi/testing -> 20090916
        Latest snapshot in others:
            /afs/psi.ch/software/linux/dist/scientific/57/others/testing -> 20090916
        Latest snapshot in update.i386:
            /afs/psi.ch/software/linux/dist/scientific/57/update.i386/testing -> 20090916
        Latest snapshot in update.x86_64:
            /afs/psi.ch/software/linux/dist/scientific/57/update.x86_64/testing -> 20090916
        Latest snapshot in kernel:
            /afs/psi.ch/software/linux/dist/scientific/57/kernel/testing -> 2.6.18-128.7.1.el5
        Latest snapshot in nonfree:
            /afs/psi.ch/software/linux/dist/scientific/57/nonfree/testing -> 20090916
        Latest snapshot in cluster:
            /afs/psi.ch/software/linux/dist/scientific/57/cluster/testing -> 20090916

    Relink stable to the latest snapshots (y/n)?


Before `release_stable.sh`::

    # [gasser_m@tux50]
    # cd /afs/psi.ch/software/linux/dist/scientific/57/
    # ls -l */stable

    lrwxr-xr-x 1 gasser_m ait  8 Sep 18 11:25 cluster/stable -> 20090316
    lrwxr-xr-x 1 gasser_m ait  8 Sep 18 11:23 enhanced/stable -> 20090316
    lrwxr-xr-x 1 gasser_m ait 18 Sep 18 11:24 kernel/stable -> 2.6.18-128.1.1.el5
    lrwxr-xr-x 1 gasser_m ait  8 Sep 18 11:24 nonfree/stable -> 20090316
    lrwxr-xr-x 1 gasser_m ait  8 Sep 18 11:22 others/stable -> 20090316
    lrwxr-xr-x 1 gasser_m ait  8 Sep 18 11:21 psi/stable -> 20090821
    lrwxr-xr-x 1 gasser_m ait  8 Sep 18 11:22 update.i386/stable -> 20090820
    lrwxr-xr-x 1 gasser_m ait  8 Sep 18 11:21 update.x86_64/stable -> 20090820


After `release_stable.sh`::

    # ls -l */stable
