% This file was generated with po4a. Translate the source file.
%
\documentclass[10pt,final]{beamer}
\mode<presentation> \usetheme{debian}

\usepackage{debiantutorial.nl} \usepackage[dutch]{babel}

\hypersetup{bookmarks}
\title{Inleiding tot het maken van Debian-pakketten}
\author[]{Lucas
Nussbaum\\{\small\texttt{packaging-tutorial@packages.debian.org}}\\[0.5em]Vertaling
naar het Nederlands door\\ Frans Spiesschaert\\ en het Nederlandstalig
lokalisatieteam}

\date{\footnotesize version 0.29 -- 2021-11-03} 

\begin{document}


\frame{\titlepage}

\begin{frame}{Over deze handleiding}
  \begin{itemize}
  \item Doel: \textbf{u vertellen wat u echt moet weten over het maken van
Debian-pakketten}
    \begin{itemize}
      \hbr
    \item Bestaande pakketten aanpassen
      \hbr
    \item Uw eigen pakketten maken
	    \hbr
    \item In interactie treden met de Debian-gemeenschap
      \hbr
    \item Een intensieve gebruiker van Debian worden
    \end{itemize}
    \br
  \item Behandelt de belangrijkste punten, maar is niet volledig
    \begin{itemize}
    \item U zult meer documentatie moeten lezen
    \end{itemize}
    \br
  \item Het grootste deel van de inhoud is ook van toepassing op de van Debian
afgeleide distributies
    \begin{itemize}
      \hbr
    \item Met inbegrip van Ubuntu
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}{Overzicht}
  \tableofcontents[hideallsubsections]
\end{frame}

\section{Inleiding}

\subsection{Debian}

\begin{frame}{Debian}
	\begin{itemize}
		\item \textbf{GNU/Linux distributie}
			\br
		\item eerste belangrijke distributie die ‘‘openlijk in de geest van GNU’’
ontwikkeld werd
			\br
		\item \textbf{Niet-commercieel}, samen gemaakt door meer dan 1.000 vrijwilligers
			\br
		\item drie belangrijke kenmerken:
			\begin{itemize}
				\item \textbf{Kwaliteit} -- cultuur van technische uitmuntendheid\\ {\small\sl We
geven een release vrij wanneer deze klaar is}
					\hbr
				\item \textbf{Vrijheid} -- ontwikkelaars en gebruikers zijn gebonden door het
\textsl{Sociaal Contract}\\ Bevorderen van de cultuur van Vrije Software
sinds 1993
					\hbr
				\item \textbf{Onafhankelijkheid} -- geen (enkel) bedrijf babysit op Debian\\ En
een open besluitvormingproces (\textsl{doe-ocratie} + \textsl{democratie})
			\end{itemize}
                        \br
                \item \textbf{Liefhebber} in de beste betekenis: gedaan uit liefde ervoor
	\end{itemize}
\end{frame}

\subsection{Debian-pakketten}
\begin{frame}{Debian-pakketten}
\begin{itemize}
\item \textbf{.deb}-bestanden (binaire pakketten)
	\br
\item Een zeer krachtige en handige manier om software naar gebruikers te brengen
	\br
\item Een van de twee meest voorkomende pakketformaten (samen met RPM)
	\br
\item Universeel:
	\begin{itemize}
		\item 30.000 binaire pakketten in Debian\\ $\rightarrow$ het merendeel van de
beschikbare vrije software wordt in Debian verpakt!
			\hbr
		\item Voor 12 ports (architecturen), waaronder 2 niet-Linux (Hurd; KFreeBSD)
			\hbr
		\item Ook gebruikt door 120 van Debian afgeleide distributies
	\end{itemize}
\end{itemize}
\end{frame}


\subsection{De Deb-pakketindeling}

\begin{frame}[fragile=singleslide]{De Deb-pakketindeling}
  \begin{itemize}
  \item \texttt{.deb}-bestand: een \texttt{ar}-archief
    \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
$ ar tv wget_1.12-2.1_i386.deb
rw-r--r-- 0/0      4 Sep  5 15:43 2010 debian-binary
rw-r--r-- 0/0   2403 Sep  5 15:43 2010 control.tar.gz
rw-r--r-- 0/0 751613 Sep  5 15:43 2010 data.tar.gz
    \end{lstlisting} \begin{itemize}
    \item \texttt{debian-binary}: versie van de deb-bestandsindeling,
\texttt{"2.0\textbackslash{}n"}
    \item \texttt{control.tar.gz}: metadata over het pakket\\ {\small
\texttt{\textbf{control}, md5sums, (pre|post)(rm|inst), triggers, shlibs},
\ldots}
    \item \texttt{data.tar.gz}: data-bestanden van het pakket
    \end{itemize}
    \br
  \item U zou uw \texttt{.deb}-bestanden handmatig kunnen aanmaken\\ {\footnotesize
\url{http://tldp.org/HOWTO/html\_single/Debian-Binary-Package-Building-HOWTO/}}
    \br
  \item Maar de meeste mensen doen het niet op die manier
  \end{itemize}
  \br
  \centerline{\textbf{Deze inleiding: Debian-pakketten maken op de manier van Debian}}
\end{frame}

\subsection{Hulpmiddelen die u nodig heeft}
\begin{frame}{Hulpmiddelen die u nodig heeft}
  \begin{itemize}
  \item Een Debian- (of Ubuntu)-systeem (met systeembeheerders-toegang)
    \br
  \item Enkele pakketten:
    \begin{itemize}
    \item \textbf{build-essential}: bevat de vereisten van de pakketten waarvan wordt
aangenomen dat ze beschikbaar zijn op de machine van de ontwikkelaar
(onnodig om deze te vermelden in het controleveld \texttt{Build-Depends:}
van uw pakket)
      \begin{itemize}
      \item waaronder de vereiste \textbf{dpkg-dev}, welke basale Debian-specifieke
hulpmiddelen voor het aanmaken van pakketten bevat
      \end{itemize}
      \hbr
    \item \textbf{devscripts}: bevat veel nuttige scripts voor Debian-onderhouders
    \end{itemize}
  \end{itemize}

  \br
  Veel andere hulpmiddelen zullen ook later vermeld worden, zoals
\textbf{debhelper}, \textbf{cdbs}, \textbf{quilt}, \textbf{pbuilder},
\textbf{sbuild}, \textbf{lintian}, \textbf{svn-buildpackage},
\textbf{git-buildpackage}, \ldots\\ Installeer deze wanneer u ze nodig
heeft.
\end{frame}

\subsection{Algemene werkwijze bij het verpakken}
\begin{frame}{Algemene werkwijze bij het verpakken}
  \begin{center}
    \begin{tikzpicture}[
      node1/.style={shape=rectangle,draw=rouge,fill=debianbackgroundblue,thick},
      arr/.style={very thick}, command/.style={text=rouge,font=\ttfamily}, ]
      
      \node[node1] (www) at (0, 0) {Web}; \node[node1] (us) at (2.5, 0)
{bovenstroom-broncode}; \node[node1] (da) at (-2.5, 0) {Debian
spiegelserver}; \node[node1] (sp) at (0, -2) {broncodepakket};
\draw[arr,<-,dashed,thick] (sp) -- (2.5,-2) node[right=0cm,text
width=3.48cm,text centered,font=\small\sl] {waar het meeste manuele werk
gebeurt}; \node[node1] (bin) at (0, -4) {één van de vele binaire pakketten};
\draw[arr,<-,dashed,thick] (bin) -- (3.5,-4) node[right,text
centered,font=\small\ttfamily\sl] {.deb\normalfont}; \draw[arr,->] (us) --
(sp) node[pos=0.5,right,command] {dh\_make}; \draw[arr,->] (da) -- (sp)
node[pos=0.5,left,command] {apt-get source}; \draw[arr,->] (www) -- (sp)
node[pos=0.5,left,command] {dget}; \draw[arr,->] (sp) -- (bin)
node[pos=0.5,right,text width=6cm] {\textttc{debuild} (bouwen en testen met
\textttc{lintian}) of \textttc{dpkg-buildpackage}}; \draw[arr,->] (bin) --
(1,-6) node[pos=0.5,right] {installeren (\textttc{debi})};
\draw[transparent] (bin) -- (-1,-6) node[pos=0.5,left,opaque] {uploaden
(\textttc{dput})}; \draw[arr,->,rounded corners] (bin) -- (-1,-6) --
(-4.5,-6) -- (-4.5,0) -- (da); \useasboundingbox (-4,-6) rectangle (6,0); \end{tikzpicture}
  \end{center}
\end{frame}

\subsection{Dash opnieuw bouwen}
\begin{frame}{Voorbeeld: dash opnieuw bouwen}
\begin{enumerate}
\item Installeer pakketten nodig om dash te bouwen, plus devscripts\\ 
{\texttt{sudo apt-get build-dep dash}\\ (vereist \texttt{deb-src}-regels in
\texttt{/etc/apt/sources.list})}\\ {\texttt{sudo apt-get install
-{}-no-install-recommends devscripts fakeroot}}
  \hbr
\item Maak een werkmap aan en ga er binnen:\\ \texttt{mkdir /tmp/debian-tutorial ;
cd /tmp/debian-tutorial}
  \hbr
\item Haal het broncodepakket \texttt{dash} op\\ \texttt{apt-get source dash}\\ 
{\small (Daarvoor moet u \texttt{deb-src}-regels hebben in uw
\texttt{/etc/apt/sources.list})}
  \hbr
\item Bouw het pakket\\ {\texttt{cd dash-*\\ debuild -us -uc}} ~~~(\texttt{-us
-uc} om pakket niet te ondertekenen met GPG)

  \hbr
\item Controleer of het werkte
	\begin{itemize}
		\item  Er staan enkele nieuwe \texttt{.deb}-bestanden in de bovenliggende map
	\end{itemize}
    \hbr
\item Bekijk de map \texttt{debian/}
	\begin{itemize}
		\item Daar vindt het verpakkingswerk plaats
	\end{itemize}
\end{enumerate}
\end{frame}

\section{Broncodepakketten maken}
\subsection{Broncodepakketten - grondbeginselen}
\begin{frame}{Broncodepakket}
  \begin{itemize}
  \item Eén broncodepakket kan meerdere binaire pakketten geven\\ {\small bijv. de
broncode \texttt{\bfseries libtar} genereert de binaire pakketten
\texttt{\bfseries libtar0} en \texttt{\bfseries libtar-dev}} \hbr
  \item Twee soorten pakketten: (gebruik bij twijfel non-native)
    \begin{itemize}
      \small
    \item Native (eigen) pakketten: normaal Debian-specifieke software (\textsl{dpkg},
\textsl{apt})
    \item Non-native (niet-eigen) pakketten: buiten Debian ontwikkelde software
    \end{itemize}
    \hbr
  \item Hoofdbestand: \texttt{.dsc} (meta-gegevens)
    \hbr
  \item Andere bestanden zijn afhankelijk van de versie van de broncode-indeling
    \begin{itemize}
    \item 1.0 of 3.0 (native): \texttt{pakket\_versie.tar.gz}
      \hbr
    \item 1.0 (non-native):
      \begin{itemize}
      \item \texttt{pkt\_ver.orig.tar.gz}: bovenstroomse broncode
      \item \texttt{pkt\_debver.diff.gz}: patch voor het toevoegen van Debian-specifieke
aanpassingen
      \end{itemize}
      \hbr
    \item 3.0 (quilt):
      \begin{itemize}
      \item \texttt{pkt\_ver.orig.tar.gz}: bovenstroomse broncode
      \item \texttt{pkt\_debver.debian.tar.gz}: tar-archief met Debian-wijzigingen
      \end{itemize}
    \end{itemize}
  \end{itemize}
  \hbr
  (Zie \texttt{dpkg-source(1)} voor exacte details)
\end{frame}

\begin{frame}[fragile=singleslide]{Voorbeeld broncodepakket (wget\_1.12-2.1.dsc)}
  \begin{lstlisting}[basicstyle=\ttfamily\small]
Format: 3.0 (quilt)
Source: wget
Binary: wget
Architecture: any
Version: 1.12-2.1
Maintainer: Noel Kothe <noel@debian.org>
Homepage: http://www.gnu.org/software/wget/
Standards-Version: 3.8.4
Build-Depends: debhelper (>> 5.0.0), gettext, texinfo,
 libssl-dev (>= 0.9.8), dpatch, info2man
Checksums-Sha1: 
 50d4ed2441e67[..]1ee0e94248 2464747 wget_1.12.orig.tar.gz
 d4c1c8bbe431d[..]dd7cef3611 48308 wget_1.12-2.1.debian.tar.gz
Checksums-Sha256: 
 7578ed0974e12[..]dcba65b572 2464747 wget_1.12.orig.tar.gz
 1e9b0c4c00eae[..]89c402ad78 48308 wget_1.12-2.1.debian.tar.gz
Files: 
 141461b9c04e4[..]9d1f2abf83 2464747 wget_1.12.orig.tar.gz
 e93123c934e3c[..]2f380278c2 48308 wget_1.12-2.1.debian.tar.gz
\end{lstlisting}
\end{frame}

\subsection{Ophalen van broncodepakketten}
\begin{frame}{Een bestaand broncodepakket ophalen}
  \begin{itemize}
  \item Uit het archief van Debian:
    \begin{itemize}
    \item \texttt{apt-get source \textsl{pakket}}
    \item \texttt{apt-get source \textsl{pakket=versie}}
    \item \texttt{apt-get source \textsl{pakket/release}}
    \end{itemize}
    (U moet \texttt{deb-src}-regels hebben in \texttt{sources.list})
    \br
  \item Van het internet:
    \begin{itemize}
    \item \texttt{dget \textsl{url-naar.dsc}}
    \item \texttt{dget
http://snapshot.debian.org/archive/debian-archive/\\20090802T004153Z/debian/dists/bo/main/source/web/\\ 
wget\_1.4.4-6.dsc}\\ (\href{http://snapshot.debian.org/}{\ttfamily
snapshot.d.o} bevat alle Debian-pakketten sinds 2005)
    \end{itemize}
    \br
  \item Van het (opgegeven) versiebeheersysteem:
    \begin{itemize}
    \item \texttt{debcheckout \textsl{pakket}}
    \end{itemize}
    \br
  \item Extraheer na het downloaden met \texttt{dpkg-source -x \textsl{file.dsc}}
  \end{itemize}
\end{frame}

\subsection{Een basaal broncodepakket aanmaken}
\begin{frame}{Een basaal broncodepakket aanmaken}
  \begin{itemize}
  \item Download de bovenstroomse broncode\\ (\textsl{bovenstroomse broncode} = die
van de originele softwareontwikkelaars)
    \hbr
  \item Hernoem naar
\texttt{<\textsl{bron\_pakket}>\_<\textsl{bovenstroom\_versie}>.orig.tar.gz}\\ 
(bijvoorbeeld: \texttt{simgrid\_3.6.orig.tar.gz})
    \hbr
  \item Pak uit
    \hbr
  \item Hernoem de map naar
\texttt{<\textsl{bron\_pakket}>-<\textsl{bovenstroom\_versie}>}\\ 
(voorbeeld: \texttt{simgrid-3.6})
    \hbr
  \item \texttt{cd \texttt{<\textsl{bron\_pakket}>-<\textsl{bovenstroom\_versie}>}
\&\& dh\_make}\\ (uit het pakket \textbf{dh-make})
    \hbr
  \item Er bestaan enkele alternatieven voor \texttt{dh\_make} voor specifieke
groepen pakketten: \textbf{dh-make-perl}, \textbf{dh-make-php}, \ldots \hbr
  \item Er werd een map \texttt{debian/} aangemaakt met daarin een heleboel
bestanden
  \end{itemize}
\end{frame}

\subsection{Bestanden in debian/}
\begin{frame}{Bestanden in debian/}
  Alle verpakkingswerk gebeurt door bestanden in \texttt{debian/} te wijzigen
  \hbr
  \begin{itemize}
  \item Hoofdbestanden:
    \begin{itemize}
    \item \textbf{control} -- meta-gegevens over het pakket (vereisten, enz.)
    \item \textbf{rules} -- geeft aan hoe het pakket gebouwd moet worden
    \item \textbf{copyright} -- auteursrechtinformatie voor het pakket
    \item \textbf{changelog} -- geschiedenis van het Debian-pakket
    \end{itemize}
    \hbr
  \item Andere bestanden:
    \begin{itemize}
    \item compat
    \item watch
    \item dh\_install* targets\\ {\small *.dirs, *.docs, *.manpages, \ldots}
    \item onderhoudsscripts \\ {\small *.postinst, *.prerm, \ldots}
    \item source/format
    \item patches/ -- indien u de bovenstroomse broncode moet aanpassen
    \end{itemize}
    \hbr
  \item Verschillende bestanden hebben een op RFC 822 (mail-kopregels) gebaseerde
indeling
  \end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{debian/changelog}
  \begin{itemize}
  \item Vermeldt de Debian verpakkingswijzigingen
  \item Vermeldt de huidige versie van het pakket
  \begin{center}
    \begin{tikzpicture}
	    \draw (0,0) node[above right] {\large 1.2.1.1-5}; \draw
[decorate,decoration={brace}] (2,0) -- (1.45,0) node[at start,below,text
width=1.6cm,text centered] {\small Debian revisie}; \draw
[decorate,decoration={brace}] (1.4,0) -- (0,0) node[midway,below,text
width=1.6cm,text centered] { \small Upstream versie};
\end{tikzpicture}
\end{center}


	  \item Handmatig ingevoerd of bewerkt met \textttc{dch}
  \begin{itemize}
	  \item Een changelog-item aanmaken voor een nieuwe release: \textttc{dch -i}
  \end{itemize}
  \item Speciale indeling om automatisch Debian of Ubuntu bugs te sluiten\\ Debian:
\texttt{Closes:~\#595268}; Ubuntu: \texttt{LP:~\#616929}
  \item Geïnstalleerd als
\texttt{/usr/share/doc/\textit{pakket}/changelog.Debian.gz}
  \end{itemize}
  \seprule
  \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
mpich2 (1.2.1.1-5) unstable; urgency=low

  * Use /usr/bin/python instead of /usr/bin/python2.5. Allow
    to drop dependency on python2.5.  Closes: #595268
  * Make /usr/bin/mpdroot setuid. This is the default after
    the installation of mpich2 from source, too. LP: #616929
    + Add corresponding lintian override.

 -- Lucas Nussbaum <lucas@debian.org>  Wed, 15 Sep 2010 18:13:44 +0200
\end{lstlisting}
\end{frame}

\begin{frame}[fragile=singleslide]{debian/control}
  \hbr
  \begin{itemize}
  \item Pakket-metagegevens
    \begin{itemize}
    \item Voor het broncodepakket zelf
    \item Voor elk binair pakket dat uit deze broncode gebouwd wordt
    \end{itemize}
    \hbr
  \item Pakketnaam, sectie, prioriteit, onderhouder, uploaders, bouw-vereisten,
vereisten, beschrijving, homepagina, \ldots \hbr
  \item Documentatie: Debian beleidshandboek hoofdstuk 5\\ 
\url{https://www.debian.org/doc/debian-policy/ch-controlfields}
  \end{itemize}
  \seprule
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
Source: wget
Section: web
Priority: important
Maintainer: Noel Kothe <noel@debian.org>
Build-Depends: debhelper (>> 5.0.0), gettext, texinfo,
 libssl-dev (>= 0.9.8), dpatch, info2man
Standards-Version: 3.8.4
Homepage: http://www.gnu.org/software/wget/

Package: wget
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: retrieves files from the web
 Wget is a network utility to retrieve files from the Web
\end{lstlisting}
\end{frame}

\begin{frame}{Architectuur: all of any}
  Twee soorten binaire pakketten:
  \hbr
  \begin{itemize}
  \item Pakketten met verschillende inhoud voor elke Debian-architectuur
    \begin{itemize}
    \item Bijvoorbeeld: C-programma
    \item \texttt{Architecture:\ any} in \texttt{debian/control}
      \begin{itemize}
      \item Of, als het enkel werkt op een deelgroep architecturen:\\ 
\texttt{Architecture:\ amd64 i386 ia64 hurd-i386}
      \end{itemize}
    \item buildd.debian.org: bouwt alle andere architecturen voor u na het uploaden
    \item Genaamd \texttt{\textsl{pakket}\_\textsl{versie}\_\textsl{architectuur}.deb}
    \end{itemize}
    \br
  \item Pakketten met dezelfde inhoud op alle architecturen
    \begin{itemize}
    \item Bijvoorbeeld: Perl-bibliotheek
    \item \texttt{Architecture:\ all} in \texttt{debian/control}
    \item Genaamd \texttt{\textsl{pakket}\_\textsl{versie}\_\textbf{all}.deb}
    \end{itemize}
  \end{itemize}
  \br
  Uit een broncodepakket kan een mengeling van \texttt{Architecture:\ any} en
\texttt{Architecture:\ all} binaire pakketten gegenereerd worden
\end{frame}

\begin{frame}[fragile=singleslide]{debian/rules}
  \hbr
  \begin{itemize}
  \item Make-bestand
    \br
  \item Interface die gebruikt wordt om Debian-pakketten te bouwen
    \br
  \item Beschreven in Debian beleidshandboek, hoofdstuk 4.8\\ {\small
\url{https://www.debian.org/doc/debian-policy/ch-source\#s-debianrules}}
    \br
  \item Vereiste doelen:
    \begin{itemize}
    \item \texttt{build, build-arch, build-indep}: moet alle configuratie en
compilatie uitvoeren
      \hbr
    \item \texttt{binary, binary-arch, binary-indep}: binaire pakketten bouwen
      \begin{itemize}
      \item \texttt{dpkg-buildpackage} aanroept \texttt{binary} om alle pakketten te
bouwen of \texttt{binary-arch} om enkel de
\texttt{Architecture:~any}-pakketten te bouwen
      \end{itemize}
      \hbr
    \item \texttt{clean}: de broncodemap opruimen
    \end{itemize}
  \end{itemize}
\end{frame}

\subsection{Verpakkingshulpprogramma's}
\begin{frame}{Verpakkingshulpprogramma's -- debhelper}
  \begin{itemize}
  \item U kunt in \texttt{debian/rules} rechtstreeks shell-code schrijven
  \item Beter (voor de meeste pakketten): een \textsl{verpakkingshulpprogramma}
  \item Het populairste is: \textbf{debhelper} (voor 98\% van de pakketten gebruikt)
  \item Doelstellingen:
    \begin{itemize}
    \item Gewone taken opnemen in door alle pakketten gebruikt gereedschap
    \item Sommige verpakkingsfouten in eenmaal oplossen voor alle pakketten
    \end{itemize}{\footnotesize dh\_installdirs, dh\_installchangelogs, dh\_installdocs,
dh\_install, dh\_installdebconf, dh\_installinit, dh\_link, dh\_strip,
dh\_compress, dh\_fixperms, dh\_perl, dh\_makeshlibs, dh\_installdeb,
dh\_shlibdeps, dh\_gencontrol, dh\_md5sums, dh\_builddeb, \ldots}
    \begin{itemize}
    \item Wordt aangeroepen vanuit \texttt{debian/rules}
    \item Configureerbaar met commandoparameters of bestanden in \texttt{debian/}
    \end{itemize}{\footnotesize \ttfamily \textsl{pakket}.docs, \textsl{pakket}.examples,
\textsl{pakket}.install, \textsl{pakket}.manpages, \ldots} \hbr
  \item Hulpprogramma's van derden voor bepaalde groepen pakketten:
\textbf{python-support}, \textbf{dh\_ocaml}, \ldots \hbr
  \item \texttt{debian/compat}: Debhelper-compatibiliteitsversie
	  \begin{itemize}
		  \item Definieert het precieze gedrag van dh\_*
		  \item Nieuwe syntaxis: \texttt{Build-Depends: debhelper-compat (= 13)}
	  \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{debian/rules met debhelper (1/2)}
  \begin{lstlisting}[basicstyle=\ttfamily\footnotesize,escapeinside=\{\}]
#!/usr/bin/make -f

# Verwijder commentaarteken om breedsprakige modus aan te zetten.
#export DH_VERBOSE=1

build: 
        $(MAKE)
        #docbook-naar-man debian/pakketnaam.sgml > pakketnaam.1

clean: 
        dh_testdir
        dh_testroot
        rm -f build-stamp configure-stamp
        $(MAKE) clean
        dh_clean 

install: build
        dh_testdir
        dh_testroot
        dh_clean -k 
        dh_installdirs
        # Hier commando's voor pakketinstallatie in debian/pakketnaam.
        $(MAKE) DESTDIR=$(CURDIR)/debian/pakketnaam install
\end{lstlisting}
\end{frame}

\begin{frame}[fragile=singleslide]{debian/rules met debhelper (2/2)}
  \begin{lstlisting}[basicstyle=\ttfamily\footnotesize,escapeinside=\{\}]
# Hier architectuur-onafhankelijke bouwbestanden.
binary-indep: build install

# Hier architectuur-afhankelijke bouwbestanden.
binary-arch: build install
        dh_testdir
        dh_testroot
        dh_installchangelogs 
        dh_installdocs
        dh_installexamples
        dh_install
        dh_installman
        dh_link
        dh_strip
        dh_compress
        dh_fixperms
        dh_installdeb
        dh_shlibdeps
        dh_gencontrol
        dh_md5sums
        dh_builddeb

binary: binary-indep binary-arch
.PHONY: build clean binary-indep binary-arch binary install configure
\end{lstlisting}
\end{frame}

\begin{frame}[fragile=singleslide]{CDBS}
  \hbr
  \begin{itemize}
  \item Met debhelper is er nog steeds veel redundantie tussen pakketten
    \hbr
  \item Hulpprogramma's van het tweede niveau met algemene functionaliteit
    \begin{itemize}
    \item Bijv. bouwen met \texttt{./configure \&\& make \&\& make install} of CMake
    \end{itemize}
    \hbr
  \item CDBS:
    \begin{itemize}
    \item Geïntroduceerd in 2005, gebaseerd op geavanceerde \textsl{GNU make}-magie
    \item Documentatie: \texttt{/usr/share/doc/cdbs/}
    \item Ondersteunt Perl, Python, Ruby, GNOME, KDE, Java, Haskell, \ldots
    \item Maar sommige mensen haten het:
      \begin{itemize}
      \item Soms moeilijk om het bouwen van pakketten aan te passen:\\ "\textsl{kromme
puinhoop make-bestanden en omgevingsvariabelen}"
      \item Trager dan debhelper zelf (veel nutteloos aanroepen van \texttt{dh\_*})
      \end{itemize}
    \end{itemize}
  \end{itemize}
  \seprule
      \begin{lstlisting}[basicstyle=\ttfamily\footnotesize,escapeinside=\{\}]
#!/usr/bin/make -f
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk

# een actie toevoegen na het bouwen
build/mijnpakket::
    /bin/bash debian/scripts/foo.sh
      \end{lstlisting}
\end{frame}

\begin{frame}[fragile=singleslide]{Dh (ook bekend als Debhelper 7 of dh7)}
  \begin{itemize}
  \item Geïntroduceerd in 2008 als een \textsl{CDBS-doder}
    \hbr
  \item \textbf{dh} commando dat \texttt{dh\_*} aanroept
    \hbr
  \item Eenvoudige \textsl{debian/rules}, enkel opsomming overrides
(overschrijvingen)
    \hbr
  \item Makkelijker aan te passen dan CDBS
    \hbr
  \item Doc: man-pagina's (\texttt{debhelper(7)}, \texttt{dh(1)}) + dia's van
DebConf9-presentatie\\ 
\url{http://kitenet.net/~joey/talks/debhelper/debhelper-slides.pdf}
  \end{itemize}
  \seprule
    \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
#!/usr/bin/make -f
%:
    dh $@

override_dh_auto_configure:
     dh_auto_configure -- --with-kitchen-sink

override_dh_auto_build:
     make world

    \end{lstlisting}
\end{frame}

\begin{frame}{Klassieke debhelper vs CDBS vs dh}
  \hbr
  \begin{itemize}
  \item Aanhang:\\ Klassieke debhelper: 15\% \hskip 1em CDBS: 15\% \hskip 1em dh:
68\%
    \hbr
  \item Welk moet ik leren?
    \begin{itemize}
    \item Wellicht een beetje van allemaal
    \item U moet debhelper kennen om dh en CDBS te gebruiken
    \item Mogelijk moet u CDBS-pakketten aanpassen
    \end{itemize}
    \hbr
  \item Welk moet ik gebruiken voor een nieuw pakket?
    \begin{itemize}
	    \item \textbf{dh} (enig hulpmiddel met een groeiende aanhang)
	    \item Zie \url{https://trends.debian.net/\#build-systems}
    \end{itemize}
  \end{itemize}
  
  \hbr


\end{frame}

\section{Pakketten bouwen en testen}
\subsection{Pakketten bouwen}
\begin{frame}{Pakketten bouwen}
  \begin{itemize}
  \item \textttc{apt-get build-dep mijnpakket}\\ Installeert
\textsl{build-dependencies} (voor reeds in Debian aanwezig pakket)\\ Of
\textttc{mk-build-deps -ir} (voor een pakket dat nog niet geüpload werd)
    
    \br
  \item \textttc{debuild}: bouwen, testen met \texttt{lintian}, ondertekenen met GPG
    \br
  \item Het is ook mogelijk om rechtstreeks \textttc{dpkg-buildpackage} aan te
roepen
    \begin{itemize}
    \item Gewoonlijk met \texttt{dpkg-buildpackage -us -uc}
    \end{itemize}
    \br
  \item Het is best om pakketten te bouwen in een zuivere \& minimale omgeving
    \begin{itemize}
    \item \textttc{pbuilder} -- hulpprogramma om een pakket te bouwen in een
\textsl{chroot}\\ Goede documentatie:
\url{https://wiki.ubuntu.com/PbuilderHowto}\\ (optimalisatie:
\textttc{cowbuilder} \textttc{ccache} \textttc{distcc})
      \hbr
    \item \textttc{schroot} en \textttc{sbuild}: gebruikt op de Debian
bouwachtergronddiensten\\ (minder eenvoudig dan \texttt{pbuilder}, wel
LVM-momentopname mogelijk\\ zie:
\url{https://help.ubuntu.com/community/SbuildLVMHowto} )
    \end{itemize}
    \br
  \item Genereert \texttt{.deb}-bestanden en een \texttt{.changes}-bestand
    \begin{itemize}
    \item \texttt{.changes}: beschrijft wat gebouwd werd; gebruikt om het pakket te
uploaden
    \end{itemize}
  \end{itemize}
\end{frame}
\subsection{Pakketten installeren en testen}
\begin{frame}{Pakketten installeren en testen}
  \begin{itemize}
  \item Het pakket lokaal installeren: \textttc{debi} (zal gebruik maken van
\texttt{.changes} om te weten wat geïnstalleerd moet worden) \br
  \item De inhoud van het pakket tonen: \texttt{{\color{rouge}debc}
../mijnpakket<TAB>.changes} \br
  \item Het pakket vergelijken met een eerdere versie:\\ 
\texttt{{\color{rouge}debdiff} ../mijnpakket\_1\_*.changes
../mijnpakket\_2\_*.changes}\\ of om de broncode te vergelijken:\\ 
\texttt{{\color{rouge}debdiff} ../mijnpakket\_1\_*.dsc
../mijnpakket\_2\_*.dsc}\\
    \br
  \item Het pakket controleren met \texttt{lintian} (statische analysator):\\ 
\texttt{{\color{rouge}lintian} ../mijnpakket<TAB>.changes}\\ \texttt{lintian
-i}: geeft meer informatie over de fouten \\ \texttt{lintian -EviIL
+pedantic}: toont meer problemen\br
  \item Het pakket naar Debian uploaden (\textttc{dput}) (daarvoor is configuratie
nodig) \br
  \item Een persoonlijk Debian-archief beheren met \textttc{reprepro} of
\textttc{aptly}\\ Documentatie:
\url{https://wiki.debian.org/HowToSetupADebianRepository}
  \end{itemize}
\end{frame}
\section{Praktijkoefening 1: het grep-pakket aanpassen}
\begin{frame}{Praktijkoefening 1: het grep-pakket aanpassen}
  \begin{enumerate}
  \item Ga naar \url{http://ftp.debian.org/debian/pool/main/g/grep/} en download
versie 2.12-2 van het pakket
    \begin{itemize}
		   \item Indien het broncodepakket niet automatisch uitgepakt wordt, pak het dan uit
met \texttt{dpkg-source~-x~grep\_*.dsc}
    \end{itemize}

  \item Bekijk de bestanden in \texttt{debian/}.
    \begin{itemize}
    \item 		Hoeveel binaire pakketten worden uit dit bronpakket gegenereerd?
    \item 		Welk verpakkingshulpprogramma wordt gebruikt voor dit pakket?
    \end{itemize}
    \hbr
  \item Bouw het pakket
    \hbr
  \item Nu gaan we het pakket aanpassen. Voeg een changelog-item toe en verhoog het
versienummer.
    \hbr
  \item Schakel ondersteuning voor perl-regexp uit (is een
\texttt{./configure}-optie)
    \hbr
  \item Bouw het pakket nogmaals
    \hbr
  \item Vergelijk het originele en het nieuwe pakket met debdiff
    \hbr
  \item Installeer het nieuwgebouwde pakket
  \end{enumerate}
\end{frame}

\section{Geavanceerde verpakkingsonderwerpen}
\subsection{debian/copyright}
\begin{frame}[fragile=singleslide]{debian/copyright}
  \hbr
  \begin{itemize}
  \item Copyright- en licentie-informatie in verband met broncode en verpakking
  \item Traditioneel geschreven als een tekstbestand
  \item Nieuwe machine-leesbare indeling:
{\small\url{https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/}}
  \end{itemize}
  \seprule
  \begin{lstlisting}[basicstyle=\ttfamily\scriptsize]
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: X Solitaire
Source: ftp://ftp.example.com/pub/games

Files: *
Copyright: Copyright 1998 John Doe <jdoe@example.com>
License: GPL-2+
 Dit programma is vrije software; u mag het verspreiden
 [...]
 .
 Op Debian-systemen is de volledige tekst van de GNU General
 Public License versie 2 te vinden in het bestand
 `/usr/share/common-licenses/GPL-2'.

Files: debian/*
Copyright: Copyright 1998 Jane Smith <jsmith@example.net>
License:
 [LICENTIETEKST]
\end{lstlisting}
\end{frame}



\subsection{De bovenstroomse broncode aanpassen}
\begin{frame}{De bovenstroomse broncode aanpassen}
  Vaak nodig:
  \begin{itemize}
  \item Bugs repareren of Debian-specifieke aanpassingen toevoegen
    \hbr
  \item Reparaties uit een recentere bovenstroomse versie naar een eerdere versie
overbrengen (backport)
  \end{itemize}
  \br
  Verschillende manieren om dit te doen:
  \begin{itemize}
  \item De bestanden rechtstreeks wijzigen
    \begin{itemize}
    \item Eenvoudig
    \item Maar geen mogelijkheid om de wijzigingen bij te houden en te documenteren
    \end{itemize}
    \hbr
  \item Patch-systemen gebruiken
    \begin{itemize}
    \item Maakt het makkelijker om uw aanpassingen terug te koppelen naar de
bovenstroomse ontwikkelaar
    \item Helpt het delen van de reparaties met afgeleide distributies
    \item Geeft meer zicht op de veranderingen\\ 
\url{http://patch-tracker.debian.org/} (momenteel uitgezet)
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}{Patch-systemen}
  \begin{itemize}
  \item Principe: wijzigingen worden als patches opgeslagen in
\texttt{debian/patches/}
    \br
  \item Toegepast of niet toegepast tijdens het bouwen
    \br
  \item Vroeger: meerdere toepassingen -- \textsl{simple-patchsys} (\textsl{cdbs}),
\textsl{dpatch}, \textbf{\textsl{quilt}}
    \begin{itemize}
  \item Elk van hen ondersteunt twee \texttt{debian/rules}-targets:
    \begin{itemize}
    \item \texttt{debian/rules patch}: alle patches toepassen
    \item \texttt{debian/rules unpatch}: geen patches toepassen
    \end{itemize}
	  \hbr
  \item Meer documentatie: \url{https://wiki.debian.org/debian/patches}
  \end{itemize}
  \br
  \item \textbf{Nieuwe bronpakketindeling met ingebouwd patch-systeem: 3.0 (quilt)}
  \begin{itemize}
  \item Aanbevolen werkwijze
	  \hbr
  \item U moet \textsl{quilt} leren\\ 
\url{https://perl-team.pages.debian.net/howto/quilt.html}
    \hbr
  \item Patch-systeem-agnostisch hulpmiddel in \texttt{devscripts}:
\texttt{edit-patch}
  \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Documentatie van patches}
  \begin{itemize}
	  \item Standaard kopregels bij het begin van de patch
    \br
  \item Gedocumenteerd in DEP-3 - Richtlijnen voor het merken van patches\\ 
\url{http://dep.debian.net/deps/dep3/}
  \end{itemize}
  \vfill
\seprule
  \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
Description: Snelheid van morrelen met widgets repareren
 Te snel morrelen met widgets gaf explosiegevaar.
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}
\end{frame}

\subsection{Dingen doen tijdens installatie en verwijdering}
\begin{frame}{Dingen doen tijdens installatie en verwijdering}
  \begin{itemize}
  \item Het pakket uitpakken volstaat soms niet
    \hbr
  \item Systeemgebruikers maken/verwijderen, diensten starten/stoppen,
\textsl{alternatives} beheren
    \hbr
  \item Gebeurt in \textsl{maintainerscripts}\\ \texttt{preinst, postinst, prerm,
postrm}
    \begin{itemize}
	    \item  Met debhelper kan men fragmenten voor algemene acties genereren
    \end{itemize}
    \hbr
  \item Documentatie:
    \begin{itemize}
    \item Debian Beleidshandboek, hoofdstuk 6\\ {\footnotesize
\url{https://www.debian.org/doc/debian-policy/ch-maintainerscripts}}
      
      \hbr
    \item Debian Referentiehandleiding voor ontwikkelaars, hoofdstuk 6.4\\ 
{\scriptsize
\url{https://www.debian.org/doc/developers-reference/best-pkging-practices.html}}
      \hbr
    \item {\footnotesize
\url{https://people.debian.org/~srivasta/MaintainerScripts.html}}
    \end{itemize}
    \br
  \item De gebruiker een vraag stellen
    \begin{itemize}
    \item Moet met \textbf{debconf} gebeuren
      \hbr
    \item Documentatie: \texttt{debconf-devel(7)} (pakket \texttt{debconf-doc})
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Bovenstroomse versies volgen}
  \begin{itemize}
  \item Waar gekeken moet worden, opgeven in \texttt{debian/watch} (zie
\texttt{uscan(1)})
    \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
version=3

http://tmrc.mit.edu/mirror/twisted/Twisted/(\d\.\d)/ \
  Twisted-([\d\.]*)\.tar\.bz2
    \end{lstlisting}
    \br
  \item Er zijn geautomatiseerde volgers van nieuwe bovenstroomse versies, welke de
onderhouder via verschillende instrumentenborden informeren, zoals
\url{https://tracker.debian.org/} en \url{https://udd.debian.org/dmd/}
    \br
  \item \texttt{uscan}: een handmatige controle uitvoeren
    \br
  \item \texttt{uupdate}: uw pakket proberen opwaarderen naar de laatste
bovenstroomse versie
  \end{itemize}
\end{frame}

\subsection{Verpakken met een versiecontrolesysteem (SVN, Git)}
\begin{frame}[fragile=singleslide]{Verpakken met een versiecontrolesysteem}
  \begin{itemize}
  \item Diverse middelen beheren aftakkingen en tags voor uw verpakkingswerk:\\ 
\texttt{svn-buildpackage}, \texttt{git-buildpackage}
    \hbr
  \item Bijvoorbeeld: \texttt{git-buildpackage}
    \begin{itemize}
    \item \texttt{upstream}-tak om bovenstroom te volgen met
\texttt{upstream/\textsl{versie}}-tags
    \item \texttt{master}-tak volgt het Debian-pakket
    \item \texttt{debian/\textsl{versie}}-tags voor elke upload
    \item \texttt{pristine-tar}-tak om bovenstroom-tarball te kunnen herbouwen
    \end{itemize}
    Doc:
\url{http://honk.sigxcpu.org/projects/git-buildpackage/manual-html/gbp.html}
    \hbr
  \item \texttt{Vcs-*}-velden in \texttt{debian/control} om het archief te vinden
	  \begin{itemize}
		\item \url{https://wiki.debian.org/Salsa}
	\end{itemize}
\end{itemize}
  \begin{lstlisting}[basicstyle=\ttfamily\scriptsize]
Vcs-Browser: https://salsa.debian.org/debian/devscripts
Vcs-Git: https://salsa.debian.org/debian/devscripts.git
  \end{lstlisting}
  \begin{lstlisting}[basicstyle=\ttfamily\scriptsize]
Vcs-Browser: https://salsa.debian.org/perl-team/modules/packages/libwww-perl
Vcs-Git: https://salsa.debian.org/perl-team/modules/packages/libwww-perl.git
  \end{lstlisting}
  \begin{itemize}
  \item VCS-agnostische interface: \texttt{debcheckout}, \texttt{debcommit},
\texttt{debrelease}\\
    \begin{itemize}
	    \item     \texttt{debcheckout grep} $\rightarrow$ haalt het broncodepakket op uit Git
    \end{itemize}
\end{itemize}
\end{frame}

\subsection{Pakketten geschikt maken voor een eerdere release (backport)}
\begin{frame}{Pakketten geschikt maken voor een eerdere release (backport)}
  \begin{itemize}
  \item Bedoeling: een recentere versie van een pakket op een ouder systeem
gebruiken\\ bijv. \textsl{mutt} uit Debian \textsl{unstable} gebruiken op
Debian \textsl{stable}
	\br
  \item Algemeen idee:
	  \begin{itemize}
		\item Het broncodepakket uit Debian unstable nemen
		\hbr
		\item Het aanpassen zodat het gebouwd kan worden en goed werkt op Debian stable
		\begin{itemize}
			\item Soms onbeduidend (geen aanpassingen nodig)
			\item Soms moeilijk
			\item Soms onmogelijk (veel niet-beschikbare vereisten)
		\end{itemize}
	\end{itemize}
	\br
   \item Sommige van deze zogenaamde backports worden door het Debian-project
ondersteund en ter beschikking gesteld\\ \url{http://backports.debian.org/}
\end{itemize}
\end{frame}



\section{Pakketten onderhouden in Debian}
\subsection{Debian-archief en suites}
\begin{frame}{Debian-archief en suites}
  \begin{center}
	  \resizebox{\textwidth}{!}{
    \begin{tikzpicture}[
	    people/.style={shape=ellipse,draw,thick},
      suite/.style={shape=rectangle,draw},
	    devel/.style={fill=red!30!white},
	    test/.style={fill=orange!30!white},
	    prod/.style={fill=green!30!white,node distance=2cm},
	    internal/.style={},
	    old/.style={fill=gray!30!white},
	    veryold/.style={fill=gray!70!white},
      arr/.style={very thick},
	    uploads/.style={decorate,decoration={snake,amplitude=.4mm,segment length=2mm,post length=1mm}},
	    migrations/.style={};
	    command/.style={text=rouge,font=\ttfamily},
	    legend/.style={font=\small}
	    ]
      
      \draw node[suite,prod] (sec) {security}; \draw node[suite,prod,right=of sec]
(su) {stable-updates}; \draw node[suite,prod,right=of su] (st) {stable};
\draw node[suite,old,node distance=0.3cm,below=of st] (os) {oldstable};
\draw node[suite,veryold,node distance=0.3cm,below=of os] (ar)
{archive.d.o}; \draw node[suite,prod,right=of st] (bp) {backports}; \draw
node[suite,test] (spu) at ($(su) + (-0.6,2.5)$) {stable-proposed-updates};
\draw node[suite,internal] (sn) at ($(st) + (-1.8,1.4)$) {stable-new}; \draw
node[suite,test,node distance=1.5cm,above=of st] (te) {testing}; \draw
node[suite,devel,above=of te] (sid) {unstable}; \draw node[suite,devel]
(exp) at ($(sid) + (2.5,0.5)$) {experimental}; \draw node[suite,devel] (tpu)
at ($(te)!0.5!(sid) + (2.5,0)$) {testing-proposed-updates}; \draw
node[people,above=of sid] (dd) {ontwikkelaar}; \draw node[people,node
distance=3cm,left=of dd] (secteam) {veiligheidsteam}; \draw[arr,uploads,->]
(dd) -- (sid); \draw[arr,uploads,->] (dd) -- (exp);
\draw[arr,uploads,->,bend right=8] (dd) to (tpu); \draw[arr,uploads,->]
(secteam) -- (sid); \draw[arr,uploads,->] (secteam) -- (sec);
\draw[arr,uploads,->] (dd) to (spu); \draw[arr,uploads,->] plot [smooth,
tension=0.75] coordinates { (dd.east) ($(exp.north east)+(0.1,0.1)$)
($(tpu.east)+(0.2,0)$)  ($(bp.north east) + (-0.4,0)$) };
\draw[arr,migrations,->] (tpu) -- (te); \draw[arr,migrations,->] (sid) --
(te); \draw[arr,migrations,->] (te) -- (st) node
[midway,align=left,midway,right,font=\footnotesize] {stable\\ release};
\draw[arr,migrations,->] (sec) -- (sn); \draw[arr,migrations,->] (sn) to
node [pos=0.2] (spulabel) {} (st); \draw
node[font=\footnotesize,align=right] at ($(spulabel) + (-0.4,-0.45)$)
{stable \\ tussen- \\ release}; \draw[arr,migrations,->] (spu) to (sn);
\draw[arr,migrations,->] (spu) -- (su); \draw[arr,migrations,->] (st) --
(os); \draw[arr,migrations,->] (os) -- (ar); \coordinate (legend) at
(-2,-1); \draw[arr,uploads,->] (legend) -- ($(legend) + (0.7,0)$) node
[right,legend] {uploads van pakketten}; \coordinate[node
distance=1.1em,below=of legend] (legend2); \draw[arr,migrations,->]
(legend2) -- ($(legend2) + (0.7,0)$) node [right,legend] {pakketbewegingen
tussen suites}; \coordinate[node distance=1.5em,below=of legend2] (legend3);
\draw node[right,suite,devel,legend] (ldev) at (legend3) {ontwikkeling};
\draw node[node distance=0.1cm,right=of ldev,suite,test,legend] (ltest)
{test}; \draw node[node distance=0.1cm,right=of ltest,suite,internal,legend]
(lint) {intern}; \draw node[node distance=0.1cm,right=of
lint,suite,prod,legend] (lprod) {productie}; \draw ($(legend.north west) +
(-0.1,0.25)$) rectangle ($(lprod.south east) + (0.1,-0.1)$); \draw
node[font=\bf,red!70!white,align=center] (tnext) at ($(te.east) + (2,-0.1)$)
{voorbereiding van \\ volgende release}; \draw
node[font=\bf,green!70!black,align=center] (tsrm) at ($(sec.north east) +
(1,1)$) {stable\\release-\\beheer}; \pgfdeclarelayer{background}
\pgfdeclarelayer{foreground} \pgfsetlayers{background,main,foreground}
\begin{pgfonlayer}{background}
	    \fill[red!10!white] plot [smooth cycle,tension=0.55] coordinates {
($(sid.north west) + (-0.1,0.1)$) ($(exp.north east)+(0.1,0.1)$)
($(tpu.south east)+(0.1,-0.1)$) ($(tnext.south) + (0.6,0)$) ($(te.south
west) + (0.1,-0.1)$)  }; \fill[green!10!white] plot [smooth
cycle,tension=0.55] coordinates { ($(spu.north west) + (-0.1,0.1)$)
($(spu.north east)+(0.1,0.1)$) ($(sn.north east)+(0.1,0.1)$) ($(st.north
east) + (0.1,0.5)$) ($(bp.north east) + (0.1,0.1)$)  ($(bp.south east) +
(0.1,-0.1)$) ($(sec.south west) + (-0.1,-0.1)$)  };
\end{pgfonlayer}

    \end{tikzpicture}
	  }
  \end{center}
	\begin{flushright}
		\tiny Gebaseerd op een diagram van Antoine
Beaupr\'e. \url{https://salsa.debian.org/debian/package-cycle}~~~~~~~~~~~~
	\end{flushright}
\end{frame}

\begin{frame}{Ontwikkelingssuites}
		\begin{itemize}
			\item Nieuwe pakketversies worden geüpload naar \textbf{unstable} (\textbf{sid})
				\hbr
			\item Pakketten verschuiven van \textbf{unstable} naar \textbf{testing} op basis
van verschillende criteria (bijv. was gedurende 10 dagen in unstable zonder
regressies)
				\hbr
			\item Nieuwe pakketten kunnen ook geüpload worden naar:
				\begin{itemize}
					\item \textbf{experimental} (voor meer \textsl{experimentele} pakketten, zoals
wanneer de nieuwe versie niet klaar is om die welke nu in unstable zit, te
vervangen)
						\hhbr
					\item \textbf{testing-proposed-updates}, om de versie in \textbf{testing} te
updaten zonder via \textbf{unstable} te gaan (dit wordt zelden gebruikt)
				\end{itemize}
		\end{itemize}
\end{frame}

\begin{frame}{Bevriezen en uitbrengen}
	\begin{itemize}
					\item Op een gegeven moment in de release-cyclus neemt het release-team de
beslissing om testing \textsl{te bevriezen}: automatische verschuivingen van
\textbf{unstable} naar \textbf{testing} worden gestopt en vervangen door een
handmatig nazicht
						\br
		\item Wanneer het release-team \textbf{testing} klaar voor release beschouwt:
			\begin{itemize}
				\item De suite \textbf{testing} wordt de nieuwe suite \textbf{stable}
					\hhbr
				\item Op dezelfde wijze wordt het oude \textbf{stable} \textbf{oldstable}
					\hhbr
				\item Niet-ondersteunde releases worden verplaatst naar
\texttt{archive.debian.org}
			\end{itemize}
			\br
		\item Zie \url{https://release.debian.org/}
	\end{itemize}
\end{frame}

\begin{frame}{Suites en beheer van de stabiele release (stable)}
	\begin{itemize}
		\item Verschillende suites stellen pakketten uit stable ter beschikking:
			\hhbr
			\begin{itemize}
				\item \textbf{stable}: de hoofdsuite
					\hbr
				\item \textbf{security} suite met updates welke ter beschikking gesteld wordt op
\texttt{security.debian.org}, gebruikt door het veiligheidsteam. Updates
worden aangekondigd op de mailinglijst \texttt{debian-security-announce}
					\hbr
				\item \textbf{stable-updates}: geen veiligheidsupdates, maar die toch met spoed
geïnstalleerd moeten worden (zonder te wachten op de volgende
tussenrelease): antivirusdatabases, tijdzonegerelateerde pakketten,
enz. Aangekondigd op de mailinglijst \texttt{debian-stable-announce}
					\hbr
				\item \textbf{backports}: nieuwe upstream-versie, gebaseerd op de
\textbf{testing}-versie
			\end{itemize}
			\hbr
		\item De suite \textbf{stable} wordt om de enkele maanden geüpdatet via
\textsl{tussenreleases van stable} (dit betreft enkel bugreparaties)
			\hhbr
			\begin{itemize}
				\item Pakketten voor de volgende stable-tussenrelease worden geüpload naar
\textbf{stable-proposed-updates} en nagezien door het releaseteam
			\end{itemize}
			\hbr
		\item De release \textbf{oldstable} heeft dezelfde reeks suites
	\end{itemize}
\end{frame}

\subsection{Verschillende wijzen van bijdragen aan Debian}
\begin{frame}{Verschillende wijzen van bijdragen aan Debian}
  \begin{itemize}
  \item \textbf{Slechtste} manier om bij te dragen:
    \begin{enumerate}
    \item Uw eigen toepassing verpakken
    \item Deze in Debian binnenbrengen
    \item Verdwijnen
    \end{enumerate}
    \br
  \item \textbf{Bettere} manieren om bij te dragen:
	  \begin{itemize}
		  \item Meewerken met verpakkingsteams
    \begin{itemize}
    \item Veel teams focussen op een reeks pakketten en zoeken hulp
    \item Lijst te vinden op \url{https://wiki.debian.org/Teams}
    \item Excellente manier om te leren van meer ervaren medewerkers
    \end{itemize}
    \br
\item Bestaande niet-onderhouden pakketten adopteren (\textsl{verweesde
pakketten})
    \br
  \item Nieuwe software binnenbrengen in Debian
    \begin{itemize}
    \item Liefst enkel wanneer deze voldoende interessant/bruikbaar is
    \item Bestaan er reeds voor Debian verpakte alternatieven?
    \end{itemize}
  \end{itemize}

  \end{itemize}
\end{frame}

\subsection{Verweesde pakketten adopteren}
\begin{frame}{Verweesde pakketten adopteren}
      \hbr
  \begin{itemize}
    \item Veel niet-onderhouden pakketten in Debian
    \hbr
  \item Volledige lijst + proces: \url{https://www.debian.org/devel/wnpp/}
    \hbr
  \item Geïnstalleerd op uw computer: \texttt{wnpp-alert}\\ Of beter:
\texttt{how-can-i-help}
    \hbr
  \item Verschillende toestanden:
    \begin{itemize}
		    \small
    \item \textbf{O}rphaned (Verweesd): het pakket wordt niet onderhouden\\ U mag het
gerust adopteren
      \hbr
    \item \textbf{RFA}: \textbf{R}equest \textbf{F}or \textbf{A}dopter (Adoptant
gevraagd)\\ Onderhouder zoekt een adoptant, maar blijft intussen verder
werken\\ Adopteer het gerust. Een e-mail naar de huidige onderhouder is
beleefd
      \hbr
    \item \textbf{ITA}: \textbf{I}ntent \textbf{T}o \textbf{A}dopt
(Adoptie-intentie)\\ Iemand is zinnens het pakket te adopteren. Bied uw hulp
aan!
      \hbr
    \item \textbf{RFH}: \textbf{R}equest \textbf{F}or \textbf{H}elp (Hulp gevraagd)\\ 
De onderhouder is op zoek naar hulp
    \end{itemize}
    \hbr
  \item Niet-gedetecteerde niet-onderhouden pakketten \arr nog niet verweesd
    \hbr
  \item Bij twijfel navragen op \texttt{debian-qa@lists.debian.org} \\ of
\texttt{\#debian-qa} op \texttt{irc.debian.org}
  \end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Een pakket adopteren: een voorbeeld}
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize,escapeinside=\{\}]
From: Jij <jij@jouwdomein>
To: 640454@bugs.debian.org, control@bugs.debian.org
Cc: Francois Marier <francois@debian.org>
Subject: ITA: verbiste -- French conjugator

retitle 640454 ITA: verbiste -- French conjugator
owner 640454 !
thanks

Hi,

I am using verbiste and I am willing to take care of the package.

Cheers,

Jij
\end{lstlisting}

\begin{itemize}
\item Het is beleefd om de vroegere onderhouder te contacteren (in het bijzonder
wanneer het een RFA betreft en het pakket niet verweesd werd)
\item Zeer goede gewoonte om het bovenstrooms project te contacteren
\end{itemize}
\end{frame}

\subsection{Uw pakket in Debian krijgen}
\begin{frame}{Uw pakket in Debian krijgen}
\begin{itemize}
\item Geen enkele officiële status nodig om uw pakket in Debian te krijgen
	\begin{enumerate}
		\item Dien een \textbf{ITP}-bugrapport (\textbf{I}ntent \textbf{T}o
\textbf{P}ackage) (verpakkingsintentie) in met \texttt{reportbug wnpp}
			\hbr
		\item Maak uw broncodepakket klaar
			\hbr
		\item Zoek een ontwikkelaar van Debian die uw pakket zal sponsoren
	\end{enumerate}
\br
\item Officiële status (wanneer u een ervaren pakketonderhouder bent):
	\begin{itemize}
		\item \textbf{Debian Maintainer (DM) (onderhouder van Debian):}\\ Toelating om uw
eigen pakketten te uploaden\\ Zie
\url{https://wiki.debian.org/DebianMaintainer}
			\hbr
		\item \textbf{Debian Developer (DD) (ontwikkelaar van Debian):}\\ Lid van het
Debian-project; kan stemmen en elk pakket uploaden
	\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}{Te controleren zaken voor u sponsoring vraagt}
\begin{itemize}
	\item Debian besteedt \textbf{veel aandacht aan kwaliteit}
\hbr
\item Algemeen \textbf{zijn sponsors moeilijk te vinden en hebben het druk}
\begin{itemize}
\item Zorg ervoor dat uw pakket klaar is voor u om sponsoring vraagt
\end{itemize}
\hbr
\item Te controleren zaken:
\begin{itemize}
\item Vermijd ontbrekende build-dependencies: zorg ervoor dat uw pakket
probleemloos kan gebouwd worden in een zuivere \textsl{sid} \textsl{chroot}
\begin{itemize}
\item Het gebruik van \texttt{pbuilder} is aanbevolen
\end{itemize}
\hbr
\item Voer het commando \texttt{lintian -EviIL +pedantic} uit op uw pakket
\begin{itemize}
\item Fouten moeten hersteld worden, alle ander problemen zouden opgelost moeten
worden
\end{itemize}
\hbr
\item Test uiteraard uitgebreid uw pakket
\end{itemize}
\hbr
\item Vraag bij twijfel hulp
\end{itemize}
\end{frame}

\subsection{Waar vindt u hulp?}
\begin{frame}{Waar vindt u hulp?}
	\hbr
  Hulp die u nodig zult hebben:
  \begin{itemize}
  \item Advies en antwoorden op uw vragen, nazicht van code
  \item Sponsoring voor uw uploads wanneer uw pakket klaar is
  \end{itemize}
  \hbr
  U kunt hulp krijgen bij:
  \begin{itemize}
	  \item \textbf{Andere leden van een verpakkingsteam}
    \begin{itemize}
    \item Lijst van teams: \url{https://wiki.debian.org/Teams}
    \end{itemize}
    \hbr
  \item De groep \textbf{Debian Mentors} (indien uw pakket niet bij een team past)
    \begin{itemize}
    \item \url{https://wiki.debian.org/DebianMentorsFaq}
    \item Mailinglijst: \url{debian-mentors@lists.debian.org}\\ {\small (ook een goede
manier om al doende te leren)}
    \item IRC: \texttt{\#debian-mentors} op \texttt{irc.debian.org}
    \item \url{http://mentors.debian.net/}
    \item Documentatie: \url{http://mentors.debian.net/intro-maintainers}
    \end{itemize}
    \hbr
  \item \textbf{Gelokaliseerde mailinglijsten} (hulp krijgen in uw eigen taal)
    \begin{itemize}
  \item \texttt{debian-devel-\{french,italian,portuguese,spanish\}@lists.d.o}
  \item Basislijst: \url{https://lists.debian.org/devel.html}
  \item Of gebruikerslijsten: \url{https://lists.debian.org/users.html}
  \end{itemize}
  \end{itemize}
\end{frame}

\subsection{Meer documentatie}
\begin{frame}{Meer documentatie}
  \begin{itemize}
  \item Ontwikkelaarshoek van Debian\\ \url{https://www.debian.org/devel/}\\ {\small
Links naar veel informatiebronnen over de ontwikkeling van Debian}
    \hbr
  \item Gids voor onderhouders van Debian\\ 
\url{https://www.debian.org/doc/manuals/debmake-doc/}
    \hbr
  \item Referentiehandleiding voor ontwikkelaars van Debian\\ 
\url{https://www.debian.org/doc/developers-reference/}\\ {\small
Hoofdzakelijk over werkwijzen van Debian, maar ook sommige goede
verpakkingsmethodes (deel 6)}
    \hbr
  \item Debian beleidshandboek\\ \url{https://www.debian.org/doc/debian-policy/}\\
    
    {\small \begin{itemize} \item \small Alle vereisten waaraan een pakket moet
voldoen \item \small Specifieke beleidsrichtlijnen voor Perl, Java, Python,
\ldots \end{itemize}}
    \hbr
    
  \item Verpakkingshandleiding voor Ubuntu\\ 
\url{https://packaging.ubuntu.com/html/}
  \end{itemize}
\end{frame}

\subsection{Instrumentenborden voor Debian-onderhouders}
\begin{frame}{Instrumentenborden voor Debian-onderhouders}
  \begin{itemize}
	  \item \textbf{Toegespitst op broncodepakket}:\\ 
\url{https://tracker.debian.org/dpkg}
    \br
  \item \textbf{Toegespitst op onderhouder/team}: Developer's Packages Overview
(DDPO - Pakketoverzicht voor ontwikkelaars)\\ 
\url{https://qa.debian.org/developer.php?login=pkg-ruby-extras-maintainers@lists.alioth.debian.org}
    \br
  \item \textbf{TODO-lijst georiënteerd}: Debian Maintainer Dashboard (DMD)\\ 
\url{https://udd.debian.org/dmd/}
  \end{itemize}
\end{frame}

\begin{frame}{Het Debian Bug Tracking System (BTS) gebruiken}
\begin{itemize}
\item Bugvolgsysteem - Een vrij unieke manier voor bugbeheer
\begin{itemize}
\item Webinterface voor het bekijken van bugs
\item E-mailinterface om veranderingen aan te brengen aan bugs
\end{itemize}
\hbr
\item Information toevoegen aan bugs:
	\begin{itemize}
		\item Schrijf naar \texttt{123456@bugs.debian.org} (sluit de indiener niet in,
voeg daarvoor \texttt{123456-submitter@bugs.debian.org} toe)
	\end{itemize}
\hbr
\item De toestand van een bug wijzigen:
\begin{itemize}
\item Stuur commando's naar \texttt{control@bugs.debian.org}
\item Commandoregelinterface: \texttt{bts}-commando in \texttt{devscripts}
\item Documentatie: \url{https://www.debian.org/Bugs/server-control}
\end{itemize}
\hbr
\item Bugs rapporteren: gebruik \texttt{reportbug}
\begin{itemize}
\item Gewoonlijk gebruikt met een lokale mail-server: installeer \texttt{ssmtp} of
\texttt{nullmailer}
\item Of gebruik \texttt{reportbug -\@-template} en stuur dan (handmatig) naar
\texttt{submit@bugs.debian.org}
\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}{Het BTS gebruiken: voorbeelden}
\begin{itemize}
\item Een e-mail sturen naar de bug en de indiener:\\ 
\url{https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680822\#10}
\hbr
\item Taggen en de ernst wijzigen:\\ 
\url{https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680227\#10}
\hbr
\item Opnieuw toewijzen, de ernst wijzigen, een nieuwe titel geven \ldots: \\ 
\url{https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680822\#93}
\begin{itemize}
	\item \texttt{notfound}, \texttt{found}, \texttt{notfixed}, \texttt{fixed} zijn
voor \textbf{versie-opvolging} \\ Zie
\url{https://wiki.debian.org/HowtoUseBTS\#Version\_tracking}
\end{itemize}
\hbr
\item Usertags (gebruikerslabels) gebruiken:
\url{https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=42;bug=642267}\\ Zie
\url{https://wiki.debian.org/bugs.debian.org/usertags}
\hbr
\item BTS-documentatie:
\begin{itemize}
\item \url{https://www.debian.org/Bugs/}
\item \url{https://wiki.debian.org/HowtoUseBTS}
\end{itemize}
\end{itemize}
\end{frame}

\subsection{Meer geïnteresseerd in Ubuntu?}
\begin{frame}{Meer geïnteresseerd in Ubuntu?}
  \begin{itemize}
  \item Ubuntu beheert vooral de divergentie met Debian
    \br
  \item Geen echte focus op specifieke pakketten\\ Eerder samenwerking met
Debian-teams
    \br
  \item Beveelt meestal aan nieuwe pakketten eerst naar Debian te uploaden\\ 
\url{https://wiki.ubuntu.com/UbuntuDevelopment/NewPackages}
    \br
  \item Mogelijk een betere werkwijze:
    \begin{itemize}
    \item U engageren in een Debian-team en fungeren als brug met Ubuntu
      \hbr
    \item De divergentie helpen verkleinen, triage van bugs in Launchpad
      \hbr
    \item Verschillende hulpmiddelen van Debian kunnen behulpzaam zijn:
      \begin{itemize}
      \item De Ubuntu-kolom op het pakketoverzicht voor ontwikkelaars
      \item Ubuntu-vakje in het pakketvolgsysteem
      \item Bug-e-mails uit launchpad ontvangen via het PTS
      \end{itemize}
    \end{itemize}
  \end{itemize}
\end{frame}

\section{Conclusies}
\subsection{Conclusies}
\begin{frame}{Conclusies}
  \begin{itemize}
  \item U heeft nu een volledig overzicht over verpakken voor Debian
    \br
  \item Maar u zult meer documentatie moeten lezen
    \br
  \item Goede praktijken evolueerden in de loop der jaren
    \begin{itemize}
    \item Gebruik bij twijfel het verpakkingshulpprogramma \textbf{dh}\\ en de
indeling \textbf{3.0 (quilt)}
    \end{itemize}
  \end{itemize}
  \vfill
  \centerline{\large Feedback: \textbf{packaging-tutorial@packages.debian.org}}
\end{frame}

\subsection{Juridische zaken}
\begin{frame}{Juridische zaken}

  Copyright \copyright 2011--2019 Lucas Nussbaum -- lucas@debian.org
  \br

  {\small \textbf{Dit document is vrije software}: u kunt het verder
verspreiden en/of wijzigen, onder (volgens uw voorkeur): \hbr
\begin{itemize} \item De bepalingen van de GNU General Public License, zoals
gepubliceerd door de Free Software Foundation, versie 3 of (volgens uw
goeddunken) een recentere versie.\\ 
\url{http://www.gnu.org/licenses/gpl.html} \br \item De bepalingen van de
Creative Commons Attribution-ShareAlike 3.0 Unported License.\\ 
\url{http://creativecommons.org/licenses/by-sa/3.0/} \end{itemize} }
\end{frame}

\subsection{Meewerken aan deze handleiding}
\begin{frame}{Meewerken aan deze handleiding}
	\begin{itemize}
		\item Meewerken:
			\begin{itemize}
				\item{\small \texttt{apt-get source packaging-tutorial}}
					\hbr
				\item  {\small \texttt{debcheckout packaging-tutorial}}
					\hbr
				\item  {\small \texttt{git clone\\ 
https://salsa.debian.org/debian/packaging-tutorial.git}}
					\hbr
				\item {\small \url{https://salsa.debian.org/debian/packaging-tutorial}}
					\hbr
				\item {\small Open bugs: \url{bugs.debian.org/src:packaging-tutorial}}
			\end{itemize}
			\br
		\item Feedback geven:
			\begin{itemize}
				\item \href{mailto:packaging-tutorial@packages.debian.org}{\textbf{\texttt{mailto:packaging-tutorial@packages.debian.org}}}
				\begin{itemize}
					\item{\small Wat zou nog toegevoegd moeten worden aan deze handleiding?}
				\item {\small Wat zou verbeterd moeten worden?}
				\end{itemize}
					\hbr
				\item{\small \texttt{reportbug packaging-tutorial}}
			\end{itemize}
	\end{itemize}
\end{frame}

\section{Extra praktijkoefeningen}

\subsection{Praktijkoefening 2: GNUjump verpakken}
\begin{frame}{Praktijkoefening 2: GNUjump verpakken}
	\begin{enumerate}
		\item Download GNUjump 1.0.8 van
\url{http://ftp.gnu.org/gnu/gnujump/gnujump-1.0.8.tar.gz}
			\br
		\item Creëer er een Debian-pakket voor
			\begin{itemize}
				\item De build-dependencies installeren, zodat u het pakket kunt bouwen
				\item Bugs repareren
				\item Een basaal werkend pakket bekomen
				\item Afronden met het invullen van \texttt{debian/control} en andere bestanden
			\end{itemize}
			\br
		\item Veel plezier
	\end{enumerate}
\centerline{\includegraphics[width=5cm]{figs/gnujump.png}}
\end{frame}

\begin{frame}[fragile=singleslide]{Praktijkoefening 2: GNUjump verpakken (tips)}
	\begin{itemize}
		\item Gebruik \texttt{dh\_make} om een basaal werkend pakket te bekomen
		\item Om te beginnen is het creëren van een \textsl{1.0} broncodepakket
makkelijker dan \textsl{3.0 (quilt)} (pas dat aan in
\texttt{debian/source/format})
		\item Ontbrekende bouwvereisten (build-dependencies) vinden: zoek welk bestand
ontbreekt en gebruik \texttt{apt-file} om ontbrekende pakket te vinden
		\item Indien u op de volgende foutmelding stoot:
\begin{lstlisting}[basicstyle=\ttfamily\tiny]
/usr/bin/ld: SDL_rotozoom.o: undefined reference to symbol 'ceil@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:376: recipe for target 'gnujump' failed
\end{lstlisting}
			moet u \texttt{-lm} toevoegen aan de commandoregel voor de linker:\\ Bewerk
\texttt{src/Makefile.am} en vervang
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = $(all_libraries)
\end{lstlisting}
					door
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = -Wl,--as-needed
gnujump_LDADD = $(all_libraries) -lm
\end{lstlisting}
				En geef daarna het commando \texttt{autoreconf -i}
	\end{itemize}
\end{frame}

\subsection{Praktijkoefening 3: een Java-bibliotheek verpakken}
\begin{frame}{Praktijkoefening 3: een Java-bibliotheek verpakken}
\begin{enumerate}
	\item Bekijk snel enige documentatie over het verpakken van Java:\\
		\begin{itemize}
		\item \url{https://wiki.debian.org/Java}
      \hbr
		\item \url{https://wiki.debian.org/Java/Packaging}
      \hbr
		\item \url{https://www.debian.org/doc/packaging-manuals/java-policy/}
      \hbr
		\item \texttt{/usr/share/doc/javahelper/tutorial.txt.gz}
		\end{itemize}
		\br
	\item Download IRClib van \url{http://moepii.sourceforge.net/}
		\br
	\item Verpak het
\end{enumerate}
\end{frame}

\subsection{Praktijkoefening 4: een Ruby gem verpakken}
\begin{frame}{Praktijkoefening 4: een Ruby gem verpakken}
\begin{enumerate}
	\item Bekijk snel enige documentatie over het verpakken van Ruby:\\
		\begin{itemize}
		\item \url{https://wiki.debian.org/Ruby}
      \hbr
		\item \url{https://wiki.debian.org/Teams/Ruby}
      \hbr
		\item \url{https://wiki.debian.org/Teams/Ruby/Packaging}
      \hbr
		\item \texttt{gem2deb(1)}, \texttt{dh\_ruby(1)} (in het pakket \texttt{gem2deb})
		\end{itemize}
		\hbr
	\item Maak een basaal Debian-broncodepakket van de \texttt{peach}-gem:\\ 
\texttt{gem2deb peach}
	\hbr
	\item Verbeter het, zodat het een volwaardig Debian-pakket wordt
\end{enumerate}
\end{frame}

\subsection{Praktijkoefening 5: een Perl-module verpakken}
\begin{frame}[fragile=singleslide]{Praktijkoefening 5: een Perl-module verpakken}
\begin{enumerate}
	\item Bekijk snel enige documentatie over het verpakken van Perl:\\
		\begin{itemize}
		\item \url{https://perl-team.pages.debian.net}
      \hbr
		\item \url{https://wiki.debian.org/Teams/DebianPerlGroup}
      \hbr
		\item \texttt{dh-make-perl(1)}, \texttt{dpt(1)} (in het pakket
\texttt{pkg-perl-tools})
		\end{itemize}
		\hbr
	\item Maak een basaal Debian-broncodepakket van de \texttt{Acme}
CPAN-distributie:\\ \verb|dh-make-perl --cpan Acme|
	\hbr
	\item Verbeter het, zodat het een volwaardig Debian-pakket wordt
\end{enumerate}
\end{frame}

\section{Oplossingen voor de praktijkoefeningen}

\begin{frame}
	\begin{center}
		\LARGE Oplossingen voor de\\[0.5em] praktijkoefeningen
	\end{center}
\end{frame}


\subsection{Praktijkoefening 1: het grep-pakket aanpassen}

\begin{frame}{Praktijkoefening 1: het grep-pakket aanpassen}
\begin{enumerate}
  \item Ga naar \url{http://ftp.debian.org/debian/pool/main/g/grep/} en download
versie 2.12-2 van het pakket

	\item Bekijk de bestanden in \texttt{debian/}.
		\begin{itemize}
			\item 		Hoeveel binaire pakketten worden uit dit bronpakket gegenereerd?
			\item 		Welk verpakkingshulpprogramma wordt gebruikt voor dit pakket?
		\end{itemize}
    \hbr
	\item Bouw het pakket
    \hbr
	\item Nu gaan we het pakket aanpassen. Voeg een changelog-item toe en verhoog het
versienummer.
    \hbr
	\item Schakel ondersteuning voor perl-regexp uit (is een
\texttt{./configure}-optie)
    \hbr
	\item Bouw het pakket nogmaals
    \hbr
	\item Vergelijk het originele en het nieuwe pakket met debdiff
    \hbr
	\item Installeer het nieuwgebouwde pakket
\end{enumerate}
\end{frame}

\begin{frame}{De broncode ophalen}
\begin{enumerate}
  \item Ga naar \url{http://ftp.debian.org/debian/pool/main/g/grep/} en download
versie 2.12-2 van het pakket
\end{enumerate}
\begin{itemize}
	\item Gebruik dget om het \texttt{.dsc}-bestand te downloaden:\\ {\small
\texttt{dget
http://cdn.debian.net/debian/pool/main/g/grep/grep\_2.12-2.dsc}}
		\hbr
	\item Indien u een \texttt{deb-src}-regel heeft voor een release van Debian met
daarin \texttt{grep} versie 2.12-2 (zoek dit uit op
\url{https://tracker.debian.org/grep}), kunt u \texttt{apt-get source
grep=2.12-2} gebruiken\\ of \texttt{apt-get source grep/release}
(bijv. \texttt{grep/stable})\\ of, indien u geluk heeft: \texttt{apt-get
source grep}
	\hbr
	\item Het broncodepakket \texttt{grep} bestaat uit drie bestanden:
		\begin{itemize}
			\item \texttt{grep\_2.12-2.dsc}
			\item \texttt{grep\_2.12-2.debian.tar.bz2}
			\item \texttt{grep\_2.12.orig.tar.bz2}
		\end{itemize}
		Dit is typerend voor de indeling "3.0 (quilt)".
	\hbr
\item Pak indien nodig de broncode uit met\\ \texttt{dpkg-source -x
grep\_2.12-2.dsc}
\end{itemize}
\end{frame}

\begin{frame}{Rondkijken en het pakket bouwen}
	\begin{enumerate}
			\setcounter{enumi}{1}
	\item Bekijk de bestanden in \texttt{debian/}
		\begin{itemize}
			\item 		Hoeveel binaire pakketten worden uit dit bronpakket gegenereerd?
			\item 		Welk verpakkingshulpprogramma wordt gebruikt voor dit pakket?
		\end{itemize}
	\end{enumerate}
	\hbr
	\begin{itemize}
		\item Volgens \texttt{debian/control} wordt uit dit pakket slechts één binair
pakket gegenereerd, genaamd \texttt{grep}.
			\hbr
		\item Volgens \texttt{debian/rules} is dit pakket typerend voor een
\textsl{klassiek} verpakken met debhelper zonder \textsl{CDBS} of
\textsl{dh} te gebruiken. Men kan de verschillende aanroepen van
\texttt{dh\_*}-commando's zien in \texttt{debian/rules}.
	\end{itemize}
	\hbr
	\begin{enumerate}
			\setcounter{enumi}{2}

		\item Bouw het pakket
	\end{enumerate}
	\hbr
	\begin{itemize}
		\item Gebruik \texttt{apt-get build-dep grep} om de build-dependencies
(bouwvereisten) op te halen
		\item Daarna \texttt{debuild} of \texttt{dpkg-buildpackage -us -uc} (Neemt
ongeveer 1 min in beslag)
	\end{itemize}
\end{frame}

\begin{frame}{Het changelog-bestand bewerken}
	\begin{enumerate}
			\setcounter{enumi}{3}

	\item Nu gaan we het pakket aanpassen. Voeg een changelog-item toe en verhoog het
versienummer.
	\end{enumerate}
	\hbr
	\begin{itemize}
		\item \texttt{debian/changelog} is a tekstbestand. U kunt het handmatig bewerken
om er een nieuw item aan toe te voegen.
	\hbr
		\item Of u kunt \texttt{dch -i} gebruiken, wat een item zal toevoegen en de editor
zal openen
	\hbr
		\item De naam en e-mail kunnen gedefinieerd worden met de omgevingsvariabelen
\texttt{DEBFULLNAME} en \texttt{DEBEMAIL}
	\hbr
		\item Bouw nadien het pakket opnieuw: een nieuwe versie van het pakket wordt
gebouwd
	\hbr
		\item Het versiebeheer van pakketten wordt uitgelegd in sectie 5.6.12 van het
beleidshandboek van Debian\\ 
\url{https://www.debian.org/doc/debian-policy/ch-controlfields}
	\end{itemize}
\end{frame}

\begin{frame}{Perl-regexp-ondersteuning uitzetten en herbouwen}
	\begin{enumerate}
			\setcounter{enumi}{4}

	\item Schakel ondersteuning voor perl-regexp uit (is een
\texttt{./configure}-optie)
	\item Bouw het pakket nogmaals
	\end{enumerate}
	\hbr
	\begin{itemize}
	  \item Controleer met \texttt{./configure -{}-help}: de optie om Perl regexp uit te
zetten is \texttt{-{}-disable-perl-regexp}
	\hbr
		\item Bewerk \texttt{debian/rules} en zoek de regel \texttt{./configure}
	\hbr
		\item Voeg \texttt{-{}-disable-perl-regexp} toe
	\hbr
		\item Bouw opnieuw met \texttt{debuild} of \texttt{dpkg-buildpackage -us -uc}
	\end{itemize}
\end{frame}

\begin{frame}{De pakketten vergelijken en testen}
	\begin{enumerate}
			\setcounter{enumi}{6}

	\item Vergelijk het originele en het nieuwe pakket met debdiff
	\item Installeer het nieuwgebouwde pakket
	\end{enumerate}
	\hbr
	\begin{itemize}
		\item Vergelijk de binaire pakketten: \texttt{debdiff ../*changes}
	\hbr
		\item Vergelijk de broncodepakketten: \texttt{debdiff ../*dsc}
	\hbr
		\item Installeer het net gebouwde pakket: \texttt{debi}\\ Of \texttt{dpkg -i
../grep\_<TAB>}
	\hbr
		\item \texttt{grep -P foo} werkt niet langer!
	\end{itemize}
\br
Herinstalleer de vroegere versie van het pakket:
\begin{itemize}
	\item \texttt{apt-get install -{}-reinstall grep=2.6.3-3} \textit{(= vroegere
versie)}
\end{itemize}
\end{frame}

\subsection{Praktijkoefening 2: GNUjump verpakken}
\begin{frame}{Praktijkoefening 2: GNUjump verpakken}
\begin{enumerate}
	\item Download GNUjump 1.0.8 van
\url{http://ftp.gnu.org/gnu/gnujump/gnujump-1.0.8.tar.gz}
		\br
	\item Creëer er een Debian-pakket voor
		\begin{itemize}
			\item De build-dependencies installeren, zodat u het pakket kunt bouwen
			\item Een basaal werkend pakket bekomen
			\item Afronden met het invullen van \texttt{debian/control} en andere bestanden
		\end{itemize}
		\br
	\item Veel plezier
\end{enumerate}
\centerline{\includegraphics[width=5cm]{figs/gnujump.png}}
\end{frame}

\begin{frame}[fragile=singleslide]{Stap voor stap\ldots}
\begin{itemize}
	\item \texttt{wget http://ftp.gnu.org/gnu/gnujump/gnujump-1.0.8.tar.gz}
		\hbr
	\item \texttt{mv gnujump-1.0.8.tar.gz gnujump\_1.0.8.orig.tar.gz}
		\hbr
	\item \texttt{tar xf gnujump\_1.0.8.orig.tar.gz}
		\hbr
	\item \texttt{cd gnujump-1.0.8/}
		\hbr
	\item \texttt{dh\_make -f ../gnujump-1.0.8.tar.gz}
	\begin{itemize}
		\item \small Type pakket: enkel binair (momenteel)
	\end{itemize}
\end{itemize}
\begin{lstlisting}[basicstyle=\ttfamily\small]
gnujump-1.0.8$ ls debian/
changelog           gnujump.default.ex   preinst.ex
compat              gnujump.doc-base.EX  prerm.ex
control             init.d.ex            README.Debian
copyright           manpage.1.ex         README.source
docs                manpage.sgml.ex      rules
emacsen-install.ex  manpage.xml.ex       source
emacsen-remove.ex   menu.ex              watch.ex
emacsen-startup.ex  postinst.ex
gnujump.cron.d.ex   postrm.ex
\end{lstlisting}
\end{frame}

\begin{frame}[fragile=singleslide]{Stap voor stap\ldots (2)}
\begin{itemize}
	\item Kijk naar \texttt{debian/changelog}, \texttt{debian/rules},
\texttt{debian/control}\\ (automatisch ingevuld door \textbf{dh\_make})
		\hbr
	\item In \texttt{debian/control}:\\ \texttt{Build-Depends: debhelper (>= 7.0.50~),
autotools-dev}\\ Vermeldt de \textsl{build-dependencies} = pakketten, nodig
om pakket te bouwen
		\hbr
	\item Probeer het pakket ongewijzigd te bouwen met \texttt{debuild} (dankzij
\textbf{dh}-magie)
		\begin{itemize}
			\item En voeg build-dependencies toe tot het gebouwd kan worden
			\item Suggestie: gebruik \texttt{apt-cache search} en \texttt{apt-file} om de
pakketten te zoeken
			\item Voorbeeld:
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
checking for sdl-config... no
checking for SDL - version >= 1.2.0... no
[...]
configure: error: *** SDL version 1.2.0 not found!
\end{lstlisting}
$\rightarrow$ Voeg \textbf{libsdl1.2-dev} toe aan Build-Depends en
installeer het.
		\hbr
	\item Beter: gebruik \textbf{pbuilder} om in een zuivere omgeving te bouwen
		\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Stap voor stap\ldots (3)}
	\begin{itemize}
		\item Vereiste build-dependencies zijn \texttt{libsdl1.2-dev, libsdl-image1.2-dev,
libsdl-mixer1.2-dev}

		\item Dan zult u wellicht tegen een andere foutmelding aanlopen:
	\end{itemize}
	\begin{lstlisting}[basicstyle=\ttfamily\tiny]
	/usr/bin/ld: SDL_rotozoom.o: undefined reference to symbol 'ceil@@GLIBC_2.2.5'
	//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
	collect2: error: ld returned 1 exit status
	Makefile:376: recipe for target 'gnujump' failed
	\end{lstlisting}
	\begin{itemize}
		\item Dit probleem wordt veroorzaakt door bitrot: gnujump werd niet aangepast na
linker-wijzigingen.
		\item Indien u indelingsversie \textbf{1.0} voor broncode gebruikt, kunt u de
bovenstroomse broncode rechtstreeks aanpassen.
			\begin{itemize}
				\item Bewerk \texttt{src/Makefile.am} en vervang
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = $(all_libraries)
\end{lstlisting}
					door
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = -Wl,--as-needed
gnujump_LDADD = $(all_libraries) -lm
\end{lstlisting}
				\item En geef daarna het commando \texttt{autoreconf -i}
			\end{itemize}
	\end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Stap voor stap\ldots (4)}
\begin{itemize}
	\item Als u broncode-indelingsversie \textbf{3.0 (quilt)} gebruikt, gebruik dan
\texttt{quilt} om een patch klaar te maken. (zie
\url{https://wiki.debian.org/UsingQuilt})
\begin{itemize}
\item \texttt{export QUILT\_PATCHES=debian/patches}
\item \texttt{mkdir debian/patches}\\ \texttt{quilt new linker-fixes.patch}\\ 
\texttt{quilt add src/Makefile.am}\\
\hbr
\item Bewerk \texttt{src/Makefile.am} en vervang
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = $(all_libraries)
\end{lstlisting}
door
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = -Wl,--as-needed
gnujump_LDADD = $(all_libraries) -lm
\end{lstlisting}
\hbr
\item \texttt{quilt refresh}
	\hbr
	\item Omdat \texttt{src/Makefile.am} gewijzigd werd, is aanroep van autoreconf bij
bouwen nodig. Dat automatisch doen met \texttt{dh} kan door
\texttt{dh}-aanroep in \texttt{debian/rules} te wijzigen van: \texttt{dh
\$\@ -{}-with autotools-dev}\\ naar: \texttt{dh \$\@ -{}-with autotools-dev
-{}-with autoreconf}
		\hbr
\end{itemize}
\end{itemize}
\end{frame}


\begin{frame}[fragile=singleslide]{Stap voor stap\ldots (5)}
\begin{itemize}
	\item Nu zou het pakket probleemloos gebouwd moeten kunnen worden.
		\hbr
	\item Gebruik \texttt{debc} om de inhoud van het gegenereerde pakket op te lijsten
en \texttt{debi} om het te installeren en te testen.
		\hbr
	\item Test het pakket met \texttt{lintian}
		\begin{itemize}
			\item Hoewel het geen strikte vereiste is, is het aanbevolen dat pakketten die
naar Debian geüpload worden, \textsl{lintian-clean} zijn
		\hbr
			\item Meer problemen zijn te vinden met \texttt{lintian -EviIL +pedantic}
		\hbr
			\item Enkele hints:
				\begin{itemize}
					\item Verwijder de bestanden die u niet nodig heeft, uit \texttt{debian/}
		\hbr
					\item Vul \texttt{debian/control} in
						\hbr
					\item Installeer het uitvoerbaar programma in \texttt{/usr/games} door
\texttt{dh\_auto\_configure} te overschrijven
		\hbr
					\item Gebuik \textsl{hardening}-compilatievlaggen voor verhoogde veiligheid.\\ Zie
\url{https://wiki.debian.org/Hardening}
				\end{itemize}
		\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}{Stap voor stap\ldots (6)}
		\begin{itemize}
	\item Vergelijk uw pakket met het pakket dat reeds voor Debian verpakt is:
		\begin{itemize}
			\item Dit splits de gegevensbestanden af in een tweede pakket dat identiek is voor
alle architecturen ($\rightarrow$ bespaart ruimte in het Debian-archief)
				\hbr
			\item Het installeert een .desktop-bestand (voor het menu van GNOME/KDE) en geeft
het ook een plaats in het Debian-menu
				\hbr
			\item Het repareert enkele kleinere problemen met patches
		\end{itemize}
\end{itemize}
\end{frame}

\subsection{Praktijkoefening 3: een Java-bibliotheek verpakken}
\begin{frame}{Praktijkoefening 3: een Java-bibliotheek verpakken}
\begin{enumerate}
	\item Bekijk snel enige documentatie over het verpakken van Java:\\
		\begin{itemize}
		\item \url{https://wiki.debian.org/Java}
      \hbr
		\item \url{https://wiki.debian.org/Java/Packaging}
      \hbr
		\item \url{https://www.debian.org/doc/packaging-manuals/java-policy/}
      \hbr
		\item \texttt{/usr/share/doc/javahelper/tutorial.txt.gz}
		\end{itemize}
		\br
	\item Download IRClib van \url{http://moepii.sourceforge.net/}
		\br
	\item Verpak het
\end{enumerate}
\end{frame}

\begin{frame}{Stap voor stap\ldots}
\begin{itemize}
	\item \texttt{apt-get install javahelper}
		\hbr
	\item Creëer een basaal broncodepakket: \texttt{jh\_makepkg}
		\begin{itemize}
			\item Bibliotheek
			\item Geen
			\item Standaard vrije compiler/runtime
		\end{itemize}
		\hbr
	\item Kijk naar en repareer \texttt{debian/*}
		\hbr
	\item \texttt{dpkg-buildpackage -us -uc} of \texttt{debuild}
		\hbr
	\item \texttt{lintian}, \texttt{debc}, enz.
		\hbr
	\item Vergelijk uw resultaat met het broncodepakket \texttt{libirclib-java}
\end{itemize}
\end{frame}

\subsection{Praktijkoefening 4: een Ruby gem verpakken}
\begin{frame}{Praktijkoefening 4: een Ruby gem verpakken}
\begin{enumerate}
	\item Bekijk snel enige documentatie over het verpakken van Ruby:\\
		\begin{itemize}
		\item \url{https://wiki.debian.org/Ruby}
      \hbr
		\item \url{https://wiki.debian.org/Teams/Ruby}
      \hbr
		\item \url{https://wiki.debian.org/Teams/Ruby/Packaging}
      \hbr
		\item \texttt{gem2deb(1)}, \texttt{dh\_ruby(1)} (in het pakket \texttt{gem2deb})
		\end{itemize}
		\hbr
	\item Maak een basaal Debian-broncodepakket van de \texttt{peach}-gem:\\ 
\texttt{gem2deb peach}
	\hbr
	\item Verbeter het, zodat het een volwaardig Debian-pakket wordt
\end{enumerate}
\end{frame}

\begin{frame}{Stap voor stap\ldots}
\texttt{gem2deb peach}:
\begin{itemize}
\item Downloadt het gem van rubygems.org
\item Creëert een geschikt .orig.tar.gz-archief en pakt het uit
\item Initialiseert een Debian broncodepakket op basis van de gem-metadata
	\begin{itemize}
		\item Genaamd \texttt{ruby-\textsl{gemnaam}}
	\end{itemize}
\item Tracht het Debian binaire pakket te bouwen (dit kan mislukken)
\end{itemize}
\br
\texttt{dh\_ruby} (zit in \textsl{gem2deb}) en voert de Ruby-specifieke
taken uit:
\begin{itemize}
	\item C-uitbreidingen bouwen voor elke Ruby-versie
	\item Bestanden naar hun doelmap kopiëren
	\item shebangs in uitvoerbare scripts updaten
	\item Testen uitvoeren die gedefinieerd worden in \texttt{debian/ruby-tests.rb},
\texttt{debian/ruby-tests.rake}, of \texttt{debian/ruby-test-files.yaml},
evenals verschillende andere controles
\end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Stap voor stap\ldots (2)}
Verbeter het gegenereerde pakket:
\begin{itemize}
	\item Voer \texttt{debclean} uit om de broncodeboom op te ruimen. Kijk naar
\texttt{debian/}.
		\hbr
	\item \texttt{changelog} en \texttt{compat} zouden correct moeten zijn
		\hbr
	\item Bewerk \texttt{debian/control}: verbeter \texttt{Description}
		\hbr
	\item Schrijf een passend \texttt{copyright}-bestand op basis van de bovenstroomse
bestanden
		\hbr
	\item Bouw het pakket
		\hbr
	\item Vergelijk uw pakket met het pakket \texttt{ruby-peach} uit het
Debian-archief
\end{itemize}
\end{frame}

\subsection{Praktijkoefening 5: een Perl-module verpakken}
\begin{frame}[fragile=singleslide]{Praktijkoefening 5: een Perl-module verpakken}
\begin{enumerate}
	\item Bekijk snel enige documentatie over het verpakken van Perl:\\
		\begin{itemize}
		\item \url{https://perl-team.pages.debian.net}
      \hbr
		\item \url{https://wiki.debian.org/Teams/DebianPerlGroup}
      \hbr
		\item \texttt{dh-make-perl(1)}, \texttt{dpt(1)} (in het pakket
\texttt{pkg-perl-tools})
		\end{itemize}
		\hbr
	\item Maak een basaal Debian-broncodepakket van de \texttt{Acme}
CPAN-distributie:\\ \verb|dh-make-perl --cpan Acme|
	\hbr
	\item Verbeter het, zodat het een volwaardig Debian-pakket wordt
\end{enumerate}
\end{frame}

\begin{frame}[fragile=singleslide]{Stap voor stap\ldots}
\verb|dh-make-perl --cpan Acme|:
\begin{itemize}
\item Downloadt het tar-archief uit het CPAN
\item Creëert een passend .orig.tar.gz-archief en pakt het uit
\item Initialiseert een Debian broncodepakket, gebaseerd op de metagegevens van de
distributie
	\begin{itemize}
		\item Genaamd \texttt{lib\textsl{distnaam}-perl}
	\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Stap voor stap\ldots (2)}
Verbeter het gegenereerde pakket:
\begin{itemize}
	\item \texttt{debian/changelog}, \texttt{debian/compat},
\texttt{debian/libacme-perl.docs} en \texttt{debian/watch} zouden correct
moeten zijn
		\hbr
	\item Bewerk \texttt{debian/control}: verbeter \texttt{Description} en verwijder
de standaardtekst onderaan
		\hbr
	\item Bewerk \texttt{debian/copyright}: verwijder de paragraaf met standaardtekst
bovenaan, voeg jaren van copyright toe aan de \texttt{Files:\hspace{0.3em}*}
stanza
\end{itemize}
\end{frame}


\section*{Vertaling}
\begin{frame}{Vertaling}
 Deze handleiding werd uit het Engels vertaald door Frans Spiesschaert en het Nederlandstalig lokalisatieteam.
 \hbr

 Signaleer fouten in de vertaling en geef commentaar op het e-mailadres
 \href{mailto:debian-l10n-dutch@lists.debian.org}{\texttt{<debian-l10n-dutch@lists.debian.org>}}.
\end{frame}
\end{document}
