move pract0 to the end, + small fixes to it
[packaging-tutorial.git] / packaging-tutorial.tex
index 2988792..ae79377 100644 (file)
@@ -1,13 +1,12 @@
 \documentclass[10pt,final]{beamer}
 \mode<presentation>
-\usetheme{lucasdeb}
+\usetheme{debian}
 \usepackage{debiantutorial}
 
-\hypersetup{pdftitle={An Introduction to Debian Packaging},bookmarks}
-\title{An Introduction to Debian Packaging}
+\hypersetup{pdftitle={Debian Packaging Tutorial},bookmarks}
+\title{Debian Packaging Tutorial}
 \author[]{Lucas Nussbaum\\{\small\texttt{lucas@debian.org}}}
-\institute{\includegraphics[viewport=274 335 360 440,width=1cm]{figs/openlogo-nd.pdf}}
-\date{}
+\date{\footnotesize version 0.1 - 2011-05-05}
 
 \begin{document}
 
@@ -21,6 +20,8 @@
     \item Modify existing packages
       \hbr
     \item Create your own packages
+           \hbr
+    \item Interact with the Debian community
       \hbr
     \item Become a Debian power-user
     \end{itemize}
        \begin{itemize}
                \item \textbf{GNU/Linux distribution}
                        \br
-               \item 1st major distro developed "openly in the spirit of GNU"
+               \item 1st major distro developed ``openly in the spirit of GNU''
                        \br
-               \item \textbf{Non-commercial}, built collaboratively by more than 1000 volunteers
+               \item \textbf{Non-commercial}, built collaboratively by over 1,000 volunteers
                        \br
-               \item 30000 binary packages ; 12 ports (inc. 2 non-Linux) ; 120 derivatives
+               \item 30,000 binary packages; 12 ports (inc. 2 non-Linux); 120 derivatives
                        \br
                \item 3 main features:
                        \begin{itemize}
@@ -67,6 +68,8 @@
                                \item \textbf{Independence} -- no (single) company babysitting Debian\\
                                        And open decision-making process (\textsl{do-ocracy} + \textsl{democracy})
                        \end{itemize}
+                        \br
+                \item \textbf{Amateur} in the best sense: done for the love of it
        \end{itemize}
 \end{frame}
 
@@ -160,12 +163,12 @@ rw-r--r-- 0/0 751613 Sep  5 15:43 2010 data.tar.gz
   \begin{itemize}
   \item One source package can generate several binary packages\\
     {\small e.g the \texttt{\bfseries libtar} source generates the
-      \texttt{\bfseries libtar} and \texttt{\bfseries libtar-dev} binary
+      \texttt{\bfseries libtar0} and \texttt{\bfseries libtar-dev} binary
       packages} \hbr
   \item Two kinds of packages: (if unsure, use non-native)
     \begin{itemize}
       \small
-    \item Native packages: software developed inside Debian (\textsl{dpkg}, \textsl{apt})
+    \item Native packages: normally for Debian specific software (\textsl{dpkg}, \textsl{apt})
     \item Non-native packages: software developed outside Debian
     \end{itemize}
     \hbr
@@ -235,6 +238,11 @@ Files:
       (\href{http://snapshot.debian.org/}{\ttfamily snapshot.d.o} provides all packages from Debian since 2005)
     \end{itemize}
     \br
+  \item From the (declared) version control system:
+    \begin{itemize}
+    \item \texttt{debcheckout \textsl{package}}
+    \end{itemize}
+    \br
   \item Once downloaded, extract with \texttt{dpkg-source -x \textsl{file.dsc}}
   \end{itemize}
 \end{frame}
@@ -265,13 +273,13 @@ Files:
   \begin{itemize}
   \item Main files:
     \begin{itemize}
-    \item \textbf{changelog} -- history of the Debian package
-    \item \textbf{copyright} -- copyright information for the package
     \item \textbf{control} -- meta-data about the package (dependencies, etc)
     \item \textbf{rules} -- specifies how to build the package
+    \item \textbf{copyright} -- copyright information for the package
+    \item \textbf{changelog} -- history of the Debian package
     \end{itemize}
     \hbr
-  \item Optional files:
+  \item Other files:
     \begin{itemize}
     \item compat
     \item watch
@@ -280,10 +288,10 @@ Files:
     \item maintainer scripts\\
       {\small *.postinst, *.prerm, \ldots}
     \item source/format
-    \item patches -- if you need to modify the upstream sources
+    \item patches/ -- if you need to modify the upstream sources
     \end{itemize}
     \hbr
-  \item Most of the files use a format based on RFC 822 (mail headers)
+  \item Several files use a format based on RFC 822 (mail headers)
   \end{itemize}
 \end{frame}
 
@@ -292,7 +300,7 @@ Files:
   \item Lists the Debian packaging changes
   \item Edited manually or with \texttt{dch}
   \item Special format to automatically close Debian or Ubuntu bugs\\
-    Debian: \texttt{Closes:~\#595268} ; Ubuntu: \texttt{LP:~\#616929}
+    Debian: \texttt{Closes:~\#595268}; Ubuntu: \texttt{LP:~\#616929}
   \item Installed as \texttt{/usr/share/doc/\textit{package}/changelog.Debian.gz}
   \end{itemize}
   \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
@@ -373,7 +381,7 @@ Description: retrieves files from the web
   Two kinds of binary packages:
   \hbr
   \begin{itemize}
-  \item Packages with a different content on each Debian architecture
+  \item Packages with different contents on each Debian architecture
     \begin{itemize}
     \item Example: C program
     \item \texttt{Architecture:\ any} in \texttt{debian/control}
@@ -381,7 +389,7 @@ Description: retrieves files from the web
       \item Or, if it only works on a subset of architectures:\\
         \texttt{Architecture:\ amd64 i386 ia64 hurd-i386}
       \end{itemize}
-    \item Packages for other architectures built by the Debian infrastructure
+    \item buildd.debian.org: builds all the other architectures for you on upload
     \item Named \texttt{\textsl{package}\_\textsl{version}\_\textsl{architecture}.deb}
     \end{itemize}
     \br
@@ -392,6 +400,8 @@ Description: retrieves files from the web
     \item Named \texttt{\textsl{package}\_\textsl{version}\_\textbf{all}.deb}
     \end{itemize}
   \end{itemize}
+  \br
+  A source package can generate a mix of \texttt{Architecture:\ any} and \texttt{Architecture:\ all} binary packages
 \end{frame}
 
 \begin{frame}[fragile]{debian/rules}
@@ -446,8 +456,8 @@ Description: retrieves files from the web
     \item Called from \texttt{debian/rules}
     \item Configurable using command parameters or files in \texttt{debian/}
     \end{itemize}
-    {\footnotesize \ttfamily dirs, package.docs, package.examples,
-      package.install, package.manpages, \ldots} \hbr
+    {\footnotesize \ttfamily dirs, \textsl{package}.docs, \textsl{package}.examples,
+      \textsl{package}.install, \textsl{package}.manpages, \ldots} \hbr
   \item Third-party helpers for sets of packages: \textbf{python-support},
     \textbf{dh\_ocaml}, \ldots \hbr
   \item Gotcha: \texttt{debian/compat}: Debhelper compatibility version (use "7")
@@ -495,7 +505,7 @@ binary-arch: build install
         dh_installchangelogs 
         dh_installdocs
         dh_installexamples
-#       dh_install
+        dh_install
         dh_installman
         dh_link
         dh_strip
@@ -515,9 +525,9 @@ binary: binary-indep binary-arch
 \begin{frame}[fragile]{CDBS}
   \hbr
   \begin{itemize}
-  \item Still a lot of redundancy between packages
+  \item With debhelper, still a lot of redundancy between packages
     \hbr
-  \item Second-level helpers that factor common funtionality
+  \item Second-level helpers that factor common functionality
     \begin{itemize}
     \item Building with \texttt{./configure \&\& make \&\& make install} or CMake
     \item Support for Perl, Python, Ruby, GNOME, KDE, Java, Haskell, \ldots
@@ -530,7 +540,7 @@ binary: binary-indep binary-arch
     \item But some people hate it:
       \begin{itemize}
       \item Sometimes difficult to customize package builds:\\
-        "\textsl{twisty maze of makefiles, environment vars and black magic}"
+        "\textsl{twisty maze of makefiles and environment variables}"
       \item Slower than plain debhelper (many useless calls to \texttt{dh\_*})
       \end{itemize}
       \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
@@ -556,7 +566,7 @@ build/mypackage::
     \hbr
   \item Easier to customize than CDBS
     \hbr
-  \item Doc: manpages (\texttt{debhelper(7)}, \texttt{dh(1)}) + slides from DebConf'9 talk\\
+  \item Doc: manpages (\texttt{debhelper(7)}, \texttt{dh(1)}) + slides from DebConf9 talk\\
     \url{http://kitenet.net/~joey/talks/debhelper/debhelper-slides.pdf}
     \br
     \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
@@ -577,19 +587,19 @@ override_dh_auto_build:
 \begin{frame}{Classic debhelper vs CDBS vs dh}
   \hbr
   \begin{itemize}
-  \item Market shares: (feb'11)\\
-    Classic debhelper: 45\% \hskip 1em CDBS: 24\% \hskip 1em  dh: 29\%
+  \item Mind shares:\\
+    Classic debhelper: 41\% \hskip 1em CDBS: 23\% \hskip 1em  dh: 34\%
     \hbr
   \item Which one should I learn?
     \begin{itemize}
-    \item Probably all of them
+    \item Probably a bit of all of them
     \item You need to know debhelper to use dh and CDBS
     \item You might have to modify CDBS packages
     \end{itemize}
     \hbr
   \item Which one should I use for a new package?
     \begin{itemize}
-    \item \textbf{dh} (only solution with an increasing market share)
+    \item \textbf{dh} (only solution with an increasing mind share)
     \end{itemize}
   \end{itemize}
   
@@ -627,15 +637,17 @@ override_dh_auto_build:
   \item It is better to build packages in a clean \& minimal environment
     \begin{itemize}
     \item \textttc{pbuilder} -- helper to build packages in a \textsl{chroot}\\
-      Good documentation: \url{https://wiki.ubuntu.com/PbuilderHowto}
+      Good documentation: \url{https://wiki.ubuntu.com/PbuilderHowto}\\
+      (optimisation: \textttc{cowbuilder} \textttc{ccache} \textttc{distcc})
       \hbr
     \item \textttc{schroot} and \textttc{sbuild}: used on the Debian build daemons\\
-      (not as easy to use as \texttt{pbuilder})
+      (not as simple as \texttt{pbuilder}, but allows LVM snapshots\\
+       see: \url{https://help.ubuntu.com/community/SbuildLVMHowto} )
     \end{itemize}
     \br
   \item Generate \texttt{.deb} files and a \texttt{.changes} file
     \begin{itemize}
-    \item \texttt{.changes}: describes what was built ; used to upload the package
+    \item \texttt{.changes}: describes what was built; used to upload the package
     \end{itemize}
   \end{itemize}
 \end{frame}
@@ -659,8 +671,8 @@ override_dh_auto_build:
     Documentation: \url{http://mirrorer.alioth.debian.org/}
   \end{itemize}
 \end{frame}
-\section{Practical session: modifying the grep package}
-\begin{frame}{Practical session: modifying the grep package}
+\section{Practical session 1: modifying the grep package}
+\begin{frame}{Practical session 1: modifying the grep package}
   \begin{enumerate}
   \item Go to \url{http://ftp.debian.org/debian/pool/main/g/grep/} and
     download version 2.6.3-3 of the package
@@ -710,34 +722,37 @@ override_dh_auto_build:
 \begin{frame}{Patch systems}
   \begin{itemize}
   \item Principle: changes are stored as patches in \texttt{debian/patches/}
-    \hbr
+    \br
   \item Applied and unapplied during build
-    \hbr
-  \item Several implementations: \textsl{simple-patchsys} (\textsl{cdbs} only),
-    \textsl{dpatch}, \textbf{\textsl{quilt}} \hbr
+    \br
+  \item Past: several implementations -- \textsl{simple-patchsys} (\textsl{cdbs}),
+    \textsl{dpatch}, \textbf{\textsl{quilt}}
+    \begin{itemize}
   \item Each supports two \texttt{debian/rules} targets:
     \begin{itemize}
     \item \texttt{debian/rules patch}: apply all patches
     \item \texttt{debian/rules unpatch}: de-apply all patches
     \end{itemize}
-    \hbr
+         \hbr
   \item More documentation: \url{http://wiki.debian.org/debian/patches}
   \end{itemize}
   \br
-  Future: new source package format with built-in patch system: \textbf{3.0 (quilt)}
+  \item \textbf{New source package format with built-in patch system: 3.0 (quilt)}
   \begin{itemize}
   \item Recommended solution
+         \hbr
   \item You need to learn \textsl{quilt}\\
     \url{http://pkg-perl.alioth.debian.org/howto/quilt.html}
     
   \end{itemize}
+  \end{itemize}
 \end{frame}
 
 \begin{frame}[fragile]{Documentation of patches}
   \begin{itemize}
-  \item Standard headers
+         \item Standard headers at the beginning of the patch
     \hbr
-  \item Documented in DEP3 - Patch Tagging Guidelines\\
+  \item Documented in DEP-3 - Patch Tagging Guidelines\\
     \url{http://dep.debian.net/deps/dep3/}
   \end{itemize}
   \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
@@ -747,7 +762,14 @@ Forwarded: http://lists.example.com/2010/03/1234.html
 Author: John Doe <johndoe-guest@users.alioth.debian.org>
 Applied-Upstream: 1.2, http://bzr.foo.com/frobnicator/revision/123
 Last-Update: 2010-03-29
+
+--- a/src/widgets.c
++++ b/src/widgets.c
+@@ -101,9 +101,6 @@ struct {
 \end{lstlisting}
+\begin{itemize}
+\item All patches are published on \url{http://patch-tracker.debian.org/}
+\end{itemize}
 \end{frame}
 
 \subsection{Doing things during installation and removal}
@@ -759,6 +781,9 @@ Last-Update: 2010-03-29
     \hbr
   \item Done in \textsl{maintainer scripts}\\
     \texttt{preinst, postinst, prerm, postrm}
+    \begin{itemize}
+           \item  Snippets for common actions can be generated by debhelper
+    \end{itemize}
     \hbr
   \item Documentation:
     \begin{itemize}
@@ -795,7 +820,8 @@ http://tmrc.mit.edu/mirror/twisted/Twisted/(\d\.\d)/ \
     \textbf{Debian External Health Status}\\
     \url{http://dehs.alioth.debian.org/}
     \br
-  \item Maintainer warned by emails sent to the Packages Tracking System
+  \item Maintainer warned by emails sent to the Package Tracking System\\
+    \url{http://packages.qa.debian.org/}
     \br
   \item \texttt{uscan}: run a manual check
     \br
@@ -804,7 +830,7 @@ http://tmrc.mit.edu/mirror/twisted/Twisted/(\d\.\d)/ \
 \end{frame}
 
 \subsection{Packaging with a VCS (SVN, Git \& friends)}
-\begin{frame}[fragile]{Packaging with a VCS (SVN, Git \& friends)}
+\begin{frame}[fragile]{Packaging with a VCS (SVN, Git, etc.)}
   \begin{itemize}
   \item Several tools to help manage branches and tags for your packaging work:\\
     \texttt{svn-buildpackage}, \texttt{git-buildpackage}
@@ -818,19 +844,26 @@ http://tmrc.mit.edu/mirror/twisted/Twisted/(\d\.\d)/ \
     \end{itemize}
     \hbr
   \item \texttt{Vcs-*} fields in \texttt{debian/control} to locate the repository
-  \end{itemize}
+         \begin{itemize}
+               \item \url{http://wiki.debian.org/Alioth/Git}
+               \item \url{http://wiki.debian.org/Alioth/Svn}
+       \end{itemize}
+\end{itemize}
   \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
 Vcs-Browser: http://git.debian.org/?p=devscripts/devscripts.git
 Vcs-Git: git://git.debian.org/devscripts/devscripts.git
-
+  \end{lstlisting}
+  \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
 Vcs-Browser: http://svn.debian.org/viewsvn/pkg-perl/trunk/libwww-perl/
 Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libwww-perl
   \end{lstlisting}
   \begin{itemize}
   \item VCS-agnostic interface: \texttt{debcheckout}, \texttt{debcommit},
     \texttt{debrelease}\\
-    \texttt{debcheckout devscripts} $\rightarrow$ check out the source package
+    \begin{itemize}
+           \item     \texttt{debcheckout grep} $\rightarrow$ checks out the source package
     from Git
+    \end{itemize}
 \end{itemize}
 \end{frame}
 
@@ -839,17 +872,11 @@ Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libwww-perl
 \begin{frame}{Several ways to contribute to Debian}
   \begin{itemize}
   \item \textbf{Worst} way to contribute:
-    \begin{itemize}
+    \begin{enumerate}
     \item Package your own application
     \item Get it into Debian
     \item Disappear
-    \end{itemize}
-    \br
-  \item Bring new software to Debian
-    \begin{itemize}
-    \item Only if it's interesting/useful enough, please
-    \item Are there alternatives already packaged in Debian?
-    \end{itemize}
+    \end{enumerate}
     \br
   \item Adopt existing unmaintained packages (\textsl{orphaned packages})
     \begin{itemize}
@@ -860,8 +887,14 @@ Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libwww-perl
   \item Get involved in packaging teams
     \begin{itemize}
     \item Many teams that focus on set of packages, and need help
-    \item Full list on \url{http://wiki.debian.org/Teams}
-    \item An excellent way to work with more experienced contributors
+    \item List available at \url{http://wiki.debian.org/Teams}
+    \item An excellent way to learn from more experienced contributors
+    \end{itemize}
+    \br
+  \item Bring new software to Debian
+    \begin{itemize}
+    \item Only if it's interesting/useful enough, please
+    \item Are there alternatives already packaged in Debian?
     \end{itemize}
   \end{itemize}
 \end{frame}
@@ -885,8 +918,8 @@ Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libwww-perl
       \hbr
     \item Many Debian tools can help:
       \begin{itemize}
-      \item Ubuntu column on the Developer' packages overview
-      \item Ubuntu box on the Packages Tracking System
+      \item Ubuntu column on the Developer's packages overview
+      \item Ubuntu box on the Package Tracking System
       \item Receive launchpad bugmail via the PTS
       \end{itemize}
     \end{itemize}
@@ -910,7 +943,7 @@ Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libwww-perl
     \item \textbf{ITA}: \textbf{I}ntent \textbf{T}o \textbf{A}dopt\\
       Someone intends to adopt the package\\
       You could propose your help!
-    \item \textbf{RFH}: (\textbf{R}equest \textbf{F}or \textbf{H}elp\\
+    \item \textbf{RFH}: \textbf{R}equest \textbf{F}or \textbf{H}elp\\
       The maintainer is looking for help
     \end{itemize}
     \hbr
@@ -927,8 +960,8 @@ Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libwww-perl
 \begin{frame}{Where to find help?}
   Help you will need:
   \begin{itemize}
-  \item Various advices and answers to your questions, code reviews
-  \item Sponsorship of your uploads, when your package is ready
+  \item Advice and answers to your questions, code reviews
+  \item Sponsorship for your uploads, once your package is ready
   \end{itemize}
   \br
   You can get help from:
@@ -943,7 +976,8 @@ Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libwww-perl
   \item The Debian Mentors group (if your package doesn't fit in a team)
     \begin{itemize}
     \item \url{http://wiki.debian.org/DebianMentorsFaq}
-    \item Mailing list: \url{debian-mentors@lists.debian.org}
+    \item Mailing list: \url{debian-mentors@lists.debian.org}\\
+           {\small (also a good way to learn by accident)}
     \item IRC: \texttt{\#debian-mentors} on \texttt{irc.debian.org}
     \item \url{http://mentors.debian.net/}
     \end{itemize}
@@ -979,6 +1013,16 @@ Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libwww-perl
   \end{itemize}
 \end{frame}
 
+\begin{frame}{Debian dashboards for maintainers}
+  \begin{itemize}
+         \item \textbf{Source package centric}: Package Tracking System (PTS)\\
+    \url{http://packages.qa.debian.org/dpkg}
+    \br
+  \item \textbf{Maintainer/team centric}: Developer's Packages Overview (DDPO)\\
+    \url{http://qa.debian.org/developer.php?login=pkg-ruby-extras-maintainers@lists.alioth.debian.org}
+  \end{itemize}
+\end{frame}
+
 \section{Conclusion}
 \subsection{Conclusion}
 \begin{frame}{Conclusion}
@@ -992,7 +1036,19 @@ Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libwww-perl
     \item If not sure, use the \textbf{dh} packaging helper, and the \textbf{3.0 (quilt)} format
     \end{itemize}
     \br
-  \item Debian is not only a technical project, it's also a community
+  \item Things that were not covered in this tutorial:
+    \begin{itemize}
+       \item UCF -- manage user changes to configuration files when upgrading
+               \hbr
+       \item dpkg triggers -- group similar maintainer scripts actions together
+               \hbr
+       \item Debian development organization:
+               \begin{itemize}
+                       \item Bug Tracking System (BTS)
+                       \item Suites: stable, testing, unstable, experimental, security, *-updates, backports, \ldots
+                       \item Debian Blends -- subsets of Debian targeting specific groups
+               \end{itemize}
+               \end{itemize}
   \end{itemize}
   \vfill
   \centerline{\large Feedback: \textbf{lucas@debian.org}}
@@ -1037,51 +1093,58 @@ Vcs-Svn: svn://svn.debian.org/pkg-perl/trunk/libwww-perl
   \end{itemize}
 \end{frame}
 
-\backupbegin
-
-\begin{frame}{TODO}
-  \begin{itemize}
-  \item more practical sessions
-  \item debc and lintian should really pick-up the .changes file automatically
-  \item UCF
-  \item Blends
-  \item BTS
-  \item security
-  \item volatiles
-  \end{itemize}
+\section{Practical session 0: simple rebuild of dash}
+\begin{frame}{Practical session 0: simple rebuild of dash}
+  \begin{enumerate}
+       \item Install build-essential debhelper devscripts
+  \item Create a working directory, and get in it
+  \item Grab the \texttt{dash} source package
+  \item Build the package
+  \item Check that it worked
+  \end{enumerate}
 \end{frame}
 
-\begin{frame}{Debian branches (\textsl{suites})}
-  \begin{itemize}
-  \item \textbf{stable} (currently codenamed \textbf{squeeze}): stable and
-    supported. Only important bug fixes.  \br
-  \item \textbf{testing} (currently codenamed \textbf{wheezy}): the future
-    stable release.  \br
-  \item \textbf{unstable} (always codenamed \textbf{sid}): where most of the
-    work occurs, and where packages are uploaded. Packages migrate
-    automatically from \textsl{unstable} to \textsl{testing} according to some
-    rules.  \br
-  \item \textbf{experimental}: for experimental packages that are not suited
-    for a stable release.
-  \end{itemize}
-  \hbr 
-  Developers mostly run \textsl{unstable} or \textsl{testing} (with
-  \textsl{APT pinning}) \hbr
-  
-  Packages can be \textbf{backported} from \textsl{testing/unstable} to
-  \textsl{stable}. See \url{http://backports.debian.org/}
+\section{Practical session 2: packaging GNUjump}
+\begin{frame}{Practical session 2: packaging GNUjump}
+\begin{enumerate}
+       \item Download GNUjump 1.0.6 from
+               \url{http://ftp.gnu.org/gnu/gnujump/1.0.6/gnujump-1.0.6.tar.gz}
+               \br
+       \item Create a Debian package for it
+               \begin{itemize}
+                       \item Install build-dependencies so that you can build the package
+                       \item Get a basic working package
+                       \item Finish filling \texttt{debian/control} and other files
+               \end{itemize}
+               \br
+       \item Enjoy
+\end{enumerate}
+\centerline{\includegraphics[width=5cm]{figs/gnujump.png}}
 \end{frame}
 
-\begin{frame}{Debian dashboards for maintainers}
-  \begin{itemize}
-  \item Source package centric: Packages Tracking System\\
-    \url{http://packages.qa.debian.org/dpkg}
-    \br
-  \item Maintainer/team centric: Developer's Packages Overview\\
-    \url{http://qa.debian.org/developer.php?login=pkg-ruby-extras-maintainers@lists.alioth.debian.org}
-  \end{itemize}
+\section{Practical session 3: packaging a Java library}
+\begin{frame}{Practical session 3: packaging a Java library}
+\begin{enumerate}
+       \item Take a quick look at some documentation about Java packaging:\\
+               \begin{itemize}
+               \item \url{http://wiki.debian.org/Java}
+               \item \url{http://wiki.debian.org/Java/Packaging}
+               \item \url{http://www.debian.org/doc/packaging-manuals/java-policy/}
+               \item \url{http://pkg-java.alioth.debian.org/docs/tutorial.html}
+               \item Paper and slides from a Debconf10 talk about javahelper:\\
+                       {\footnotesize
+                       \url{http://pkg-java.alioth.debian.org/docs/debconf10-javahelper-paper.pdf}\\
+                       \url{http://pkg-java.alioth.debian.org/docs/debconf10-javahelper-slides.pdf}}
+               \end{itemize}
+               \br
+       \item Download IRClib from \url{http://moepii.sourceforge.net/}
+               \br
+       \item Package it
+\end{enumerate}
 \end{frame}
 
+\backupbegin
+
 \backupend
 
 \end{document}