## page was renamed from Kernel/Dev/OpeningRelease
## page was renamed from Kernel/Dev/MaintainerStarter
<<Include(Kernel/MenuBar)>>

Each release cycle a member of the Ubuntu kernel team assumes the role of Ubuntu Kernel Release Manager.  One of the first responsibilities for this individual is to open and prepare the git tree for that release.  The following information documents the steps for starting this new git tree.  We'll use Maverick as the new tree example.

Note: In the following example we use 'M' to represent Maverick.  At the time the tree was opened, we did not know the official name of the next release other than the letter it would start with, hence M. 

== linux ==

 1. TAG the lucid tree, "Ubuntu-M-base" and "Ubuntu-M-sync".  These are '''your''' tags.  No one else should touch them on pain of death.  Ubuntu-M-base represents the original point where you forked M from Lucid.  This tag will never move.  As no one will consider Ubuntu-M for patching until M officially opens in the archive, Ubuntu-M-sync will then allow you to keep track of the patches applied to Lucid after M's been forked.  Ubuntu-M-sync will move each time you sync with the latest patches applied to Lucid.   
 {{{
cd ubuntu-lucid (make sure you're at the latest tip)
git tag -s -m "Ubuntu-M-base" "Ubuntu-M-base"
git tag -s -m "Ubuntu-M-sync" "Ubuntu-M-sync"
}}}
 1. Create M (ie clone ubuntu-lucid).
 {{{
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-lucid.git ubuntu-m
}}}
 1. The next few steps is just splitting, squashing, and dropping commits ie. comparing Ubuntu-M-base with the latest master should diff identical.  We leverage a script called reconcile-generic to help with this task.  reconcile-generic is available in the kteam-tools git repo (git://kernel.ubuntu.com/ubuntu/kteam-tools.git), look at devel/reconcile-generic.  It's a good idea to save the output of reconcile-generic to help generate the Ubuntu delta blueprint later on.
 {{{
cd ubuntu-m
reconcile-generic v2.6.32 Ubuntu-M-base v2.6.33 > /tmp/RESULT
}}}
 Example RESULT output can be viewed at http://people.canonical.com/~ogasawara/RESULT
 1. Examine /tmp/RESULT and look for any commits which touch debian and not debian (marked 'needs debian split out').  Split these into two commits.
 {{{
for example:

1cd09b44bbb7cb6a5521d83234e65f72193a1c3d (pre-stable) drm/i915: blacklist lid status: Sony VGN-BX196VP, Dell Inspiron 700m
  NEEDED (needs debian split out)

cd ubuntu-m
git rebase -i 1cd09b44bbb7cb6a5521d83234e65f72193a1c3d~1
# s/pick/edit/ for 1cd09b44bbb7cb6a5521d83234e65f72193a1c3d
git reset HEAD^
git add <not-debian-file(s)>
git commit
git add <debian-file(s)>
git commit
git rebase --continue

It's a good idea to make sure nothing has changed code wise within the tree after doing this.  A `git diff Ubuntu-M-base master` should show no changes.
}}}
 1. move all debian commits to the top and squash them.  If you had to split out debian commits in the previous step, you'll likely want to re-run reconcile-generic to make sure you have all the DEBIAN commits including the latest ones that were split out.
 {{{
reconcile-generic master v2.6.33 > /tmp/RESULT2
}}}
 1. drop all added and then reverted commits (marked REVERT or REVERTED),
 1. Insert and commit a fake changelog entry for 2.6.NN-1.0 which needs to have a commit message "UBUNTU: Ubuntu-2.6.NN-1.0".
  * Don't forget to tag the commit Ubuntu-2.6.NN-1.0
 1. Then startnewrelease like normal, ie 2.6.NN-1.1 and so on.  Obviously we don't care about the ABI until we formally put the kernel into the archive so for now we can just stay on -1.1, -1.2, -1.3 ... for the time being.
  * Note, you can skip the ABI and module checks by echo'ing 1 to an 'ignore' and 'ignore.modules' file for each arch within the abi directory.  There does exist an abi-disable script to do this.
  {{{
for each arch
    echo 1 >"debian.master/abi/$arch/ignore"
    echo 1 >"debian.master/abi/$arch/ignore.modules"
}}}
 1. rebase to 2.6.33 dropping any upstream commits at the same time (marked IN:)
 {{{
git rebase -i v2.6.33
}}}
 Remember to tag everything so we can look back if we need to.
 1. After the rebase, don't forget to update the configs.  It's highly recommended to also use the config2options script to make updating the configs less painful.
 {{{
fdr updateconfigs
fdr updateportsconfigs
}}}
 1. Until this new tree is official, we have to keep in sync with Lucid if any new patches are applied to Lucid that are not already in the new tree.  The easiest way to do this is to just cherry pick the patches from Lucid into the new tree.
 1. When the tree is ready, officially open it on kernel.ubuntu.com/git
 {{{
cd kernel.ubuntu.com:/srv/kernel.ubuntu.com/git/ubuntu/
mkdir ubuntu-<RELEASE>.git
cd ubuntu-<RELEASE>.git
git init
mv .git/* .
rmdir .git
vim config
  change bare = true
As a final step, make sure everything is owned by the "kernel_cdev" group.
}}}
 1. Once the tree is opened on kernel.ubuntu.com, you should now be able to push all the changes to it (See [[Kernel/Dev/MaintainingRelease]]).  Just make sure you set the remote "origin" correctly.
 1. After the tree is officially opened on kernel.ubuntu.com, be sure to update the debian.master/control.stub.in file and update the "Vcs-Git:" line to point to the newly opened repo.
 {{{
vi debian.master/control.stub.in
Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-<RELEASE>.git
}}}

== linux-meta ==
You can wait to prepare the linux-meta tree until the first official upload to the archive is going to be done.  We'll again use Maverick in this example.

 1. Create linux-maverick-meta (ie clone ubuntu-lucid-meta).
 {{{
git clone ubuntu-lucid-meta ubuntu-lucid-meta ubuntu-maverick-meta
}}}
 1. Add a new changelog entry to start the new release
 {{{
cd ubuntu-maverick-meta
vi meta-source/debian/changelog
:call NewVersion()
:call Finalise()
Edit the version and change "UNRELEASED" to the release pocket name
Add a changelog note similar to "* Initial Maverick ABI"
:wq!
}}}
 1. Update RELEASE_NAME
 {{{
vi meta-source/debian/rules
udpate RELEASE_NAME to the new release
:wq!
git add meta-source/debian/rules
git commit -s -m "UBUNTU: Update RELEASE_NAME from <PREV_RELEASE> to <NEW_RELEASE>"
}}}
 1. Temporarily disable lbm (linux-backports-modules) as this package won't exist until later in the development cycle.  Don't forget to revert this later in the development cycle when lbm comes into existence.
 {{{
for file in meta-source/debian/control.d/*
    comment out the lbm sections
git add meta-source/debian/control.d/
git commit -s -m "UBUNTU: Temporarily disable lbm"
}}}
 1. Edit the changelog to include a note about the updated RELEASE_NAME and disabling lbm:
 {{{
vi meta-source/debian/changelog
 * Update RELEASE_NAME from <PREV_RELEASE> to <NEW_RELEASE>
 * Temporarily disable lbm
:wq!
git add meta-source/debian/changelog
git commit -s -m "UBUNTU: Ubuntu-<META-PKG-VERSION>"
git tag -s -m Ubuntu-<META-PKG-VERSION> Ubuntu-<META-PKG-VERSION>
}}}
 1. Officially open it the tree on kernel.ubuntu.com/git
 {{{
cd kernel.ubuntu.com:/srv/kernel.ubuntu.com/git/ubuntu/
mkdir ubuntu-<RELEASE>-meta.git
cd ubuntu-<RELEASE>-meta.git
git init
mv .git/* .
rmdir .git
vim config
  change bare = true
As a final step, make sure everything is owned by the "kernel_cdev" group.
}}}
 1. Once the tree is opened on kernel.ubuntu.com, you should now be able to push the changes to it (See [[Kernel/Dev/MaintainingRelease]]).  Just make sure you set the remote "origin" correctly.
 1. After the tree is officially opened on kernel.ubuntu.com, be sure to update the meta-source/debian/control.common file and update the "Vcs-Git:" line to point to the newly opened repo.
 {{{
vi meta-source/debian/control.common
Vcs-Git: http://kernel.ubuntu.com/git-repos/ubuntu/ubuntu-<RELEASE>.git
}}}
----
[[Kernel/Handbook/ReleaseManagement]]