Zu welchem ​​Paket gehört eine Datei in Linux. Installieren von Softwarepaketen unter Linux für Anfänger

Vorgänge, die mit der Änderung der Systemzusammensetzung verbunden sind – Installieren, Entfernen, Überprüfen, Aktualisieren von Komponenten – werden an Paketen ausgeführt. Im Allgemeinen ist das Paket ein Werkzeug, um sicherzustellen, dass der Administratorbenutzer, der den Softwareinhalt des Systems ändert oder aktualisiert, nicht mitarbeitet Dateien(dessen Namen ihm manchmal unbekannt sind), aber mit bestimmten Funktionen das System selbst: Zum Beispiel habe ich ihm nicht "500 Dateien" hinzugefügt, sondern "Apache WWW Server".

Dateiarchiv

Auf den ersten Blick besteht das Programm aus einer - einer ausführbaren Datei: Wir führen die Datei aus, wir erhalten ein funktionierendes Programm. Allerdings während des Betriebs, sogar die meisten einfaches Programm verwendet andere Dateien, die verschiedene Ressourcen enthalten: Bibliotheken, Konfigurationsdateien, Hole-Dateien und startet sogar andere Programme. Damit das Programm wirklich funktioniert, muss neben der ausführbaren Hauptdatei sichergestellt werden, dass das System über alle verfügt gewünschten Dateien mit Ressourcen.

Es ist klar, dass Sie sich bei der Installation oder Deinstallation eines Programms auch um alle Dateien kümmern sollten, die es verwendet (es können sogar sehr viele sein). Das - erste Batch-Task: alle vom Programm verwendeten Dateien werden in einer Datei zusammengefasst - Archiv. Auf diese Weise können Sie bei der Installation des Programms nicht alle Dateien separat kopieren und dann nicht auf die gleiche Weise löschen, sondern mit allen Programmdaten als Ganzes arbeiten - ein Paket installieren und entfernen.

Dateiarchiv. Ein als einzelne Datei dargestellter Verzeichnisbaum, der aus dem Inhalt aller Dateien im Baum und Informationen über den Namen und die Attribute jeder Datei besteht.

Es gibt keine zwingende Anforderung, dass ein Paket nur ein Programm enthält. Es ist natürlich, solche Ressourcen zu einem Paket zusammenzufassen, mit denen es bequem ist, als eine Einheit zu arbeiten. Das kann sein separates Programm oder eine Reihe von Dienstprogrammen (z. B. coreutils , von UNIX von Linux geerbte Kerndienstprogramme) oder ein Modul mit Zusatzfunktionen Programme oder Ressourcen, die von mehreren Programmen gemeinsam genutzt werden. In Entwicklung und/oder veraltet Software Einige Aufgaben in einem separaten Paket herauszugreifen kann sinnvoll sein oder auch nicht, daher ist die Art und Weise, wie Ressourcen in Paketen gebündelt werden, nicht etwas, das ein für alle Mal gewählt wird: Pakete können aufgeteilt und zusammengeführt werden.

Die einfachste und traditionellste Linux-Methode zum Zusammenführen mehrerer Dateien zu einer ist die Verwendung des Dienstprogramms tar 1. erschien viel früher als Linux und diente ursprünglich dazu, Dateiarchive auf Magnetband zu erstellen. Daher sein Name - Tape Archiver, "ein Archivierer für (Magnet-) Bänder". Derzeit ist tar auf jedem UNIX-ähnlichen System vorhanden und ermöglicht Ihnen, mit Dateiarchiven auf beliebigen Medien zu arbeiten. Nachdem Methodius mehrere Programme und Skripte geschrieben hatte, beschloss er, sie in einem Dateiarchiv zu sammeln, damit es bequemer wäre, sie auf alle Systeme zu übertragen, in denen er zufällig arbeitet. Dazu hat Methodius ein Archiv mit allen Inhalten seines Unterverzeichnisses bin/ erstellt:

[E-Mail geschützt]:~ $ tar -cf methody.progs.tar bin/ [E-Mail geschützt]:~ $ tar -tf methody.progs.tar bin/ bin/loop bin/script bin/to.sort bin/two Beispiel 13.1. Erstellen eines Dateiarchivs mit tar

Der erste Parameter von tar hat zwei Teile: die Operation, die auf dem Archiv durchgeführt werden soll, in diesem Fall "c" ( create ), und die Option "f" , die angibt, dass das Archiv in einer Datei, der Archivdatei, erstellt werden soll Name ist der nächste Parameter. Der Name des Archivs kann beliebig sein, aber Gurevich riet, es mit der Erweiterung ".tar" zu versehen, um später nicht verwirrt zu werden. Dem Archivnamen folgen die Namen der zu packenden Dateien und Verzeichnisse. 2 Arbeitet rekursiv mit jedem angegebenen Verzeichnis, d.h. packt alle darin enthaltenen Dateien und Unterverzeichnisse.

Um zu überprüfen, welche Dateien in das Archiv gelangt sind, hat Methodius den Inhalt des resultierenden Archivs mit dem Befehl "tar -tf Archivname" ("t" - view, "f" verwendet die durch den nächsten Parameter angegebene Datei) durchgesehen. Hier machte Methodius auf zwei Umstände aufmerksam. Im Archiv wurden zunächst die Dateinamen samt Pfad gespeichert. Zweitens sind alle im Archiv gespeicherten Pfade relativ.

Beim Entpacken eines tar-Archivs werden die Dateien samt Pfad entpackt, fehlende Unterverzeichnisse werden nach Bedarf angelegt. Alle Pfade werden von tar ausgehend von seinem Arbeitsverzeichnis als relativ betrachtet. Wenn Methodius nun sein Archiv entpackt (mit dem Befehl „tar -xf Archivname“), dann wird im Arbeitsverzeichnis ein Unterverzeichnis „bin/“ angelegt und alle Dateien aus dem Archiv hineingeschrieben:

[E-Mail geschützt]:~ $ tar -xvf methody.progs.tar bin/ bin/loop bin/script bin/to.sort bin/two Beispiel 13.2. Entpacken des Archivs

Der Schalter „v“ weist tar an, „verbose“ zu sein, d. h. mehr Diagnosemeldungen auszugeben, und aus diesem Grund gibt tar die Namen (mit Pfad) aller Dateien aus, die es beim Dekomprimieren schreibt. Wenn es bereits eine Datei im Arbeitsverzeichnis gibt, die tar beim Entpacken erstellen wird, dann wird diese Datei einfach ersetzt Archivdatei. Also, als Methodius sein ") entpackt hat, verwendet das System von Methodius eines der gebräuchlichsten - rpm , also werden alle Beispiele in diesem Vortrag mit seiner Teilnahme sein. Um mit Paketen in einem speziellen Format zu arbeiten, benötigen Sie ein spezielles Installationsprogramm, das auch -rpm genannt wird: Es beschäftigt sich mit dem Installieren, Entfernen, Aktualisieren und Prüfen von Paketen.

Ein RPM-Paket ist eine einzelne Datei mit allen notwendigen Daten. Es gibt bestimmte (wenn auch nicht sehr starre und konsistente) Konventionen bezüglich der Namen von Paketdateien. Zum Beispiel eine RPM-Datei, die ein Bundle enthält Standard-Dienstprogramme coreutils , im Methodius-System heißt es coreutils-5.2.1-some5.rpm : zuerst - der Paketname, dann mit einem Bindestrich - Serviceinformationen über die Versionsnummern der Software und das Paket selbst.

In dieser kurzen Notiz möchte ich Ihnen sagen, wie Sie herausfinden können, zu welchem ​​​​Paket es gehört Linux-Datei, werden wir uns ansehen, wie dieses Problem nicht nur in Ubuntu, sondern auch in anderen gängigen Distributionen gelöst werden kann.

Eine solche Aufgabe tritt sehr selten auf. Zum Beispiel säubern Sie das System, sehen eine seltsame Datei oder eine Datei, die viel Platz beansprucht, und möchten wissen, zu welchem ​​Paket sie gehört und ob sie überhaupt hier benötigt wird. Oder eine andere Situation, in der Sie ein Programm installieren oder entfernen möchten, sich aber nicht an den Namen des Pakets erinnern, aber den Namen der ausführbaren Datei kennen.

Es gibt mehrere Möglichkeiten, diese Informationen in Ubuntu zu erhalten. Dies sind das Standard-Dienstprogramm dpkg, das nur mit vorhandenen Dateien funktioniert, sowie das Tool apt-file, mit dem Sie den Namen des Programms anhand des Namens der ausführbaren Datei ermitteln können. Für andere Distributionen gibt es ähnliche Tools.

Finden Sie heraus, zu welchem ​​Paket eine Datei in dpkg gehört

Um herauszufinden, zu welchem ​​Paket eine Datei gehört, hat dpkg die Option -S, allerdings werden nur der Paketname und die Dateiadresse angezeigt, zum Beispiel:

dpkg -S /usr/bin/cloud

mail.ru-cloud: /usr/bin/cloud

Wenn wir nun Informationen über das Paket erhalten möchten, verwenden wir die Option -s:

dpkg -s mail.ru-cloud

Oder durch Kombinieren dieser Befehle:

dpkg -S /usr/bin/cloud | awk -F: "(drucke $1)" | xargs dpkg-s

Paket: mail.ru-cloud
Status: installieren ok installiert
Priorität: zusätzlich
Abschnitt: netto
Installierte Größe: 70000
Betreuer: Mail.Ru Group
Architektur: amd64
Version: 15.05.0235-anh
...

So erhalten Sie den Paketnamen aus einer Datei in apt-file

apt-Datei ist kein Standard für Ubuntu-Systeme Sie müssen es also zuerst installieren:

sudo apt-get install apt-file

Dann müssen Sie die Programmdatenbank aktualisieren, beim Aktualisieren werden etwa 30 MB Daten geladen:

sudo apt-file update

Jetzt können Sie verwenden:

apt-Dateisuche /usr/bin/sshd

Finden Sie heraus, zu welchem ​​Paket die RPM-Datei gehört

Auf Red Hat Linux-basierten Systemen können Sie dasselbe tun. Hier wird rpm anstelle von dpkg verwendet. Die Option -q wird verwendet, um Informationen über Pakete zu erhalten, wenn wir sie mit der Option -f kombinieren und die Adresse der Datei übergeben, können wir herausfinden, zu welchem ​​Paket die Datei gehört:

coreutils-8.22-4.1.x86_64

Wenn Sie detailliertere Informationen zu einem Paket wünschen, fügen Sie die Option -i hinzu:

rpm -qif /bin/ls

Name: Coreutils
Version: 8.22
Veröffentlichung: 4.1
Architektur: x86_64
Installationsdatum: Donnerstag, 29. Oktober 2015, 22:25:10 Uhr
Anbieter: openSUSE
URL: http://www.gnu.org/software/coreutils/
Zusammenfassung: GNU Core Utilities

Der auf Red Hat-basierten Systemen verwendete yum-Paketmanager kann mit dem Befehl whatpovides auch anhand der Datei nach Paketen suchen:

yum was liefert /bin/ls

Zu welchem ​​Paket gehört die Datei in ArchLinux

ArchLinux verwendet einen eigenen Paketmanager, der sich stark von den oben beschriebenen unterscheidet. Aber auch hier können wir tun, was wir brauchen. Dafür gibt es eine -Qo-Option:

pacman -Qo /usr/bin/pkgfile

/usr/bin/pkgfile gehört pkgtools 18-1

Diese Methode funktioniert jedoch nur für installierte Pakete. Wenn das Paket nicht installiert ist, können Sie das Dienstprogramm pkgfile verwenden. Es wird standardmäßig nicht mitgeliefert, kann aber installiert werden:

sudo pacman -S pkgtools

Sehen wir uns nun an, zu welchem ​​Paket /bin/evince gehört:

Jetzt können Sie herausfinden, aus welchem ​​Paket Sie das gewünschte Programm beziehen können.

Ein Paket nach Datei in Gentoo finden

Eine weitere interessante Distribution mit einem eigentümlichen Paketsystem. Hier werden Pakete als Quellcodes und Build-Skripte bereitgestellt. Sie können ein Paket nach Datei suchen, indem Sie das Dienstprogramm equery verwenden, indem Sie ihm den Parameter b übergeben. Zum Beispiel:

equery b /usr/bin/qtconfig

x11-libs/qt-qt3support-4.6.2 (/usr/bin/qtconfig)

Diese Methode funktioniert nur für installierte Pakete. Aufgrund von Distributionsspezifika gibt es keine Möglichkeit, nach deinstallierten Paketen zu suchen.

Ergebnisse

Jetzt wissen Sie, wie Sie herausfinden können, zu welchem ​​Paket eine Datei in einer der beliebtesten Linux-Distributionen gehört. Alle auf Ubuntu und Debian basierenden Distributionen führen dpkg aus, für RPM-basierte Distributionen eignet sich das Utility rpm. Und wir haben die anderen beiden weniger beliebten, aber sehr interessanten separat betrachtet. Wenn Sie Fragen haben, stellen Sie sie in den Kommentaren!

Die Notwendigkeit, neue Softwarepakete unter LINUX zu installieren, ergibt sich hauptsächlich in zwei Fällen:
- wenn es erscheint eine neue Version eines der bereits installierten Pakete;
- wenn es notwendig wird, ein Paket zu verwenden, das noch nicht auf dem System installiert ist.

Im zweiten Fall kann es sich um eines der verfügbaren Pakete handeln Installationsdiskette, aber nicht während des Installationsvorgangs installiert. In den meisten Fällen finden Sie jedoch neue Software, zumal ein erheblicher Teil dieser Software kostenlos oder Shareware ist.
Es gibt zwei Hauptformen der Softwareverteilung für LINUX: im Quellcode und als ausführbare Module. In beiden Fällen kann das Softwarepaket entweder als tar-gz-Archiv oder als rpm-Paket geliefert werden.
Am einfachsten ist es, Software zu installieren, die in Form eines RPM-Pakets mit ausführbaren Dateien präsentiert wird, und wir werden diese Methode zuerst betrachten. Wir stellen nur fest, dass Sie als root angemeldet sein müssen, um neue Pakete zu installieren.

RPM-Programm.
Der Name dieses Programms (oder Befehls) ist eine Abkürzung für Redhat Package Manager. Das RPM-Programm ähnelt in gewisser Weise Programmen wie dem Setup-Assistenten für MS Windows. Der Vorteil der Verwendung dieses Programms im Vergleich zur Installation von tar-gz-Archiven besteht darin, dass es automatisch alle notwendigen Schritte zur Installation der Software durchführt: Es erstellt die erforderlichen Verzeichnisse, verteilt Dateien zwischen ihnen und erstellt Verknüpfungen. Darüber hinaus kann es nicht nur zum Installieren eines neuen Pakets verwendet werden, sondern auch zum Aktualisieren von Softwareversionen, zum Abrufen von Listen installierter Software und zum Überprüfen der Installation sowie zum Deinstallieren einzelner Pakete (z das Programm, von dem Sie sich entscheiden, es auf weitere Verwendung zu verzichten). Mit demselben RPM-Programm können Sie selbst ein RPM-Paket erstellen, aber für Anfänger ist es besser, fertige RPM-Pakete zu verwenden.
RPM-Pakete sind speziell vorbereitete Archive, die für die Verarbeitung durch das RPM-Programm entwickelt wurden. Der Name von RPM-Paketen endet mit der Endung.rpm, z. B. xzip-180-1.i386.rpm oder xzip-180-1.src.rpm. Wie Sie sehen können, gibt es vor dem Suffix .rpm ein weiteres Suffix. Wenn es .i386 oder .i586 ist, dann enthält das Paket ausführbare Dateien, und wenn diese Endung .src ist, dann sind die Quelltexte im Paket, die nach der Installation noch kompiliert werden müssen. Sowohl auf Installations-CDs als auch in Internetverzeichnissen befinden sich RPM-Pakete mit ausführbaren Dateien normalerweise in Verzeichnissen namens RPMS, und RPM-Pakete mit Quelltexten befinden sich in Unterverzeichnissen von SRPMS.
Sie haben das RPM-Archiv mit der ausführbaren Version des benötigten Pakets gefunden und heruntergeladen. Wenn Sie ein völlig neues Paket installieren (Sie hatten keine früheren Versionen dieser Software auf Ihrem Computer), gehen Sie zum Installieren eines Pakets aus diesem Archiv einfach in das Verzeichnis, in dem sich das Archiv befindet, und geben Sie den Befehl ein
rpm -i rpm_name

Wenn Sie eine frühere Version des Pakets installiert hatten, müssen Sie im einfachsten Fall einen Befehl im folgenden Format ausgeben:
rpm -U --force rpm-Archivname

Hier weist die Option -U das Programm an, das Paket zu aktualisieren, und die Option --force fordert Sie auf, alle im Paket enthaltenen Dateien bedingungslos (und ohne weiteres) zu aktualisieren. Beachten Sie, dass dies eine sehr strenge Anforderung ist und es in manchen Fällen besser sein kann, einige (z. B. Konfigurations-) Dateien davon fernzuhalten vorherige Version. Wenn die Installation normal verläuft und keine weiteren Meldungen angezeigt werden, können Sie das neu installierte Paket nach dem Beenden des Programms (nach dem Erscheinen der Shell-Eingabeaufforderung) verwenden.

Um herauszufinden, welche Dateien ein bestimmtes Paket installiert, müssen Sie den Befehl ausführen

rpm -qpl rpm_name

Und um Informationen über das Paket zu erhalten - den Befehl

rpm -qpi rpm_name

Insgesamt hat rpm 16 Hauptbetriebsarten, die sinnvollerweise in 6 Gruppen zusammengefasst werden (nach dem Doppelpunkt steht das Befehlsformat für die entsprechende Betriebsart):

Anfragen:
Abfrage: rpm [--query]
Abfrage-Tags anzeigen (Querytags) : rpm [--querytags]

Installierte Pakete installieren und warten:
Installieren: rpm [--install] +
Update: rpm [--freshen|-F]
+
Deinstallieren: rpm [--uninstall|-e]
+
Überprüfen Sie: rpm [--verify|-V] +

Signaturen (Pakete werden elektronisch signiert Digitale Unterschrift im Format
PGP, um die Unveränderlichkeit und den Erhalt der Urheberschaft zu gewährleisten
Pakete):
Signaturüberprüfung: rpm [--verify|-V] +
Rücktritt: rpm [--resign] +
Signatur hinzufügen: rpm [--adsign] +

Arbeiten mit der Basis:
Datenbankinitialisierung: rpm -i [--initdb]
Datenbank neu aufbauen: rpm -i [--rebuilddb]

RPM-Pakete erstellen:
Paket erstellen: rpm [-b|t] +
Paket neu kompilieren: rpm [--rebuild] +
Paket aus Tarball erstellen: rpm [--tarbuild] +

Sonstig:
Konfiguration des RPM-Programms anzeigen: rpm [--showrc]
Benutzer festlegen: rpm [--setperms] +
Gruppen setzen: rpm [--setgids] +

Mehr detaillierte Beschreibung rpm-Befehle finden Sie in den RPM-HOWTO-, Man- und Info-Seiten.


Software installieren von Quellcode

In einigen Fällen können ausführbare Anwendungsdateien als tar-gz-Archive oder Tarballs (.tar.gz, .tgz) bereitgestellt werden. Der Paketinstallationsprozess selbst besteht aus den folgenden Schritten:

1 Entpacken Sie den Tarball:

Erstellen Sie einen Ordner, in dem wir den Tarball entpacken,

mkdir<Имя_папки>

Kopieren Sie den Tarball dorthin

vgl<исходный_файл> > <назначенная папка>

Direkt in einen Ordner entpacken:

Tat xfzv<Имя_тарбола>

Entpacken von tar.gz- und tgz-Archiven

Tat xfjv<Имя_тарбола>

Entpacken von Archiven wie tar.bz und tbz

Dateien werden in den aktuellen Ordner entpackt (um mit Archiven zu arbeiten, ist es sehr praktisch, Midnight Commander - MC - einen kostenlosen Klon von NC zu verwenden)

Wechseln Sie in den Ordner mit dem entpackten Tarball

CD _Ordnername_

2 Konfigurationspaket

./konfigurieren

(In schweren Fällen müssen Sie die Pfade für alle erforderlichen Bibliotheken und Header-Dateien in den Parametern angeben - aber glücklicherweise sind sie auf geschlossenen Systemen normalerweise gleich und das Konfigurationsskript selbst findet sie, Parameter können auch erforderlich sein, wenn die Paket befindet sich am falschen Ort , wo der Entwickler des Programms angenommen hat, und an einem anderen)

Es gibt viele Betriebssysteme in der Linux-Familie (allgemein als Linux-Distributionen bezeichnet). Es gibt auch viele Möglichkeiten, Software darauf zu installieren. Unterstützung verschiedener Distributionen verschiedene Wege Installation und verschiedene Formate von Installationsdateien.

Die meisten Linux-Distributionen unterstützen die Installation aus Quellen, die als Archive verteilt werden, normalerweise mit der Erweiterung .tar.gz. Bei der Installation eines Programms aus einem solchen Archiv wird das Programm zunächst aus Quellcodes kompiliert. Danach wird eine Batchdatei gestartet, die die erforderlichen Dateien an die angegebenen Speicherorte kopiert. Diese Installationsmethode hat viele Nachteile. Zunächst einmal der Prozess des Kompilierens des Programms, der für den Endbenutzer völlig unnötig ist. Dieser Vorgang braucht Zeit, bei großen Programmen sehr lange. Danach bleiben Dateien mit Quellcode übrig, die ebenfalls nicht zur Nutzung benötigt werden.

Um Probleme bei der Installation von Programmen aus Quellcodes zu lösen, wurden sogenannte Paketmanager erstellt - Programme zum Arbeiten Installationsdateien(Pakete). Paketmanager verwenden Dateien in einem bestimmten Format. Die Verwendung eines Paketmanagers bietet viele Vorteile. Es besteht keine Notwendigkeit, Programme aus Quellcodes zu kompilieren – und dementsprechend wird der Quellcode selbst für die Verwendung des Programms optional. Paketmanager können Programme aus Repositories installieren - Paket-Repositories (auch über das Internet). Paketmanager verfolgen die Abhängigkeiten von Programmen voneinander - daher meldet der Paketmanager, wenn während der Installation des Programms etwas fehlt, und wenn die Installation aus dem Internet-Repository durchgeführt wird, bietet er auch an, automatisch zu installieren fehlt eins. Außerdem verfolgen Paketmanager Paketkonflikte – Situationen, in denen ein Programm ein anderes stört. Bei der Installation von Programmen aus Quellcodes werden Abhängigkeiten nicht beibehalten und auch Konflikte. Wenn zum Zeitpunkt der Erstellung des Programms etwas fehlt, schlägt die Erstellung fehl (möglicherweise nachdem der größte Teil der Erstellung bereits abgeschlossen wurde). Wenn etwas fehlt, damit das Programm funktioniert, wird das Programm kompiliert, aber es wird nicht funktionieren (oder es wird, aber falsch). Das gleiche passiert, wenn es Konflikte gibt.

Eines der gängigsten Formate für Installationspakete sind Deb-Dateien. „deb“ ist die Abkürzung für Debian, den Namen einer der beliebtesten Linux-Distributionen, unter der dieses Paketformat und sein Paketmanager entwickelt wurden. Außerdem wird dieses Paket in vielen von Debian abgeleiteten Distributionen verwendet - zum Beispiel Ubuntu und LinuxMint. Das GUI-deb-Programm wurde hauptsächlich erstellt, um die Erstellung von deb-Dateien zu automatisieren, was sich in seinem Namen widerspiegelt.

Das andere häufigste Installationspaketformat sind RPM-Dateien. Dieses Format wurde von Red Hat entwickelt und wird in der Red Hat Enterprise Linux-Distribution sowie in ihren Derivaten und verwandten Distributionen verwendet - Fedora, Cent OS, Mandriva, Alt Linux und vielen anderen. Die Erstellung von RPM-Dateien durch GUI-deb wird nicht unterstützt. Ein RPM-Paket kann mit dem Alien-Programm aus einem Deb-Paket bezogen werden. Das GUI-deb-Programm kann Alien automatisch ausführen, nachdem es eine deb-Datei erstellt hat, um daraus ein RPM-Paket zu erhalten.

Ein benutzerfreundliches System besteht aus vielen (Hunderten und Tausenden) Programmen und Dienstprogrammen. In Linux wird jede Komponente des Systems als dargestellt Paket. Alle Operationen, die sich auf die Änderung der Systemzusammensetzung beziehen: Installieren, Entfernen, Überprüfen, Aktualisieren von Komponenten, werden an Paketen ausgeführt. Im Allgemeinen, Plastiktüte- Dies ist ein Mittel, um sicherzustellen, dass der Administratorbenutzer, der den Softwareinhalt des Systems ändert oder aktualisiert, nicht damit arbeitet Dateien(dessen Namen ihm manchmal unbekannt sind) und mit bestimmten Funktionalität das System selbst: Beispielsweise fügte er ihm nicht „500 Dateien“ hinzu, sondern „Apache WWW Server“.

Dateiarchiv

Auf den ersten Blick besteht das Programm aus einer – ausführbaren – Datei: Führen wir die Datei aus, erhalten wir ein funktionierendes Programm. Während des Betriebs verwendet jedoch selbst das einfachste Programm andere Dateien, die verschiedene Ressourcen enthalten: Bibliotheken, Konfigurationsdateien, Hole-Dateien und startet sogar andere Programme. Damit das Programm wirklich funktioniert, muss neben der ausführbaren Hauptdatei sichergestellt werden, dass das System über alle erforderlichen Ressourcendateien verfügt.

Es ist klar, dass Sie sich bei der Installation oder Deinstallation eines Programms um alle Dateien kümmern müssen, die es verwendet (was sogar sehr viele sein können). Das - erste Batch-Task: alle vom Programm verwendeten Dateien werden in einer Datei zusammengefasst - Archiv. Auf diese Weise können Sie bei der Installation des Programms nicht alle Dateien separat kopieren und dann nicht auf die gleiche Weise löschen, sondern mit allen Programmdaten als Ganzes arbeiten - ein Paket installieren und entfernen.

Dateiarchiv Ein als einzelne Datei dargestellter Verzeichnisbaum, der aus dem Inhalt aller Dateien im Baum und Informationen über den Namen und die Attribute jeder Datei besteht.

Es gibt keine strikte Anforderung, dass ein Paket nur ein Programm enthält. Es ist natürlich, solche Ressourcen zu einem Paket zusammenzufassen, mit denen es bequem ist, als eine Einheit zu arbeiten. Dabei kann es sich um ein eigenständiges Programm oder eine Reihe von Dienstprogrammen (z. B. coreutils , Kerndienstprogramme, die Linux von UNIX geerbt hat) oder um ein Modul mit zusätzlichen Programmfunktionen oder Ressourcen handeln, die von mehreren Programmen gemeinsam genutzt werden. Wenn sich Software weiterentwickelt und/oder obsolet wird, kann es sinnvoll sein, einige Aufgaben in ein separates Paket zu unterteilen, sodass die Art und Weise, wie Ressourcen in Paketen gebündelt werden, nicht ein für alle Mal gewählt wird: Pakete können aufgeteilt und zusammengeführt werden.

Die einfachste und traditionellste Linux-Methode, um mehrere Dateien zu einer zu kombinieren, ist die Verwendung des tar-Dienstprogramms.

tar erschien viel früher als Linux und wurde ursprünglich verwendet, um Dateiarchive auf Magnetbändern zu erstellen. Daher sein Name - t Affe ar Chiver, "ein Archivierer für (Magnet-) Bänder". Derzeit ist tar auf jedem UNIX-ähnlichen System vorhanden und ermöglicht Ihnen, mit Dateiarchiven auf beliebigen Medien zu arbeiten.

Nachdem Methodius mehrere Programme und Skripte geschrieben hatte, beschloss er, sie in einem Dateiarchiv zu sammeln, damit es bequemer wäre, sie auf alle Systeme zu übertragen, in denen er zufällig arbeitet. Dazu hat Methodius ein Archiv mit allen Inhalten seines Unterverzeichnisses bin/ erstellt.

[E-Mail geschützt]:~ $ tar -cf methody.progs.tar bin/ [E-Mail geschützt]:~ $ tar -tf methody.progs.tar bin/ bin/loop bin/script bin/to.sort bin/two

Beispiel 1. Erstellen eines Dateiarchivs mit tar

Der erste Parameter für tar hat zwei Teile: die Operation, die auf dem Archiv durchgeführt werden soll, in diesem Fall " c " ( c reate, create) und der Taste „f“, die anzeigt, dass das Archiv in einer Datei erstellt werden soll, ist der Name der Archivdatei der nächste Parameter. Der Name des Archivs kann beliebig sein, aber Gurevich riet, es mit der Erweiterung ".tar" zu versehen, um später nicht verwirrt zu werden. Dem Archivnamen folgen die Namen der zu packenden Dateien und Verzeichnisse.

Für jedes angegebene Verzeichnis arbeitet tar rekursiv, dh es komprimiert alle darin enthaltenen Dateien und Unterverzeichnisse.

Um zu überprüfen, welche Dateien in das Archiv gelangt sind, durchsuchte Methodius den Inhalt des resultierenden Archivs mit dem Befehl „tar -tf Archivname» (« t » - anzeigen, « f » die durch den nächsten Parameter angegebene Datei verwenden). Hier machte Methodius auf zwei Umstände aufmerksam. Im Archiv wurden zunächst die Dateinamen samt Pfad gespeichert. Zweitens sind alle im Archiv gespeicherten Pfade relativ.

Beim Entpacken eines tar-Archivs werden die Dateien samt Pfad entpackt, fehlende Unterverzeichnisse werden nach Bedarf angelegt. Alle Pfade werden von tar als relativ zu seinem Arbeitsverzeichnis betrachtet. Wenn nun Methodius sein Archiv entpackt (mit dem Befehl „tar xf Archivname“), dann wird im Arbeitsverzeichnis ein Unterverzeichnis „bin/“ erstellt und alle Dateien aus dem Archiv werden dorthin geschrieben.

[E-Mail geschützt]:~ $ tar -xvf methody.progs.tar bin/ bin/loop bin/script bin/to.sort bin/two

Beispiel 2. Entpacken des Archivs

Der Schalter „v“ weist tar an, „verbose“ zu sein, d. h. mehr Diagnosemeldungen auszugeben, sodass tar die Namen (mit Pfad) aller Dateien ausgibt, die es beim Entpacken schreibt. Wenn es bereits eine Datei im Arbeitsverzeichnis gibt, die tar beim Entpacken erstellen wird, dann wird diese Datei einfach ersetzt Archivdatei. Also, als Methodius sein Archiv entpackte, das Unterverzeichnis „bin/“ mit all seinem Inhalt ersetzt in ein Unterverzeichnis des Archivs. In dieser Situation ist dies kein Problem, da die Dateien im Archiv dieselben sind, aber wenn Methodius vor dem Entpacken einige seiner Dateien in „bin/“ geändert hätte, wären alle Änderungen verloren gegangen.

Paketformat

Ein Paket hat andere Zwecke als das Speichern eines Dateiarchivs (diese werden in den nächsten beiden Abschnitten besprochen), daher ist ein reguläres Dateiarchiv wie .tar für ein Paket unter Linux nicht sehr geeignet, aber es wird ein spezielles Format benötigt. Es gibt mehrere solcher Formate in Linux (eine kurze Auflistung und Beschreibung finden Sie im Abschnitt Package.Package-Installer), Methodius verwendet eines der gebräuchlichsten - rpm , daher werden alle Beispiele in dieser Vorlesung mit seiner Teilnahme sein. Um mit Paketen in einem speziellen Format zu arbeiten, benötigen Sie ein spezielles Installationsprogramm, das auch RPM genannt wird: Es installiert, entfernt, aktualisiert und überprüft Pakete.

Ein RPM-Paket ist eine einzelne Datei mit allen notwendigen Daten. Es gibt bestimmte (wenn auch nicht sehr starre und konsistente) Konventionen bezüglich der Namen von Paketdateien. Zum Beispiel heißt eine RPM-Datei, die eine Reihe von Coreutils-Standarddienstprogrammen enthält, im Methodius-System coreutils-5.2.1-some5.rpm: first - Paketnamen, dann durch einen Bindestrich getrennt - Dienstinformationen über die Versionsnummern der Software und des Pakets selbst.

Anmeldung im System

Ein Paket mit einer Systemkomponente ist also zunächst einmal Datei Archiv, die alle speichert notwendige Dateien zusammen mit ihren Pfaden (d. h. Verzeichnissen). Wenn viele Komponenten vorhanden sind, müssen Sie sicherstellen, dass keine Dateien mit vorhanden sind der selbe Name und indem sichergestellt wird, dass eine Datei, die zu einem Paket gehört, bei der Installation nicht durch die Datei eines anderen Pakets ersetzt werden kann. Verfolgen Sie diese Art Konflikte Pakete - zweite Batch-Task.

Um Konflikte zu vermeiden, muss das System Informationen über alle bereits installierten Pakete und deren Dateien speichern. Sobald Sie genau wissen, welche Dateien zu einem Paket gehören, können Sie das Paket vollständig entfernen, ohne etwas Extras zu hinterlassen oder zu entfernen. Dieser Ansatz verhindert die Bildung von "Müll" im System - nutzlose Dateien, die übrig bleiben Remote-Programme- und macht den Installations-/Entfernungsvorgang des Pakets vollständig umkehrbar.

Rpm speichert Informationen über alle auf dem System installierten Pakete und deren Dateien und kann diese Informationen auf Anfrage des Benutzers weitergeben. Nach dem Lesen des RPM-Handbuchs fand Methodius heraus, dass die Liste aller im System installierten Pakete (höchstwahrscheinlich sehr lang, mehrere tausend Zeilen) mit dem Befehl rpm -qa abgerufen werden kann, die Liste aller zum Paket gehörenden Dateien mit dem rpm -ql-Befehl Paketnamen". Er beschloss zu prüfen, ob sein System bereits das ihm aus früheren Vorlesungen bekannte Paket coreutils hatte und herauszufinden, welche Utilities ihm gehören:

[E-Mail geschützt]:~ $ rpm -qa | grep coreutils coreutils-5.2.1-some5 [E-Mail geschützt]:~ $ rpm -ql coreutils | grep bin /bin/Basisname /bin/cat /bin/chgrp /bin/chmod

Beispiel 3. Welche Dateien gehören zu einem Paket?

Methodius erhielt eine ziemlich lange Liste von Dateinamen, unter denen er viele der Dienstprogramme traf, die er bereits kannte, und einige unbekannte. Darüber hinaus verwendete Methodius nur, wenn er eine Liste von Dateien anforderte Name Paket, ohne Versionen- rpm ermöglicht den Zugriff auf alle installierten Pakete auf diese Weise2.

Sie können auch den umgekehrten Vorgang durchführen - finden Sie heraus, zu welcher Datei eine Datei gehört:

[E-Mail geschützt]:~ $ rpm -qf /etc/passwd setup-2.2.5-some1

Beispiel 4. Zu welchem ​​Paket gehört die Datei?

Dateien, die zu einem Paket gehören, können nicht nur gelöscht, sondern auch geändert werden. Dies kann bewusst erfolgen (z. B. durch Bearbeiten der Konfigurationsdatei), in diesem Fall muss beim Aktualisieren oder Entfernen des Pakets die geänderte Datei gespeichert werden, da sie das Ergebnis der Arbeit des Administrators enthält. Dazu muss das System erkennen können, dass sich eine zu einem Paket gehörende Datei geändert hat. Dazu muss das Paket Informationen zu allen Archivdateien speichern: Größe, Attribute, Prüfsumme- In diesem Fall kann das Überprüfungsverfahren die Übereinstimmung der Dateiattribute im Paket mit den Attributen der im System installierten Datei überprüfen. Was sich im Paket geändert hat, kann Methodius mit dem Befehl rpm -V überprüfen Paketnamen ».

[E-Mail geschützt]:~ $ rpm -V setup S.5....T c /etc/X11/fs/config S.5....T c /etc/exports S.5....T c /etc/fstab S.5....T c /etc/printcap ..?..... c /etc/securetty

Beispiel 5. Was hat sich am Paket geändert?

Methodius hat eine Liste der Dateien erhalten, die sich seit der Installation des Pakets geändert haben. Anscheinend sind dies alles Konfigurationsdateien, die vom Systemadministrator bearbeitet wurden. Methodius vermutete, dass die Kombination aus Zahlen, Buchstaben und Punkten eine Liste von Attributen ist, mit denen rpm verglichen wird installierte Dateien mit den Paketdaten, aber um herauszufinden, was jeder Buchstabe genau bedeutet, muss er das Handbuch genauer lesen.

Das Linux-System wird spurlos in Komponenten zerlegt: jeder eine Datei in Linux gehört zu einem (und nur einem!) Paket.

Natürlich, mit Ausnahme der Dateien, die von Benutzern erstellt wurden.

Auf diese Weise können Sie Änderungen in der Zusammensetzung des Systems auf Operationen an Paketen reduzieren - von Erstinstallation bis hin zu komplexen Upgrades. In diesem Fall wird für alle Änderungen derselbe Installer, z. B. rpm , verwendet.

Systemeinstellungen ändern

Um ein Paket vollständig im System zu registrieren, reicht es normalerweise nicht aus, dass das System eine Liste der zu dem Paket gehörenden Dateien führt. Wenn Sie ein Paket installieren, entfernen oder aktualisieren, müssen Sie häufig eine Reihe von Schritten ausführen, um Paketinformationen zu aktualisieren und anzupassen die Einstellungen- wie das Paket selbst zu denen, die bereits im System vorhanden sind, und umgekehrt. Darüber hinaus einige Änderungen im System, wie Hinzufügen und Entfernen Pseudo-Benutzer, sind nicht auf das Hinzufügen und Entfernen von Dateien beschränkt und hängen außerdem von ab Strom Systemzustand. Es stellt sich heraus, dass die Registrierung im System nicht nur eine Frage des Systems, sondern auch des Pakets selbst ist. Daher muss jedes Paket Informationen darüber speichern, welche Aktionen zum Zeitpunkt verschiedener Operationen damit ausgeführt werden sollen - das ist dritte Aufgabe der Verpackung.

Listen der erforderlichen Maßnahmen sind im Paket im Formular dargestellt Szenarien. Diese Skripte sind an die Paketinstallations- und -entfernungsverfahren gebunden und können nach Bedarf sowohl vor als auch nach dem entsprechenden Verfahren aufgerufen werden. Als Ergebnis sehen die Installations- und Entfernungsverfahren für Pakete wie folgt aus:

  • Ausführung von Vorinstallations-/Deinstallationsskripten;
  • Kopieren von Dateien aus dem Archiv auf das System oder Löschen von Dateien aus dem System
  • Ausführung von Post-Installations-/Deinstallationsskripten.

[E-Mail geschützt]:~ $ rpm -q --scripts coreutils preinstall scriptlet (durch /bin/sh): # Infoseiten von fileutils, textutils und sh-utils entfernen. für f in /usr/share/info/(fileutils,textutils,sh-utils).info*; mache [ -f "$f" ] || Continue RPM_INSTALL_ARG1=0 /usr/sbin/uninstall_info "$f" ||: Fertig Postinstall-Scriptlet (über /bin/sh): /usr/sbin/install_info coreutils.info Preuninstall-Scriptlet (über /bin/sh): /usr/ sbin/uninstall_infocoreutils.info

Beispiel 6. Anzeigen von Skripts in einem Paket

Methodius fand heraus, dass die Skripte im Coreutils-Paket vor der Installation (preinstall), nach der Installation (postinstall) und vor dem Entfernen (preuninstall) ausgeführt werden, sie werden vom Standard-Befehlsinterpreter (/bin/sh) ausgeführt. Alle diese Skripte werden benötigt, um die vom Paket installierte Dokumentation im Infosystem zu registrieren oder diese Dokumentation aus dem System zu entfernen (unter Verwendung der Befehle /usr/sbin/install_info bzw. /usr/sbin/uninstall_info). Da info ein allgemeines Inhaltsverzeichnis für alle im System verfügbaren Dokumentationen erstellt, einfache Kopie Dateien würden nicht ausreichen.

Als Ergebnis solcher Operationen zur Integration eines Pakets in das System können Dateien, die nicht zu diesem Paket gehören, geändert oder gelöscht werden, neue Dateien können erstellt werden. Wenn das im Paket enthaltene Programm die Dienste eines bereits installierten Dienstes verwendet (z. B. syslogd), kann es erforderlich sein, dieses Programm in den Konfigurationsdateien des Dienstes zu registrieren. Natürlich ist es unerwünscht, „fremde“ Dateien während der Paketinstallation zu ändern: Später müssen Sie beim Löschen des Pakets die Datei in ihren ursprünglichen Zustand zurückversetzen, was nicht immer möglich ist (z. B. nach sorgfältiger Bearbeitung durch den Administrator ). Vermeiden Sie die Bearbeitung Konfigurationsdateien Schema ermöglicht. d" beschrieben in der Vorlesung System Boot Steps .

Der Preis der Bequemlichkeit

Der Komfort, den der Benutzer beim Arbeiten mit Paketen erhält, wird nicht von selbst erreicht, sondern menschliche Arbeit: Pakete müssen von einer Person erstellt werden, ihr Job heißt "maintainer" ("Paketbetreuer" oder "Paketierer"). Es liegt in der Verantwortung des Paketbetreuers, die zum Installieren und Entfernen der Skripts und anderer Informationen über das Paket und seinen Inhalt erforderliche Archivdatei vorzubereiten und sie in einer einzigen Paketdatei zusammenzufassen.

Die Funktionen zum Erstellen eines RPM-Pakets werden ebenfalls vom RPM-Programm ausgeführt.

Sie können herausfinden, wer und wann das Paket erstellt hat, eine kurze Referenz über die darin enthaltene Software erhalten, Sie können den Befehl rpm -qi verwenden Paketnamen ».

[E-Mail geschützt]:~ $ rpm -qi setup Name: setup Verschiebungen: (nicht verschiebbar) Version: 2.2.5 Hersteller: Some Linux Team Release: some1 Build Date: Thu 29 Jan 2004 18:08:05 Install date: Mo 23 Aug 2004 15: 08:45 Build Host: shogun.somelinux.org Group: System/Setup/Other Source RPM: setup-2.2.5-some1.src.rpm Größe: 39969 Lizenz: GPL Packager: Leon B. Gourievitch Zusammenfassung: Anfangssatz von Konfigurationsdateien Beschreibung: Anfangssatz von Konfigurationsdateien, die in /etc abgelegt werden sollen.

Beispiel 7. Paketbeschreibung

Es muss berücksichtigt werden, dass jedes Paket, das Software für Linux enthält, nicht universell ist. Wenn Sie ein solches Paket haben, bedeutet dies nicht, dass es auf Ihrem System installiert werden kann. Der Punkt ist, dass anders Linux-Distributionen unterscheiden sich genau in der Art und Weise, wie die Software organisiert ist System(Verteilungen werden in der Vorlesung besprochen). Distributionen können sich in Dateispeicherorten und Verfahren zum Integrieren von Software in ein System unterscheiden, ganz zu schweigen davon, dass verschiedene Distributionen unterschiedliche Paketformate verwenden. Dies bedeutet, dass ein Paket, das für eine Distribution erstellt wurde, möglicherweise nicht mit einer anderen kompatibel ist. Damit ein Programm in Ihrer Distribution erscheint, muss jemand das entsprechende Paket vorbereiten und zur Verfügung stellen.

Paket Ressourcen, die zum Installieren und Integrieren einiger Komponenten in das System erforderlich sind (Dateiarchiv, Skripte vor und nach der Installation, Informationen über das Paket und seinen Betreuer), zusammengefasst in einer Datei.

Obwohl es geringfügige Unterschiede gibt, sind Linux-Distributionen Varianten desselben Systems, sodass letztendlich jedes Programm, das auf einer Distribution läuft, auf jedes andere "abgestimmt" werden kann. Nur dafür müssen Sie haben Quellcode das entsprechende Programm. Bisher haben wir uns nur mit den sogenannten befasst binäre Pakete, in denen Programme in Form bereits kompilierter binärer (ausführbarer) Dateien enthalten sind, kann das Programm in dieser Form von einigen Eigenschaften des Systems abhängen und möglicherweise nicht überall funktionieren. Um ein funktionierendes Programm auf das System zu bekommen, müssen Sie genau das Binärpaket installieren. Ein Paket kann aber auch Programmquellcode enthalten, solche Pakete werden genannt Initial. Die Verfügbarkeit von Quellcodes ist eine Voraussetzung für die Verteilung der meisten Software für Linux, siehe Vorlesung Free Licensing Policy. Eine Geschichte von Linux: Vom Kernel zu den Distributionen. Falls niemand ein Paket mit dem für Ihre Distribution benötigten Programm vorbereitet hat, haben Sie die Möglichkeit, das Quellpaket zu installieren und das Programm selbst zu kompilieren.

Gerüchte, dass Sie nicht einmal wissen müssen, was ein "Compiler" ist, um ein Programm aus dem Quellcode zu erstellen, sind weit von der Realität entfernt.

Nach erfolgreicher Kompilierung von Originalverpackung wird die entsprechende Binärdatei bezogen, die bereits auf dem System installiert werden kann.