== Ubuntu Open Week - Packaging 101 - Session 1 - Daniel Holbach - Tue, Apr 29, 2008 == see also [[MeetingLogs/openweekhardy/PackagingB|Part 2]]. {{{ LjL changed the topic of #ubuntu-classroom to: Ubuntu Open Week | Information and Logs: https://wiki.ubuntu.com/UbuntuOpenWeek | How to ask questions: https://wiki.ubuntu.com/UbuntuOpenWeek/Rules | Ask questions in #ubuntu-classroom-chat, prefaced with "QUESTION:" | See https://wiki.ubuntu.com/UbuntuOpenWeek/JoiningIn to filter out channel noise | Current session: Packaging 101 - Daniel Holbach [16:00] Welcome everybody to the first of today's Ubuntu Open Week Sessions! [16:00] /ignore #ubuntu-classroom CRAP NOTICES SNOTES CTCPS JOINS PARTS QUITS KICKS MODES WALLOPS NICKS DCC DCCMSGS CLIENTNOTICES CLIENTCRAP CLIENTERRORS HILIGHTS [16:00] Please ask your questions in #ubuntu-classroom-chat (type /join #ubuntu-classroom-chat), and prefix them with "QUESTION:" [16:00] Can we make it so that you either reply to questions for feedback or ask your own questions in #ubuntu-classroom-chat? [16:01] IRC commands start with / without any leading space [16:01] Please can we +m this room? [16:01] /ignore #ubuntu-classroom CRAP NOTICES SNOTES CTCPS JOINS PARTS QUITS KICKS MODES WALLOPS NICKS DCC DCCMSGS CLIENTNOTICES CLIENTCRAP CLIENTERRORS HILIGHTS [16:01] oops. sorry. [16:01] We're going to go through a few tutorials together and I'll check back on how things are going every now and then - please speak up in #ubuntu-classroom-chat if that's OK :) [16:02] So how are you all doing? How were yesterday's Ubuntu Open Week sessions? [16:02] OK, let's get cracking [16:03] in our first tutorial we're going to package a small piece of software - for that to work out we need to install a few tools first [16:03] Which version of Ubuntu are you running? [16:03] Anybody running Intrepid already? ;-) [16:04] lots of Hardy users - excellent [16:04] the tutorials should work on all the mentioned Ubuntu versions - if things should go wrong though, please speak up in #ubuntu-classroom-chat [16:04] Please install the following packages: [16:04] sudo apt-get install devscripts build-essential wget fakeroot dh-make [16:05] So we're going to package ed, the gnu line editor - first we'll download the tarball from the gnu ftp page [16:06] wget ftp://ftp.gnu.org/pub/gnu/ed/ed-0.9.tar.bz2 [16:06] The Debian and Ubuntu build-system expects us to upload .tar.gz tarballs afterwards, but as the upstream authors don't offer tar.gz, we will have to repack the tarball [16:06] tar xfj ed-0.9.tar.bz2 [16:06] tar cfz ed_0.9.orig.tar.gz ed-0.9 [16:07] it's also important to note that we have to stick to this kind of nomenclature: ed_0.9.orig.tar.gz [16:07] _.orig.tar.gz [16:08] and the 'orig' in the name is there for a reason: we don't introduce any changes, we keep the source as it is [16:08] (there are a very very few exceptions to that - for example cases where we can't ship certain parts of the source code due to licensing problems, etc) [16:09] did that work out for everybody up until now? [16:09] excellent [16:10] next we're going to use a utility called dh-make which will provide us with default values and default files for the packaging which will make our lives a lot easier [16:10] cd ed-0.9 [16:10] dh_make -s -c gpl [16:11] we told dh_make that we're packaging a single binary package (-s) and that the copyright is GPL [16:11] So what does single binary package mean? [16:13] As a package maintainer and developer you only work on the source of package, this involves the tarball (our .orig.tar.gz) plus some patches to make it build the debian/ubuntu way (we'll come to that in a bit) [16:13] We upload this "source package" to the build daemon which will then generate the .deb files (binary packages) that we, our friends and our mothers will download and install [16:14] from one source package we can generate multiple binary packages (at least one though) [16:14] this is a simple example :) [16:14] mono is a good example for how you can split up one source package into multiple binary packages: [16:14] apt-cache showsrc mono | grep Binary [16:15] this lists some ~80 binary packages which are all built from one source package [16:15] LjL: do we have questions already? :) [16:15] dholbach, i think the couple we had were answered already in the chat channel [16:16] [17:15:51] QUESTIONS : Why would you break once source package into multiple binary packages? [16:16] czambran: a very good question [16:16] there are multiple reasons [16:16] the most obvious one is: because some user groups have a different interest than others [16:16] take a library package for example [16:17] my mother will be only interested in the library runtime [16:17] I might be interested in developing with the library, so I might need all the header files in /usr/include [16:17] the same goes for huge directories of documentation, etc [16:17] it saves space on the disk (and CDs!), bandwidth, etc [16:17] another question I saw was this one: [16:18] QUESTION: How to change e-mail showed after executing dh_make -s -c gpl [16:18] RoAkSoAx: thanks a lot for prodding me about it - it's something I forgot and should have said earlier [16:18] dh_make (and other packaging tools) can use an environment variable we should probably set before to make things easier [16:19] please edit your ~/.bashrc file (or .zshrc if you use zsh) and add something along the lines of: [16:19] export DEBFULLNAME='Daniel Holbach' [16:19] export DEBEMAIL='daniel.holbach@ubuntu.com' [16:19] then save it and please run [16:20] source .bashrc (or restart your terminal) [16:20] [17:17:39] QUESTION: What if the source included the application dependent libraries; do we have to include them in the package ? [16:21] Syntux: good question - in that case it's definitely worth to tallk to the upstream developers and ask them to ship just their own source in their tarballs [16:21] unfortunately some (but not too many) upstream authors think that it would make their users live easier if they shipped all kinds of source code in their tarballs [16:22] the ubuntu archive admins can get a bit shirty with you because of that for a simple reason: duplicated code [16:22] we really like to have all code just in one place, so if there's a critical fix (like a security problem) we only need to fix it in one place [16:22] perhaps it's also worth pointing this one out although it was answered, as there could be some confusion due to most packages having source that needs to be compiled: QUESTION: What about programs that don't need compiling, like written python? [16:22] did everybody update their ~/.bashrc ? [16:24] phil_: we use one build process for all kinds of packages, so no matter if it's C, Mono, Java, Python, Perl or just a bunch of .png files you want to ship to your users: all use the same build process and all install the files that are shipped to the user during that build process [16:24] after the ~/.bashrc change, please run: [16:24] rm -r debian; dh_make -s -c gpl [16:25] QUESTION: AFAIK, Debian and Ubuntu are not fully compatible anymore. Can I make sure a built package works on both? [16:25] memnon: you can have a debian chroot where you can test the build, if it works in debian (https://wiki.ubuntu.com/DebootstrapChroot) or use pbuilder (https://wiki.ubuntu.com/PbuilderHowto) [16:26] alright.... let's crack on [16:26] we just generated the defaults again, after we set DEBFULLNAME and DEBEMAIL - things should look a bit better now :) [16:26] let's see what dh_make generated for us: [16:26] cd debian/ [16:27] ls [16:27] you can see a lot of files, lots of them have a very special purpose only and it's just too much to cover in this session [16:27] http://wiki.ubuntu.com/PackagingGuide has a lot of useful information and lots of links to docs you will need to make use of the advanced features [16:28] our package is going to be very simple and very straightforward, that's why we're going to remove a lot of example files now [16:28] rm *.ex *.EX dirs docs README.Debian [16:28] changelog compat control copyright info rules should be it now [16:29] let's edit the changelog first [16:29] every change in Ubuntu and Debian has to be properly documented [16:29] if you want to figure out why something broke or behaves differently you usually check the changelog first [16:30] and because people are going to use your package and you collaborate with a lot of people on it you do them a favor and let them know very explicitly what you do :) [16:30] the first changelog entry is not very exciting though: something like "Initial release" should be enough [16:30] it might also be worth pointing out that we re-packed the tarball (without changes) [16:31] QUESTION: Does this chagelog just contain package-related changes or source code related changes? [16:31] Zelut: good question [16:31] Zelut: some maintainers like to point out major changes that a new upstream version introduced, but there's no strict must [16:32] if you'Re on hardy, check out: [16:32] zless /usr/share/doc/gedit/changelog.Debian.gz [16:32] you can see that seb128 explained what the new upstream version gained us [16:32] but let's crack on - let's make the changelog ubuntu compliant :) [16:32] our changelog.... :) [16:33] first we'll change the version number to 0.9-0ubuntu1 [16:33] the version number has the following format: [16:33] - packages that have no ubuntu changes: - [16:34] - packages that HAVE ubuntu changes: -ubuntu [16:34] as our own package never was in debian, will be "0" in our case [16:34] hence 0.9-0ubuntu1 [16:35] we'll also change 'unstable' (the debian default) to 'intrepid' [16:35] why? [16:35] because intrepid is the current development release and we can only upload to the current development release [16:35] (hardy-updates, hardy-security, hardy-backports, etc are exceptions) [16:35] we'll not change the urgency as it has no effect in the ubuntu build system [16:36] the "changelog part" of the entry should be something like [16:36] * Initial release. [16:36] * Re-packed from .tar.bz2 (no changes). [16:37] can you post your changelog entry to http://paste.ubuntu.com/ and post the link in #ubuntu-classroom-chat if you made it? [16:38] mfm: good work [16:38] lmontrie: that looks good [16:39] QUESTION: Do we have to stick to certain text format in changelog? tabs/spaces ? [16:39] Syntux: if you use an editor like 'vi' it will let you know about syntax problems in debian/changelog - also the packaging tools we're going to use to build the packages will complain [16:39] QUESTION: when packaging or merging for the current development release... in this case, should be do it using Intrepid or we can do it on hardy. How, using a pbuilder [16:40] RoAkSoAx: https://wiki.ubuntu.com/UbuntuDevelopment/UsingDevelopmentReleases is the answer [16:40] there are lots of ways in which you can use the development release - it's important that you're able to [16:40] - test build your package [16:40] - test your package [16:40] in the release that you're going to upload to [16:41] QUESTION: Should we package restricted content such as graphics drivers too? Or should we stick to Debian packages? [16:41] Syntux: yours looks good too, although I'd personally add a newline below the last bullet point (but yours is OK) [16:42] immesys: there are restrictions on what we're allowed to ship in Ubuntu - it has to be redistributable - there's a wiki page which explains that but I don't have the URL handy right now - can somebody give it to immesys? [16:42] so we have the changelog sorted out, let's crack on [16:44] we'll skip the files compat (defines debhelper compatibility level - check out debhelper(7) for more info) and info (info page for the ed package) as they should be OK as they are [16:44] dholbach: it might be http://www.ubuntu.com/community/ubuntustory/licensing that you wanted to point immesys to [16:44] LjL: thanks - that looks like a good start [16:45] a lot of important information is available from http://wiki.ubuntu.com/UbuntuDevelopment too (how the archive works, ubuntu policies, etc) [16:45] let's edit the control file now [16:45] it carries the important information about binary and source packages I talked about earlier [16:46] it consists of a source stanza (always the first in the file) and one or multiple binary stanzas [16:46] we'll only make minimal changes to it right now [16:47] Section: editors should be fine [16:47] one important field in the source section is "Build-Depends" [16:48] QUESTION: Is there a list of possible 'section's that can be referred to? [16:48] it means: installing these packages into a minimal system will suffice to make it built [16:48] Zelut: http://www.debian.org/doc/debian-policy/ch-archive.html#s-subsections [16:50] what happens if we upload our source package to a build machine is: use a fresh minimal environment, then install the build-depends [16:51] in our case we'll stick to the defaults as ed doesn't need a lot of build-dependencies (just libc6-dev, which is always installed by means of 'build-essential') [16:51] if you package a C or C++ piece of software it's usually worth reading configure.ac or configure.in to find out what the build-dependencies are [16:51] also the README file is a good source for that [16:52] the pbuilder tool I referred to earlier does the same as the build machines in the data centre: it uses a fresh minimal environment, then installs the build-depends, then build your package [16:52] http://wiki.ubuntu.com/PbuilderHowto if you want to try it out [16:52] QUESTION: So do I have to add libc6-dev to my Build-Depends? [16:53] mfm: no, build-essential is always installed and get libc6-dev for you [16:53] other than that the source stanza is looking quite good now [16:54] the second stanza is about the binary package we install [16:54] of couse we want a nice description, so adept and synaptic users know what "ed" is all about [16:54] so let's get the description from the README file: [16:55] Description: standard Unix line editor [16:55] GNU ed is an 8-bit clean, more or less POSIX-compliant implementation [16:55] of the standard Unix line editor. These days, full-screen editors have [16:55] rendered `ed' mostly of historical interest. Nonetheless, it appeals [16:55] to a handful of aging programmers who still believe that "Small is [16:55] Beautiful". [16:55] is what I put in there [16:55] QUESTION: What does the 'Standards-Version' field means ? [16:56] the first line is the "short description", the subsequent lines (all indented by one space) are the long description [16:56] lmontrie: good question - I omitted that [16:56] Standards-Version refers to the version of the debian policy your package complies with [16:56] if you type: [16:56] apt-cache show debian-policy | grep ^Version [16:56] if will show which version of the debian policy is available on your system [16:57] it's an important document that will in most of the cases have the answer to your question :) [16:57] Architecture: any is important too [16:57] it means that our package will be built on any of the architectures in the data centre [16:58] which means: i386, amd64, powerpc, sparc, hppa, lpia, ia64, etc [16:58] we compile C code in this package which is going to be architecture specific [16:58] if you just happen to ship some perl scripts, you can change the field to [16:58] Architecture: all [16:59] Depends: ${shlibs:Depends}, ${misc:Depends} [16:59] is the most daunting looking line - what is it about? [16:59] ${shlibs:Depends} is a variable that will be substituted after the build [17:00] it will contain all the library packages that contain libraries that the binaries in the ed package are linked to [17:00] does that make sense? :) [17:01] Mixed opinion it seems dholbach.. An example maybe? [17:02] OK, I just installed the existing ed package of the archive, if I run ldd on the /bin/ed binary, it gives me: [17:02] daniel@lovegood:~/1$ ldd /bin/ed [17:02] linux-gate.so.1 => (0xb7f9e000) [17:02] libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e3e000) [17:02] /lib/ld-linux.so.2 (0xb7f9f000) [17:02] daniel@lovegood:~/1$ [17:03] what it spits out is the libraries /bin/ed is linked against [17:03] the build process will translate library file names into library packages and note them in the Depends: field afterwards [17:04] never specify explicit library dependencies by hand [17:04] this process is really elegant [17:05] ${misc:Depends} is another substitution variable which is used in special cases like gnome (it will for example contain gconf if one of the packaging tools identifies gconf schemas are installed, etc)( [17:05] ${misc:Depends} is empty most of the time [17:05] debian/control should be all set now [17:06] can you post your debian/control file to http://pastebin.com/ (or any other pastebin site that works) and post the link in #ubuntu-classroom-questions ? [17:08] MattJ: looks good, PartyBoi2: could do with a bit of editing in the description - other than that good [17:08] dholbach, I think you mean #ubuntu-classroom-chat ? [17:08] Zelut: good [17:08] Mez: yes, sorry [17:08] lmontrie: great [17:09] kef_kf: looking good [17:09] Syntux: one newline too much in the description - you'd at least need a " ." to split the text up a bit [17:10] mfm: good [17:10] czambran: make it one space instead of a tab - other than that good [17:10] wow.... good work everybody :) [17:11] the next file we're going to look at is really really important [17:11] copyright [17:11] it contains information about the authors, the copyright holder and license of each file that you're shipping [17:12] the archive admins will make sure that debian/copyright is in tip-top state and that you've not left anything out and that all source is perfectly redistributable [17:12] the more careful you are in making sure that it's alright, the happier they'll be with you - and you want them happy :) [17:13] can you open another terminal, cd into the ed-0.9 directory and run: [17:13] find . -name '*.c' | xargs head | less [17:14] this will display you the top lines of each .c file in the source [17:14] please note that that's not enough to ensure that everything you ship is alright, but just illustrates what you look at and what you look for [17:15] for now we'll just refer to: [17:15] Copyright (C) 1993, 1994 Andrew Moore, Talke Studio [17:15] Copyright (C) 2006, 2007, 2008 Antonio Diaz Diaz. [17:15] as the copyright holders [17:15] also please see the AUTHORS file [17:15] we'll copy the authors from there into the Upstream authors: section in debian/copyright [17:16] also you need to point out where you obtained the tarball from - pointing to ftp://ftp.gnu.org/pub/gnu/ed/ should be good enough [17:17] https://wiki.ubuntu.com/PackagingGuide/Howtos/DebianCopyright explains a bit more about it [17:18] next let's take a quick look at debian/rules [17:19] it's a Makefile which contains standard targets the debian/ubuntu build process expects [17:21] it usually contains: build, binary, binary-arch, binary-indep, clean - if it confuses you right now, that's OK [17:22] we'll leave debian/rules as it is for our example and I usually recommend to work on existing packages and modify existing bits to get a better feeling for the build process and which bits are called when [17:22] what we'll do now is generate the source package from the changes we just did [17:22] please run [17:22] debuild -S [17:23] and see: [17:23] ls ../.. [17:23] you should have a .diff.gz and a .dsc file in addition to the .orig.tar.gz we created initially [17:24] QUESTION: run dbuild from debian or ed-0.9? [17:24] mfm: both should work [17:25] .orig.tar.gz is the unmodified tarball [17:25] .diff.gz is the compressed changes we had to make to make it build the ubuntu/debian way :) [17:26] some of you got a GPG warning [17:26] that does not indicate a failed build, but that you might need to set up GPG properly [17:26] I didn't make this part of this tutorial to safe us a bit of time: https://help.ubuntu.com/community/GnuPrivacyGuardHowto is a very good guide to get you up and running [17:27] the .dsc file is a description file that contains md5sums of .orig.tar.gz, the .diff.gz and the like - together they are what we call a source package [17:28] ok... now that we have our source package all set - let's get us a binary package [17:28] cd back into the ed-0.9 tree [17:28] and run debuild -us -uc (this will run the build and omit the final step of signing the package) [17:28] QUESTION: Is there a way to export GPG settings in a similar way we exported EMAIL and NAME? [17:29] Zelut: the packaging tools will make use of the gpg key that has the key id that matches your DEBEMAIL [17:29] at the end of our build lintian might emit a few warnings and errors: this is kind of things you will need to work out if you work on a real package and not a silly example as we do over here :) [17:30] for now we can ignore them [17:30] a ls ../*.deb should mention a package we just build [17:30] less ../ed_0.9-0ubuntu1_*.deb should give you information about the package we just built [17:30] - contents [17:31] - package description [17:31] - version [17:31] and note: [17:31] Depends: libc6 (>= 2.4) [17:31] did that work out for everybody? [17:33] excellent - a whole lot of succesfully built packages - congratulations everybody :) [17:33] do we have some questions? :) [17:33] QUESTION: It shows "libc6 (>= 2.6-1)" for me - depends on the Release which it has been buid? [17:34] mfm: yes, that depends on which release you built the package [17:34] Okie, we got the package, whats the root pass to upload it :p [17:34] Syntux: you need to have signed it with a gpg key that is registered on Launchpad for a user that is in the ~ubuntu-dev team [17:35] the rest is here: https://wiki.ubuntu.com/UbuntuDevelopment/PackageArchive#Uploading [17:35] that's why following https://help.ubuntu.com/community/GnuPrivacyGuardHowto and reading it thoroughly is important :) [17:36] other than that I recommend #ubuntu-motu on irc.freenode.net as a means of getting in touch with developers and asking questions regarding packages [17:36] and ubuntu-motu-mentors@lists.ubuntu.com [17:37] http://wiki.ubuntu.com/MOTU/GettingStarted is a good guide and links to all the important information [17:37] QUESTION: If we've built a package that we want reviewed do we just annoy -motu or are there mentors we can ask? [17:37] Zelut: https://wiki.ubuntu.com/MOTU/Packages/REVU explains how you can upload a package for review [17:38] if you have specific questions you can always ask in #ubuntu-motu [17:38] any more questions? [17:39] who enjoyed their first ride through packaging? who wants more of it? :) [17:40] https://wiki.ubuntu.com/PackagingGuide/HandsOn has some more tutorials you can go through on your own later [17:40] QUESTION: this is PPA-related. ive tried to upload the same .orig.gz before but with a different .diff.gz and a lower version number to upload for a different version (wanted to compile for gutsy and hardy), but it said the orig didn't match. What'd i do wrong there? [17:40] for everybody who's not familiar with PPAs: please see http://help.launchpad.net/PPAQuickStart [17:40] it's basically a build service for testing and sharing packages [17:41] maco: a lower version number does not work out if it accepted a higher version number before - but that should have been explicit in the rejection mail [17:42] best to ask in #launchpad or ask in the session later on at 19:00 UTC [17:42] QUESTION: When a MOTU wannabe should apply to become part of the official team? do s/he have to be seriously fluent in packaging or there are another way of defining the expertise level. [17:42] excellent question [17:42] http://wiki.ubuntu.com/UbuntuDevelopers explains more about the actual process of applying [17:42] so how does one become a MOTU? [17:43] basically it boils down to: contribute, get good quality packages and patches uploaded by people who are in the ubuntu-dev team already (http://wiki.ubuntu.com/SponsorshipProcess) [17:43] until they tell you: "hey you're doing great - why don't you apply for MOTU?" [17:44] then you apply with a brief explanation of what you've done, what you want to do and your sponsors' feedback at the MOTU Council [17:44] I generally recommend to work on existing packages and fix a few 'bitesize' bugs before starting to package random software [17:44] it's better to start off small and get a feeling for the build process, for how packages work and so on [17:45] https://wiki.ubuntu.com/MOTU/TODO should list a lot of tasks you can get cracking on [17:45] QUESTION: Do you have an example copyright for ed you can show us? We kinda breezed through that one quickly. [17:45] Zelut: no, but I'll post one later [17:45] QUESTION: What's the best way to find unpackaged applications that people need especially with the large repository of debian and Ubuntu it's really hard to find the kick start package. [17:46] Syntux: as I said above: I *REALLY* recommend working on existing packages - in Ubuntu we maintain all the packages as a team [17:46] of couse some people have more expertise with certain packages than others, but there's no "big maintainer lock" which prevents others from working on the same package or as a maintenance team [17:47] so I'd rather start off with picking a bug, and getting a small piece of the puzzle to work again [17:47] you can even do it as your http://wiki.ubuntu.com/5-A-Day :) [17:48] but if you really want to package a piece of software that somebody else has good use for, try: https://bugs.launchpad.net/ubuntu/+bugs?field.tag=needs-packaging [17:48] for that it's important to point out a few things: [17:49] - putting your name in the maintainer field means: you're going to take good care of it (read bug reports, talk to the upstream developers, take care of making it work as good as you can etc) [17:49] - that works best if you take care of a piece of software that you yourself have a good use for [17:49] >RoAkSoAx> QUESTION: regarding to copyright question of Zelut , would it be like this?: http://pastebin.com/m6a7116d4 [17:50] the upper part looks quite OK already [17:50] what's missing is the GPL3 text [17:50] if you check out the top lines of the .c files you will notice that it mentions GPL3, not GPL2 [17:51] this makes a big difference and will be something the archive admins will complain about [17:51] also we would have to make sure that [17:51] # [17:51] Copyright (C) 1993, 1994 Andrew Moore, Talke Studio [17:51] # [17:51] Copyright (C) 2006, 2007, 2008 Antonio Diaz Diaz. [17:51] are the only copyright holders [17:51] it'd require some more love [17:51] QUESTION: If we write a peice of software that we want to submit for inclusion is it still the same REVU process? [17:52] Zelut: yes, you will submit your new package to REVU, will let it get 2 ACKs, then it can be uploaded to the archive [17:52] https://wiki.ubuntu.com/UbuntuDevelopment/NewPackages has more to say about that [17:53] you'll get extra points for having a "good contact to the upstream author" though :) [17:53] more questions? [17:53] So it seems a MOTU works as a middle man between the upstream developers and Ubuntu repository, the scenario should be something like, picking a package (new or existing), follow up on bugs, patches, releases and put the result in a package [17:53] Syntux: exactly [17:54] and that's what makes it fun - you deal with a lot of people: your users, the debian maintainers, maintainers of other distributions, upstream developers etc [17:54] and by making things work you'll make a lot of people very happy :) [17:55] So who of you can we expect in #ubuntu-motu for making intrepid ROCK? [17:56] excelltn :) [17:56] QUESTION: how does making a debdiff differ from making a normal source deb? [17:56] maco: if you post a source package for REVU you upload the full .orig.tar.gz .diff.gz and .dsc files somewhere [17:57] in the case of a debdiff it's just a diff file with the changes you did in a fix upload for example [17:57] Check out https://wiki.ubuntu.com/PackagingGuide/Recipes/Debdiff for an example [17:57] another important part of developing Ubuntu: [17:57] Hugging! [17:58] * dholbach hugs y'all :) [17:58] You all ROCK and I hope you had big fun in the session - because I did [17:58] The next session is "Ubuntu Mobile Edition - An introduction and Q+A - Adilson Oliveira" [17:59] please do send me a mail on how your doing regarding packaging and doing development [17:59] you all rock! }}} ==== Page B links to this page ====