Upgrading Scripts for a new Fedora distribution
===============================================

1. Gather knowledge
-------------------

You should read the Release Notes for all of the intervening
releases.  For example, here are the Fedora 13 release notes:

    http://docs.fedoraproject.org/en-US/Fedora/13/html/Release_Notes/

Because we sometimes skip releases, you should read any skipped
release's report notes.

Example:

    In Fedora 12, i586 was deprecated in favor of i686; this meant
    that any parts of Scripts that referenced i586 explicitly had to
    changed to i686.

2. Update the Scripts build environment
---------------------------------------

A large amount of the Scripts source repository is Fedora Release
specific, so when you are ramping up the new release, you will want
a new branch to do development on, before merging back upon the
official release.  You can do this with:

    svn cp svn://scripts.mit.edu/trunk \
           svn://scripts.mit.edu/branches/fcXX-dev

On the new branch, there are a number of files you will have to
update:

2.1 Mock

Mock needs to be setup for the new environment.  The first thing to do
is to update the Makefile by substituting
s/scripts-fcOLD/scripts-fcNEW/g on the /usr/bin/mock invocations.
After that, you need to go to /etc/mock and create the new cfg file
for the new scripts-fcXX-ARCH configurations (where ARCH is x86_64 and
i386).  You can base the new cfg off of the older version's, however
you will want to make the following changes:

    * Update all references to the old Fedora release to the new
      Fedora release.  This includes root, dist, mirrorlist, baseurl

    * Temporarily disabling the web.mit.edu Scripts RPM repository
      and the local RPM repository by setting enabled=0 (it's there for
      a reason!)  However, the local RPM repository is fairly painless
      to create and will come in handy when you start attempting to
      build packages that have dependencies on other scriptsified
      packages: you can set one up as scripts-build with:

        mkdir ~/mock-local
        createrepo ~/mock-local

3. Rebuild Scripts packages
---------------------------

In order to support specific extra functionality, we have scriptsified
a variety of Fedora packages.  When the base packages get upgrades,
we need to upgrade the scriptsification.  Some of the following topics
are covered in 'package-build-howto', but a new Fedora release tends
to also result in somewhat rarer situations.

Here are some of the common troubles you'll have to deal with:

3.1 Spec patches are no longer necessary

When a Fedora release gets EOL'ed, we may continue to backport
patches for CVE's manually.  When we upgrade to a non-EOL'd release,
those patches will generally become unnecessary and can be dropped.

You can drop a modified specfile from the repository simply by
`svn rm`ing:

    * The spec patch in server/fedora/specs,
    * The source code patch in server/common/patches, and
    * The upstream_yum entry in server/fedora/Makefile

If a specfile merely bumps the version field, there may be no extra
patch (this indicates that the maintainer rebuilt the package simply
by manually dropping the new source tarball in rpmbuild/SOURCES,
which is kind of sketchy but works.  See -c 1586 for an example.)

3.2 Spec patches no longer apply

Symptom:

    $ make patch-specs
    patching file openssh.spec
    Hunk #1 succeeded at 74 with fuzz 2 (offset 11 lines).
    Hunk #2 failed at 88.
    Hunk #3 succeeded at 177 (offset 14 lines).
    Hunk #4 succeeded at 270 with fuzz 2 (offset 36 lines).
    1 out of 4 hunks failed--saving rejects to openssh.spec.rej

Fix:

    The main thing to remember is where the generated files live
    they are placed in rpmbuild/SPECS/openssh.spec{.rej,.orig}.
    A workflow for fixing them might look like:

        1. Inspect the rejects file.
        2. As much as possible, manually fix the original diff
           file in /srv/repository/server/fedora/specs
        3. If absolutely necessary, edit the rpmbuild/SPECS/openssh.spec
           file with any final changes (this is dangerous because
           this file is blown away on a successive make)
        4. Generate a new unified diff:
             diff -u openssh.spec.orig openssh.spec > \
                 /srv/repository/server/fedora/specs\openssh.spec.patch

3.3 Mock fails with no error message

Fix: You forgot to add scripts-build to the mock group.  See
     https://bugzilla.redhat.com/show_bug.cgi?id=630791
     [XXX: remove this entry when this bug is fixed]

3.4 Source patches no longer apply

Symptoms:

    Generally, you will see these error messages after Mock starts
    building (if they occur before Mock, that means it's a bug in the
    spec patch, not a source patch that the spec patch references.)

Fix:

    The error message will be from within a schroot that Mock is using.
    As a result, it's not immediately obvious where the files live.
    There are two approaches you can take:

    Find the schroot: XXX to write

    Manually patch the source dist: Tarballs for the original source can
    be found in ~/rpmbuild/SOURCES, and then you can manually apply the
    failing patches and debug from there.

4. "Officializing" everything
-----------------------------

web.mit.edu scripts repository (/mit/scripts/rpm-fcXX and
/mit/scripts/rpm-fcXX-testing) needs to be made [XXX: document how to
make]

5. Extra stuff
--------------

Fedora occasionally updates the architecture name for 32-bit; the last
such update was in Fedora 12, when i586 became i686.  Fixing this
usually just involves replacing i586 with i686 in the appropriate places
(Makefile, specfiles, /etc/mock configuration).  Note that for
hysterical raisins we still refer to our 32-bit builds as i386.
[XXX: Maybe this should change]
