MergingFromDebian

Dev Week -- Getting started with merging packages from debian -- Bhavani Shankar -- Tue, Jul 12th, 2011

   1 [15:58] <coolbhavi> hey all before I start the session I am bhavani shankar a ubuntu contributor and MOTU and ll be showing a simple example using merge o matic
   2 [16:00] <coolbhavi> Hey all
   3 [16:00] <coolbhavi> so lets get kicking on this
   4 [16:00] <coolbhavi> We are going to learn how to merge packages
   5 [16:00] <coolbhavi> But, first of all we need to understand what merging is
   6 [16:00] <coolbhavi> Today I'm going to show you how to do a merge using merge - o - matic (MoM). Ubuntu's semi automatic merging system
   7 === ChanServ changed the topic of #ubuntu-classroom to: Welcome to the Ubuntu Classroom - https://wiki.ubuntu.com/Classroom || Support in #ubuntu || Upcoming Schedule: http://is.gd/8rtIi || Questions in #ubuntu-classroom-chat || Event: Ubuntu Developer Week - Current Session: Getting started with merging packages from debian - Instructors: coolbhavi
   8 [16:01] <coolbhavi> efore we start off just a basic roundup of the concept(s) involved
   9 [16:01] <coolbhavi> On our first stage of development cycle we import packages from debian unstable (sid). (In case of a LTS we import packages from debian testing)
  10 [16:02] <coolbhavi> There are two ways to import a package from debian (one is a sync and other is a merge)
  11 [16:02] <coolbhavi> Sync is importing the debian package "as is" without any further changes
  12 [16:02] <coolbhavi> whereas merging is importing the debian package and intoducing/including all the ubuntu changes.
  13 [16:02] <coolbhavi> But we need to cross verify whether the ubuntu changes are applicable for the present version and the ubuntu changes have been superceeded by debian in which case its a sync
  14 [16:03] <coolbhavi> Now getting to know a short background lets move on
  15 [16:04] <coolbhavi> Please enable universe and main repositories and pull in all the packages essential for ubuntu development environment (as mentioned in the ubuntu packaging guide which m pasting here for your kind reference
  16 [16:05] <coolbhavi> sudo apt-get install --no-install-recommends bzr-builddeb ubuntu-dev-tools fakeroot build-essential gnupg pbuilder debhelper
  17 [16:05] <coolbhavi> (PS: btw, this page provides a overview of merging workflow https://wiki.ubuntu.com/UbuntuDevelopment/Merging and we are going to see a simple example of it now)
  18 [16:06] <coolbhavi> So assuming you have understood till now lets move on
  19 [16:06] <coolbhavi> First of all we need to check what packages have need to be merged. Thats where MoM comes into picture
  20 [16:06] <coolbhavi> MoM is available here: http://merges.ubuntu.com
  21 [16:06] <coolbhavi> First of all we need to create a work directory, I use ~/development, you could use  a directory of your own
  22 [16:07] <coolbhavi> From now on we are calling this $WORK_DIR, so please create a working directory for your own.
  23 [16:07] <coolbhavi> now store the path on the $WORK_DIR variable giving "export $WORK_DIR=/path/to/work/directory"
  24 [16:07] <coolbhavi> for convenience
  25 [16:08] <coolbhavi> which in my case will be "export WORK_DIR=~/development"
  26 [16:08] <coolbhavi> By MoM way we use a script called grab-merge.sh which is available in ubuntu-dev-tools but for convineince I'll download the script here
  27 [16:08] <coolbhavi> Execute this in a terminal
  28 [16:08] <coolbhavi> cd $WORK_DIR ; wget -c http://merges.ubuntu.com/grab-merge.sh; chmod +x grab-merge.sh
  29 [16:09] <coolbhavi> I'll go a bit slow from now on for others to catch up if m going fast
  30 [16:10] <coolbhavi> So once its done we can start merging process
  31 [16:10] <coolbhavi> Since we are new contributors I ll take a simple example of a universe package merge which is ldaptor a pure python based LDAP client in short
  32 [16:11] <coolbhavi> See:  https://launchpad.net/ubuntu/+source/ldaptor
  33 [16:11] <coolbhavi> btw the complete list of universe package merges is here:
  34 [16:11] <coolbhavi>  https://merges.ubuntu.com/universe.html
  35 [16:12] <coolbhavi> Here we find a large list of packages, with their ubuntu, debian and base version also we see the last uploader, which is the last person who work on the package, and in some cases the
  36 [16:12] <coolbhavi> uploader of the package (sponsor of the package)
  37 [16:13] <coolbhavi> So if all is fine we are going to work on ldaptor package now
  38 [16:14] <coolbhavi> so we are going to create an empty directory to work on it and get into it:
  39 [16:14] <coolbhavi> mkdir $WORK_DIR/ldaptor ; cd $WORK_DIR/ldaptor
  40 [16:14] <coolbhavi> now we need to download the debian and ubuntu packages to work on them, that's easily done with the script we download earlier:
  41 [16:16] <coolbhavi> Now I assume everyone has created a directory named ldaptor we ll execute grab-merge.sh script which on my system will be india@ubuntu11:~/development/ldaptor$ ../grab-merge.sh ldaptor
  42 [16:17] <coolbhavi> Now I'll leave some time for the packages to download
  43 [16:19] <coolbhavi> most of the work have been already done by MoM, we only need to work on some fine tuning and the tasks
  44 [16:19] <coolbhavi> which need human intervention
  45 [16:20] <coolbhavi> ok, if everything is already downloaded we can see a file called REPORT, this is the first thing we
  46 [16:20] <coolbhavi> need to look at
  47 [16:20] <coolbhavi> In this case there are no conflicts so indicating that its a pretty simple merge but quite interesting :)
  48 [16:21] <coolbhavi> now we just need to look at the debian changelog and determine whether the ubuntu changes are still applicable or not
  49 [16:22] <coolbhavi> for that do cd ldaptor-0.0.43+debian1-5ubuntu1/debian  in my system
  50 [16:23] <coolbhavi> india@ubuntu11:~/development/ldaptor$ cd ldaptor-0.0.43+debian1-5ubuntu1/debian/
  51 [16:23] <coolbhavi> now once you are in the /debian directory
  52 [16:24] <coolbhavi> type in this command dch -e to edit the debian/changelog in your favourite editor
  53 [16:24] <coolbhavi> i use good old nano :)
  54 [16:26] <coolbhavi> you ll find a lines like this at the start ldaptor (0.0.43+debian1-5ubuntu1) oneiric; urgency=low
  55 [16:26] <coolbhavi>   * Merge from debian unstable.  Remaining changes:
  56 [16:26] <coolbhavi>     -  SUMMARISE HERE
  57 [16:27] <coolbhavi> with the debian package changelog and previous ubuntu package chanbgelog merged together :)
  58 [16:28] <coolbhavi> Now if you take a look at the previous ubuntu specific changelog you ll find this:
  59 [16:28] <coolbhavi> ldaptor (0.0.43+debian1-4ubuntu1) oneiric; urgency=low
  60 [16:28] <coolbhavi>   * Merge from debian unstable. Remaining change:
  61 [16:28] <coolbhavi>     - Remove empty POT files. Fixes FTBFS caused by pkgstriptranslations.
  62 [16:31] <coolbhavi> which is pretty interesting as the package fails to build on the official buildds of ubuntu due to a package which strips translations pertaining to the package and if the po or pot files are empty it causes a build failure
  63 [16:32] <coolbhavi> without this change the package would have been imported as is giving raise to a sync :)
  64 [16:33] <coolbhavi> so now we need to update the changelog for the latest ubuntu version of the package we are working on which on my system now will be
  65 [16:33] <coolbhavi> ldaptor (0.0.43+debian1-5ubuntu1) oneiric; urgency=low
  66 [16:33] <coolbhavi>   * Merge from debian unstable.  Remaining changes:
  67 [16:33] <coolbhavi>     - Remove empty POT files. Fixes FTBFS caused by pkgstriptranslations.
  68 [16:35] <coolbhavi> Please take note of the spacings and the format of the changelog as it ll be machine parseable :)
  69 [16:35] <coolbhavi> Now save the changes in your favourite editor ]
  70 [16:36] <coolbhavi> and run the following command debuild -S
  71 [16:36] <coolbhavi> So that builds the .dsc file and generates the .changes file now you should test build the package .dsc file in a pbuilder or sbuild to check whether the package builds correctly not and generates the deb file
  72 [16:37] <coolbhavi> (Note: this step is very important for ensuring quality work and quick sponsoring :) )
  73 [16:39] <coolbhavi> so after building the .dsc please test it in a pbuilder so issue the following command: sudo pbuilder build ldaptor_0.0.43+debian1-5ubuntu1.dsc
  74 [16:40] <coolbhavi> <saimanoj79> QUESTION: make: dh: Command not found make: *** [clean] Error 127
  75 [16:41] <coolbhavi> saimanoj79, make sure you have installed all the packages correctlly required for ubuntu development as said above
  76 [16:41] <coolbhavi> <vanderson> debsign: gpg error occurred!  Aborting....debuild: fatal error at line 1256:running debsign failed   is it work?
  77 [16:43] <coolbhavi> vanderson, please create a GPG key too because its required to sign the .dsc built and .changes with your gpg key https://wiki.ubuntu.com/GnuPrivacyGuardHowto should help you
  78 [16:43] <coolbhavi> Once the package builds correctly generate the debdiff between the current debian_version.dsc and current ubuntu_version.dsc and attach it to a bug opened as defined in the merging workflow in this link: https://wiki.ubuntu.com/UbuntuDevelopment/Merging
  79 [16:45] <coolbhavi> so in my system I would do: india@ubuntu11:~/development/ldaptor$ debdiff ldaptor_0.0.43+debian1-5.dsc ldaptor_0.0.43+debian1-5ubuntu1.dsc > ldaptor.diff
  80 [16:45] <coolbhavi> and attach ldaptor.diff as a patch to the bug I created as per the merge workflow as a patch
  81 [16:47] <coolbhavi> and last but not the least Subscribe the ubuntu-sponsors team on your merge request bug for feedback and uploading of your change :)
  82 [16:50] <coolbhavi> so this was a session on how to get started merging packages from debian. This I believe can get you started into merging packages The above example was a simple one and various packages have various sort of conflicts which are need to be handled diligently :)
  83 [16:51] <coolbhavi> and we need to look at the importance of debian package change too while merging a package from debian
  84 [16:51] <coolbhavi> <and`> coolbhavi, QUESTION: as a side note, would you mind explaining what a fake sync is and why do we need that?
  85 [16:53] <coolbhavi> and`, fake sync arises due to mismatching of orig tarballs in debian and ubuntu so it cant be synced directly from debian in short terms
  86 [16:55] <coolbhavi> and if you get stuck anywhere in the ubuntu development sphere please feel free to tap on us in #ubuntu-motu or #ubuntu-devel
  87 [16:55] <coolbhavi> we are always there to help you :)
  88 [16:56] <coolbhavi> <mjaga> QUESTION: in which directory did you issue the pbuilder command? I'm getting ... is not a valid .dsc file name
  89 [16:56] <coolbhavi> mjaga, its in the ldaptor directory that we created
  90 [16:57] <coolbhavi> <takdir> QUESTION: how to apply that patch (.diff) to ubuntu package
  91 [16:58] <coolbhavi> we use the generated diff to apply to the debian package in case of a merge takdir
  92 [16:59] <coolbhavi> so if anyone is on facebook you can catch me up on facebook.com/bshankar :)
  93 [17:00] <coolbhavi> thats all from my side now :)
  94 [17:00] <coolbhavi> thanks all for turning up for this session

MeetingLogs/devweek1107/MergingFromDebian (last edited 2011-07-13 09:20:22 by dholbach)