Prepare a new release
=====================

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

This document describes the preparation of a new SLP major or minor
release for SL >= 5.4.

Requirements
------------

Before you start you need a clean copy of the original SL repositories
of interest from http://www.scientificlinux.org.

The SL repositories shall be mirrored to our AFS mirror on its own
volume, e.g.  `/afs/psi.ch/software/mirror/scientific/54/` is on AFS
volume `sw.mirror.sl54.nb`.

However, the mirror is usually made automatically by the script
`/afs/psi.ch/software/mirror/scripts/mirror.sh` which is run by cron
on pxeserv01. To add a new distribution to the mirror script you have
to edit the file `/afs/psi.ch/software/mirror/scripts/mirror.conf`.

You also need a separate AFS distribution volume, e.g.  `sw.dist.sl54`
for `/afs/psi.ch/software/linux/dist/scientific/54`.

Once this is done, you're ready to start with the Procedure section.


Procedure
---------

1. Go to the SL distribution B<top> directory, change to the
   subdirectory `scripts` and run the following scripts::

    # cd /afs/psi.ch/software/linux/dist/scientific/
    # cd scripts/Sl60/
    # sh 1-create_the_new_dist-config_file.sh <new_osversion>
    # sh 2-copy_the_kernel_and_initrd_for_tftp_boot.sh
    # sh 3-copy_the_puppet_environment_for_desktop.sh       # If a new one should be used,
                                                            # usually only for major release
                                                            # changes
                            # Note: Some of the files might need some manual customization, e.g.
                            # 
                            # module_gdm (pictures)
                            # module_splash (pictures)
                            # module_background_image (pictures)
                            # module_buildsystem


    # sh 4-create_new_dist_directory_structure.sh <new_osversion> <pre_osversion>

                            ### Check and edit the new files if necessary, especially the following ones:
                            # scripts/dist-config
                            # scripts/KERNEL_MODULES_TO_BUILD/sl6.i386.kms-to-be-built
                            # scripts/KERNEL_MODULES_TO_BUILD/sl6.x86_64.kms-to-be-built
                            # scripts/build-gpfs.sl6x.sh
                            # scripts/build-openafs.sl6x.i686.sh
                            # scripts/build-openafs.sl6x.x86_64.sh
                            # scripts/copy_the_sl_base_repos_from_the_local_mirror.sh
                            # scripts/rsync_security_updates_to_all_directories.sh

   <pre_osversion> is the distribution which serves as a template for
   <new_osversion>.

   The scripts will prepare most of the stuff automatically based on
   the previous version. Some of the new files, however, still have to
   be edited manually.

2. Go to the SL distribution directory, change to the subdirectory
   `scripts` and run the following scripts::

        # cd /afs/psi.ch/software/linux/dist/scientific/60/scripts/

   2.1 Copy the SL Base Repos

   The script below copies the sl6base repository from the mirror on
   AFS to the dist SL6 directory taking into account the
   `rsync_exclude.rpmlist`, i.e. not all RPMS will be copied.  To keep
   the repodata consistent with the RPMS in the Packages directory,
   the repodata has to be updated, too, by running the second script
   shown here::

        # sh copy_the_sl_base_repos_from_the_local_mirror.sh
        # sh run_createrepo_on_base_i386.sh     #sl64: still to do
        # sh run_createrepo_on_base_x86_64.sh   #sl64: still to do

   2.2 Copy the Security Updates::

        # sh rsync_security_updates_to_all_directories.sh

   2.3 Build kernel module if minor release

   If you prepare a new major release skip this section.

   If you prepare a new minor release you already have build systems
   where you can build kernel modules.

   Thus check whether you have to build at least the openafs and the
   gpfs modules. If the kernel versions of this and the previous SL
   minor versions do not differ you should already have the modules
   copied to e.g. the nonfree and psi repos, then there's nothing to
   do here.

   2.4 Update The Symbolic Links in RPMS_all::

        # sh update_symlinks_in_RPMS_all.sh

3. Create new snaphots, release UNSTABLE and set the initial PSI
   version.

        # ./create_new_snapshots.sh alldirs > \
        #       INITIAL_LOG/2011-02-25-create_new_snapshots.log 2>&1
        # ./release_unstable.sh
        # ./create_new_psi_version.sh
        # ./create_file_psiversion-info.sh

6. Write the new kickstart conig files.

   Goto the kickstart config directory and use one of the old
   kickstart config files as a template::

        # cd /afs/psi.ch/software/linux/kickstart/configs/

8. Make the new entries in the tftpd file.

   Goto the tftpd directory and edit the file default::

        # cd /afs/psi.ch/service/linux/tftpboot/pxelinux.cfg/
        # vi default

        #<<< sl64: hereiam:
        #<<< to do: fix /usr/bin/psi-fix_file_permission, module_localadmin

9. Now perform first installation tests and debug where necessary.

10. If you prepare a new major release, install new build systems.

12. If you prepare a new major release, go to
    `/afs/psi.ch/project/linux/dist` and create the directory
    structure below for the RPM build environment::

        slp6
        |-- RPMS/
        |   |-- i386/
        |   |-- i486/
        |   |-- i586/
        |   |-- i686/
        |   |-- noarch/
        |   `-- x86_64/
        `-- SRPMS/

14. Build kernel modules.

15. Also get new software versions for non SL repos (psi, others,
    etc.).

16. Again create new snapshots and a new PSI version.

17. Now perform the second test installation and debugging suite.

