ICT-Infrastruktur für Bildungsaufgaben
3. Software/Paketverwaltung
Thomas Leitner <thomas.leitner@univie.ac.at>
Fakultät für Mathematik, Universität Wien Sommersemester 2013
Letzte Änderung: 2013-09-20 20:46:17 +0200
Inhalt
Software unter Linux Geschichtliches
Softwarepaketverwaltung Repositories und Pakete Befehle
Software unter Linux 1
Unter Linux gibt es eine andere Herangehensweise an Software als unter Microsoft Windows oder Apple Mac OS X.
Während in den letzteren zwei Betriebssystem die Dateien einer Applikation zumeist in einem einzigen Verzeichnis zu finden sind, sind die Dateien einer Applikation unter Linux auf mehrere Verzeichnisse aufgeteilt:
/bin/
→ Hier liegen die ausführbaren Dateien, wenn sie für den Systembetrieb wichtig sind./usr/bin/
→ Hier liegen alle sonstigen ausführbaren Dateien./usr/lib/
→ Hier liegen die benötigten Bibliotheken./usr/share/APP_NAME/
→ Hier liegen Datendateien (z.B. Bilder)./usr/share/doc/PAKET_NAME
→ Hier findet man die Dokumentation zum Paket./usr/share/man/
→ In diesem Verzeichnisbaum werden die Manpages abgelegt.Software unter Linux 2
Unter Windows ist es auch so, dass die Applikationen alle benötigten Bibliotheken, die nicht automatisch auf dem System installiert sind, mitinstallieren.
Im Gegensatz dazu wird unter Linux eine Bibliothek nur einmal separat von den Applikationen installiert (nämlich in
/usr/lib/
) und alle Applikationen können darauf zugreifen. Durch die Standardisierung der Bibliotheksnamen und die Verwendung von symbolischen Links ist es auch möglich, mehrere Versionen ein und derselben Bibliothek auf einem System installiert zu haben.Dieses System hat mehrere Vorteile:
Man weiß genau, wo alle und welche Bibliotheken installiert sind.
Weniger Speicherplatz wird verbraucht.
Bei Sicherheitsproblemen muss man die Bibliothek nur an einer Stelle austauschen.
Das hat aber auch zur Folge, dass man sicherstellen muss, dass alle benötigten Komponenten für eine Applikation installiert sind. Hier kommt die Softwarepaketverwaltung von Linux ins Spiel.
Geschichtliches
Fast alle Softwarepakete, die für Linux verfügbar sind, können gratis benutzt werden. Alleine bei einer Basisinstallation werden hunderte wichtige Pakete installiert. Ohne diesen Grundgedanken der freien Software wäre Linux nicht das, was es jetzt ist!
Als der Linux Kernel noch sehr jung war (Anfang der 90er Jahre), haben die Softwareentwickler in der Linux-Community rasch festgestellt, dass es zwar gut ist, frei verfügbare Software zu haben, aber dass man es den meisten Benutzer nicht zumuten kann, diese selbst zu kompilieren. Neben dem Kernel braucht man ja noch jede Menge anderer Software (Shell, C- Bibliothek, …), um ein funktionierendes System zu erhalten.
Das Ergebnis war, dass man den Linux-Kernel und die nötige Software im Binärformat in Softwarepaketen in einer sogenannten Distribution zur Verfügung stellte. Gab es ganz am Anfang nur sehr primitive Mittel, um den Linux-Kernel und die Software mittels so einer Distributionen zu installieren, ging die Entwicklung rasch voran und schon 1993 gab es die ersten Distributionen auf Basis von dpkg (Debian) und rpm (Red Hat).
Softwareverzeichnisse
Die meisten Open Source Projekte können nicht so wie Firmen mit proprietäre Programmen durch Marketing auf sich aufmerksam machen, da sie einfach nicht das Geld dafür haben. Viele Entwickler haben nicht einmal selbst einen Webserver, um die Software zu publizieren.
Dadurch gab es schon sehr früh Dienste, die es Entwicklern ermöglichte, Softwareprojekte einfach durchzuführen. Dazu stellen diese Dienste Webspace, Issue Tracker, Versionskontrollsysteme und einiges mehr bereit.
Das hat nicht nur für die Entwickler Vorteile, sondern auch Anwender haben eine (oder mehrere Anlaufstellen), wo sie nach bestimmter Software suchen können.
Einer der ältesten solcher Dienste ist Source Forge. Die Software dahinter kann man selbst kostenlos verwenden und es gibt einige Webseiten im Stil von Source Forge, die sich auf spezielle Software beschränken (z.B. gibt es auf RubyForge nur Programme/Bibliotheken in der Programmiersprache Ruby).
Einige andere Dienste sind Github (derzeit der populärste), Google Code und Microsoft CodePlex. Auf der Webseite FreeCode werden Neuigkeiten zu vielen Open Source Projekten zusätzlich bekanntgegeben.
Softwarepaketverwaltung - Repositories
Einer der wichtigsten Unterschiede zwischen den verschiedenen Linux-Distribution ist diese Softwarepaketverwaltung.
Die zwei verbreitetsten Paketformate sind deb („Debian package“; von Debian, Ubuntu und anderen Debian-Derivaten verwendet) und rpm („RPM Package Manager“; z.B. von Red Hat und openSUSE verwendet). In der Vorlesung werden wir nur Ubuntu und das deb-Format betrachten.
Die Softwarepakete werden über ein sogenanntes Repository zur Verfügung gestellt, welches spezifisch für jede
Distribution ist. Es umfasst jeden Typ von Software (Kernel, Administration, Anwendung) und zusätzlich auch Dokumentation sowie Default-Konfigurationen.
Das Ubuntu Package Repository bietet einen Überblick über alle Pakete, die man in Ubuntu direkt über die eingebaute Paketverwaltung installieren.
Softwarepaketverwaltung - Pakete
Die Softwarepakete unter Ubuntu beinhalten unter anderem folgende Komponenten (genaue Informationen dazu sind im Debian FAQ zu finden):
Programmdateien, Konfigurationsdateien, sonstige Daten Skripte, die bei der (De)Installation benötigt werden
Meta-Information (Name, Version, Beschreibung, Abhängigkeiten, …) Signatur (zur Sicherstellung, dass niemand das Paket verändert hat)
Ein ganz wichtiger Punkt ist, dass zwischen diesen Paketen Abhängigkeiten definiert sind. Das heißt in der Praxis, dass ein Paket für ein Programm zusätzlich die Anwesenheit von weiteren Paketen benötigt. So wird zum Beispiel sichergestellt, dass bei der Installation eines Audio-Players die nötigten Audio-Codecs installiert werden.
Softwarepaketverwaltung - Werkzeuge
Unter Ubuntu gibt es zwei primäre Werkzeuge, die für die Verwaltung von Paketen und Repositories verwendet werden:
dpkg → Dieses Werkzeug arbeitet auf der untersten Ebene, also direkt mit den Paketen. Es wird benutzt um einzelne Pakete zu installieren, zu entfernen bzw. um allgemein Pakete zu verwalten.
apt → Die Abkürzung für Advanced Packaging Tool bezeichnet eine Familie von Programmen, die auf dpkg aufbauen und für die eigentliche Paketverwaltung benutzt werden. Es besitzt unter anderem eingebaute Funktionalitäten zum Verwalten von Repositories, Herunterladen von Paketen und zum automatischen Installieren von Abhängigkeiten.
Abhängigkeiten des Pakets coreutils
Das Programm
apt-rdepends
erleichtert die Analyse von Paketabhängigkeiten, z.B. durch das Erstellen solcher Grafiken.apt-rdepends -d coreutils | dot -Tpng >coreutils.png Paketverwaltung mit dpkg
Paketintegrität mit debsums überprüfen
Für jede Datei in einem Paket wird ein kryptographischer Hashwert erstellt (ein MD5-Hashwert). Dadurch kann man später überprüfen, ob eine Datei seit der Installation verändert worden ist.
Falls man ein verändertes Paket findet, kann man dieses mit
apt-get install --reinstall Paket
neu installieren.Verwalten von Repositories
Repositories werden über die APT-Familie von Werkzeugen verwaltet. Die Konfigurationsdateien liegen in
/etc/apt/
:sources.list
→ Definiert die Hauptrepositories, die das System verwenden soll.sources.list.d/*.list
→ Zusätzliche Repositories, die verwendet werden sollen.dpkg - Verwaltet .deb-Softwarepakete
Optionen:
-i Package.deb
→ installieren eines Pakets,-l
→ auflisten aller installierten Pakete,-r Paketname
→ entfernen eines Pakets,-L Paketname
→ Dateien des Pakets auflisten,-S Pfad
→ Paket suchen, in dem der Pfad vorkommt.$ dpkg -l | grep dpkg
ii dpkg 1.16.7ubuntu6 amd64 Debian package management system ii dpkg-dev 1.16.7ubuntu6 all Debian package development tools ii libdpkg-perl 1.16.7ubuntu6 all Dpkg perl modules
$ dpkg -S /usr/bin/dpkg dpkg: /usr/bin/dpkg
»
»
debsums - MD5-Werte von installierten Paketen überprüfen
Optionen:
-s
→ Nur Fehler ausgeben,-c
→ Veränderte Dateien ausgeben.$ debsums -s curl
$ sudo bash -c 'echo test > /usr/bin/curl'
$ debsums curl
/usr/bin/curl FAILED /usr/share/doc/curl/MANUAL.gz OK /usr/share/doc/curl/TheArtOfHttpScripting.gz OK /usr/share/doc/curl/copyright OK /usr/share/man/man1/curl.1.gz OK
$ sudo apt-get install --reinstall curl ...
$ debsums -s curl
$
»
»
sources.list.d/*.list
→ Zusätzliche Repositories, die verwendet werden sollen.apt.conf.d/*
→ Konfigurationsdateientrusted.gpg
→ GnuPG Schlüsseldatei.Repositories sind über HTTP oder FTP freigegeben Verzeichnisse, die einer bestimmten Struktur folgen. In dieser Struktur gibt es neben den eigentlichen Paketdateien (mit der Endung
.deb
) auch Dateien mit Informationen über alle verfügbaren Pakete des Repositories.Die Liste der Paketdaten eines Repositories wird (ähnlich wie Pakete) mit Hilfe einer Signatur vor Fälschung geschützt. Die dafür benötigten Schlüssel werdne in der oben angegeben Datei verwaltet.
Verwalten von Repositories - apt-key
Verwalten von Repositories - apt-get
Verwalten von Repositories - apt-cache
Automatisches Update - unattended-upgrades
Um Sicherheitsupdates automatisch einspielen zu lassen, gibt es einige Möglichkeiten (z.B. cron-apt und unattended- upgrades).
Für die Verwendung von unattended-upgrades das gleichnamige Paket installieren und die Konfiguration anpassen:
Das Programm durch Anpassen der folgenden Optionen aktiveren:
apt-key - Verwalten von Repository-Schlüsseln
Befehle:
list
→ Auflisten aller Schlüssel,add Datei
→ Hinzufügen eines Schlüssel aus einer Datei,del KeyID
→ Löschen eines Schlüssels.$ apt-key list | head -n 11 /etc/apt/trusted.gpg
---
pub 1024D/437D05B5 2004-09-12
uid Ubuntu Archive Automatic Signing Key sub 2048g/79164387 2004-09-12
pub 1024D/FBB75451 2004-12-30
uid Ubuntu CD Image Automatic Signing Key pub 1024D/3E5C1192 2010-09-20
uid Ubuntu Extras Archive Automatic Signing Key
»
»
apt-get - APT Paketverwaltungstool
Bietet extrem viele Unterbefehle und Optionen (und hat sogar Super-Kuh-Fähigkeiten…).
Die wichtigsten Befehle:
update
→ Paketquellen von Repositories herunterladen und überprüfen, ob Updates vorhanden sindupgrade
→ Alle Pakete auf den neuesten Stand bringen (zuvor einupdate
machen)install Paket...
→ Installiert die Pakete und eventuell benötigte Abhängigkeitenremove Paket
/purge Paket
→ Entfernen das Paket (und im zweiten Fall auch die Konfigurationsdateien)»
»
apt-cache - Den APT-Cache durchsuchen
Nach einem
apt-get update
liegen die Paketquellen lokal am Rechner und können mit Hilfe dieses Programms durchsucht werden.Befehle:
show
→ Informationen zu einem Paket anzeigen,search
→ Mit Hilfe eines Regexps die Paketquellen durchsuchen$ apt-cache search kramdown
ruby-kramdown - Fast, pure-Ruby Markdown-superset converter
$ apt-cache show kramdown | head -n 10 Package: ruby-kramdown
Priority: optional Section: universe/ruby Installed-Size: 1349
Maintainer: Ubuntu Developers
Original-Maintainer: Debian Ruby Extras Maintainers Architecture: all
Version: 0.13.7-2
Depends: ruby | ruby-interpreter, ruby-coderay, libjs-jquery
Filename: pool/universe/r/ruby-kramdown/ruby-kramdown_0.13.7-2_all.deb
»
»
»
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
Die erste Option stellt sicher, dass die Repository-Daten aktuell sind und die zweite aktiviert die automatischen Updates mittels unattended-upgrades.
In der Datei
/etc/apt/apt.conf.d/50unattended-upgrades
sollte man zusätzlich zumindest noch einstellen, welche Repositories für Updates herangezogen werden sollen, wenn man mit denStandardeinstellungen nicht zufrieden ist (Option
Unattended-Upgrade::Allowed-Origins
).Das Programm wird dann regelmäßig durch den Cron-Job
/etc/cron.daily/apt
ausgeführt.Copyright und Lizenz
Copyright: Thomas Leitner thomas.leitner@univie.ac.at Lizenz: Creative Commons CC BY-NC-SA
„Namensnennung-Keine kommerzielle Nutzung-Weitergabe unter gleichen Bedingungen 3.0 Österreich.“ - http://creativecommons.org/licenses/by-nc-sa/3.0/at/