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

\usepackage{debiantutorial.de} \usepackage[german]{babel}

\hypersetup{bookmarks}
\title{Debian-Paketier-Anleitung}
\author[]{Lucas Nussbaum\\{\small\texttt{packaging-tutorial@packages.debian.org}}}

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

\begin{document}


\frame{\titlepage}

\begin{frame}{Über diese Anleitung}
  \begin{itemize}
  \item Ziel: \textbf{Ihnen mitzuteilen, was Sie wirklich über das Paketieren für
Debian wissen müssen}
    \begin{itemize}
      \hbr
    \item Bestehende Pakete verändern
      \hbr
    \item Eigene Pakete erstellen
	    \hbr
    \item Mit der Debian-Gemeinschaft arbeiten
      \hbr
    \item Werden Sie ein versierter Debian-Benutzer
    \end{itemize}
    \br
  \item Die wichtigsten Punkte werden abgedeckt, es ist aber nicht vollständig
    \begin{itemize}
    \item Sie werden weitere Dokumentation lesen müssen
    \end{itemize}
    \br
  \item Die meisten Inhalte passen auch auf von Debian abgeleitete Distributionen
    \begin{itemize}
      \hbr
    \item Dazu gehört Ubuntu
    \end{itemize}
  \end{itemize}
\end{frame}

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

\section{Einleitung}

\subsection{Debian}

\begin{frame}{Debian}
	\begin{itemize}
		\item \textbf{GNU/Linux-Distribution}
			\br
		\item 1. größere Distribution, die »offen im Geiste von GNU« entwickelt wurde
			\br
		\item \textbf{Nicht kommerziell}, gemeinsam von über 1000 Freiwilligen gebaut
			\br
		\item 3 Hauptfunktionalitäten:
			\begin{itemize}
				\item \textbf{Qualität} -- Kultur der technischen Exzellenz\\ {\small\sl Wir
veröffentlichen, wenn es fertig ist}
					\hbr
				\item \textbf{Freiheit} -- Entwickler und Benutzer sind durch den
\textsl{Gesellschaftsvertrag} gebunden\\ Fördern der Kultur der Freien
Software seit 1993
					\hbr
				\item \textbf{Unabhängigkeit} -- keine (einzelne) Firma beaufsichtigt Debian\\ Und
offener Entscheidungsfindungsprozess (\textsl{do-ocracy} +
\textsl{Demokratie})
			\end{itemize}
                        \br
                \item \textbf{Amateur} im besten Sinne: Mit Liebe erstellt
	\end{itemize}
\end{frame}

\subsection{Debian-Pakete}
\begin{frame}{Debian-Pakete}
\begin{itemize}
\item \textbf{.deb}-Dateien (Binärpakete)
	\br
\item Ein sehr mächtiger und bequemer Weg, Software an Benutzer zu verteilen
	\br
\item Eines der beiden häufigsten Paketformate (mit RPM)
	\br
\item Universell:
	\begin{itemize}
		\item 30.000 Binärpakete in Debian\\ $\rightarrow$ die meiste verfügbare freie
Software ist für Debian paketiert!
			\hbr
		\item Für 12 Portierungen (Architekturen), darunter 2 neben Linux (Hurd; KFreeBSD)
			\hbr
		\item Wird auch von 120 von Debian abgeleiteten Distributionen verwandt
	\end{itemize}
\end{itemize}
\end{frame}


\subsection{Das Deb-Paketformat}

\begin{frame}[fragile=singleslide]{Das Deb-Paketformat}
  \begin{itemize}
  \item \texttt{.deb}-Dateien: ein \texttt{ar}-Archiv
    \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}: Version des deb-Dateiformates,
\texttt{"2.0\textbackslash{}n"}
    \item \texttt{control.tar.gz}: Metadaten über das Paket \\ {\small
\texttt{\textbf{control}, md5sums, (pre|post)(rm|inst), triggers, shlibs},
\ldots}
    \item \texttt{data.tar.gz}: Datendateien des Pakets
    \end{itemize}
    \br
  \item Sie könnten Ihre \texttt{.deb}-Dateien manuell erstellen\\ {\footnotesize
\url{http://tldp.org/HOWTO/html\_single/Debian-Binary-Package-Building-HOWTO/}}
    \br
  \item Die meisten Leute machen das aber nicht so
  \end{itemize}
  \br
  \centerline{\textbf{Diese Anleitung: Erstellen von Debian-Paketen, auf die Debian-Art}}
\end{frame}

\subsection{Folgende Werkzeuge benötigen Sie}
\begin{frame}{Folgende Werkzeuge benötigen Sie}
  \begin{itemize}
  \item Ein Debian- (oder Ubuntu-)System (mit root-Zugang)
    \br
  \item Einige Pakete:
    \begin{itemize}
    \item \textbf{build-essential}: hat Abhängigkeiten auf Pakete, von denen
angenommen wird, dass sie auf der Maschine eines Entwicklers vorhanden sind
(sie müssen nicht im Steuerfeld \texttt{Build-Depends:} Ihres Paketes
aufgeführt werden)
      \begin{itemize}
      \item enthält eine Abhängigkeit von \textbf{dpkg-dev}, das einige grundlegende
Debian-spezifische Werkzeuge zum Erstellen von Paketen enthält
      \end{itemize}
      \hbr
    \item \textbf{devscripts}: Enthält viele nützliche Skripte für Debian-Betreuer
    \end{itemize}
  \end{itemize}

  \br
  Viele weitere Werkzeuge werden später erwähnt, wie \textbf{debhelper},
\textbf{cdbs}, \textbf{quilt}, \textbf{pbuilder}, \textbf{sbuild},
\textbf{lintian}, \textbf{svn-buildpackage}, \textbf{git-buildpackage},
\ldots\\ Installieren Sie diese, wenn Sie sie benötigen.
\end{frame}

\subsection{Allgemeiner Paketierungsablauf}
\begin{frame}{Allgemeiner Paketierungsablauf}
  \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)
{Originalquellen}; \node[node1] (da) at (-2.5, 0) {Debian-Spiegel};
\node[node1] (sp) at (0, -2) {Quellpaket}; \draw[arr,<-,dashed,thick] (sp)
-- (2.5,-2) node[right=0cm,text width=2.98cm,text centered,font=\small\sl]
{hier passiert die meiste manuelle Arbeit}; \node[node1] (bin) at (0, -4)
{eins oder mehrere Binärpakete}; \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} (bauen und testen mit \textttc{lintian}) oder
\textttc{dpkg-buildpackage}}; \draw[arr,->] (bin) -- (1,-6)
node[pos=0.5,right] {install (\textttc{debi})}; \draw[transparent] (bin) --
(-1,-6) node[pos=0.5,left,opaque] {Hochladen (\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 neu bauen}
\begin{frame}{Beispiel: Dash neu bauen}
\begin{enumerate}
\item Installieren Sie die zum Bau von Dash benötigten Pakete und Devscripts \\ 
{\texttt{sudo apt-get build-dep dash}\\ (benötigt \texttt{deb-src}-Zeilen in
\texttt{/etc/apt/sources.list})}\\ {\texttt{sudo apt-get install
-{}-no-install-recommends devscripts fakeroot}}
  \hbr
\item Erstellen Sie ein Arbeitsverzeichnis und holen sie es:\\ \texttt{mkdir
/tmp/debian-tutorial ; cd /tmp/debian-tutorial}
  \hbr
\item Holen Sie das \texttt{dash}-Quellpaket\\ \texttt{apt-get source dash}\\ 
{\small (Dies setzt voraus, dass Sie \texttt{deb-src}-Zeilen in Ihrer
\texttt{/etc/apt/sources.list} haben)}
  \hbr
\item Bauen Sie das Paket\\ {\texttt{cd dash-*\\ debuild -us -uc}} ~~~(\texttt{-us
-uc} deaktiviert die Paketsignatur mit GPG)

  \hbr
\item Überprüfen Sie, dass es funktioniert hat
	\begin{itemize}
		\item  Im übergeordneten Verzeichnis sind einige neue \texttt{.deb}-Dateien
	\end{itemize}
    \hbr
\item Schauen Sie auf das \texttt{debian/}-Verzeichnis
	\begin{itemize}
		\item Hier passiert die Paketierungsarbeit
	\end{itemize}
\end{enumerate}
\end{frame}

\section{Ein Quellpaket erstellen}
\subsection{Grundlagen für Quellpakete}
\begin{frame}{Quellpaket}
  \begin{itemize}
  \item Ein Quellpaket kann mehrere Binärpakete erstellen\\ {\small z.B. erstellen
die Quellen \texttt{\bfseries libtar} die Binärpakete \texttt{\bfseries
libtar0} und \texttt{\bfseries libtar-dev}.} \hbr
  \item Zwei Arten von Paketen: (falls unsicher, verwenden Sie \textsl{nicht}
native)
    \begin{itemize}
      \small
    \item Native Pakete: Normalerweise für Debian-spezifische Software (\textsl{dpkg},
\textsl{apt})
    \item Nicht native Pakete: Software, die außerhalb von Debian entwickelt wird
    \end{itemize}
    \hbr
  \item Hauptdatei: \texttt{.dsc} (Metadaten)
    \hbr
  \item Andere Dateien, abhängig von der Version des Quellformats
    \begin{itemize}
    \item 1.0 oder 3.0 (nativ): \texttt{Paket\_version.tar.gz}
      \hbr
    \item 1.0 (nicht nativ):
      \begin{itemize}
      \item \texttt{pkg\_ver.orig.tar.gz}: Originalquellen
      \item \texttt{Pkt\_Debver.diff.gz}: Patch, um Debian-spezifische Änderungen
hinzuzufügen
      \end{itemize}
      \hbr
    \item 3.0 (quilt):
      \begin{itemize}
      \item \texttt{pkg\_ver.orig.tar.gz}: Originalquellen
      \item \texttt{pkg\_debver.debian.tar.gz}: Tarball mit den Debian-Änderungen
      \end{itemize}
    \end{itemize}
  \end{itemize}
  \hbr
  (siehe \texttt{dpkg-source(1)} für exakte Details)
\end{frame}

\begin{frame}[fragile=singleslide]{Quellpaketbeispiel (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{Quellpakete holen}
\begin{frame}{Ein existierendes Quellpaket holen}
  \begin{itemize}
  \item Aus dem Debian-Archiv:
    \begin{itemize}
    \item \texttt{apt-get source \textsl{Paket}}
    \item \texttt{apt-get source \textsl{Paket=Version}}
    \item \texttt{apt-get source \textsl{Paket/Veröffentlichung}}
    \end{itemize}
    (Sie benötigen \texttt{deb-src}-Zeilen in der \texttt{sources.list})
    \br
  \item Aus dem Internet:
    \begin{itemize}
    \item \texttt{dget \textsl{url-zu.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} stellt alle Pakete aus Debian seit 2005 bereit)}
    \end{itemize}
    \br
  \item Aus dem (angegebenen) Versionskontrollsystem:
    \begin{itemize}
    \item \texttt{debcheckout \textsl{Paket}}
    \end{itemize}
    \br
  \item Sobald es heruntergeladen ist, mittels \texttt{dpkg-source -x
\textsl{Datei.dsc}} extrahieren
  \end{itemize}
\end{frame}

\subsection{Ein einfaches Quellpaket erstellen}
\begin{frame}{Ein einfaches Quellpaket erstellen}
  \begin{itemize}
  \item Laden Sie die Originalquellen herunter\\ (\textsl{Originalquellen} = die
Quellen von den ursprünglichen Entwicklern der Software)
    \hbr
  \item Bennen Sie sie in
\texttt{<\textsl{Quellpaket}>\_<\textsl{Originalversion}>.orig.tar.gz} um\\ 
(Beispiel: \texttt{simgrid\_3.6.orig.tar.gz})
    \hbr
  \item Entpacken Sie sie
    \hbr
  \item Bennen Sie das Verzeichnis in
\texttt{<\textsl{Quellpaket}>-<\textsl{Originalversion}>} um\\ (Beispiel:
\texttt{simgrid-3.6})
    \hbr
  \item \texttt{cd \texttt{<\textsl{Quellpaket}>-<\textsl{Originalversion}>} \&\&
dh\_make}\\ (aus dem Paket \textbf{dh-make})
    \hbr
  \item Es gibt einige Alternativen zu \texttt{dh\_make} für bestimmte Mengen von
Paketen: \textbf{dh-make-perl}, \textbf{dh-make-php}, \ldots \hbr
  \item \texttt{debian/}-Verzeichnis wird erstellt, mit vielen Dateien darin
  \end{itemize}
\end{frame}

\subsection{Dateien in debian/}
\begin{frame}{Dateien in debian/}
  Die gesamte Paketierungsarbeit sollte darin bestehen, Dateien unter
\texttt{debian/} zu verändern
  \hbr
  \begin{itemize}
  \item Hauptdateien:
    \begin{itemize}
    \item \textbf{control} -- Metadaten über das Paket (Abhängigkeiten, usw.)
    \item \textbf{rules} -- gibt an, wie das Paket gebaut wird
    \item \textbf{copyright} -- Copyright-Informationen für das Paket
    \item \textbf{changelog} -- Änderungsverlauf des Debian-Pakets
    \end{itemize}
    \hbr
  \item Andere Dateien
    \begin{itemize}
    \item compat
    \item watch
    \item dh\_install*-Ziele\\ {\small *.dirs, *.docs, *.manpages, \ldots}
    \item Betreuer-Skripte\\ {\small *.postinst, *.prerm, \ldots}
    \item source/format
    \item patches/ -- falls Sie die Originalquellen verändern müssen
    \end{itemize}
    \hbr
  \item Verschiedene Dateien verwenden ein auf RFC 822 (E-Mail-Kopfzeilen)
basierendes Format
  \end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{debian/changelog}
  \begin{itemize}
  \item Führt die Debian-Paketierungsänderungen auf
  \item Stellt die aktuelle Version des Pakets bereit
  \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-Revision}; \draw
[decorate,decoration={brace}] (1.4,0) -- (0,0) node[midway,below,text
width=1.6cm,text centered] { \small Original\-version};
\end{tikzpicture}
\end{center}


	  \item Manuell oder mit \textttc{dch} bearbeiten
  \begin{itemize}
	  \item Changelog-Eintrag für die neue Veröffentlichung erzeugen: \textttc{dch -i}
  \end{itemize}
  \item Spezielles Format, um automatisch Debian- oder Ubuntu-Fehler zu schließen:\\ 
Debian: \texttt{Closes:~\#595268}; Ubuntu: \texttt{LP:~\#616929}
  \item Installiert als \texttt{/usr/share/doc/\textit{Paket}/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 Paketmetadaten
    \begin{itemize}
    \item für das Quellpaket selbst
    \item für jedes von diesen Quellen gebaute Binärpaket
    \end{itemize}
    \hbr
  \item Paketname, Abschnitt, Priorität, Betreuer, Uploaders, Bauabhängigkeiten,
Abhängigkeiten, Beschreibung, Homepage, \ldots \hbr
  \item Dokumentation: Debian-Richtlinien Kapitel 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}{Architecture: all oder any}
  Es gibt zwei Arten von Binärpaketen:
  \hbr
  \begin{itemize}
  \item Pakete, mit Inhalten, die für jede Architektur anders sind
    \begin{itemize}
    \item Beispiel: C-Programm
    \item \texttt{Architecture:\ any} in \texttt{debian/control}
      \begin{itemize}
      \item Oder, falls es nur auf gewissen Architekturen funktioniert\\ 
\texttt{Architecture:\ amd64 i386 ia64 hurd-i386}
      \end{itemize}
    \item buildd.debian.org: Baut alle anderen Architekturen für Sie nach einem Upload
    \item Benannt \texttt{\textsl{Paket}\_\textsl{Version}\_\textsl{Architektur}.deb}
    \end{itemize}
    \br
  \item Pakete mit den gleichen Inhalten auf allen Architekturen
    \begin{itemize}
    \item Beispiel: Perl-Bibliothek
    \item \texttt{Architecture:\ all} in \texttt{debian/control}
    \item Benannt \texttt{\textsl{Paket}\_\textsl{Version}\_\textbf{all}.deb}
    \end{itemize}
  \end{itemize}
  \br
  Ein Quellpaket kann eine Mischung aus \texttt{Architecture:\ any}- und
\texttt{Architecture:\ all}-Binärpaketen erstellen
\end{frame}

\begin{frame}[fragile=singleslide]{debian/rules}
  \hbr
  \begin{itemize}
  \item Makefile
    \br
  \item Schnittstelle zum Bau von Debian-Paketen
    \br
  \item Dokumentiert in den Debian-Richtlinien, Kapitel 4.8\\ {\small
\url{https://www.debian.org/doc/debian-policy/ch-source\#s-debianrules}}
    \br
  \item Benötigte Ziele:
    \begin{itemize}
    \item \texttt{build, build-arch, build-indep}: Sollte die gesamte Konfiguration
und Übersetzung durchführen
      \hbr
    \item \texttt{binary, binary-arch, binary-indep}: baut das Binärpaket
      \begin{itemize}
      \item \texttt{dpkg-buildpackage} wird \texttt{binary} aufrufen, um alle Pakete zu
bauen oder \texttt{binary-arch}, um nur die
\texttt{Architecture:~any}-Pakete zu bauen
      \end{itemize}
      \hbr
    \item \texttt{clean}: bereinigt das Quellverzeichnis
    \end{itemize}
  \end{itemize}
\end{frame}

\subsection{Paketierungshelfer}
\begin{frame}{Paketierungshelfer -- Debhelper}
  \begin{itemize}
  \item Sie könnten in \texttt{debian/rules} direkt Shell-Code schreiben
  \item Besseres Vorgehen (wird von den meisten Paketen verwandt): verwenden Sie
einen \textsl{Paketierungshelfer}
  \item Beliebtester: \textbf{Debhelper} (von 98\% der Pakete verwandt)
  \item Ziele:
    \begin{itemize}
    \item Die häufigen Aufgaben in Standardwerkzeuge, die von allen Paketen verwandt
werden, zusammenfassen
    \item Einige Paketierungsfehler einmal für alle Pakete beheben
    \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 Aus \texttt{debian/rules} heraus aufgerufen
    \item Mittels Parametern oder Dateien in \texttt{debian/} konfigurierbar
    \end{itemize}{\footnotesize \ttfamily \textsl{Paket}.docs, \textsl{Paket}.examples,
\textsl{Paket}.install, \textsl{Paket}.manpages, \ldots} \hbr
  \item Hilfsprogramme Dritter für Gruppen von Paketen: \textbf{python-support},
\textbf{dh\_ocaml}, \ldots \hbr
  \item \texttt{debian/compat}: Debhelper-Kompatibilitätsversion
	  \begin{itemize}
		  \item Definiert das genaue Verhalten von dh\_*
		  \item Neue Syntax: \texttt{Build-Depends: debhelper-compat (= 13)}
	  \end{itemize}
  \end{itemize}
\end{frame}

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

# Uncomment this to turn on verbose mode.
#export DH_VERBOSE=1

build: 
        $(MAKE)
        #docbook-to-man debian/Paketename.sgml > Paketname.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
        # Add here commands to install the package into debian/packagename.
        $(MAKE) DESTDIR=$(CURDIR)/debian/packagename install
\end{lstlisting}
\end{frame}

\begin{frame}[fragile=singleslide]{debian/rules mittels debhelper (2/2)}
  \begin{lstlisting}[basicstyle=\ttfamily\footnotesize,escapeinside=\{\}]

# Build architecture-independent files here.
binary-indep: build install

# Build architecture-dependent files here.
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 Mit Debhelper, immer noch eine Menge an Redundanz zwischen Paketen
    \hbr
  \item Nachrangige Hilfsprogramme, die gemeinsam genutzte Funktionalität aufnehmen
    \begin{itemize}
    \item Z.B. Bauen mit \texttt{./configure \&\& make \&\& make install} oder CMake
    \end{itemize}
    \hbr
  \item CDBS:
    \begin{itemize}
    \item 2005 eingeführt, basierend auf fortgeschrittener \textsl{GNU make}-Magie
    \item Dokumentation: \texttt{/usr/share/doc/cdbs/}
    \item Unterstützung für Perl, Python, Ruby, GNOME, KDE, Java, Haskell, \ldots
    \item Aber manche Leute hassen es:
      \begin{itemize}
      \item Manchmal schwer, Paketbau anzupassen:\\ "\textsl{Verzwicktes Labyrinth von
Makefiles und Umgebungsvariablen}"
      \item Langsamer als einfacher Debhelper (viele unnütze Aufrufe von \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

# add an action after the build
build/mypackage::
    /bin/bash debian/scripts/foo.sh
      \end{lstlisting}
\end{frame}

\begin{frame}[fragile=singleslide]{Dh (lang Debhelper 7 oder dh7)}
  \begin{itemize}
  \item Eingeführt in 2008 als ein \textsl{CDBS-Mörder}
    \hbr
  \item \textbf{dh}-Befehl, der \texttt{dh\_*} aufruft
    \hbr
  \item Einfache \textsl{debian/rules}, enthält nur Aufhebungen
    \hbr
  \item Einfacher als CDBS anzupassen
    \hbr
  \item Dokumentation: Handbuchseiten (\texttt{debhelper(7)}, \texttt{dh(1)}) +
Folien vom DebConf9-Vortrag\\ 
\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}{Klassischer Debhelper vs. CDBS vs. dh}
  \hbr
  \begin{itemize}
  \item Marktanteil:\\ Klassischer Debhelper: 15\% \hskip 1em CDBS: 15\% \hskip 1em
Dh: 68\%
    \hbr
  \item Welchen soll ich lernen?
    \begin{itemize}
    \item Wahrscheinlich ein bisschen von allen
    \item Sie müssen Debhelper kennen, um Dh und CDBS zu benutzen
    \item Es könnte sein, dass Sie CDBS-Pakete ändern müssen
    \end{itemize}
    \hbr
  \item Welches sollte ich für ein neues Paket verwenden?
    \begin{itemize}
	    \item \textbf{dh} (einzige Lösung mit zunehmenden Marktanteil)
	    \item Siehe \url{https://trends.debian.net/\#build-systems}
    \end{itemize}
  \end{itemize}
  
  \hbr


\end{frame}

\section{Pakete bauen und testen}
\subsection{Pakete bauen}
\begin{frame}{Pakete bauen}
  \begin{itemize}
  \item \textttc{apt-get build-dep MeinPaket}\\ Installiert die
\textsl{Bauabhängigkeiten} (für ein Paket, das bereits im Debian-Archiv
ist)\\ Oder \textttc{mk-build-deps -ir} (für ein noch nicht hochgeladenes
Paket)
    
    \br
  \item \textttc{debuild}: bauen, testen mit \texttt{lintian}, unterschreiben mit
GPG
    \br
  \item Es ist auch möglich, \textttc{dpkg-buildpackage} direkt aufzurufen
    \begin{itemize}
    \item Normalerweise mittels \texttt{dpkg-buildpackage -us -uc}
    \end{itemize}
    \br
  \item Besser: Pakete in einer sauberen und minimalen Umgebung bauen
    \begin{itemize}
    \item \textttc{pbuilder} -- Helfer, um Pakete in einer \textsl{Chroot} zu bauen\\ 
Gute Dokumentation: \url{https://wiki.ubuntu.com/PbuilderHowto}\\ 
(Optimierung: \textttc{cowbuilder} \textttc{ccache} \textttc{distcc})
      \hbr
    \item \textttc{schroot} und \textttc{sbuild}: von den Debian-Build-Daemons
verwandt\\ (nicht so einfach wie \texttt{pbuilder}, erlaubt aber
LVM-Schnappschüsse\\ siehe:
\url{https://help.ubuntu.com/community/SbuildLVMHowto} )
    \end{itemize}
    \br
  \item Erstellt \texttt{.deb}-Dateien und eine \texttt{.changes}-Datei
    \begin{itemize}
    \item \texttt{.changes}: beschreibt, was gebaut wurde; beim Hochladen verwandt
    \end{itemize}
  \end{itemize}
\end{frame}
\subsection{Installieren und Testen von Paketen}
\begin{frame}{Installieren und Testen von Paketen}
  \begin{itemize}
  \item Installieren Sie das Paket lokal: \textttc{debi} (wird \texttt{.changes}
verwenden, um zu wissen, was installiert werden soll) \br
  \item Zeigen Sie den Inhalt des Pakets: \texttt{{\color{rouge}debc}
../meinPaket<TAB>.changes} \br
  \item Vergleichen Sie das Paket mit der vorherigen Version:\\ 
\texttt{{\color{rouge}debdiff} ../meinPaket\_1\_*.changes
../meinPaket\_2\_*.changes}\\ oder vergleichen Sie die Quellen:\\ 
\texttt{{\color{rouge}debdiff} ../meinPaket\_1\_*.dsc
../meinPaket\_2\_*.dsc}\\
    \br
  \item Überprüfen Sie das Paket mit \texttt{lintian} (statische Analyse):\\ 
\texttt{{\color{rouge}lintian} ../meinPaket<TAB>.changes}\\ \texttt{lintian
-i}: gibt weitere Informationen über die Fehler\\ \texttt{lintian -EviIL
+pedantic}: zeigt weitere Probleme\br
  \item Laden Sie das Paket nach Debian hoch (\textttc{dput}) (benötigt
Konfiguration) \br
  \item Betreiben Sie ein privates Debian-Archiv mit \textttc{reprepro} oder
\textttc{aptly}\\ Dokumentation:
\url{https://wiki.debian.org/HowToSetupADebianRepository}
  \end{itemize}
\end{frame}
\section{Praktische Sitzung 1: Anpassen des Grep-Pakets}
\begin{frame}{Praktische Sitzung 1: Anpassen des Grep-Pakets}
  \begin{enumerate}
  \item Laden Sie Version 2.12-2 des Pakets von
\url{http://ftp.debian.org/debian/pool/main/g/grep/} herunter.
    \begin{itemize}
		   \item Falls das Quellpaket nicht automatisch entpackt wird, entpacken Sie es mit
\texttt{dpkg-source~-x~grep\_*.dsc}
    \end{itemize}

  \item Schauen Sie sich die Dateien in \texttt{debian/} an.
    \begin{itemize}
    \item 		Wie viele Binärpakete werden aus diesem Quellpaket erstellt?
    \item 		Welche Paketierungshelfer verwendet dieses Paket?
    \end{itemize}
    \hbr
  \item Bauen Sie das Paket
    \hbr
  \item Wir werden das Paket jetzt anpassen. Fügen Sie einen Changelog-Eintrag hinzu
und erhöhen Sie die Versionsnummer.
    \hbr
  \item Deaktivieren Sie jetzt die Perl-Regexp-Unterstützung (dies ist eine
\texttt{./configure}-Option)
    \hbr
  \item Bauen Sie das Paket erneut
    \hbr
  \item Vergleichen Sie das ursprüngliche und das neue Paket mit Debdiff
    \hbr
  \item Installieren Sie das neu gebaute Paket
  \end{enumerate}
\end{frame}

\section{Fortgeschrittene Paketierungsthemen}
\subsection{debian/copyright}
\begin{frame}[fragile=singleslide]{debian/copyright}
  \hbr
  \begin{itemize}
  \item Urheberrecht- und Lizenzinformationen für diese Quellen und die Paketierung
  \item Traditionell als Textdatei geschrieben
  \item Neues, maschinenlesbares Format:
{\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 Max Mustermann <max.mustermann@example.com>
License: GPL-2+
 This program is free software; you can redistribute it
 [...]
 .
 On Debian systems, the full text of the GNU General Public
 License version 2 can be found in the file
 `/usr/share/common-licenses/GPL-2'.

Files: debian/*
Copyright: Copyright 1998 Jana Meier <jmeierh@example.net>
License:
 [LIZENZTEXT]
\end{lstlisting}
\end{frame}



\subsection{Ändern der Originalquellen}
\begin{frame}{Ändern der Originalquellen}
  Oft benötigt:
  \begin{itemize}
  \item Fehler beheben oder Debian-spezifische Anpassungen vornehmen
    \hbr
  \item Korrekturen aus einer neueren Veröffentlichung der Originalautoren
rückportieren
  \end{itemize}
  \br
  Es gibt mehrere Methoden, dies durchzuführen:
  \begin{itemize}
  \item Die Dateien direkt anpassen
    \begin{itemize}
    \item Einfach
    \item Allerdings gibt es keine Möglichkeit, die Änderungen zu dokumentieren und
nachzuvollziehen
    \end{itemize}
    \hbr
  \item Verwendung von Patch-Systemen
    \begin{itemize}
    \item Erleichtert die Weitergabe der Änderungen an die Originalautoren
    \item Hilft beim gemeinsamen Nutzen der Korrekturen mit abgeleiteten
Distributionen
    \item Gibt den Änderungen mehr Aufmerksamkeit\\ 
\url{http://patch-tracker.debian.org/} (derzeit nicht erreichbar)
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}{Patch-Systeme}
  \begin{itemize}
  \item Prinzip: Änderungen werden als Patches in \texttt{debian/patches/}
gespeichert
    \br
  \item Sie werden während des Baus angewandt und entfernt
    \br
  \item Früher gab es mehrere Implementierungen -- \textsl{simple-patchsys}
(\textsl{cdbs}), \textsl{dpatch}, \textbf{\textsl{quilt}}
    \begin{itemize}
  \item Alle unterstützen zwei Ziele in \texttt{debian/rules}:
    \begin{itemize}
    \item \texttt{debian/rules patch}: alle Patches anwenden
    \item \texttt{debian/rules unpatch}: alle Patches entfernen
    \end{itemize}
	  \hbr
  \item Weitere Dokumentation: \url{https://wiki.debian.org/debian/patches}
  \end{itemize}
  \br
  \item \textbf{Neues Quellformat mit eingebautem Patch-System: 3.0 (quilt)}
  \begin{itemize}
  \item Empfohlene Lösung
	  \hbr
  \item Sie müssen \textsl{quilt} lernen\\ 
\url{https://perl-team.pages.debian.net/howto/quilt.html}
    \hbr
  \item Patch-System-unabhängiges Werkzeug in \texttt{devscripts}:
\texttt{edit-patch}
  \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Dokumentation der Patches}
  \begin{itemize}
	  \item Standardkopfzeilen am Anfang des Patches
    \br
  \item Dokumentiert in DEP-3 - Patch Tagging Guidelines\\ 
\url{http://dep.debian.net/deps/dep3/}
  \end{itemize}
  \vfill
\seprule
  \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
Description: Fix widget frobnication speeds
 Frobnicating widgets too quickly tended to cause explosions.
Forwarded: http://lists.example.com/2010/03/1234.html
Author: Max Mustermann <mmustermann-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{Beim Installieren und Entfernen etwas machen}
\begin{frame}{Beim Installieren und Entfernen etwas machen}
  \begin{itemize}
  \item Entpacken des Pakets ist manchmal nicht genug
    \hbr
  \item Benutzer erstellen/entfernen, Dienste starten/stoppen, \textsl{alternatives}
verwalten
    \hbr
  \item Wird in \textsl{Betreuerskripten} erledigt\\ \texttt{preinst, postinst,
prerm, postrm}
    \begin{itemize}
	    \item  Schnipsel für häufige Aktionen können durch Debhelper erstellt werden
    \end{itemize}
    \hbr
  \item Dokumentation:
    \begin{itemize}
    \item Debian-Richtlinien-Handbuch, Kapitel 6\\ {\footnotesize
\url{https://www.debian.org/doc/debian-policy/ch-maintainerscripts}}
      
      \hbr
    \item Debian-Entwicklerreferenz, Kapitel 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 Benutzer um Eingaben bitten:
    \begin{itemize}
    \item Muss mit \textbf{debconf} erfolgen
      \hbr
    \item Dokumentation: \texttt{debconf-devel(7)} (\texttt{debconf-doc}-Paket)
    \end{itemize}
  \end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Version der Originalautoren überwachen}
  \begin{itemize}
  \item Geben Sie in \texttt{debian/watch} (siehe \texttt{uscan(1)}) an, wo geschaut
werden soll
    \begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
version=3

http://tmrc.mit.edu/mirror/twisted/Twisted/(\d\.\d)/ \
  Twisted-([\d\.]*)\.tar\.bz2
    \end{lstlisting}
    \br
  \item Es gibt automatische Nachverfolgungssysteme für neue Versionen der
Originalautoren, die den Betreuer auf verschiedenen Armaturenbrettern,
darunter \url{https://tracker.debian.org/} und
\url{https://udd.debian.org/dmd/}, informieren
    \br
  \item \texttt{uscan}: eine manuelle Überprüfung durchführen
    \br
  \item \texttt{uupdate}: versucht, Ihr Paket auf den neusten Stand der
Originalautoren zu aktualisieren
  \end{itemize}
\end{frame}

\subsection{Mit einem Versionskontrollsystem (SVN, Git) paketieren}
\begin{frame}[fragile=singleslide]{Mit einem Versionskontrollsystem paketieren}
  \begin{itemize}
  \item Werkzeuge zur Verwaltung von Zweigen und Markierungen für Ihre
Pa\-ke\-tierungsarbeit: \texttt{svn-buildpackage}, \texttt{git-buildpackage}
    \hbr
  \item Beispiel: \texttt{git-buildpackage} 
    \begin{itemize}
    \item \texttt{upstream}-Zweig: die Arbeit der Originalautoren nachvollziehen mit
\texttt{upstream/\textsl{Version}}-Markierungen
    \item \texttt{master}-Zweig folgt dem Debian-Paket
    \item \texttt{debian/\textsl{Version}}-Markierungen für jedes Hochladen
    \item \texttt{pristine-tar}-Zweig, ermöglicht Neubau des Originalautoren-Tarballs
    \end{itemize}
    Dokumentation:
\url{http://honk.sigxcpu.org/projects/git-buildpackage/manual-html/gbp.html}
    \hbr
  \item \texttt{Vcs-*}-Felder in \texttt{debian/control}, um das Depot anzugeben
	  \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-unabhängige Schnittstelle: \texttt{debcheckout}, \texttt{debcommit},
\texttt{debrelease}\\
    \begin{itemize}
	    \item     \texttt{debcheckout grep} $\rightarrow$ checkt das Quellpaket aus Git aus
    \end{itemize}
\end{itemize}
\end{frame}

\subsection{Pakete rückportierern}
\begin{frame}{Pakete rückportierern}
  \begin{itemize}
  \item Ziel: Eine neuere Version eines Paketes auf einem älteren System verwenden\\ 
z.B. \textsl{mutt} aus Debian-\textsl{Unstable} auf Debian-\textsl{Stable}
verwenden
	\br
  \item Prinzipielle Idee:
	  \begin{itemize}
		\item Nehmen Sie das Quellpaket aus Debian Unstable
		\hbr
		\item Passen Sie es an, so dass es auf Debian-Stable baut und gut funktioniert
		\begin{itemize}
			\item Manchmal trivial (keine Änderungen notwendig)
			\item Manchmal schwierig
			\item Manchmal unmöglich (viele nicht verfügbare Abhängigkeiten)
		\end{itemize}
	\end{itemize}
	\br
   \item Einige Rückportierungen werden von Debian bereitgestellt und unterstützt\\ 
\url{http://backports.debian.org/}
\end{itemize}
\end{frame}



\section{Pakete in Debian betreuen}
\subsection{Debian-Archiv und -Suites}
\begin{frame}{Debian-Archiv und -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) {Entwickler}; \draw node[people,node
distance=3cm,left=of dd] (secteam) {Sicherheitsteam}; \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] {Veröffentlichung\\ von
Stable}; \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)$)
{Zwischen-\\veröffentlichung \\ für Stable}; \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] {Hochladen von Paketen}; \coordinate[node
distance=1.1em,below=of legend] (legend2); \draw[arr,migrations,->]
(legend2) -- ($(legend2) + (0.7,0)$) node [right,legend] {Paketmigrationen
zwischen Suites}; \coordinate[node distance=1.5em,below=of legend2]
(legend3); \draw node[right,suite,devel,legend] (ldev) at (legend3)
{Entwicklung}; \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)
{Produktion}; \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)$)
{Vorbereitung der \\ nächsten Veröffentlichung}; \draw
node[font=\bf,green!70!black,align=center] (tsrm) at ($(sec.north east) +
(1,1)$) {Veröffentlichungs-\\verwaltung\\für Stable};
\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 Basierend auf einer Darstellung von Antoine
Beaupr\'e. \url{https://salsa.debian.org/debian/package-cycle}~~~~~~~~~~~~
	\end{flushright}
\end{frame}

\begin{frame}{Suites für die Entwicklung}
		\begin{itemize}
			\item Neue Versionen von Paketen werden nach \textbf{Unstable} (\textbf{Sid})
hochgeladen
				\hbr
			\item Pakete migrieren basierend auf einigen Kriterien von \textbf{Unstable} nach
\textbf{Testing} (z.B. dass sie seit 10 Tagen in Unstable waren und keine
Regressionen auftraten)
				\hbr
			\item Neue Pakete können auch in folgende Suites hochgeladen werden:
				\begin{itemize}
					\item \textbf{Experimental} (für \textsl{experimentellere} Pakete, wie neue
Versionen, die noch nicht geeignet sind, die Version aus Unstable zu
ersetzen)
						\hhbr
					\item \textbf{Testing-proposed-updates}, um die Version in \textbf{Testing} zu
aktualisieren, ohne durch \textbf{Unstable} zu gehen (dies wird selten
benutzt)
				\end{itemize}
		\end{itemize}
\end{frame}

\begin{frame}{Einfrieren und Veröffentlichen}
	\begin{itemize}
					\item Zu einem Zeitpunkt während des Veröffentlichungszyklus entscheidet das
Veröffentlichungsteam, Testing \textsl{einzufrieren}; automatische
Migrationen von \textbf{Unstable} nach \textbf{Testing} werden gestoppt und
durch manuelle Begutachtung ersetzt
						\br
		\item Wenn das Veröffentlichungsteam \textbf{Testing} für die Veröffentlichung als
bereit betrachtet:
			\begin{itemize}
				\item Die Suite \textbf{Testing} wird die neue Suite \textbf{Stable}
					\hhbr
				\item Ähnlich wird \textbf{Stable} \textbf{Oldstable}
					\hhbr
				\item Nicht mehr unterstützte Veröffentlichungen werden nach
\texttt{archive.debian.org} verschoben
			\end{itemize}
			\br
		\item Siehe \url{https://release.debian.org/}
	\end{itemize}
\end{frame}

\begin{frame}{Verwaltung stabiler Suites und Veröffentlichungen}
	\begin{itemize}
		\item Mehrere Suites stellen Pakete der stabilen Veröffentlichungen bereit
			\hhbr
			\begin{itemize}
				\item \textbf{Stable}: die Haupt-Suite
					\hbr
				\item \textbf{Security}: Aktualisierungs-Suite, auf \texttt{security.debian.org}
bereitgestellt, verwandt vom Sicherheitsteam. Aktualisierungen werden auf
der Mailingliste \texttt{debian-security-announce} bekanntgegeben
					\hbr
				\item \textbf{Stable-updates}: Aktualisierungen, die nicht sicherheitsbezogen
sind, aber die dringend installiert werden sollten (ohne auf die nächste
Zwischenveröffentlichung zu warten): Antivierendatenbanken,
Zeitzonen-bezogene Pakete usw. Ankündigungen auf der Mailingliste
\texttt{debian-stable-announce}
					\hbr
				\item \textbf{Backports}: neue Versionen der Originalautoren, basierend auf der
Version in \textbf{Testing}
			\end{itemize}
			\hbr
		\item Die Suite \textbf{Stable} wird alle paar Monate durch
\textsl{Zwischenveröffentlichungen für Stable} (die nur Fehlerkorrekturen
enthält) aktualisiert
			\hhbr
			\begin{itemize}
				\item Pakete, die für die nächste Zwischenveröffentlichung gedacht sind, werden
nach \textbf{Stable-proposed-updates} hochgeladen und durch das
Veröffentlichungsteam begutachtet
			\end{itemize}
			\hbr
		\item Die Veröffentlichung \textbf{Oldstable} hat die gleiche Gruppe an Suits
	\end{itemize}
\end{frame}

\subsection{Es gibt viele Möglichkeiten, zu Debian beizutragen}
\begin{frame}{Es gibt viele Möglichkeiten, zu Debian beizutragen}
  \begin{itemize}
  \item \textbf{Schlechteste} Art, beizutragen:
    \begin{enumerate}
    \item Paketieren Sie Ihre eigene Anwendung
    \item Schaffen Sie diese nach Debian
    \item Verschwinden Sie
    \end{enumerate}
    \br
  \item \textbf{Bessere} Art, beizutragen:
	  \begin{itemize}
		  \item Machen Sie bei einem Paketier-Team mit
    \begin{itemize}
    \item Viele Teams konzentrieren sich auf eine Gruppe von Paketen und benötigen
Hilfe
    \item Liste verfügbar unter \url{https://wiki.debian.org/Teams}
    \item Dies ist eine exzellente Art, um von erfahreneren Beitragenden zu lernen
    \end{itemize}
    \br
\item Adoptieren Sie existierende, nicht betreute Pakete (\textsl{verwaiste
Pakete})
    \br
  \item Bringen Sie neue Software in Debian
    \begin{itemize}
    \item Bitte nur, falls diese interessant / nützlich genug ist
    \item Sind die Alternativen bereits für Debian paketiert?
    \end{itemize}
  \end{itemize}

  \end{itemize}
\end{frame}

\subsection{Verwaiste Pakete adoptieren}
\begin{frame}{Verwaiste Pakete adoptieren}
      \hbr
  \begin{itemize}
    \item Es gibt viele nicht betreute Pakete in Debian
    \hbr
  \item Komplette Liste und Prozess: \url{https://www.debian.org/devel/wnpp/}
    \hbr
  \item Installiert auf Ihrer Maschine: \texttt{wnpp-alert}\\ Oder besser:
\texttt{how-can-i-help}
    \hbr
  \item Verschiedene Zustände:
    \begin{itemize}
		    \small
    \item \textbf{O}rphaned: das Paket ist verwaist (es wird nicht mehr betreut)\\ 
Adoptieren Sie es ruhig
      \hbr
    \item \textbf{RFA}: \textbf{R}equest \textbf{F}or \textbf{A}dopter\\ Der Betreuer
sucht nach einem Adoptierer, arbeitet aber zwischenzeitlich weiter dran\\ 
Adoptieren Sie es einfach. Eine E-Mail an den aktuellen Betreuer wäre nett
      \hbr
    \item \textbf{ITA}: \textbf{I}ntent \textbf{T}o \textbf{A}dopt\\ Jemand plant, das
Pakete zu adoptieren -- Sie könnten Hilfe anbieten!
      \hbr
    \item \textbf{RFH}: \textbf{R}equest \textbf{F}or \textbf{H}elp\\ Der
Paketbetreuer sucht Hilfe
    \end{itemize}
    \hbr
  \item Einige nicht betreute Pakete werden nicht erkannt \arr noch nicht verwaist
    \hbr
  \item Im Zweifelsfall fragen Sie auf \texttt{debian-qa@lists.debian.org} \\ oder
\texttt{\#debian-qa} auf \texttt{irc.debian.org}
  \end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Ein Paket adoptieren: Beispiel}
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize,escapeinside=\{\}]
Von: Sie <Sie@IhreDomain>
An: 640454@bugs.debian.org, control@bugs.debian.org
Cc: Francois Marier <francois@debian.org>
Betreff: 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,

Sie
\end{lstlisting}

\begin{itemize}
\item Es ist höflich, den vorhergehenden Betreuer zu kontaktieren (insbesondere
wenn das Paket RFAt und nicht verwaist war)
\item Es ist eine sehr gute Idee, die Originalautoren zu kontaktieren
\end{itemize}
\end{frame}

\subsection{Schaffen Sie Ihr Paket nach Debian}
\begin{frame}{Schaffen Sie Ihr Paket nach Debian}
\begin{itemize}
\item Sie benötigen keinen offiziellen Status, um Ihr Paket in Debian zu bekommen
	\begin{enumerate}
		\item Reichen Sie mit \texttt{reportbug wnpp} einen \textbf{ITP}-Fehler
(\textbf{I}ntent \textbf{T}o \textbf{P}ackage) ein
			\hbr
		\item Bereiten Sie ein Quellpaket vor
			\hbr
		\item Finden Sie einen Debian-Entwickler, der Ihr Paket sponsern wird
	\end{enumerate}
\br
\item Offizieller Status (wenn Sie ein erfahrener Paketbetreuer sind):
	\begin{itemize}
		\item \textbf{Debian-Betreuer (DM):}\\ Recht, Ihre eigenen Pakete hochzuladen\\ 
Siehe \url{https://wiki.debian.org/DebianMaintainer}
			\hbr
		\item \textbf{Debian-Entwickler (DD):}\\ Debian-Projektmitglied; darf abstimmen
und jedes Paket hochladen
	\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}{Zu Prüfendes, bevor Sie nach Sponsoren fragen:}
\begin{itemize}
	\item Debian legt \textbf{viel Wert auf Qualität}
\hbr
\item Typischerweise sind \textbf{Sponsoren schwer zu finden und beschäftigt}
\begin{itemize}
\item Stellen Sie sicher, dass Ihr Paket bereit ist, bevor Sie Sponsoren fragen
\end{itemize}
\hbr
\item Dinge, die geprüft werden sollten:
\begin{itemize}
\item Vermeiden Sie fehlende build-dependencies: Stellen Sie sicher, dass Ihr
Paket problemlos in einer sauberen \textsl{sid} \textsl{chroot} baut
\begin{itemize}
\item Verwendung von \texttt{pbuilder} wird empfohlen
\end{itemize}
\hbr
\item Führen Sie für Ihr Paket \texttt{lintian -EviIL +pedantic} aus
\begin{itemize}
\item Fehler müssen, alle anderen Probleme sollten behoben werden
\end{itemize}
\hbr
\item Testen Sie natürlich Ihr Paket ausführlich
\end{itemize}
\hbr
\item Im Zweifelsfall fragen Sie nach Hilfe
\end{itemize}
\end{frame}

\subsection{Wo können Sie Hilfe finden?}
\begin{frame}{Wo können Sie Hilfe finden?}
	\hbr
  Folgende Hilfe benötigen Sie:
  \begin{itemize}
  \item Ratschläge und Antworten auf Ihre Fragen, Code-Begutachtungen
  \item Unterstützung für Ihr Paket, sobald Ihr Paket fertig ist
  \end{itemize}
  \hbr
  Sie können Hilfe bekommen von:
  \begin{itemize}
	  \item \textbf{Anderen Mitgliedern eines Paketierungsteams}
    \begin{itemize}
    \item Liste von Teams: \url{https://wiki.debian.org/Teams}
    \end{itemize}
    \hbr
  \item Der \textbf{Debian-Mentors-Gruppe} (falls Ihr Paket in kein Team passt)
    \begin{itemize}
    \item \url{https://wiki.debian.org/DebianMentorsFaq}
    \item Mailingliste: \url{debian-mentors@lists.debian.org}\\ {\small (auch eine
gute Art, nebenbei was zu lernen)}
    \item IRC: \texttt{\#debian-mentors} auf \texttt{irc.debian.org}
    \item \url{http://mentors.debian.net/}
    \item Dokumentation: \url{http://mentors.debian.net/intro-maintainers}
    \end{itemize}
    \hbr
  \item \textbf{Lokalisierte Mailinglisten} (Hilfe in Ihrer Sprache erhalten)
    \begin{itemize}
  \item \texttt{debian-devel-\{french,italian,portuguese,spanish\}@lists.d.o}
  \item Komplette Liste: \url{https://lists.debian.org/devel.html}
  \item Unsere Benutzerlisten: \url{https://lists.debian.org/users.html}
  \end{itemize}
  \end{itemize}
\end{frame}

\subsection{Weitere Dokumentation}
\begin{frame}{Weitere Dokumentation}
  \begin{itemize}
  \item Debians Entwickler-Ecke\\ \url{https://www.debian.org/devel/}\\ {\small
Links auf viele Ressourcen über Debian-Entwicklung}
    \hbr
  \item Leitfaden für Debian-Betreuer\\ 
\url{https://www.debian.org/doc/manuals/debmake-doc/}
    \hbr
  \item Debian-Entwicklerreferenz\\ 
\url{https://www.debian.org/doc/developers-reference/}\\ {\small
Hauptsächlich über Debian-Prozeduren, aber auch einige goldene Regeln der
Paketierung (Teil 6)}
    \hbr
  \item Debian-Richtlinien\\ \url{https://www.debian.org/doc/debian-policy/}\\
    
    {\small \begin{itemize} \item \small Alle Anforderungen, die jedes Paket
erfüllen muss \item \small Spezielle Richtlinen für Perl, Java, Python,
\ldots \end{itemize}}
    \hbr
    
  \item Ubuntu-Paketierungsleitfaden\\ 
\url{https://packaging.ubuntu.com/html/}
  \end{itemize}
\end{frame}

\subsection{Debian-Armaturenbrett für Betreuer}
\begin{frame}{Debian-Armaturenbrett für Betreuer}
  \begin{itemize}
	  \item \textbf{Quellpaket zentriert}:\\ \url{https://tracker.debian.org/dpkg}
    \br
  \item \textbf{Betreuer/Team zentriert}: Paketüberblick für Entwickler (DDPO)\\ 
\url{https://qa.debian.org/developer.php?login=pkg-ruby-extras-maintainers@lists.alioth.debian.org}
    \br
  \item \textbf{TODO-Listen-orientiert}: Debian Maintainer Dashboard (DMD)\\ 
\url{https://udd.debian.org/dmd/}
  \end{itemize}
\end{frame}

\begin{frame}{Die Fehlerdatenbank (BTS) benutzen}
\begin{itemize}
\item Eine recht einzigartige Art, mit Fehlern umzugehen
\begin{itemize}
\item Web-Oberfläche zum Betrachten von Fehlern
\item E-Mail-Schnittstelle, um Fehler zu verändern
\end{itemize}
\hbr
\item Informationen zu Fehlern hinzufügen:
	\begin{itemize}
		\item Schreiben Sie an \texttt{123456@bugs.debian.org} (geht nicht an
Einreichenden, Sie müssen \texttt{123456-submitter@bugs.debian.org}
hinzufügen)
	\end{itemize}
\hbr
\item Fehlerstatus ändern:
\begin{itemize}
\item Schicken Sie Befehle an \texttt{control@bugs.debian.org}
\item Befehlszeilen-Schnittstelle: \texttt{bts}-Befehl in \texttt{devscripts}
\item Dokumentation: \url{https://www.debian.org/Bugs/server-control}
\end{itemize}
\hbr
\item Fehler berichten: verwenden Sie \texttt{reportbug}
\begin{itemize}
\item Normalerweise mit lokalem E-Mail-Server verwandt: installieren Sie
\texttt{ssmtp} oder \texttt{nullmailer}
\item Alternativ verwenden Sie \texttt{reportbug -\@-template}, schicken Sie dann
(manuell) an \texttt{submit@bugs.debian.org}
\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}{Das BTS verwenden: Beispiele}
\begin{itemize}
\item Eine E-Mail an den Fehler und den Einreichenden senden:\\ 
\url{https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680822\#10}
\hbr
\item Markieren und Schweregrad ändern:\\ 
\url{https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680227\#10}
\hbr
\item Neuzuweisen, Schweregrad ändern, umbenennen \ldots: \\ 
\url{https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=680822\#93}
\begin{itemize}
	\item \texttt{notfound}, \texttt{found}, \texttt{notfixed}, \texttt{fixed} sind
für \textbf{Version-Nachverfolgung} \\ Siehe
\url{https://wiki.debian.org/HowtoUseBTS\#Version\_tracking}
\end{itemize}
\hbr
\item Usertags verwenden:
\url{https://bugs.debian.org/cgi-bin/bugreport.cgi?msg=42;bug=642267}\\ 
Siehe \url{https://wiki.debian.org/bugs.debian.org/usertags}
\hbr
\item BTS-Dokumentation:
\begin{itemize}
\item \url{https://www.debian.org/Bugs/}
\item \url{https://wiki.debian.org/HowtoUseBTS}
\end{itemize}
\end{itemize}
\end{frame}

\subsection{Mehr an Ubuntu interessiert?}
\begin{frame}{Mehr an Ubuntu interessiert?}
  \begin{itemize}
  \item Ubuntu verwaltet hauptsächlich die Abweichungen von Debian
    \br
  \item Kein echter Fokus auf spezielle Pakete\\ stattdessen Kollaboration mit
Debian-Teams
    \br
  \item Normalerweise wird empfohlen, neue Pakete zuerst nach Debian hochzuladen\\ 
\url{https://wiki.ubuntu.com/UbuntuDevelopment/NewPackages}
    \br
  \item Eventuell ein besserer Plan:
    \begin{itemize}
    \item Machen Sie bei einem Debian-Team mit und agieren Sie als Brücke zu Ubuntu
      \hbr
    \item Helfen Sie bei der Reduktion der Unterschiede, sichten Sie Fehler in
Launchpad
      \hbr
    \item Viele Debian-Werkzeuge können helfen:
      \begin{itemize}
      \item Ubuntu-Spalte auf dem Entwickler-Paketüberblick
      \item Ubuntu-Kasten in der Paketdatenbank
      \item Erhalten Sie Launchpad-Fehler-E-Mails über das PTS
      \end{itemize}
    \end{itemize}
  \end{itemize}
\end{frame}

\section{Fazit}
\subsection{Fazit}
\begin{frame}{Fazit}
  \begin{itemize}
  \item Sie haben jetzt einen kompletten Überblick über die Debian-Paketierung
    \br
  \item Sie werden aber weitere Dokumentation lesen müssen
    \br
  \item Goldene Regeln entwickelten sich im Laufe der Jahre
    \begin{itemize}
    \item Falls Sie sich unsicher sind, verwenden Sie die
\textbf{dh}-Paketierungshelfer und das Format \textbf{3.0 (quilt)}
    \end{itemize}
  \end{itemize}
  \vfill
  \centerline{\large Rückmeldungen: \textbf{packaging-tutorial@packages.debian.org}}
\end{frame}

\subsection{Rechtliches Zeug}
\begin{frame}{Rechtliches Zeug}

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

  {\small \textbf{Dieses Dokument ist freie Software}; Sie können es unter
einer der folgenden Optionen (Ihrer Wahl) vertreiben und/oder verändern:
\hbr \begin{itemize} \item Den Bedingungen der GNU General Public License,
wie sie von der Free Software Foundation in Version 3 (oder nach Ihrer Wahl)
einer neueren Version veröffentlicht wurden\\ 
\url{http://www.gnu.org/licenses/gpl.html} \br \item Den Bedingungen der
Creative Commons Attribution-ShareAlike 3.0 Unported License.\\ 
\url{http://creativecommons.org/licenses/by-sa/3.0/} \end {itemize} }
\end{frame}

\subsection{Zur Anleitung beitragen}
\begin{frame}{Zur Anleitung beitragen}
	\begin{itemize}
		\item Beitragen:
			\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 Offene Fehler: \url{bugs.debian.org/src:packaging-tutorial}}
			\end{itemize}
			\br
		\item Rückmeldung geben:
			\begin{itemize}
				\item \href{mailto:packaging-tutorial@packages.debian.org}{\textbf{\texttt{mailto:packaging-tutorial@packages.debian.org}}}
				\begin{itemize}
					\item{\small Was sollte zu dieser Anleitung hinzugefügt werden?}
				\item {\small Was sollte verbessert werden?}
				\end{itemize}
					\hbr
				\item{\small \texttt{reportbug packaging-tutorial}}
			\end{itemize}
	\end{itemize}
\end{frame}

\section{Zusätzliche praktische Sitzungen}

\subsection{Praktische Sitzung 2: GNUjump paketieren}
\begin{frame}{Praktische Sitzung 2: GNUjump paketieren}
	\begin{enumerate}
		\item Laden Sie GNUjump 1.0.8 von
\url{http://ftp.gnu.org/gnu/gnujump/gnujump-1.0.8.tar.gz} herunter
			\br
		\item Erstellen Sie ein Debian-Paket dafür
			\begin{itemize}
				\item Installieren Sie die Bauabhängigkeiten, so dass Sie das Paket bauen können
				\item Korrigieren Sie Fehler
				\item Erstellen Sie ein grundlegendes, funktionierendes Paket
				\item Zum Schluss füllen Sie \texttt{debian/control} und andere Dateien aus
			\end{itemize}
			\br
		\item Viel Spaß
	\end{enumerate}
\centerline{\includegraphics[width=5cm]{figs/gnujump.png}}
\end{frame}

\begin{frame}[fragile=singleslide]{Praktische Sitzung 2: GNUjump paketieren (Tipps)}
	\begin{itemize}
		\item Um ein grundlegendes, funktionierendes Quellpaket zu erhalten, verwenden
Sie: \texttt{dh\_make}
		\item Am Anfang ist ein Quellpaket \textsl{1.0} einfacher als ein \textsl{3.0
(quilt)} (ändern Sie das in \texttt{debian/source/format})
		\item Um nach fehlenden Bauabhängigkeiten zu suchen, finden Sie eine fehlende
Datei und verwenden Sie \texttt{apt-file}, um das fehlende Paket zu finden
		\item Falls Sie auf den folgenden Fehler stoßen:
\begin{lstlisting}[basicstyle=\ttfamily\tiny,literate={ü}{{\"u}}1]
/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: die Regel für Ziel "gnujump" scheiterte
\end{lstlisting}
			Müssen Sie \texttt{-lm} zur Linker-Befehlszeile hinzufügen:\\ Bearbeiten Sie
\texttt{src/Makefile.am} und ersetzen Sie
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = $(all_libraries)
\end{lstlisting}
					durch
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = -Wl,--as-needed
gnujump_LDADD = $(all_libraries) -lm
\end{lstlisting}
				Führen Sie dann \texttt{autoreconf -i} aus
	\end{itemize}
\end{frame}

\subsection{Praktische Sitzung 3: Eine Java-Bibliothek paketieren}
\begin{frame}{Praktische Sitzung 3: Eine Java-Bibliothek paketieren}
\begin{enumerate}
	\item Schauen Sie kurz mal auf die Dokumentation zur Java-Paketierung:\\
		\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 Laden Sie IRClib von \url{http://moepii.sourceforge.net/} herunter
		\br
	\item Paketieren Sie es
\end{enumerate}
\end{frame}

\subsection{Praktische Sitzung 4: Ein Ruby-Gem paketieren}
\begin{frame}{Praktische Sitzung 4: Ein Ruby-Gem paketieren}
\begin{enumerate}
	\item Schauen Sie kurz auf einige Dokumentation über Ruby-Paketierung:\\
		\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)} (im Paket \texttt{gem2deb})
		\end{itemize}
		\hbr
	\item Erstellen Sie ein grundlegendes Debian-Quellpaket aus dem
\texttt{peach}-Gem:\\ \texttt{gem2deb peach}
	\hbr
	\item Verbessern Sie es, so dass es ein richtiges Debian-Paket wird
\end{enumerate}
\end{frame}

\subsection{Praktische Sitzung 5: Ein Perl-Modul paketieren}
\begin{frame}[fragile=singleslide]{Praktische Sitzung 5: Ein Perl-Modul paketieren}
\begin{enumerate}
	\item Schauen Sie kurz mal auf die Dokumentation zur Perl-Paketierung:\\
		\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)} (im Paket \texttt{pkg-perl-tools}
)
		\end{itemize}
		\hbr
	\item Erstellen Sie ein grundlegendes Debian-Quellpaket aus der
\texttt{Acme}-CPAN-Distribution:\\ \verb|dh-make-perl --cpan Acme|
	\hbr
	\item Verbessern Sie es, so dass es ein richtiges Debian-Paket wird
\end{enumerate}
\end{frame}

\section{Antworten zu den praktischen Sitzungen}

\begin{frame}
	\begin{center}
		\LARGE Antworten zu den\\[0.5em] praktische Sitzungen
	\end{center}
\end{frame}


\subsection{Praktische Sitzung 1: Anpassen des Grep-Pakets}

\begin{frame}{Praktische Sitzung 1: Anpassen des Grep-Pakets}
\begin{enumerate}
  \item Laden Sie Version 2.12-2 des Pakets von
\url{http://ftp.debian.org/debian/pool/main/g/grep/} herunter.

	\item Schauen Sie sich die Dateien in \texttt{debian/} an.
		\begin{itemize}
			\item 		Wie viele Binärpakete werden aus diesem Quellpaket erstellt?
			\item 		Welche Paketierungshelfer verwendet dieses Paket?
		\end{itemize}
    \hbr
	\item Bauen Sie das Paket
    \hbr
	\item Wir werden das Paket jetzt anpassen. Fügen Sie einen Changelog-Eintrag hinzu
und erhöhen Sie die Versionsnummer.
    \hbr
	\item Deaktivieren Sie jetzt die Perl-Regexp-Unterstützung (dies ist eine
\texttt{./configure}-Option)
    \hbr
	\item Bauen Sie das Paket erneut
    \hbr
	\item Vergleichen Sie das ursprüngliche und das neue Paket mit Debdiff
    \hbr
	\item Installieren Sie das neu gebaute Paket
\end{enumerate}
\end{frame}

\begin{frame}{Holen der Quellen}
\begin{enumerate}
  \item Laden Sie Version 2.12-2 des Pakets von
\url{http://ftp.debian.org/debian/pool/main/g/grep/} herunter.
\end{enumerate}
\begin{itemize}
	\item Verwenden Sie dget, um die Datei \texttt{.dsc} herunterzuladen:\\ {\small
\texttt{dget
http://cdn.debian.net/debian/pool/main/g/grep/grep\_2.12-2.dsc}}
		\hbr
	\item Falls Sie \texttt{deb-src} für eine Debian-Veröffentlichung, die
\texttt{grep} Version 2.12-2 hat, haben (schauen Sie auf
\url{https://tracker.debian.org/grep}), können Sie folgendes verwenden:
\texttt{apt-get source grep=2.12-2}\\ oder \texttt{apt-get source
grep/release} (z.B. \texttt{grep/stable}) \\ oder, falls Sie es auf Gut
Glück versuchen wollen: \texttt{apt-get source grep}
	\hbr
	\item Das Quellpaket \texttt{grep} besteht aus drei Dateien:
		\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}
		Dies ist für das Format »3.0 (quilt)« typisch.
	\hbr
\item Falls notwendig, dekomprimieren Sie die Quellen mit\\ \texttt{dpkg-source -x
grep\_2.12-2.dsc}
\end{itemize}
\end{frame}

\begin{frame}{Rumschauen und Paket bauen}
	\begin{enumerate}
			\setcounter{enumi}{1}
	\item Schauen Sie sich die Dateien in \texttt{debian/} an.
		\begin{itemize}
			\item 		Wie viele Binärpakete werden aus diesem Quellpaket erstellt?
			\item 		Welche Paketierungshelfer verwendet dieses Paket?
		\end{itemize}
	\end{enumerate}
	\hbr
	\begin{itemize}
		\item Laut \texttt{debian/control} erstellt dieses Paket nur ein Binärpaket namens
\texttt{grep}.
			\hbr
		\item Laut \texttt{debian/rules} verwendet dieses Paket typisches
\textsl{klassisches} Debhelper, ohne \textsl{CDBS} oder \textsl{dh}. Die
verschiedenen Aufrufe an die \texttt{dh\_*}-Befehle können in
\texttt{debian/rules} gesehen werden.
	\end{itemize}
	\hbr
	\begin{enumerate}
			\setcounter{enumi}{2}

		\item Bauen Sie das Paket
	\end{enumerate}
	\hbr
	\begin{itemize}
		\item Verwenden Sie \texttt{apt-get build-dep grep}, um die Bauabhängigkeiten zu
holen
		\item Dann \texttt{debuild} oder \texttt{dpkg-buildpackage -us -uc} (benötigt rund
eine Minute)
	\end{itemize}
\end{frame}

\begin{frame}{Das Änderungsprotokoll (Changelog) bearbeiten}
	\begin{enumerate}
			\setcounter{enumi}{3}

	\item Wir werden das Paket jetzt anpassen. Fügen Sie einen Changelog-Eintrag hinzu
und erhöhen Sie die Versionsnummer.
	\end{enumerate}
	\hbr
	\begin{itemize}
		\item \texttt{debian/changelog} ist eine Textdatei. Sie könnten sie manuell
bearbeiten und einen Eintrag hinzufügen.
	\hbr
		\item Oder Sie können \texttt{dch -i} verwenden, das einen Eintrag hinzufügen und
einen Editor öffnen wird.
	\hbr
		\item Der Name und die E-Mail kann mittels der Umgebungsvariablen
\texttt{DEBFULLNAME} und \texttt{DEBEMAIL} definiert werden.
	\hbr
		\item Danach bauen Sie das Paket neu; eine neue Version des Paketes ist gebaut
	\hbr
		\item Paket-Versionierung wird im Detail in Abschnitt 5.6.12 der
Debian-Richtlinien dargestellt\\ 
\url{https://www.debian.org/doc/debian-policy/ch-controlfields}
	\end{itemize}
\end{frame}

\begin{frame}{Perl-Regex-Unterstützung deaktivieren und neu bauen}
	\begin{enumerate}
			\setcounter{enumi}{4}

	\item Deaktivieren Sie jetzt die Perl-Regexp-Unterstützung (dies ist eine
\texttt{./configure}-Option)
	\item Bauen Sie das Paket erneut
	\end{enumerate}
	\hbr
	\begin{itemize}
	  \item Prüfen Sie mit \texttt{./configure -{}-help}: Die Option, um reguläre
Perl-Ausdrücke zu deaktivieren, ist \texttt{-{}-disable-perl-regexp}
	\hbr
		\item Bearbeiten Sie \texttt{debian/rules} und suchen Sie die Zeile mit
\texttt{./configure}
	\hbr
		\item Fügen Sie \texttt{-{}-disable-perl-regexp} hinzu
	\hbr
		\item Bauen Sie mit \texttt{debuild} oder \texttt{dpkg-buildpackage -us -uc} neu
	\end{itemize}
\end{frame}

\begin{frame}{Vergleichen und Testen des Pakets}
	\begin{enumerate}
			\setcounter{enumi}{6}

	\item Vergleichen Sie das ursprüngliche und das neue Paket mit Debdiff
	\item Installieren Sie das neu gebaute Paket
	\end{enumerate}
	\hbr
	\begin{itemize}
		\item Vergleichen der Binärpakete: \texttt{debdiff ../*changes}
	\hbr
		\item Vergleichen der Quellpakete: \texttt{debdiff ../*dsc}
	\hbr
		\item Installieren Sie das neu gebaute Paket: \texttt{debi}\\ Oder \texttt{dpkg -i
../grep\_<TAB>}
	\hbr
		\item \texttt{grep -P foo} funktioniert nicht mehr!
	\end{itemize}
\br
Installieren Sie wieder die vorherige Version des Pakets:
\begin{itemize}
	\item \texttt{apt-get install -{}-reinstall grep=2.6.3-3} \textit{(= vorherige
Version)}
\end{itemize}
\end{frame}

\subsection{Praktische Sitzung 2: GNUjump paketieren}
\begin{frame}{Praktische Sitzung 2: GNUjump paketieren}
\begin{enumerate}
	\item Laden Sie GNUjump 1.0.8 von
\url{http://ftp.gnu.org/gnu/gnujump/gnujump-1.0.8.tar.gz} herunter
		\br
	\item Erstellen Sie ein Debian-Paket dafür
		\begin{itemize}
			\item Installieren Sie die Bauabhängigkeiten, so dass Sie das Paket bauen können
			\item Erstellen Sie ein grundlegendes, funktionierendes Paket
			\item Zum Schluss füllen Sie \texttt{debian/control} und andere Dateien aus
		\end{itemize}
		\br
	\item Viel Spaß
\end{enumerate}
\centerline{\includegraphics[width=5cm]{figs/gnujump.png}}
\end{frame}

\begin{frame}[fragile=singleslide]{Schritt für Schritt\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 Pakettyp: Einzelnes Programm (derzeit)
	\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]{Schritt für Schritt\ldots (2)}
\begin{itemize}
	\item Schauen Sie in \texttt{debian/changelog}, \texttt{debian/rules},
\texttt{debian/control}\\ (durch \textbf{dh\_make} automatisch ausgefüllt)
		\hbr
	\item In \texttt{debian/control}:\\ \texttt{Build-Depends: debhelper (>= 7.0.50~),
autotools-dev}\\ Führt die \textsl{build-dependencies} auf = Pakete, die zum
Bau des Pakets benötigt werden
		\hbr
	\item Versuchen Sie, das Paket so mit \texttt{debuild} zu bauen (dank der
\textbf{dh}-Magie)
		\begin{itemize}
			\item Fügen Sie Bauabhängigkeiten hinzu, bis das Paket baut
			\item Tipp: Verwenden Sie \texttt{apt-cache search} und \texttt{apt-file}, um die
Pakete zu finden
			\item Beispiel:
\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$ \textbf{libsdl1.2-dev} zu den Build-Depends hinzufügen und
installieren.
		\hbr
	\item Besser: \textbf{pbuilder} verwenden, um in einer sauberen Umgebung zu bauen
		\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Schritt für Schritt\ldots (3)}
	\begin{itemize}
		\item Benötigte Bauabhängigkeiten sind \texttt{libsdl1.2-dev, libsdl-image1.2-dev,
libsdl-mixer1.2-dev}

		\item Wahrscheinlich tritt danach ein anderer Fehler auf:
	\end{itemize}
	\begin{lstlisting}[basicstyle=\ttfamily\tiny,literate={ü}{{\"u}}1]
	/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: die Regel für Ziel "gnujump" scheiterte
	\end{lstlisting}
	\begin{itemize}
		\item Diese Problem entsteht durch vernachlässigte Software: Gnujump wurde nicht
auf die Änderungen beim Linker angepasst.
		\item Falls Sie das Quellformat Version \textbf{1.0} verwenden, können Sie direkt
die Quellen der Originalautoren ändern.
			\begin{itemize}
				\item Bearbeiten Sie \texttt{src/Makefile.am} und ersetzen Sie
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = $(all_libraries)
\end{lstlisting}
					durch
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = -Wl,--as-needed
gnujump_LDADD = $(all_libraries) -lm
\end{lstlisting}
				\item Führen Sie dann \texttt{autoreconf -i} aus
			\end{itemize}
	\end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Schritt für Schritt\ldots (4)}
\begin{itemize}
	\item Falls Sie das Quellformat Version \textbf{3.0 (quilt)} verwenden, verwenden
Sie \texttt{quilt}, um einen Patch zu erstellen. (siehe
\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 Bearbeiten Sie \texttt{src/Makefile.am} und ersetzen Sie
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = $(all_libraries)
\end{lstlisting}
durch
\begin{lstlisting}[basicstyle=\ttfamily\footnotesize]
gnujump_LDFLAGS = -Wl,--as-needed
gnujump_LDADD = $(all_libraries) -lm
\end{lstlisting}
\hbr
\item \texttt{quilt refresh}
	\hbr
	\item Da \texttt{src/Makefile.am} geändert wurde, muss während des Baus Autoreconf
aufgerufen werden. Um das mit \texttt{dh} automatisch durchzuführen, ändern
Sie den Aufruf von \texttt{dh} in \texttt{debian/rules} von \texttt{dh \$\@
-{}-with autotools-dev} in \\ \texttt{dh \$\@ -{}-with autotools-dev
-{}-with autoreconf}
		\hbr
\end{itemize}
\end{itemize}
\end{frame}


\begin{frame}[fragile=singleslide]{Schritt für Schritt\ldots (5)}
\begin{itemize}
	\item Das Paket sollte jetzt korrekt bauen.
		\hbr
	\item Verwenden Sie \texttt{debc}, um den Inhalt des erstellten Pakets aufzulisten
und \texttt{debi}, um es zu installieren und zu testen
		\hbr
	\item Testen Sie das Pakets mit \texttt{lintian}
		\begin{itemize}
			\item Nicht zwingend gefordert, aber für nach Debian hochgeladene Pakete wird
\textsl{lintian-clean} empfohlen
		\hbr
			\item Weitere Probleme können mit \texttt{lintian -EviIL +pedantic} aufgelistet
werden
		\hbr
			\item Einige Tipps:
				\begin{itemize}
					\item Entfernen Sie nicht benötigte Dateien aus \texttt{debian/}
		\hbr
					\item Ausfüllen von \texttt{debian/control}
						\hbr
					\item Installation des Programms nach \texttt{/usr/games}, außer Kraft setzen von
\texttt{dh\_auto\_configure}
		\hbr
					\item Verwendung von \textsl{Härtungs}-Compiler-Schalter für bessere
Sicherheit. Siehe \url{https://wiki.debian.org/Hardening}
				\end{itemize}
		\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}{Schritt für Schritt\ldots (6)}
		\begin{itemize}
	\item Vergleichen Sie Ihr Paket mit dem bereits in Debian paketierten:
		\begin{itemize}
			\item Es verschiebt die Datendateien in ein zweites Paket, das über alle
Architekturen hinweg identisch ist ($\rightarrow$ spart Platz im
Debian-Archiv)
				\hbr
			\item Es installiert eine .desktop-Datei (für die GNOME-/KDE-Menüs) und integriert
sich auch in das Debian-Menü
				\hbr
			\item Es korrigiert ein paar kleinere Probleme mit Patches
		\end{itemize}
\end{itemize}
\end{frame}

\subsection{Praktische Sitzung 3: Eine Java-Bibliothek paketieren}
\begin{frame}{Praktische Sitzung 3: Eine Java-Bibliothek paketieren}
\begin{enumerate}
	\item Schauen Sie kurz mal auf die Dokumentation zur Java-Paketierung:\\
		\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 Laden Sie IRClib von \url{http://moepii.sourceforge.net/} herunter
		\br
	\item Paketieren Sie es
\end{enumerate}
\end{frame}

\begin{frame}{Schritt für Schritt\ldots}
\begin{itemize}
	\item \texttt{apt-get install javahelper}
		\hbr
	\item Ein grundlegendes Quellpaket erstellen: \texttt{jh\_makepkg}
		\begin{itemize}
			\item Bibliothek
			\item Keine
			\item Standard Freier Compiler/Laufzeitumgebung
		\end{itemize}
		\hbr
	\item \texttt{debian/*} anschauen und korrigieren
		\hbr
	\item \texttt{dpkg-buildpackage -us -uc} oder \texttt{debuild}
		\hbr
	\item \texttt{lintian}, \texttt{debc}, usw.
		\hbr
	\item Vergleichen Sie Ihr Ergebnis mit dem Quellpaket \texttt{libirclib-java}
\end{itemize}
\end{frame}

\subsection{Praktische Sitzung 4: Ein Ruby-Gem paketieren}
\begin{frame}{Praktische Sitzung 4: Ein Ruby-Gem paketieren}
\begin{enumerate}
	\item Schauen Sie kurz auf einige Dokumentation über Ruby-Paketierung:\\
		\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)} (im Paket \texttt{gem2deb})
		\end{itemize}
		\hbr
	\item Erstellen Sie ein grundlegendes Debian-Quellpaket aus dem
\texttt{peach}-Gem:\\ \texttt{gem2deb peach}
	\hbr
	\item Verbessern Sie es, so dass es ein richtiges Debian-Paket wird
\end{enumerate}
\end{frame}

\begin{frame}{Schritt für Schritt\ldots}
\texttt{gem2deb peach}:
\begin{itemize}
\item Lädt Gem von rubygems.org herunter
\item Erstellt ein geeignetes .orig.tar.gz-Archiv und entpackt es
\item Initialisiert ein Debian-Quellpaket, basierend auf den Gem-Metadaten.
	\begin{itemize}
		\item Namens \texttt{ruby-\textsl{Gem-Name}}
	\end{itemize}
\item Versucht, das Debian-Paket zu bauen (kann fehlschlagen)
\end{itemize}
\br
\texttt{dh\_ruby} (Teil von \textsl{gem2deb}) erledigt die Ruby-spezfischen
Aufgaben:
\begin{itemize}
	\item C-Erweiterungen für jede Ruby-Version bauen
	\item Dateien in ihr Zielverzeichnis kopieren
	\item Shebangs in ausführbaren Skripten aktualisieren
	\item Die in \texttt{debian/ruby-tests.rb}, \texttt{debian/ruby-tests.rake} oder
\texttt{debian/ruby-test-files.yaml} definierten Tests ausführen sowie
weitere Prüfungen
\end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Schritt für Schritt\ldots (2)}
Verbessern des erstellten Paketes:
\begin{itemize}
	\item \texttt{debclean} ausführen, um den Quellbaum zu bereinigen. Schauen Sie in
\texttt{debian/}.
		\hbr
	\item \texttt{changelog} und \texttt{compat} sollten korrekt sein
		\hbr
	\item Bearbeiten Sie \texttt{debian/control}: verbessern Sie \texttt{Description}
		\hbr
	\item Schreiben Sie eine vernünftige \texttt{copyright}-Datei, basierend auf den
Dateien der Originalautoren
		\hbr
	\item Bauen Sie das Paket
		\hbr
	\item Vergleichen Sie Ihr Paket mit dem Paket \texttt{ruby-peach} im Debian-Archiv
\end{itemize}
\end{frame}

\subsection{Praktische Sitzung 5: Ein Perl-Modul paketieren}
\begin{frame}[fragile=singleslide]{Praktische Sitzung 5: Ein Perl-Modul paketieren}
\begin{enumerate}
	\item Schauen Sie kurz mal auf die Dokumentation zur Perl-Paketierung:\\
		\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)} (im Paket \texttt{pkg-perl-tools}
)
		\end{itemize}
		\hbr
	\item Erstellen Sie ein grundlegendes Debian-Quellpaket aus der
\texttt{Acme}-CPAN-Distribution:\\ \verb|dh-make-perl --cpan Acme|
	\hbr
	\item Verbessern Sie es, so dass es ein richtiges Debian-Paket wird
\end{enumerate}
\end{frame}

\begin{frame}[fragile=singleslide]{Schritt für Schritt\ldots}
\verb|dh-make-perl --cpan Acme|:
\begin{itemize}
\item Lädt den Tarball von CPAN herunter
\item Erstellt ein geeignetes .orig.tar.gz-Archiv und entpackt es
\item Initialisiert ein Debian-Quellpaket, basierend auf den Metadaten der
Distribution.
	\begin{itemize}
		\item Namens \texttt{lib\textsl{Distname}-perl}
	\end{itemize}
\end{itemize}
\end{frame}

\begin{frame}[fragile=singleslide]{Schritt für Schritt\ldots (2)}
Verbessern des erstellten Paketes:
\begin{itemize}
	\item \texttt{debian/changelog}, \texttt{debian/compat},
\texttt{debian/libacme-perl.docs} und \texttt{debian/watch} sollten korrekt
sein
		\hbr
	\item Bearbeiten Sie \texttt{debian/control}: Verbessern Sie \texttt{Description}
und entfernen Sie den Textbaustein am Ende
		\hbr
	\item Bearbeiten Sie \texttt{debian/copyright}: Entfernen Sie den Textbaustein am
Anfang und fügen Sie Copyright-Jahre zum Block
\texttt{Files:\hspace{0.3em}*} hinzu
\end{itemize}
\end{frame}

\end{document}
