Aptitude – bekannt und doch unbekannt ===================================== :author: Axel Beckert, Frank Hofmann :backend: slidy :max-width: 45em :data-uri: http://noone.org/talks/aptitude/ :max-width: 94% :icons: Paketmanagement --------------- - Software ist komplex und besteht aus vielen, unterschiedlichen Komponenten, die voneinander abhängig sind, bspw. * Kompilierte Programme (Programme geschrieben in C, C++, Haskell, …) * Skripte (Programme geschrieben in Perl, Python, Ruby, Tcl, …) * Bibliotheken (kompilierte wie auch in Skriptsprachen) * Daten (Wörterbücher, Grafiken, Musik, Bücher, …) * Konfigurationsdateien - Paketarten: * Binärpakete (+.deb+): Entweder architektur-abhängig oder architektur-unabhängig * Source-Pakete (+.dsc+ + Tar-Ball + Diff): Upstream-Source-Code plus Paketierung - Paketmanagement ist die Verwaltung von Softwarepaketen * Installation * Aktualisierung * sauberes Entfernen von Paketen Kann Paketmanagement Spaß machen? --------------------------------- - unter Debian: ja - ... warum? * es funktioniert einfach * es ist dokumentiert * Debian-Pakete sind aufeinander abgestimmt und getestet * Debian-Pakete sind anhand ihres Entwicklungsstands kategorisiert (stable, backports, testing, unstable, experimental) * kein Stress mit Lizenzen * Neue-Pakete-Liste: Wie Weihnachten, nur günstiger und häufiger Paketformat von Binärpaketen beinhaltet --------------------------------------- image::zshpaket.png[float="right"] - Paketname und -Version - Beschreibung des Paketinhaltes - Architektur, für die es übersetzt wurde (oder "all", falls architekturunabhängig) - Abhängigkeiten zu und Konflikte mit anderen Paketen (ggf. mit Versionsangaben) - Kategorisierung: Priorität und Sektion - Maintainer - Platzverbrauch des installierten Pakets - Skripte, die beim Installieren oder Entfernen ausgeführt werden sollen Werkzeuge und Aufgaben ---------------------- image::werkzeugebenen.png[float="right"] Obere Ebene ~~~~~~~~~~~ APT, Aptitude, Synaptic, etc.: * Paketlisten und Pakete herunterladen * Abhängigkeiten auflösen * Versionen auswählen Untere Ebene ~~~~~~~~~~~~ Dpkg: * Informationen über installierte Pakete und Paket-Dateien anzeigen * Pakete installieren, entfernen und aktualisieren * Abhängigkeiten überprüfen * Konfigurationsdateien managen APT vs. Aptitude ---------------- APT ~~~ - Nur Kommandozeile: apt-get, apt-cache, apt-key, apt-mark - Bibliotheken: libapt-pkg, libapt-inst - Standard Download-Methoden (http, ftp, cdrom, file) - Alternative Abhängigkeitsauflösung per Plugins Aptitude ~~~~~~~~ - Kommandozeile und Textoberfläche (GUI-Oberflächen wieder aufgegeben) - Nutzt APTs Bibliotheken - Nutzt APTs Download-Methoden - Eigene, interaktive Abhängigkeitsauflösung - Möglichkeit des Vormerkens von Aktionen APT-Konfiguration ----------------- * Paketliste(n) unter +/etc/apt/sources.list+ und +/etc/apt/sources.list.d/+. + -------------------------- deb http://ftp.de.debian.org/debian/ squeeze main contrib non-free deb-src http://ftp.de.debian.org/debian/ squeeze main contrib non-free deb http://security.debian.org/ squeeze/updates main contrib non-free deb-src http://security.debian.org/ squeeze/updates main contrib non-free deb http://backports.debian.org/debian-backports squeeze-backports main deb-src http://backports.debian.org/debian-backports squeeze-backports main deb http://deb.opera.com/opera squeeze non-free -------------------------- * Globale APT-Konfiguration unter +/etc/apt/apt.conf.d/+ in Form von einzelnen Konfigurationsfragmenten. (Alles in +/etc/apt/apt.conf+ geht auch.) Unterkommandos von apt-get und aptitude (1) ------------------------------------------- [frame="topbot",options="header",cols="3,4,3"] |==== |Aktion |+apt-get …+ / +apt-cache …+ ¹ |+aptitude …+ |Paketlisten aktualisieren |+… update+ |+… update+ |Pakete konservativ akt. |+… upgrade+ |+… safe-upgrade+ |Alle Pakete aktualisieren |+… dist-upgrade+ |+… full-upgrade+ |Paket installieren |+… install 'Paket'+ |+… install 'Paket'+ |Paket nochmals inst. |+… install --reinstall 'Paket'+ |+… reinstall 'Paket'+ |Paket entfernen |+… remove 'Paket'+ |+… remove 'Paket'+ |Paket samt Konfig. entf. |+… purge 'Paket'+ |+… purge 'Paket'+ |Ungenutzte Pakete entf. |+… autoremove+ |(automatisch) |Paket beibehalten |+dpkg-hold 'Paket'+ |+… hold 'Paket'+ |==== Unterkommandos von apt-get und aptitude (2) ------------------------------------------- [frame="topbot",options="header",cols="2,1,1"] |==== |Aktion |+apt-get …+ / +apt-cache …+ ¹ |+aptitude …+ |Paketcache leeren (komplett) |+… clean+ |+… clean+ |Pakete ohne verfügbare Quellen löschen |+… autoclean+ |+… autoclean+ |Paketinformationen anzeigen |+…¹ show+ |+… show 'Paket'+ |Warum ist ein Paket installiert? |- |+… why 'Paket'+ |Warum ist ein Paket nicht inst.? |- |+… why-not 'Paket'+ |Abhängigkeitsfehler zeigen |+… check+ |+… search '~b'+ |Paket suchen |+…¹ search 'Muster'+ |+… search 'Muster'+ |Verfügbare Paketversionen zeigen |+…¹ policy 'Paket'+ |+… versions 'Paket'+ |==== Vormerken mit Aptitude ---------------------- - +aptitude --schedule-only install 'Paket1'+ - +aptitude --schedule-only install 'Paket2'+ - +aptitude install+ (Installiert Paket 'Paket1' und 'Paket2'.) Aptitude Curses TUI ------------------- - Hilfe mit '?' - Auf- und Zuklappen von Bäumen mit 'Enter', '[', und ']' - Vormerken: * Installieren: '+' * Entfernen: '-' * Paket mitsamt Konfiguration entfernen ("purge"): '_' * Paketversion beibehalten: '=' * Paket nochmals installieren ("reinstall"): 'L' - Vorschau der Vormerkungen: 1× 'g' * Vorgemerkte Aktionen ausführen: Nochmals 'g' - Suchen mit '/' (je nach Konfiguration inkrementell oder erst nach 'Enter') - Suche nach Paketen mit kaputten Abhängigkeiten: 'b' - Anzeige einschränken/filtern: 'l' - Vorschläge zur Konfliktlösung anzeigen: 'e' - Nächster, Vorheriger, Erster, Letzter Vorschlag: '.', ',', '<', '>' Aptitude Suchmuster ------------------- [frame="topbot",options="header",cols="2,1,10"] |==== |Langform |Kurzform |Findet Pakete … |+?not('muster')+ |+!'muster'+ |auf die das Suchmuster nicht zutrifft. |+?and('muster1', 'muster2')+ |+'muster1' 'muster2'+ |auf die beide Suchmuster zutreffen. |+?automatic+ |+~M+ |die als automatisch installiert markiert sind. |+?broken+ |+~b+ |mit nicht erfüllten Abhängigkeiten |+?conflicts('muster')+ |+~C 'muster'+ |die mit Paketen, auf die das Suchmuster zutrifft, kollidieren. |+?config-files+ |+~c+ |die entfernt wurden, aber deren Konfigdateien noch installiert sind. |+?description('text')+ |+~d 'muster'+ |deren Beschreibung den Suchtext enthält. |+?essential+ |+~E+ |die in der Paketliste als essentiell markiert sind. |+?garbage+ |+~g+ |die automatisch entfernt würden. |+?installed+ |+~i+ |die installierte sind. |+?maintainer('text')+ |+~m 'text'+ |deren Betreuername oder -E-Mail-Adresse den Suchtext enthält. |+?name('text')+ |+~n 'text'+, +'text'+ |deren Namen den Suchtext enthält. |+?obsolete+ |+~o+ |die installiert sind, aber nicht heruntergeladen werden können. |+?or('muster1', 'muster2')+ |+'muster1' \| 'muster2'+ |auf die eines der beiden Suchmuster zutrifft. |+?provides('muster')+ |+~P 'muster'+ |die ein virtuelles Paket bereitstellen, auf das das Suchmuster zutrifft. |+?priority('priorität')+ |+~p 'priorität'+ |mit der angegebenen Priorität. |+?section('sektion')+ |+~s 'sektion'+ |deren Sektion den Suchtext enthält. |+?source-package('text')+ |'nicht vorh.' |deren Quellpaketnamen den Suchtext enthält. |+?tag('markierung')+ |+~G 'markierung'+ |die mit der genannten Debtags-Markierung versehen sind. |+?upgradable+ |+~U+ |die aktualisiert werden können (unter Beachtung von Pinning) |+?version('text')+ |+~V 'text'+ |deren Version den Suchtext enthält (Suchtexte mit Sonderbedeutung: +CURRENT+, +CANDIDATE+ und +TARGET+). |+?virtual+ |+~v+ |virtuelle Pakete. |==== Wo kann ich das anwenden? ------------------------- image::315px-Debian_record_2013.PNG["Debian Derivate (Quelle: Wikipedia)",float="right",link="http://en.wikipedia.org/wiki/File:Debian_record_2013.PNG"] - Auf praktisch jedem Debian-Derivat: * Raspbian (Debian auf dem Raspberry Pi), Emdebian, … * Ubuntu und Derivate * Skolelinux/DebianEdu, Edubuntu * Aptosid, Siduction, Grml, Knoppix, Damn Small Linux, BackTrack, … * Linux Mint, Bodhi Linux, Crunchbang Linux, ElementaryOS, … * Zentyal, Univention Corporate Linux, … - RPM-basierte Linux-Distributionen mit apt4rpm - Auf Mobiltelefonen -- Maemo/Meego (Nokia N900, N9), OpenMoko (div. Distributionen) - Mit BSD-Kernel -- Debian GNU/kFreeBSD - Mit Hurd-Kernel -- Debian GNU/Hurd - Mit OpenSolaris/Illumos -- Nexenta, StormOS, Illumian, Dyson - Unter MacOS X: Fink (zusätzl., freie Pakete, mit Jailbreak auch für iPhone/iPod/iPad) Wo geht es weiter -- Links und Referenzen ----------------------------------------- - Folien: http://noone.org/talks/aptitude/ - Aptitude-Dokumentation (engl.): http://people.debian.org/~abe/aptitude/en/ - Artikel * Thomas Winde, Frank Hofmann: Zentraler Zugangspunkt. Komfortabel Pakete managen mit der Apt-Shell, Linux User 06/2012 * Frank Hofmann: Dschungelführer. Pakete zielgenau finden mit Debtags, Linux User 06/2012 - Bücher * Martin F. Krafft: Das Debian-System (engl./dt./frz./jap., 2005/2006, Neuauflage in Arbeit) * Heike Jurzik: Debian GNU/Linux -- Das umfassende Handbuch (akt. Aufl. 2011) * Axel Beckert, Frank Hofmann: Debian-Paketmanagement, verfügbar vorraussichtlich ab Frühjahr 2014 - Kontakt * Axel Beckert, , http://noone.org/blog * Frank Hofmann, , http://www.efho.de/