PDF-Version
Transcription
PDF-Version
Foliensatz 4 Software und Paketverwaltung Inhalt • Software unter Linux • Pakete verwalten mit dpkg • Pakete und Repositories verwalten mit apt • Paketverwaltung mit Puppet Software - Geschichtliches • Fast alle Softwarepakete, die für Linux verfügbar sind, können gratis benutzt werden (z.B. jede GNU Software). 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 Benutzern 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). Software - Aufteilung der Dateien Unter Linux gibt es eine andere Herangehensweise an Software als unter Microsoft Windows oder Apple Mac OS X (zumindest bei den meisten Distributionen, eine Ausnahme ist z.B. GoboLinux). 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. • /lib/ → Hier liegen die Systembibliotheken. • /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. • /sbin/ und /usr/sbin/ → Ausführbare Dateien für den Administrator ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-03 20:29 Seite 1 von 10 Software - Vergleich mit Windows • Unter Windows installieren alle Applikationen alle benötigten Bibliotheken, die nicht auf dem System installiert sind, entweder in das System- oder das Applikationsverzeichnis. • Im Gegensatz dazu wird unter Linux eine Bibliothek nur einmal separat von den Applikationen installiert (in /usr/lib/) und alle Applikationen können darauf zugreifen. Durch die standardisierten Bibliotheksnamen und die Verwendung symbolischer Links ist es auch möglich, mehrere Versionen ein und derselben Bibliothek auf einem System installiert zu haben. • Das System von Linux hat mehrere Vorteile: • • Es ist bekannt, wo sich alle Bibliotheken befinden und welche installiert sind. • Weniger Speicherplatz wird gebraucht. • 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. Softwareverzeichnisse • Die meisten Open Source Projekte können nicht wie Firmen durch Marketing auf sich aufmerksam machen, da das Geld dafür meist nicht vorhanden ist. 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 Software suchen können. • Einer der ältesten solcher Dienste ist SourceForge. 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. • Andere Dienste sind Github (derzeit der populärste) und Microsoft CodePlex. Software - Installation ohne Paketmanager 1 • Nachdem die meiste Software für Linux als Open Source vertrieben wird, kann man üblicherweise von der Projekthomepage ein gepacktes Archiv herunterladen, das den Quellcode enthält. • In diesem Archiv befindet sich oft eine README-Datei mit grundlegenden Informationen zur Software sowie eine INSTALL-Datei mit einer Installationsanleitung. • Muss die Software kompiliert werden, so erfolgt dies meist unter Verwendung des GNU Build Systems und der GNU Toolchain (i.e. GNU Make, GNU Compiler Collection, Autotools, …). Unter Ubuntu reicht die Installation des build-essential Pakets, um die benötigte Software zu installieren. • Die Vorgehsweise zum Kompilieren und Installieren ist dabei (nahezu) immer die gleiche: $ configure $ make $ make install ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-03 20:29 Seite 2 von 10 Software - Installation ohne Paketmanager 2 • Das configure-Skript erfüllt dabei folgende Aufgaben: • Überprüfen, auf welchem System das Skript ausgeführt wird und setzen der entsprechenden Variablen • Überprüfen, ob die benötigten Headerdateien und Bibliotheken installiert sind • Aktivieren oder deaktivieren von optionalen Komponenten • Definieren der Installationsverzeichnisse • Um die möglichen Parameter für das configure-Skript anzuzeigen, ruft man es mit der Option --help auf. • Möchte man die Software nicht systemweit installieren (weil man dafür z.B. nicht die benötigten Rechte besitzt), benutzt man die Option --prefix=PREFIX (z.B. configure --prefix=$HOME/usr). • Das Ergebnis des configure-Skripts Konfigurationsdateien. • Die Makefiles enthalten unter anderem Anweisungen, wie die Software kompiliert bzw. installiert werden soll. sind die Makefiles und eventuell noch andere Softwarepaketverwaltung - Allgemeines • Einer der wichtigsten Unterschiede zwischen den verschiedenen Linux-Distribution ist diese Softwarepaketverwaltung. • Die Paketverwaltung erlaubt die einfache Installation, Deinstallation und Wartung von Softwarepaketen, durch z.B. das automatische Auflösen von Abhängigkeiten oder das Verwenden von Binärpaketen. • 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 Ubuntu und das deb-Format betrachten und rpm nur streifen. • 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 kann. 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) ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-03 20:29 Seite 3 von 10 • Die Pakete enthalten dabei nicht mehr den Quellcode der Software und alles, was zum Kompilieren benötigt wird, sondern nur mehr die Dateien, die für die Ausführung benötigt werden (es gibt auch Paketmanager, die am Rechner selbst die Pakete kompilieren, z.B. Portage bei Gentoo). • Ein ganz wichtiger Punkt ist, dass zwischen diesen Paketen Abhängigkeiten definiert sind. Das heißt in der Praxis, dass ein Paket zusätzlich die Anwesenheit von weiteren Paketen benötigen kann. So wird zum Beispiel sichergestellt, dass bei der Installation eines Audio-Players die nötigen AudioCodecs installiert werden. Softwarepaketverwaltung - Paketabhängigkeiten 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 Softwarepaketverwaltung - dpkg vs apt • • 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 lokale 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. Die entsprechenden Pendants bei RedHat Linux wären rpm (zu dpkg) und yum (zu apt). ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-03 20:29 Seite 4 von 10 Softwarepaketverwaltung - Aufgaben von dpkg • • Auf den ersten Blick scheint die Installation eines Softwarepakets selbst nicht aufwändig zu sein. Es müssen ja nur Dateien in bestimmte Verzeichnisse kopiert werden. Allerdings reicht das nicht immer aus: • Vor der Installation muss geprüft werden, ob das zu installierende Paket nicht bestehende Dateien eines anderen Pakets überschreibt. • Das Paket darf auch erst dann installiert werden, wenn benötigte, andere Pakete installiert worden sind. • Bei einigen Paketen müssen Aufgaben vor oder nach der Installation durchgeführt werden (z.B. Starten eines Services oder Anlegen eines Benutzers) • Konfigurationsdateien eines Pakets, die seit der Installation geändert worden sind, dürfen bei einer Aktualisierung des Pakets nicht einfach überschrieben werden. Weiters muss eine Liste der installierten Pakete geführt werden sowie pro Paket eine Liste der installierten Dateien (inkl. Berechtigungen und Prüfsummen). Softwarepaketverwaltung - dpkg dpkg - Verwaltet deb-Softwarepakete » Optionen: • -i Package.deb → Installiert ein Paket • -r Paketname → Entfernt ein Paket, aber nicht dessen Konfigurationsdateien • -P Paketname → Entfernt ein Paket inkl. der Konfigurationsdateien • -L Paketname → Listet die Dateien des Pakets auf • -l → Listet alle installierten Pakete auf • -S Pfad → Sucht das Paket, in dem der Pfad vorkommt » $ dpkg -l | grep dpkg ii dpkg 1.16.7ubuntu6 ii dpkg-dev 1.16.7ubuntu6 ii libdpkg-perl 1.16.7ubuntu6 $ dpkg -S /usr/bin/dpkg dpkg: /usr/bin/dpkg amd64 all all Debian package management system Debian package development tools Dpkg perl modules Bei rpm wären die entsprechenden Befehle rpm -i Package.rpm (Paket installieren), rpm -e Paket (Paket entfernen), rpm -qa (alle Pakete auflisten), rpm -ql (Dateien des Pakets auflisten) und rpm -qf Pfad (Paket zu Pfad finden). Softwarepaketverwaltung - Paketintegrität prü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. debsums - Überprüft MD5-Werte von installierten Paketen » Optionen: -s → Nur Fehler ausgeben, -c → Veränderte Dateien ausgeben. » $ debsums -s curl ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-03 20:29 Seite 5 von 10 $ echo test > /usr/bin/curl $ debsums curl /usr/bin/curl /usr/share/doc/curl/MANUAL.gz /usr/share/doc/curl/TheArtOfHttpScripting.gz /usr/share/doc/curl/copyright /usr/share/man/man1/curl.1.gz $ apt-get install --reinstall curl ... $ debsums -s curl $ FAILED OK OK OK OK Softwarepaketverwaltung - Aufgaben von apt • dpkg kann Pakete installieren, die schon heruntergeladen worden sind, bzw. die bereits installierten Pakete verwalten. Es bietet aber keine darüber hinausgehenden Möglichkeiten, z.B. Pakete aus dem Internet für die Installation herunterladen. • Hier kommt apt ins Spiel. Während dpkg auf der unteren Ebene arbeitet, ist apt darüber angesiedelt und bietet Funktionalitäten, die das Arbeiten mit Paketen noch vereinfachen: • Automatisches Auflösen von Paketabhängigkeiten und Installation der Pakete in der richtigen Reihenfolge • Installation/Aktualisierung/Deinstallation von Paketen mit Hilfe von Paketnamen (und nicht direkt über Paketdateien) • Verifizieren der Signaturen von Paketen • Einfaches Verwalten von mehreren Software-Repositories und der zugeordneter GPG-Schlüssel • Automatische Sicherheits-Updates von Paketen Softwarepaketverwaltung - 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 (man sources.list) • sources.list.d/*.list → Zusätzliche Repositories • apt.conf.d/* → Konfigurationsdateien • trusted.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 werden in der oben angegeben Datei verwaltet. • Bei yum sind Repositories entweder in /etc/yum.conf oder in Dateien unter /etc/yum.repos.d definiert. ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-03 20:29 Seite 6 von 10 Softwarepaketverwaltung - apt-key apt-key - Verwaltet Repository-Schlüssel » Verwendet GPG im Hintergrund. » 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 <[email protected]> sub 2048g/79164387 2004-09-12 pub uid 1024D/FBB75451 2004-12-30 Ubuntu CD Image Automatic Signing Key <[email protected]> pub 1024D/3E5C1192 2010-09-20 uid <[email protected]> Ubuntu Extras Archive Automatic Signing Key Bei rpm/yum werden die GPG-Schlüssel mit rpm verwaltet, z.B. kann man mit rpm --import einen Schlüssel importieren. Softwarepaketverwaltung - apt-get 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 sind • upgrade → Alle Pakete auf den neuesten Stand bringen (zuvor ein update machen) • install Paket... → Installiert die Pakete und eventuell benötigte Abhängigkeiten • remove Paket/purge Paket → Entfernen das Paket (und im zweiten Fall auch die Konfigurationsdateien) • autoremove → Alle nicht mehr benötigten Pakete entfernen Bei yum wären die entsprechenden Befehle yum install (Paket installieren), yum remove (Paket entfernen) und yum update (alles aktualisieren). Softwarepaketverwaltung - apt-cache apt-cache - Durchsucht den APT-Cache » Nach einem apt-get update liegen die aktuellen Paketindexdateien 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 » Bei yum wären die entsprechenden Befehle yum (Paketinformationen anzeigen). search (Paket suchen) bzw. yum info » $ apt-cache search kramdown ruby-kramdown - Fast, pure-Ruby Markdown-superset converter ruby-kramdown-rfc2629 - generate XML2RFC XML from Markdown $ apt-cache show ruby-kramdown | head -n 11 ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-03 20:29 Seite 7 von 10 Package: ruby-kramdown Priority: optional Section: universe/ruby Installed-Size: 1889 Maintainer: Ubuntu Developers <[email protected]> Original-Maintainer: Debian Ruby Extras Maintainers <[email protected]> Architecture: all Version: 1.8.0-1 Depends: ruby | ruby-interpreter, ruby-prawn, ruby-prawn-table, ruby-coderay, rubyrouge (>= 1.8~), ruby-stringex, libjs-jquery Suggests: libjs-mathjax Filename: pool/universe/r/ruby-kramdown/ruby-kramdown_1.8.0-1_all.deb Softwarepaketverwaltung - aptitude aptitude - APT Paketverwaltungstool » Vereint unter anderem die Funktionalitäten von apt-cache und apt-get. » Hat ein paar Vorteile gegenüber apt-get, z.B. werden nicht mehr benötigte Pakete beim Entfernen eines Pakets automatisch mitentfernt. » Wird aptitude ohne Parameter aufgerufen, startet eine interaktive Konsolenapplikation zum Verwalten von Paketen. » apt-get update aptitude update apt-get upgrade aptitude safe-ugprade apt-get install aptitude install apt-get install –reinstall aptitude reinstall apt-get remove aptitude remove apt-get purge aptitude purge apt-cache search aptitude search apt-cache show aptitude show Softwarepaketverwaltung - Präferenzsystem • Es kann vorkommen, dass bei einem Systemupdate ein Paket aktualisiert werden soll und man das vermeiden möchte (z.B. weil etwas nur mit der alten Version funktioniert). Oder dass man Pakete eines Repositories gegenüber den Paketen eines anderen bevorzugen will. • Mit Hilfe des Präferenzsystems von apt kann man solche Aufgabenstellung lösen - siehe man apt_preferences. • Die Präferenzen können in Dateien im Verzeichnis /etc/apt/preferences.d/ festgelegt werden. • Um zum Beispiel die aktuellesten Pakete zu installieren, auch wenn sie gerade noch getestet werden oder instabil sind, kann man folgende Datei verwenden (die Standardpriorität ist 500): Package: * Pin: release a=testing Pin-Priority: 900 ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-03 20:29 Seite 8 von 10 Package: * Pin: release a=unstable Pin-Priority: 800 Softwarepaketverwaltung - Automatische Updates • Um Sicherheitsupdates automatisch einspielen zu lassen, gibt es mehrere Möglichkeiten (z.B. cronapt und unattended-upgrades). • Für die Verwendung von unattended-upgrades das gleichnamige Paket installieren und die Konfiguration anpassen: • Das Programm durch Setzen der folgenden Optionen in /etc/apt/apt.conf.d/10periodic aktiveren: 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 den Standardeinstellungen nicht zufrieden ist (Option Unattended-Upgrade::Allowed-Origins). • Das Programm wird dann regelmäßig durch den Cronjob /etc/cron.daily/apt ausgeführt. Paketverwaltung mit Puppet • Pakete werden in Puppet über die Ressource package verwaltet. • Unter Ubuntu wird standardmäßig der Provider apt verwendet, alternativ dazu gäbe es noch aptitude und dpkg. • Wichtige Attribute: • name: Der Name des Pakets (falls nicht angegeben, wird der Titel verwendet). • ensure: Der gewünschte Zustand (present oder installed, absent, purged, held, latest oder eine Versionsnummer; falls nicht angegeben wird der Wert installed genommen). • responsefile: Eine Datei mit den benötigten Antworten, die von dem Paket abgefragt werden (zum Beispiel zum Akzeptieren einer Lizenz oder zum Vorkonfigurieren) Paketverwaltung mit Puppet - Beispiele • Installation von OpenSSH-Server und -Client: package {'openssh-client': ensure => latest } package {'openssh-server': } • Sicherstellen, dass das Paket ntp nicht installiert ist: ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-03 20:29 Seite 9 von 10 package {'ntp': ensure => purged } Verwaltung von APT mit Puppet 1 • Zur Verwaltung von Quellen, Schlüsseln und Konfigurationsoptionen für APT mit Puppet eignet sich das puppetlabs/apt Modul. • Die Klasse apt muss inkludiert werden, damit die nötigen Ressourcen definiert werden (z.B. für das Ausführen von apt-get update). • Schlüssel verwalten: apt::key { "CC key": id => '9E2E7FFB465D2C010F6834FE1985A9276BB7CA7A', source => "http://cc.mat.univie.ac.at/ubuntu/pub.key", } • Paketquellen verwalten: apt::source { "cc-mat": comment => 'CC Repo', location => "http://cc.mat.univie.ac.at/ubuntu", release => trusty, repos => 'contrib', } Verwaltung von APT mit Puppet 2 • Konfigurationsoptionen setzen (entweder direkt mittels content den gesamten Inhalt der Datei oder über source eine Datei spezifizieren): apt::conf { 'unattended-upgrade' content => "APT::Periodic::Unattended-Upgrade \"1\";\n" priority => 99 } • Präferenzen für Pakete festsetzen: apt::pin { 'testing': packages => '*', release => 'testing', priority => 900; 'unstable': packages => '*', release => 'unstable', priority => 800; } ICT-Infrastruktur für Bildungsaufgaben | Sommersemester 2016 | Version: 2016-04-03 20:29 Seite 10 von 10