% on the following slides, include icon in the left sidebar \def\lximg{/usr/share/lx/icons/fueller.png} \input{configpres} \title{Debian Package Management} \maketitle % stop displaying 'fueller.png' on the following slides \def\lximg{none} \subsection{Debian Package Management} \subsubsection{Introduction} \begin{frame} \frametitle{Package Management} \begin{itemize} \item Dependencies \item Updates \item Licensing \item Managing Repositories \end{itemize} \end{frame} \begin{frame} \frametitle{Debian Package Management} \begin{itemize} \item Binary packages (.deb) \item dpkg is the base software of the Debian Package Management System \end{itemize} \end{frame} \subsubsection{dpkg} \begin{frame}[fragile] \frametitle{Using dpkg} \begin{verbatim} # Install a package dpkg -i packagename.deb # Get a list of the installed packages dpkg -l # Get a list of the installed packages # which match a specific pattern dpkg -l zlib* # remove a package dpkg -r packagename # remove a package # (and it's configuration files) dpkg -P packagename \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Using dpkg} \begin{verbatim} # Figure out to which package a # file belongs do dpkg -S /bin/df # Get a list of files # which will be installed # with a package dpkg -L coreutils # Get sone informations about an archive dpkg -I packagename.deb # Reconfigure a package dpkg-reconfigure packagename \end{verbatim} \end{frame} \subsubsection{APT} \begin{frame} \frametitle{The \textbf{A}dvanced \textbf{P}ackaging \textbf{T}oolkit} \begin{itemize} \item DPKG is the mechanism to install the package itself. APT will keep track of the dependencies and so on... \item Consists of several tools: \item apt-get \item apt-cache \item ... \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{The \textbf{A}dvanced \textbf{P}ackaging \textbf{T}oolkit} Repository list is kept in: \begin{verbatim} /etc/apt/sources.list \end{verbatim} The repository list looks like: \begin{verbatim} deb http://debian.tu-bs.de/debian lenny \ main contrib non-free deb-src http://debian.tu-bs.de/debian lenny \ main contrib non-free [...] \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{The \textbf{A}dvanced \textbf{P}ackaging \textbf{T}oolkit} There are several frontends for APT. The most important ones are: \begin{itemize} \item aptitude \item synaptic \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{apt-get} \begin{verbatim} # Update the package list apt-get update # Upgrade all packages on your system apt-get upgrade # Upgrade packages on your system AND # and resolves any new dependencies apt-get dist-upgrade \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{apt-get} \begin{verbatim} # Install a package apt-get install packagename # Remove a package apt-get remove packagename # Remove a package # including its configuration files apt-get --purge remove packagename # Clean the local apt cache apt-get clean \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{apt-cache} \begin{verbatim} # Looking for a package apt-cache search minicom # Show dependencies apt-cache depends minicom # Show a user readable record apt-cache show minicom \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{apt-get behind a proxy} /etc/apt/apt.conf.d/02proxy: \begin{verbatim} Acquire::http::Proxy "http://proxy:8080"; \end{verbatim} with user: \begin{verbatim} Acquire::http::Proxy \ "http://user@proxy:8080"; \end{verbatim} with user and password: \begin{verbatim} Acquire::http::Proxy \ "http://user:pass@proxy:8080"; \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{aptitude} Aptitude has an \textbf{advanced dependency handling} and a graphical front-end. The syntax is quite similar to apt-get and apt-cache: \begin{verbatim} # apt-get install minicom aptitude install minicom # apt-cache search minicom aptitude search minicom \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{apt-get vs. aptitude ;-)} apt-get has super cow powers; aptitude does not!! ;-) \begin{verbatim} $ aptitude moo There are no Easter Eggs in this program. $ apt-get moo (__) (oo) /------\/ / | || * /\---/\ ~~ ~~ ...."Have you mooed today?"... \end{verbatim} \end{frame} \subsubsection{deb packages} \begin{frame} \frametitle{The .deb file format} A Debian archive contains three files: \begin{itemize} \item debian-binary: Version of the archive formate \item control.tar.gz: GZIPPed Tarball containing the archive's control files \item data.tar.gz: GZIPPed Tarball containing the archives data files \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Creating .deb packages} Directory structure: \begin{verbatim} hello_pkt/ debian/ changelog control copyright ... bin/ hello \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Creating .deb packages} \begin{verbatim} # hello_pkt/debian/control Package: hello Version: 0.0.1 Section: misc Priority: optional Architecture: i386 Depends: libc6 (>= 2.2.4-4) Maintainer: Max Mustermann Description: Simple hello world program \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Creating .deb packages} \begin{verbatim} # Building the package dpkg-deb -b hello_pkt # dpkg -I hello_pkt.deb [...] Version: 0.0.1 Section: misc Priority: optional Architecture: i386 Depends: libc6 (>= 2.2.4-4) Maintainer: Max Mustermann Description: Simple hello world program \end{verbatim} \end{frame} \begin{frame}[fragile] \frametitle{Creating .deb packages} \begin{verbatim} $ ar -tv hello_pkt.deb rw-r--r-- 0/0 [...] 2011 debian-binary rw-r--r-- 0/0 [...] 2011 control.tar.gz rw-r--r-- 0/0 [...] 2011 data.tar.gz \end{verbatim} \end{frame} \subsubsection{debhelper} \begin{frame}[fragile] \frametitle{dh\_make} dh\_make is a helper to create skeletons for the contents in the DEBIAN/ directory: \begin{verbatim} $ mkdir hello-0.0.1 $ cd hello-0.0.1 $ dh_make -c gpl2 -n -s -e m@mustermann.de \end{verbatim} \end{frame} \begin{frame} \begin{thebibliography}{1} \bibitem{debian} http://www.debian.org \end{thebibliography} \end{frame} \input{tailpres}