FAQ's, Tipps und HowTo's > Workshops

dpkg Workshop

(1/2) > >>

Old Man:
Hallo zusammen,

dieser Workshop befasst sich mit Paket Manager dpkg. Da man dies nur mit Rootrechten machen kann, beschr?nke ich mich in diesem Workshop auf die Distribution Ubuntu.
Unter Ubuntu bekommt man Rootrechte mit dem Befehl sudo.
Bei anderen Debian basierenden Distries wird man in der Regel mit su root. Dazu gibt man in der Shell su und sein Rootpasswort ein.
Falls dies so ist, m?sst Ihr einfach wie in diesem Workshop beschrieben, nur das sudo vor den Befehlen weglassen.


Auch in Zeiten von apt und synaptic, passiert es h?ufiger das man .deb Pakete manuell installieren muss bzw. m?chte.

Dazu benutzt man dpkg.
dpkg steht f?r "Debian GNU/Linux package manager". Die wichtigste Funktion  von dpkg besteht darin, das System in einem stabilen Zustand zuhalten.
Entwickelt wurde dpkg, weil bei den anderen Distributionen die Paketverwaltung nicht den Anforderungen der Debian Entwickler entsprach.

Fangen wir also an.

dpkg bringt von Haus aus eine eingebaute Hilfefunktion mit. Dort kann man sich mal eine ?bersicht der vielf?ltigen Optionen machen.

Dazu geben wir auf der Shell folgendes ein:

dpkg --help

Es sollte dann folgende Ausgabe sichtbar sein:


--- Zitat ---ubuntu:~$ dpkg --help
Usage:
  dpkg -i|--install      <.deb file name> ... | -R|--recursive <dir> ...
  dpkg --unpack          <.deb file name> ... | -R|--recursive <dir> ...
  dpkg -A|--record-avail <.deb file name> ... | -R|--recursive <dir> ...
  dpkg --configure              <package name> ... | -a|--pending
  dpkg -r|--remove | -P|--purge <package name> ... | -a|--pending
  dpkg --get-selections [<pattern> ...]    get list of selections to stdout
  dpkg --set-selections                    set package selections from stdin
  dpkg --update-avail <Packages-file>      replace available packages info
  dpkg --merge-avail <Packages-file>       merge with info from file
  dpkg --clear-avail                       erase existing available info
  dpkg --forget-old-unavail                forget uninstalled unavailable pkgs
  dpkg -s|--status <package-name> ...      display package status details
  dpkg -p|--print-avail <package-name> ... display available version details
  dpkg -L|--listfiles <package-name> ...   list files `owned' by package(s)
  dpkg -l|--list [<pattern> ...]           list packages concisely
  dpkg -S|--search <pattern> ...           find package(s) owning file(s)
  dpkg -C|--audit                          check for broken package(s)
  dpkg --print-architecture                print dpkg architecture
  dpkg --compare-versions <a> <rel> <b>    compare version numbers - see below
  dpkg --help | --version                  show this help / version number
  dpkg --force-help | -Dh|--debug=help     help on forcing resp. debugging
  dpkg --licence                           print copyright licensing terms

Use dpkg -b|--build|-c|--contents|-e|--control|-I|--info|-f|--field|
 -x|--extract|-X|--vextract|--fsys-tarfile  on archives (type dpkg-deb --help.)

For internal use: dpkg --assert-support-predepends | --predep-package |
  --assert-working-epoch | --assert-long-filenames | --assert-multi-conrep

Options:
  --admindir=<directory>     Use <directory> instead of /var/lib/dpkg
  --root=<directory>         Install on alternative system rooted elsewhere
  --instdir=<directory>      Change inst'n root without changing admin dir
  -O|--selected-only         Skip packages not selected for install/upgrade
  -E|--skip-same-version     Skip packages whose same version is installed
  -G|--refuse-downgrade      Skip packages with earlier version than installed
  -B|--auto-deconfigure      Install even if it would break some other package
  --no-debsig                Do no try to verify package signatures
  --no-act|--dry-run|--simulate
                             Just say what we would do - don't do it
  -D|--debug=<octal>         Enable debugging - see -Dhelp or --debug=help
  --status-fd <n>            Send status change updates to file descriptor <n>
  --log=<filename>           Log status changes and actions to <filename>
  --ignore-depends=<package>,... Ignore dependencies involving <package>
  --force-...                    Override problems - see --force-help
  --no-force-...|--refuse-...    Stop when problems encountered
  --abort-after <n>              Abort after encountering <n> errors

Comparison operators for --compare-versions are:
 lt le eq ne ge gt       (treat empty version as earlier than any version);
 lt-nl le-nl ge-nl gt-nl (treat empty version as later than any version);
 < << <= = >= >> >       (only for compatibility with control file syntax).

Use `dselect' or `aptitude' for user-friendly package management.
--- Ende Zitat ---


Weitere Hilfe bekommt man, indem man die Manpages aufruft.
Dies geschieht mit:

man dpkg

Als Anmerkung:

--- Zitat ---Bei den Manpages handelt es sich um eine sehr umfangreiche Hilfefunktion. Dort gibt es zu fast allen Fragen ein Manual (Handbuch).
Probiert es einfach mal aus. Ihr wollt z.B. was ?ber OpenOffice wissen.
Der Befehl lautet dann:

man openoffice
--- Ende Zitat ---



Damit schliessen wir das Thema Hilfe f?r dpkg ab.




In der n?chsten Folge von dpkg, werden wir uns mit dem installieren eines .deb Paketes befassen.

Old Man:
Hallo zusammen

Wie bereits angek?ndigt, werden wir nun mit dpkg ein .deb Paket installieren.

Um ein Paket mit dpkg zuinstallieren, m?ssen wir zuerst mal ein solches Paket haben.  Dazu brauchen wir Pakete die die Endung .deb haben.

Beispiel:
skype_1.2.0.18-2_i386.deb


Diese befinden sich durch Download aus dem Internet, entweder im lokalen Dateisystem oder man hat deb.Pakete auf einer gemounteten CD bzw. DVD.
Um das Paket nun zuinstallieren, muss zun?chst einmal in das Verzeichnis wo sich das Paket befindet, gewechselt werden.
Dies geschieht mit dem Befehl cd.

Wie der Befehl cd eingesetzt wird, k?nnt Ihr hier nachlesen.
http://www.linux-beginnerforum.de/smf/index.php?topic=1455.msg5046#msg5046


Nachdem wir in das Verzeichnis, wo sich das Paket befindet, gewechselt haben, geben wir in der Shell folgendes ein.

sudo dpkg -i oder --install skype_1.2.0.18-2_i386.deb

Wie Ihr sicher festgestellt habt, lassen sich die Pakete nur mit rootrechten installieren. Deswegen der Befehl sudo.


Tipp:


--- Zitat ---Da man sich bei der Eingabe des Dateinamens durch die L?nge des Namens, schnell vertippen kann, hier ein Tipp.
Durch einem Sternchen * kann man den Dateinamen abk?rzen.
In unserem Fall mit dem Paket Skype, sieht der Befehl dann wie folgt aus.

sudo dpkg -i skype*
--- Ende Zitat ---

Damit schliessen wir das Thema installieren. Im n?chsten Workshop geht es ums l?schen der Pakete.
Denn was man installiert hat, kann man nat?rlich auch wieder entfernen.


Also bis zum n?chstenmal.

Old Man:
Wie wir ein Paket installieren, haben wir im  letzten Workshop besprochen.

Heute m?chte ich Euch erz?hlen wie man sie wieder entfernt. Dabei bleiben wir bei unserem Beispiel Skype.
Nach dem Installieren haben wir festgestellt, das Skype uns nicht gef?llt. Was tun?

Dazu geben wir in der Shell den folgenden Befehl ein.

sudo dpkg -r oder --remove skype

Mit der Option -r oder --remove k?nnen bereits installierte Pakete wieder entfernt werden. Dazu gibt man einfach den Namen des zuentfernenden Paketes an.
M?chtet Ihr mehre Pakete l?schen, sind die Namen der Pakete durch Leerzeichen getrennt, einzugeben.

Beispiel:
sudo dpkg -r skype gnomebaker gnumeric

Beachtet bitte, das bei dieser Art des entfernens, nur die Programmdateien gel?scht werden. Die Konfigurationdateien bleiben dabei auf dem Rechner.
Was aber kein Problem darstellt, da die Konfigurationsdateien nur sehr wenig Platz verbrauchen.
Ferner kann man beim erneuten Installieren, wieder auf die Konfigurationsdateien zur?ckgreifen.

Jetzt werden einige sagen, ich m?chte aber alles entfernen. Also komplett mit den Konfigurationsdateien.
Auch dies ist mit dpkg kein Problem.

Dann wird einfach statt der Option remove nur purge eingegeben.

In unserem Beispiel w?rde der Befehl so aussehen.

sudo dpkg -P oder --purge skype

Damit werden dann zu den Programmdateien auch die dazugeh?renden Konfigurationsdateien gel?scht.

Damit werden wir das entfernen von Paketen schliessen und uns im n?chsten Workshop mit dem suchen und anzeigen besch?ftigen.


Anmerkung:
Euch ist sicher aufgefallen, das es eine kurze und eine lange Schreibweise der Optionen gibt.
Beispiel:      dpkg -r       dpkg --remove
Dies ist aber nicht bei allen Optionen so.
Wo es der Fall ist, werde ich immer beide Varianten angeben. So habt Ihr die M?glichkeit, selbst zuentscheiden, welche Option Ihr lieber bevorzugt.

Old Man:
Hallo zusammen

Heute wollen wir uns mit dem suchen und anzeigen befassen.
Wie man auf unserem System, die tats?chlichen Paketnamen anzuzeigt, zeige ich Euch am Beispiel von Mozilla.
Dazu ?ffnen wir ein Terminal und geben folgendes ein.
dpkg -l oder --list mozilla*

Die Ausgabe des Befehles habe ich mal von meinem System genommen.

--- Zitat ---ubuntu:~$ dpkg -l mozilla*
Gew?nscht=Unbekannt/Installieren/R=Entfernen/P=S?ubern/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/Fehlgeschl. Konf./Halb install.
|/ Fehler?=(keiner)/Halten/R=Neuinst. notw/X=beides (Status, Fehler: GRO?=schlec ht)
||/ Name           Version        Beschreibung
+++-==============-==============-============================================
un  mozilla                 <keine>                 (keine Beschreibung vorhanden)
ii    mozilla-acrore     7.0.1-0.0.ubun         Adobe Acrobat(R) Reader plugin for mozilla /
ii    mozilla-browse    1.7.12-1.1ubun        The Mozilla Internet application suite - cor
un  mozilla-browse    <keine>                  (keine Beschreibung vorhanden)
un  mozilla-firefo       <keine>                  (keine Beschreibung vorhanden)
ii    mozilla-firefo       1.5.0.1ubuntu1        Mozilla Firefox German language/region packa
ii    mozilla-firefo       1.5.0.1ubuntu1        Mozilla Firefox English language/region pack
un  mozilla-locale      <keine>                  (keine Beschreibung vorhanden)
un  mozilla-mailne     <keine>                  (keine Beschreibung vorhanden)
ii    mozilla-mplaye    3.17-1ubuntu1         MPlayer-Plugin for Mozilla
un  mozilla-plugin     <keine>                   (keine Beschreibung vorhanden)
un  mozilla-psm        <keine>                   (keine Beschreibung vorhanden)
ii    mozilla-thunde    1.5-0ubuntu6            Mozilla Thunderbird standalone mail client
ii    mozilla-thunde    0.94-0ubuntu3          Enigmail - GPG support for Mozilla Thunderbi
un  mozilla-thunde    <keine>                   (keine Beschreibung vorhanden)
ii    mozilla-thunde    1.5ubuntu20060       Transitional package for mozilla-thunderbird
un  mozilla-thunde    <keine>                    (keine Beschreibung vorhanden)
un  mozilla-xft           <keine>                   (keine Beschreibung vorhanden)
--- Ende Zitat ---

Der Nachteil bei diesem Befehl ist der, das die Namen des Paketes abgeschnitten sind.
Dies kann man durch setzen der Variablen COLUMNS ?ndern.

Mit der Variablen sieht der Befehl dann so aus.
COLUMNS=123 dpkg -l oder --list mozilla*

Probiert die beiden Varianten mal aus.

Da wir nun rausbekommen haben wie die Pakete hei?en, m?chten wir auch etwas ?ber den Status der Pakete wissen.
Das hei?t, das wir was ?ber die Gr??e, der Version, den Status der Installation u.s.w. erfahren.
So kann man schnell die Ursachen f?r eventuelle Probleme ermitteln.
Da wir ja die Namen des Paketes bereits ermittelt haben, benutzen wir als Beispiel den Mozilla-Thunderbird.

Dazu geben wir im Terminal folgenden Befehl ein.
dpkg -s oder --status mozilla-thunderbird

Die Ausgabe sieht in meinem Fall so aus.

--- Zitat ---ubuntu:~$ dpkg -s mozilla-thunderbird
Package: mozilla-thunderbird
Status: install ok installed
Priority: optional
Section: mail
Installed-Size: 26596
Maintainer: Alexander Sack <asac@debian.org>
Architecture: i386
Version: 1.5-0ubuntu6
Provides: mail-reader, imap-client
Depends: libatk1.0-0 (>= 1.9.0), libc6 (>= 2.3.4-1), libcairo2 (>= 1.0.2-2), libfontconfig1 (>= 2.3.0), libfreetype6 (>= 2.1.5-1), libgcc1 (>= 1:4.0.2), libglib2.0-0 (>= 2.9.3), libgtk2.0-0 (>= 2.8.0), libjpeg62, libpango1.0-0 (>= 1.11.99), libpng12-0 (>= 1.2.8rel), libstdc++6 (>= 4.0.2-4), libx11-6, libxcursor1 (>> 1.1.2), libxext6, libxfixes3, libxft2 (>> 2.1.1), libxi6, libxinerama1, libxrandr2, libxrender1, libxt6, zlib1g (>= 1:1.2.1)
Recommends: myspell-en-us | myspell-dictionary, xprint
Suggests: mozilla-thunderbird-typeaheadfind, mozilla-thunderbird-inspector, mozilla-firefox, ttf-bitstream-vera, ttf-freefont, mozilla-thunderbird-enigmail
Conffiles:
 /etc/mozilla-thunderbird/global-config.js 0fbc68f5db472bacec8b9e250300bc0e
Description: Mozilla Thunderbird standalone mail client
 Mozilla Thunderbird is a redesign of the Mozilla mail component. The
 goal is to produce a cross platform stand alone mail application using
 the XUL user interface language. Mozilla Thunderbird leaves a somewhat
 smaller memory footprint than the Mozilla suite.
--- Ende Zitat ---

Wie Ihr seht, ist bei meinen Mozilla-Thunderbird alles in Ordnung.

Um nun zuwissen, welche Datei zu einem Paket geh?rt, lautet der Befehl.
dpkg -S oder --search gdm.conf

Beachtet bitte:
Linux unterscheidet bei der Gro? und Kleinschreibung.
dpkg -s ist nicht das selbe wie dpkg -S

Ich habe bei diesem Beispiel mal die gdm.conf genommen. Der Grund ist nur, weil die Ausgabe recht klein ist.

--- Zitat ---ubuntu:~$ dpkg -S gdm.conf
gdm: /etc/gdm/factory-gdm.conf
gdm: /etc/gdm/gdm.conf-custom
gdm: /etc/gdm/gdm.conf
--- Ende Zitat ---

Um nun alle Dateien, die zu dem Paket geh?ren anzuzeigen, geben wir im Terminal folgendes ein.
Als Beispiel nehmen wir die ber?hmte Bash.
dpkg -L oder --listfiles bash

Die Ausgabe sieht dann so aus.

--- Zitat ---ubuntu:~$ dpkg -L bash
/.
/bin
/bin/bash
/etc
/etc/skel
/etc/skel/.bashrc
/etc/skel/.bash_profile
/etc/skel/.bash_logout
/etc/bash_completion.d
/etc/bash.bashrc
/etc/bash_completion
/usr
/usr/share
/usr/share/doc
/usr/share/doc/bash
/usr/share/doc/bash/completion-contrib
/usr/share/doc/bash/completion-contrib/bitkeeper
/usr/share/doc/bash/completion-contrib/bittorrent
/usr/share/doc/bash/completion-contrib/cksfv
/usr/share/doc/bash/completion-contrib/clisp
/usr/share/doc/bash/completion-contrib/dsniff
/usr/share/doc/bash/completion-contrib/freeciv
/usr/share/doc/bash/completion-contrib/gcl
/usr/share/doc/bash/completion-contrib/gkrellm
/usr/share/doc/bash/completion-contrib/gnatmake
/usr/share/doc/bash/completion-contrib/harbour
/usr/share/doc/bash/completion-contrib/isql
/usr/share/doc/bash/completion-contrib/larch
/usr/share/doc/bash/completion-contrib/lilypond
/usr/share/doc/bash/completion-contrib/lisp
/usr/share/doc/bash/completion-contrib/mcrypt
/usr/share/doc/bash/completion-contrib/modules
/usr/share/doc/bash/completion-contrib/mtx
/usr/share/doc/bash/completion-contrib/p4
/usr/share/doc/bash/completion-contrib/povray
/usr/share/doc/bash/completion-contrib/ri
/usr/share/doc/bash/completion-contrib/sbcl
/usr/share/doc/bash/completion-contrib/sitecopy
/usr/share/doc/bash/completion-contrib/snownews
/usr/share/doc/bash/completion-contrib/subversion
/usr/share/doc/bash/completion-contrib/unace
/usr/share/doc/bash/completion-contrib/unrar
/usr/share/doc/bash/completion-contrib/mailman.gz
/usr/share/doc/bash/README.bash_completion.gz
/usr/share/doc/bash/changelog.Debian.gz
/usr/share/doc/bash/BUGS.bash_completion
/usr/share/doc/bash/changelog.gz
/usr/share/doc/bash/CHANGES.gz
/usr/share/doc/bash/NEWS.gz
/usr/share/doc/bash/INTRO.gz
/usr/share/doc/bash/POSIX.gz
/usr/share/doc/bash/FAQ
/usr/share/doc/bash/README.Debian.gz
/usr/share/doc/bash/README.commands.gz
/usr/share/doc/bash/README.abs-guide
/usr/share/doc/bash/inputrc.arrows
/usr/share/doc/bash/copyright
/usr/share/doc/bash/changelog.bash_completion.gz
/usr/share/doc/bash/COMPAT.gz
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/clear_console.1.gz
/usr/share/man/man1/rbash.1.gz
/usr/share/man/man1/bash.1.gz
/usr/share/man/man1/bashbug.1.gz
/usr/share/man/man7
/usr/share/man/man7/bash-builtins.7.gz
/usr/share/menu
/usr/share/menu/bash
/usr/bin
/usr/bin/bashbug
/usr/bin/clear_console
/bin/rbash
/bin/sh
/usr/share/man/man1/sh.1.gz
--- Ende Zitat ---


Damit beenden wir das Thema suchen und anzeigen.
Beim n?chsten Workshop befassen wir uns mit Listen.
Dabei erstellen wir eine Liste aller installierten Pakete und wie man die erstellte Liste wieder einliest

Bis bald.

Bis bald

Old Man:
Hallo

Wie bereits angek?ndigt, geht es heute um Listen.

Um eine Liste aller installierten Pakete anzuzeigen, geben wir im Terminal folgendes ein.
dpkg --get-selections

F?gt man dem Befehl noch ein Sternchen * hinzu,
dpkg --get-selections \*
werden alle Pakete mit dem aktuellen Zustand angezeigt. Das hei?t, es werden auch zu l?schende und nicht installierte Pakete mitangezeigt.

Damit wir mit der Liste auch was anfangen k?nnen, m?ssen wir sie erstellen bzw. abspeichern.
Dies geschieht wie folgt.
sudo dpkg --get-selections \* > /tmp/PAKETLISTE

L?sst man bei diesem Befehl das \* weg, werden nur die installierten Pakete als Liste erstellt.

Ihr fragt Euch bestimmt wof?r man dies braucht. Dies ist ganz einfach erkl?rt.
Solch eine Liste kann nach einem Hardwaredefekt recht hilfreich sein. Damit das System wieder den urspr?nglichen Zustand bekommt.
Ferner kann man seinen Zweitrechner auf den selben Stand, wie den ersten bringen. Man dupliziert sein System.

Damit das ganze auch funktioniert, muss die erstellte Liste auch wieder eingelesen werden.
Dies geschieht mit --set-selections

In unserem Fall sieht der Befehl so aus.
sudo dpkg --set-selections < /tmp/PAKETLISTE

Damit wird die Datei PAKETLISTE in die Paketdatenbank eingelesen. Je nach dem mit welchen Informationen die Paketliste erstellt wurde, wird sie in der Paketdatenbank mit einen Status versehen.
Das hei?t, wenn man ein apt-get update macht, werden die ?nderungen wirksam bzw. durchgef?hrt.

Damit beenden wir das Thema Listen.

Im n?chsten Workshop ?berschreiben wir Konfigurationsdateien und installieren Pakete mit Gewalt.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln