Package

Dev Week -- Packaging 101 - Daniel Holbach -- Mon, Jan 19

UTC-4(EST)

(01:02:50 PM) dholbach: Ok my friends, let's keep questions in #ubuntu-classroom-chat and please: ask :-)
(01:03:23 PM) dholbach: So this is "Packaging 101" - I'm going to explain the bare-bone structure of a very simple package
(01:03:51 PM) dholbach: a lot of the stuff I'm going to talk about is also in the Packaging Guide which is linked from https://wiki.ubuntu.com/MOTU/GettingStarted
(01:04:08 PM) dholbach: so go and bookmark that page, it has all the important information, including some videos about packaging
(01:04:36 PM) dholbach: first please all take a look at /etc/apt/sources.list
(01:04:49 PM) dholbach: and see if you have something in there resembling
(01:04:52 PM) dholbach: deb-src http://archive.ubuntu.com/ubuntu/ intrepid restricted main multiverse universe
(01:05:08 PM) dholbach: this will give apt information about source packages which is what we're going to need
(01:05:28 PM) dholbach: if you don't have it, please add it (and replace 'intrepid' with whatever ubuntu release you're running)
(01:05:29 PM) dholbach: and run
(01:05:33 PM) dholbach:    sudo apt-get update
(01:05:37 PM) dholbach: afterwards
(01:05:50 PM) dholbach: <bullgard4> QUESTION: Questions may be put at any time or only later?
(01:05:58 PM) dholbach: bullgard4: any place in /etc/apt/sources.list should fine
(01:06:06 PM) Kelemen3 is now known as Kelemen
(01:06:11 PM) dholbach: <dlynch> QUESTION: do I need to learn about man pages and icons and where things go on the file system before I can even think about making a package?
(01:06:34 PM) dholbach: dlynch: we're not going to cover it in this session, but as all things in Ubuntu Development it's fine to learn them step by step
(01:06:43 PM) dholbach: for the package we're discussing in a few secs, it's not that important
(01:06:59 PM) dholbach: alright, now that apt knows about source packages, please run
(01:07:02 PM) dholbach:       apt-get source hello
(01:07:12 PM) dholbach: for those of you who know 'hello', yes, it's boring
(01:07:19 PM) Andphe: gksu gedit /etc/apt/sources.list
(01:07:21 PM) dholbach: but it's to the point and that's what we like
(01:07:27 PM) Andphe: sorry
(01:07:30 PM) Andphe: :p
(01:07:59 PM) dholbach: hello is a GNU project that shows how to use C, autotools, internationalisation to create an awesome tool which does nothing more than writing "Hello world!" on your screen
(01:08:18 PM) dholbach: the hello source package contains a similarly spartanic packaging :)
(01:08:24 PM) dholbach: which is a good start
(01:08:31 PM) dholbach: so what did 'apt-get source' do?
(01:09:10 PM) dholbach: on my machine it downloaded hello_2.2-2.diff.gz hello_2.2-2.dsc and hello_2.2.orig.tar.gz
(01:09:23 PM) dholbach: hello_2.2.orig.tar.gz is the unmodified tarball that was released on the GNU homepage
(01:09:41 PM) dholbach: (it was merely renamed)
(01:09:50 PM) dholbach: <apw> Check if the 'dpkg-dev' package is installed.
(01:10:00 PM) dholbach: apw: you're right... sorry - you will need dpkg-dev
(01:10:06 PM) dholbach: I thought james_w had covered that ;-)
(01:10:23 PM) james_w: yeah, sorry, didn't get round to that stuff
(01:10:28 PM) dholbach: haha
(01:10:32 PM) james_w: there's a lot of Ubuntu development to talk about
(01:10:39 PM) dholbach: you're right :)
(01:10:41 PM) dholbach: nevermind guys :)
(01:10:49 PM) dholbach: hello_2.2-2.diff.gz is the compressed patch that was introduced to make hello build the Ubuntu way
(01:10:53 PM) dholbach: what does that mean?
(01:11:33 PM) dholbach: Ubuntu and Debian have a build process that is actually a meta-build process, it's on top of the packages build infrastructure (be it autotools or a python distutils project, or just a few PHP scripts that are installed somewhere, etc.)
(01:11:47 PM) dholbach: this is a great thing, as we just have one build process that is applied to all kinds of packages
(01:12:03 PM) dholbach: this is the "packaging" :)
(01:12:17 PM) dholbach: hello_2.2-2.dsc is a text file that contains meta data such as md5sums and so on
(01:12:23 PM) dholbach: <xnox> Question: looking into hello-2.2 directory, itsn't TOO many files for a "prints hello world" programm?
(01:12:30 PM) dholbach: xnox: we'll get to the files in the directory in just a sec
(01:12:37 PM) dholbach: <co0lingFir3> QUESTION: in the terminal it says signature could not be verified because the public key was not found. how can i fix that?
(01:12:43 PM) dholbach: co0lingFir3: you can safely ignore that warning
(01:13:06 PM) dholbach: it just means that you don't have the public key of the last person who touched the package to verify it
(01:13:17 PM) co0lingFir3: k
(01:13:41 PM) dholbach: also I have a hello-2.2 directory that was generated this way: extract the .orig.tar.gz tarball, apply the compressed patch (the .diff.gz)
(01:13:56 PM) dholbach: apt-get source <package> will get you every source package that is available in the archive
(01:14:16 PM) dholbach: alright, let's crack on
(01:14:19 PM) hRedBeard1 is now known as hRedBeard-work
(01:14:22 PM) dholbach:    cd hello-2.2
(01:14:26 PM) dholbach:     ls
(01:14:41 PM) dholbach: you can see there's a debian/ directory - this comes from the .diff.gz
(01:14:46 PM) dholbach: and that's where the packaging lives
(01:15:12 PM) dholbach: if you look into the debian/ directory you can see just a few files
(01:15:19 PM) dholbach: and now we're going through all of them one by one
(01:15:29 PM) dholbach: any questions already?
(01:16:15 PM) dholbach: alright
(01:16:25 PM) admin is now known as Guest90417
(01:16:32 PM) dholbach: the first one   debian/changelog   is pretty straight-forward
(01:17:00 PM) dholbach: it contains changelog entries for every revision of the package that was done in Debian / Ubuntu
(01:17:24 PM) dholbach: especially in Ubuntu it's very important to document very carefully what you've changed
(01:17:36 PM) dholbach: we have no 'maintainer concept' in Ubuntu, we all work on all packages as a team
(01:18:00 PM) dholbach: so if you don't like your fellow developer to have to second-guess what "made shit work again" means, you better document it well :)
(01:18:11 PM) dholbach: also if you look at the package half a year later you need to know what changed and why
(01:18:27 PM) dholbach: also add information about bugs that were fixed, references to patches, discussion etc.
(01:18:48 PM) dholbach: <apw> QUESTION: how can we tell if it is a debian or ubuntu change
(01:18:48 PM) dholbach: <creek23> QUESTION: revision of the package? not the revision of the binary?
(01:18:48 PM) dholbach: <maix> QUESTION: in debian it is not?
(01:19:01 PM) dholbach: apw, creek23, maix: we'll get to that exactly now :-)
(01:19:17 PM) dholbach: <bullgard4> QUESTION: Do you, Daniel, often consult the changelog in order to find the cause of a bug?
(01:19:19 PM) dholbach: bullgard4: always
(01:19:51 PM) dholbach: on my system the first line of debian/changelog says:
(01:19:52 PM) dholbach: hello (2.2-2) unstable; urgency=low
(01:19:58 PM) dholbach: let's go through them one by one
(01:20:04 PM) dholbach: 'hello' is the name of the source package
(01:20:11 PM) dholbach: typically just the name of the upstream project
(01:20:29 PM) dholbach: (2.2-2) contains the version number of the source package
(01:20:33 PM) dholbach: it comprises of two parts
(01:20:45 PM) dholbach: "2.2" is the version number of the upstream release
(01:20:52 PM) dholbach: remember "hello_2.2.orig.tar.gz"?
(01:21:00 PM) dholbach: that was the version that was release on the GNU FTP server
(01:21:23 PM) dholbach: -2 means "this is the second revision of hello 2.2 that was uploaded to Debian"
(01:21:44 PM) dholbach: if we were to add an Ubuntu-only change to the package, it'd be   2.2-2ubuntu1
(01:21:52 PM) dholbach: so we just add a "ubuntu1" to the Debian revision
(01:22:06 PM) dholbach: <ia> QUESTION: could you tell, please, a little bit more about X.Y-ZubuntuW package version naming? what stands Z and W for and how it calculates if i made some changes and gonna make new package?
(01:22:12 PM) dholbach: Ok, let's talk about it a bit more
(01:22:43 PM) dholbach: if we were to update hello to 2.3 without inheriting the version from Debian, we would call it 2.3-0ubuntu1
(01:23:21 PM) dholbach: <Arc> QUESTION: what about when the upstream release contains a -, such as 1.0-beta2 or 3.0-rc3
(01:23:28 PM) dholbach: that's an interesting question
(01:23:42 PM) dholbach: in the case of beta2 and rc3 we would change our tactics slightly
(01:23:48 PM) dholbach: we'd use the    ~    operator
(01:23:52 PM) dholbach: ~?
(01:24:06 PM) dholbach: it tells dpkg "this is smaller"
(01:24:09 PM) dholbach: let me show you can example
(01:24:48 PM) dholbach: daniel@miyazaki:~$ dpkg --compare-versions 1.0-1 gt 1.0~beta1-1 && echo TRUE
(01:24:48 PM) dholbach: TRUE
(01:24:48 PM) dholbach: daniel@miyazaki:~$ dpkg --compare-versions 1.0-1 gt 1.0beta1-1 && echo TRUE
(01:24:48 PM) dholbach: daniel@miyazaki:~$
(01:25:03 PM) dholbach: dpkg is always authoritative
(01:25:24 PM) dholbach: dpkg will not upgrade to a version of a package that is "smaller" than the current one
(01:25:39 PM) dholbach: we introduce the "~" to artificially let dpkg know: this is smaller :)
(01:25:54 PM) dholbach: <Arc> QUESTION: what about after - for ubuntu-only packages
(01:25:59 PM) dholbach: Arc: can you clarify?
(01:26:39 PM) dholbach: <Arc> dholbach: what do you put after the - for when there is no debian package version, when you're packaging directly for ubuntu
(01:26:59 PM) dholbach: Arc: OK. let's say I package   baconator 1.0
(01:27:15 PM) dholbach: I'd call the first version that ever hits Ubuntu   baconator (1.0-0ubuntu1)
(01:27:30 PM) dholbach: to indicate: we did not inherit any version from Debian
(01:27:40 PM) dholbach: <creek23> QUESTION: if a software uses the YMD versioning scheme, should the package follow it as foobar-2009.01.16-ubuntu.deb?
(01:28:08 PM) dholbach: creek23: it'd probably be foobar_2009.01.16-0ubuntu1_i386.deb or some such
(01:28:21 PM) dholbach: <apw> QUESTION: why would not our 2.3 copy be 2.3~ubuntu1
(01:28:45 PM) dholbach: apw: in the case of 2.3 (upstream, our first revision) it's not necessary to tell dpkg "this is actually smaller"
(01:28:52 PM) dholbach: 2.3-0ubuntu1 works just fine
(01:29:01 PM) dholbach: "~" is not used very very often
(01:29:11 PM) dholbach: <ripps> QUESTION: What if we checkout a program from svn that doesn't a numerical version just a svn version (ex. svn2558)?
(01:29:35 PM) dholbach: so if this was 1.0 version of baconator plus some changes from SVN, I could make it
(01:29:41 PM) dholbach: 1.0+svn2558-0ubuntu1
(01:29:52 PM) dholbach: alright, let's crack on :)
(01:30:06 PM) dholbach: <oliver_g_1> QUESTION: for the SVN checkout case, where do we get the .orig.tar.gz?
(01:30:11 PM) dholbach: oliver_g_1: create it ourselves
(01:30:31 PM) dholbach: projects that use autotools often have a          make dist      or some such
(01:31:06 PM) dholbach: to continue with the first line of debian/changelog....
(01:31:09 PM) dholbach: there's still "unstable; urgency=low"
(01:31:28 PM) dholbach: unstable is the default "distro release" that is uploaded to in Debian
(01:31:36 PM) dholbach: we use things like "intrepid", "jaunty", etc.
(01:31:50 PM) dholbach: we can always just upload to the current development version of Ubuntu
(01:31:59 PM) dholbach: which in our case is "jaunty"
(01:32:33 PM) dholbach: the 'urgency=low' bit is always added by tools like dch (in the devscripts package)
(01:32:38 PM) dholbach: and we can safely ignore it
(01:32:45 PM) dholbach: in Debian it describes the urgency of the upload
(01:32:54 PM) dholbach: in the Launchpad build service it's ignored
(01:32:57 PM) dholbach: <creek23> QUESTION: what's with the 0 in "-0ubuntu"?
(01:33:14 PM) dholbach: creek23: it means that we have not inherited a version of it from Debian yet
(01:33:22 PM) dholbach: <co0lingFir3> QUESTION: can we apply for "needs packaging" in launchpad even if there is no new version of a tool but just changes via GIT?
(01:33:58 PM) dholbach: co0lingFir3: needs-packaging is something else - it's bookkeeping within Launchpad for packages that are not in Ubuntu yet
(01:34:06 PM) dholbach: co0lingFir3: you're free to add changes from GIT
(01:34:16 PM) dholbach: <apw> QUESTION: if the target version is not an ubuntu release does that target 'development' automatically?
(01:34:52 PM) dholbach: apw: dch, which adds boilerplate changelog entries for your (in devscripts package) will default to the version you're running right now
(01:35:01 PM) dholbach: <oliver_g_1> QUESTION: what if I want to make a package for Hardy? Can I still leave the changelog line at unstable or jaunty, or does it have to be hardy then?
(01:35:13 PM) dholbach: oliver_g_1: take a look at https://wiki.ubuntu.com/StableReleaseUpdates
(01:35:22 PM) dholbach: it's about hardy-proposed, hardy-updates, etc.
(01:35:29 PM) dholbach: we're not going to have the time here to discuss it, sorry
(01:35:42 PM) dholbach: <rugby471> QUESTION: If we package the hello program separately for ubuntu, why does it still retain the 'unstable' bit from debian
(01:35:56 PM) dholbach: rugby471: because we got the source package unmodified from Debian
(01:36:03 PM) dholbach: <Arc> QUESTION: does "unstable" thus mean that it was uploaded to debian directly, so we'd s/unstable/jaunty if we were uploading to (ie) a PPA for jaunty?
(01:36:22 PM) dholbach: Arc: if you add a new changelog entry, use the current development release, yes
(01:36:28 PM) dholbach: <maix> QUESTION: isn't it that urgency=high is used for security fixes?
(01:36:37 PM) dholbach: maix: yes, in Debian - for us it's irrelevant
(01:36:41 PM) dholbach: OK, let's crack on
(01:36:49 PM) dholbach: please ask further versioning questions in #ubuntu-motu please :-)
(01:37:10 PM) dholbach: the rest of the changelog entry is obvious
(01:37:24 PM) dholbach: it describes what was done following the " * "
(01:38:00 PM) dholbach: and in the bottom there's the content of DEBFULLNAME and DEBEMAIL
(01:38:11 PM) dholbach: plus the current timestamp (date -R)
(01:38:33 PM) dholbach: let's move on to     debian/control
(01:38:41 PM) dholbach: this is much more exciting
(01:38:55 PM) dholbach: it's always divided into at least 2 stanzas
(01:38:59 PM) dholbach: the first one is about the source package
(01:39:11 PM) dholbach: the following ones (in this case just one) about the resulting binary packages (.deb files)
(01:39:22 PM) dholbach: Source: just repeats the source package name
(01:39:39 PM) InHisName: :q
(01:39:41 PM) dholbach: Section: is one of few sections that are defined in debian policy
(01:40:07 PM) dholbach: Priority: is also defined in the debian policy
(01:40:19 PM) dholbach: the Maintainer: name defines who takes care of the package
(01:40:31 PM) MrKanister: You all should bookmark http://people.ubuntu.com/~cjwatson/ubuntu-policy/policy.html/  ;)
(01:40:42 PM) MrKanister: sorry for interupting
(01:40:48 PM) dholbach: Standards-Version: mentions which version of the debian policy the package complies with
(01:41:06 PM) dholbach: <bullgard4> QUESTION: You used the term 'build service'. What do you mean by that?
(01:41:37 PM) dholbach: bullgard4: we always deal with source packages when we introduce changes, which means we upload the .diff.gz the .dsc and the .orig.tar.gz file to a build server where it will be compiled and result in a bunch of .deb files
(01:41:53 PM) dholbach: as I said before: this package is very very simple
(01:42:01 PM) dholbach: and thus is does not contain a Build-Depends line
(01:42:12 PM) dholbach: which you will encounter in almost every other package
(01:42:26 PM) dholbach: in this line you specifiy which packages are necessary to build and compile the package
(01:42:49 PM) dholbach: it always assumes that build-essential (including libc, gcc, make and so on) is installed
(01:43:02 PM) dholbach: but every other Build dependency is specified explicitly
(01:43:13 PM) dholbach: <GSMX_> QUESTION: how can you see who the ubuntu mainainer is?
(01:43:24 PM) dholbach: apt-cache show hello
(01:43:34 PM) dholbach: <ia> QUESTION: if i make some changes in package, so i should enter my name in "Maintainer" field, but current "Maintainer" line should replace by XSBC-Original-Maintainer, right? and what XSBC stands for?
(01:43:54 PM) dholbach: ia: good question - this package is unmodified but for all the other packages which we decide to modify (over Debian)...
(01:44:14 PM) dholbach: our friends at Debian asked us to preserve the Debian Maintainer in XSBC-Original-Maintainer and add a new Maintainer: which is specific to Ubuntu
(01:44:30 PM) dholbach: this was done to prevent stray bug mails from Ubuntu users to go to the Debian maintainer
(01:44:54 PM) dholbach: this can automatically be done by running update-maintainer (in the ubuntu-dev-tools package)
(01:45:19 PM) dholbach: alright
(01:45:35 PM) dholbach: so far to the debian/control section about the source package
(01:45:39 PM) dholbach: let's come to the binary package
(01:45:54 PM) dholbach: "Package:" just contains the name of the binary package we want to get created
(01:46:06 PM) dholbach: in this simple case    upstream project name = source package name = binary package name
(01:46:19 PM) dholbach: "Architecture: any" is slightly more exciting
(01:46:38 PM) dholbach: this means: please build the package on any architecture individually
(01:46:41 PM) dholbach: let me explain
(01:46:58 PM) dholbach: when I upload a modified hello source package to the ubuntu build service
(01:47:15 PM) dholbach: it will be independently built on armel, i386, amd64, powerpc, sparc, hppa, etc etc
(01:47:28 PM) dholbach: so all the architectures that we have available in the data center
(01:47:48 PM) dholbach: this is necessary where the binary package afterwards contains architecture dependent code
(01:47:59 PM) dholbach: if you compile a C program, it's different on amd64 and powerpc
(01:48:26 PM) dholbach: if you just ship a bunch of artwork in a package, you can safely change Architecture to "all"
(01:48:42 PM) dholbach: which means: build it once, use the same package on all architectures
(01:48:52 PM) dholbach: <ronj> QUESTION: in apt-cache show hello I see it depends on libc6 (Depends: libc6 (>= 2.5-0ubuntu1)), though there's no build-depends. How can that be?
(01:48:54 PM) dholbach: ronj: just a sec
(01:49:01 PM) dholbach: Depends: ${shlibs:Depends}
(01:49:16 PM) dholbach: this means: these packages are necessary to install the package
(01:49:26 PM) dholbach: ${shlibs:Depends} is not a package name (obvious, ha!)
(01:49:37 PM) dholbach: but it's a variable that is substituted after the build
(01:49:54 PM) dholbach: and replaced with all the libaries that the code in the binary package is linked against
(01:49:56 PM) dholbach: magic!
(01:49:57 PM) GSMX_ is now known as GSMX
(01:50:04 PM) dholbach: <maix> QUESTION: hasn't support for powerpc etc been dropped recently?
(01:50:15 PM) dholbach: maix: we still build packages for powerpc, it's a community port
(01:50:41 PM) dholbach: The description contains a short (first line) and a long description for the package management tools
(01:51:08 PM) dholbach: if you want to look at a non-trivial package, check out      apt-cache showsrc mono
(01:51:25 PM) dholbach: it will show you that the mono source package is split up into 34567654567 different binary packgaes
(01:51:27 PM) dholbach: packages
(01:51:37 PM) dholbach: it got a lot better recently though :)
(01:51:51 PM) dholbach: let's crack on to the next file, we're running out of time
(01:52:04 PM) dholbach: debian/copyright is a file that the archive admins are very picky about
(01:52:08 PM) dholbach: it contains information about
(01:52:13 PM) dholbach:  - who packaged the piece of software
(01:52:18 PM) dholbach:  - who the upstream developer(s) are
(01:52:29 PM) dholbach:  - who has copyrights on the source
(01:52:42 PM) dholbach:  - which individual licenses ALL the files in the source code are under
(01:52:51 PM) dholbach: we have to be VERY VERY VERY careful when filling out that file
(01:53:06 PM) dholbach: if we miss copyrights or miss files that are maybe unredistributable we're in trouble
(01:53:20 PM) dholbach: and you'll make archive admins unhappy if you don't take it seriously :)
(01:54:04 PM) dholbach: for a insufficient quick overview, try out this:
(01:54:06 PM) dholbach: find . -iname '*.c' -o -iname '*.h' | xargs head | less
(01:54:18 PM) dholbach: it will show you the headers of all the .c and .h files in the source tree
(01:54:23 PM) dholbach: and show some of the copyrights
(01:54:29 PM) dholbach: as I said, it's insufficient
(01:54:37 PM) dholbach: <ia> QUESTION: does ubuntu maintainers use some scripts for searching "Copyright" strings in source code tree of project before packaging?
(01:54:50 PM) dholbach: ia: there are a few tools for that, best to ask in #ubuntu-motu or #ubuntu-devel about it
(01:55:07 PM) dholbach: also check out https://wiki.ubuntu.com/MOTU/GettingStarted because it links to a lot of important information about this stuff
(01:55:14 PM) dholbach: (packaging guide, ubuntudevelopment processes, etc.)
(01:55:29 PM) dholbach: the last file we just briefly mention is    debian/rules
(01:55:50 PM) dholbach: it is a Makefile that wraps around the Makefiles that are used by the upstream source
(01:56:03 PM) dholbach: it basically makes use of what you'd do to build and install the software
(01:56:19 PM) dholbach: ./configure && make && sudo make install    is something you probably can relate to
(01:57:02 PM) gabrielix is now known as elisa
(01:57:09 PM) dholbach: the new targets   build, clean, binary, etc.   wrap around whatever build infrastructure your project has
(01:57:25 PM) elisa is now known as elisabeth
(01:57:39 PM) dholbach: this is a very blunt and very spartanic package, so it does not make use of debhelper, cdbs or other tools which make the job of maintaining a package a lot lot easier
(01:58:03 PM) dholbach: <rugby471> QUESTION (sorry if this is too far ahead) : As far as I understand, if I found a bug, it wasn't being patched and I wnated to fix it, the best way would be for me to download the source (as you have shown) fix the problem, package the package and then ... , is this correct and what happens after the ... ?
(01:58:33 PM) dholbach: rugby471: I'll talk much more about that topic at Wednesday 17:00 UTC
(01:58:39 PM) dholbach: "fixing bugs in Ubuntu"
(01:59:00 PM) dholbach: very short version: generate patch, attach to bug, subscribe ubuntu-main-sponsors (or ubuntu-universe-sponsors team) to get review
(01:59:01 PM) rugby471: ok, I'll wait with anticipation! (sorry for interrupting)
(01:59:08 PM) dholbach: <ia> QUESTION: Could you advise some concrete docs, where describes in detail, how can create "rules" file manually to understand each line? (so as to don't look at dh_* commands like at some spells :-)
(01:59:22 PM) dholbach: ia: https://wiki.ubuntu.com/MOTU/GettingStarted - check out Packaging Guide
(01:59:30 PM) dholbach: <maix> QUESTION: if we for example had a python package we'd put a byte-compiling script in that debian/rules?
(01:59:51 PM) dholbach: maix: you'd wrap around   python setup.py install  etc (but we have clever tools for that - google for "debian python policy")
(01:59:58 PM) dholbach: <oliver_g_1> QUESTION: what if the upstream project did not include a Makefile? Can I put the installation commands (cp) directly into debian/rules?
(02:00:09 PM) dholbach: oliver_g_1: you can, there's a lot of different ways to do it
(02:00:13 PM) dholbach: OK, the session is over
(02:00:16 PM) dholbach: thanks a lot everybody
(02:00:22 PM) dholbach: have a great Ubuntu Developer Wekk
(02:00:23 PM) dholbach: Week
(02:00:28 PM) dholbach: bookmark https://wiki.ubuntu.com/MOTU/GettingStarted
(02:00:31 PM) dholbach: hope to see you in #ubuntu-motu
(02:00:35 PM) dholbach: make Ubuntu better!
(02:00:40 PM) dholbach: make me proud! :-)
(02:00:43 PM) NetSKaVeN: great session dholbach!!
(02:00:46 PM) CrownAmbassador: Thanks dholbach!!! Was great!
(02:00:53 PM) h00k: thanks, dholbach
(02:00:53 PM) rmcbride_ is now known as rmcbride
(02:00:54 PM) rugby471: THanks great seession, It was a great idea to have that command at the start, so that everyone cna see what you are talking about, and also look at it in their won time. Thanks!!
(02:00:54 PM) ***xnox applauds
(02:00:55 PM) ***mneptok hugs dholbach 
(02:00:57 PM) xnox: thank you
(02:01:01 PM) maix: thanks dholbach
(02:01:02 PM) audriusz: Big thanks to comes to you :D
(02:01:05 PM) bullgard4: Thank you dholbach !
(02:01:07 PM) ***dholbach hugs y'all
(02:01:10 PM) ***iulian hugs dholbach as well.
(02:01:11 PM) rugby471: cna * can   won * own
(02:01:12 PM) ronj: thanks
(02:01:12 PM) tictacaddict: thanks, it was a fun!
(02:01:20 PM) ganbat: thx
(02:01:23 PM) GSMX: thx
(02:01:32 PM) ia: thanks a lot )
(02:01:47 PM) creek23: thanks...
(02:02:20 PM) theseas: thanx dholbach! :)
(02:02:26 PM) ikis: thanks!

MeetingLogs/devweek0901/Package (last edited 2009-01-19 21:14:36 by pool-71-182-96-163)