blob: cf4be912c88a7ac56708fbd584503c72afd37b3b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
|
% 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 some information 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 The \textbf{apt} command has several sub-commands:
\begin{itemize}
\item search - search in package descriptions
\item install/remove - install/remove packages
\item update - update list of available packages
\item upgrade - upgrade the system by installing/upgrading packages
\end{itemize}
\item old-style: various apt-commands
\begin{itemize}
\item apt-cache update
\item apt-get upgrade
\item apt-get install ...
\end{itemize}
\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 stretch \
main contrib non-free
deb-src http://debian.tu-bs.de/debian stretch \
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{Update and Upgrade}
\begin{verbatim}
# Update the package list
apt update
# Upgrade all packages on your system
apt upgrade
# Upgrade packages on your system AND
# and resolves any new dependencies
apt dist-upgrade
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
\frametitle{Install and Remove}
\begin{verbatim}
# Install a package
apt install <packagename>
# Remove a package
apt remove <packagename>
# Remove auto-installed packages, which are
# no longer required by other packages.
apt autoremove
# Remove a package
# including its configuration files
apt purge <packagename>
# Clean the local apt cache
apt clean
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
\frametitle{Search and Dependencies}
\begin{verbatim}
# Looking for a package
apt search minicom
# Show dependencies
apt depends minicom
# Show a user readable record
apt show minicom
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
\frametitle{apt 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:
\begin{verbatim}
# alternative to: apt install minicom
aptitude install minicom
# alternative to: apt search minicom
aptitude search minicom
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
\frametitle{apt vs. aptitude (I)}
aptitude supports extended search patterns
\begin{verbatim}
# search only in installed packages (long and short version)
$ aptitude search "?installed(linux-image)"
$ aptitude search ~ilinux-image
i A linux-image-4.19.0-1-amd64 - Linux 4.19 for 64-bit PCs
i linux-image-amd64 - Linux for 64-bit PCs
# search packages, which are no longer present in repository
aptitude search "?obsolete(openjdk)"
aptitude search ~oopenjdk
i A openjdk-10-jre - OpenJDK Java runtime, ...
i A openjdk-10-jre-headless - OpenJDK Java runtime, ...
\end{verbatim}
\end{frame}
\begin{frame}[fragile]
\frametitle{apt vs. aptitude (II)}
apt has super cow powers, aptitude does not!! ;-)
\begin{verbatim}
$ aptitude moo
There are no Easter Eggs in this program.
$ apt 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 <m@mustermail.de>
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 <m@mustermail.de>
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}
|