Grundlegendes zu ausführbaren Linux-Formaten und Softwareverteilungspaketen

8

Ich habe Probleme beim Verständnis der ausführbaren Linux-Formate und Softwareverteilungspakete. Es gibt so viele verschiedene Distributionen von Linux selbst, und es scheint, dass jedes Softwarepaket für jede Distribution separat kompiliert wurde. Warum ist das? Ich verstehe, dass einige "Pakete" für die Installation in verschiedenen Distributionen erstellt wurden. Ist das ausführbare Format für die Software jedoch unterschiedlich?

Warum bevorzugen viele Linux-Benutzer die Eingabeaufforderungsversionen von Anwendungen gegenüber GUI-Versionen? Ich kann die Notwendigkeit kleiner Footprints verstehen, aber selbst GUI-Apps können kleine Footprints haben, wenn sie richtig codiert sind.

Rechnung
quelle

Antworten:

13

Paketmanager und Abhängigkeiten

Die meisten Linux-Distributionen verwenden Paketmanager für die Installation und Entfernung von Software. Paketmanager bieten einige Vorteile wie die Möglichkeit, ein zentrales Repository zu verwenden, aus dem (fast) jede Software heruntergeladen werden kann, die Organisation von Softwareteilen in Bundles, die als eine zusammenhängende Gruppe installiert werden können, und die Hauptvorteile: Automatisch Abhängigkeitsbehandlung und Nachverfolgung der Änderungen, die Pakete vornehmen, damit sie deinstalliert werden können.

Bestimmte Softwareteile erfordern möglicherweise bestimmte Bibliotheken oder andere Programme, um Aufgaben auszuführen, die redundant wären, wenn sie in dieser Softwareteilung erneut implementiert würden. Pakete ermöglichen den Ausdruck dieser Abhängigkeiten.

Unterschiede: Paketformate und Strategien

Es gibt verschiedene Paketmanager. Jedes wurde erstellt, weil die vorhandenen nicht den Bedürfnissen einiger Menschen entsprachen. Jeder Paketmanager benötigt Pakete in seinem eigenen Format.

Darüber hinaus haben unterschiedliche Distributionen unterschiedliche Anforderungen an die enthaltene Software. Es gibt eine Reihe von Softwareteilen, die je nach den Optionen, die beim Kompilieren aus dem Quellcode in eine ausführbare Maschine gegeben werden, unterschiedliche Funktionen haben können. Einige Distributionen möchten vollständige Funktionen und eine umfassende Erfahrung bieten, während andere eine möglichst schlanke und einfache Erfahrung bieten möchten, und es gibt alles dazwischen. Die Distribution kann auch entscheiden, ihre Verzeichnisstruktur anders zu formatieren oder ein anderes Init-System zu verwenden. Sie können sich entscheiden, die Software anders zu bündeln: Es gibt möglicherweise ein Paket namens "dev-utils" in zwei verschiedenen Distributionen, aber eine Version davon enthältyaccwährend der andere nicht. Aufgrund dieser unterschiedlichen Anforderungen entscheiden sich die Distributionen dafür, die Software auf unterschiedliche Weise zu kompilieren.

Dies ist der Grund, warum selbst wenn Sie ein Paket im richtigen Format für Ihren Paketmanager haben, es möglicherweise nicht funktioniert, wenn das Paket für eine andere Distribution vorgesehen war. Zum Beispiel könnte dieses Paket von yaccder Installation abhängen, und es drückte diese Abhängigkeit aus, indem das Paket "dev-utils" benötigt wird, aber Ihre "dev-utils" enthalten dies nicht yacc. Jetzt ist ein Paket mit einer nicht erfüllten Abhängigkeit installiert.

Das ist kein wirkliches Problem.

Ein großer Teil einer Linux-Distribution besteht darin, ein zentrales Software-Repository zu verwalten. Die Distribution sorgt dafür, dass dies alles für Sie erledigt wird. Dies macht es tatsächlich sehr einfach, Software zu installieren. Normalerweise verwenden Sie den Paketmanager, um nach Paketen zu suchen und diese auszuwählen und sie dann zu installieren. es kümmert sich um den Rest für Sie. Der Installationsprozess der Windows-Software umfasst die Suche nach Software auf Websites von Drittanbietern, den Versuch, den entsprechenden Download-Link zu finden, das Herunterladen, die Virenprüfung und das Ausführen eines Installationsprogramms, das Ihnen dann eine Reihe irrelevanter Fragen stellt. Das ganze Durcheinander ist unter Linux nicht der Standard.

Das Repository kann möglicherweise nicht alles enthalten

In einigen Fällen befindet sich eine von Ihnen benötigte Software nicht im Repository Ihrer Distribution. Die Pakete, die von einem Software-Repository bereitgestellt werden, sind eines der Unterscheidungsmerkmale von Distributionen. Wenn Sie die Software, die Sie benötigen, nicht in den Repositorys Ihrer Distribution finden können, gibt es drei mögliche Möglichkeiten (wirklich zwei plus eine Möglichkeit, die Dinge wirklich zu vermasseln).

Community-Repositories

Viele Distributionen verfügen über inoffizielle Repositorys, die von Personen verwaltet werden, die nicht mit der Distribution verbunden sind. Ubuntu nennt sie PPAs, Fedora nennt sie Fedora People Repositories. Arch Linux hat keinen spezifischen Namen für Repositorys von Drittanbietern , aber seine AUR, eine Sammlung von "Rezepten" für Pakete (Hinweis: Es gibt nur eine AUR). Sie können zunächst versuchen, ein Paket aus einer dieser Quellen zu installieren, da es einfach ist, sie zu deinstallieren, wenn sie nicht funktionieren.

Aus Quelle kompilieren

Wenn Sie kein inoffizielles Repository mit dem finden, was Sie benötigen, ist das Kompilieren aus dem Quellcode nicht schwierig. Sie müssen das Entwicklungspaket Ihrer Distribution installiert haben. Dazu gehören grundlegende Dinge wie ein Compiler, ein Linker, ein Parser und andere Tools, die normalerweise zum Kompilieren von Software benötigt werden. Dann finden Sie den Quellcode des Projekts (der fast immer in einem .tgzoder .tbz(als "Tarball" bezeichnet) verpackt ist ). Laden Sie ihn irgendwo in ein eigenes Verzeichnis herunter, extrahieren Sie ihn (mit tar -xf filename.tgzund gehen Sie normalerweise in das von ihm erstellte Verzeichnis Bei diesem Verzeichnis kann es sich um eine Datei mit dem Namen READMEoder handeln INSTALL. Wenn sie vorhanden ist, lesen Sie sie. Die meisten weisen Sie an, dasselbe zu tun. Die nächsten Schritte werden über eine Befehlszeile ausgeführt. Führen Sie lseine ausführbare Datei mit dem Namen aus und suchen Sie sieconfigure. Wenn es existiert, führen Sie es aus, indem Sie Folgendes tun ./configure: Manchmal kann es einige Minuten dauern. In der Regel werden einige Tests ausgeführt, um herauszufinden, wie in Ihrer Distribution die Einstellungen vorgenommen wurden, und es wird sichergestellt, dass Sie über die zum Kompilieren dieser Software erforderlichen Tools verfügen. Der nächste Schritt ist das Ausführen make. Dadurch wird die Software tatsächlich kompiliert, und es wird wahrscheinlich einige Zeit dauern - je nach Größe der zu kompilierenden Software zwischen einigen Minuten und Stunden. Sobald dies erledigt ist, laufen Sie make install. Dadurch wird die Software installiert, bei der die Produkte der Kompilierung an die entsprechenden Stellen in Ihrem Dateisystem kopiert werden. Danach steht die Software zur Verfügung.

Dies war ein langer Abschnitt, der jedoch als "README, ./configure, make, make install" zusammengefasst ist . Das ist die Routine, an die man sich erinnert.

Installieren Sie ein Paket von einer anderen Distribution (tun Sie dies nicht)

Ich liste dies nur auf, weil es eine Alternative ist, aber es wird mit ziemlicher Sicherheit nicht gut enden. Es ist möglich, Pakete für andere Distributionen zu installieren, und Sie möchten dies möglicherweise tun. Nun, nicht. Tun Sie es erst, wenn Sie Ihr System sehr gut verstanden haben. Tatsächlich werde ich hier keine Befehle einfügen, die zeigen, wie es geht, obwohl es möglich ist. Wenn Sie an einem Punkt angelangt sind, an dem dies anscheinend die einzige Option ist, installieren Sie das Paket nicht mit dem Paketmanager. Ziehen Sie stattdessen Dinge aus dem Paket und platzieren Sie sie manuell in Ihrem System, zusammen mit Notizen darüber, was Sie getan haben, damit Sie sie bei Bedarf rückgängig machen können.

Das Befehlszeilenbit

Einige Leute bevorzugen die Befehlszeile wegen der Vorteile, die sie ihnen bietet. Diese können in drei Dinge zusammengefasst werden:

  • Einfache Automatisierung
  • Geschwindigkeit (im Vergleich zum Klicken überall in einer GUI)
  • Ausdruckskraft

Das größte davon ist die Ausdruckskraft; Es gibt Dinge, die über eine Befehlszeile ausgeführt werden können und in einer grafischen Oberfläche nicht möglich sind.

Schließlich werden Befehlszeilenanweisungen häufig in hilfreichen Foren wie diesem gegeben, da es viel einfacher ist, die richtigen Informationen zu übermitteln, als Anweisungen vom Typ "Hier-dann-dort-dann-dort" zu geben.

Shawn J. Goff
quelle
6

Entschuldigung für die lange Antwort. Wenn Sie das schnell und schmutzig wollen, lesen Sie einfach die Zusammenfassung.

Zusammenfassung

  • Das ausführbare Format ist dasselbe.
  • Es gibt verschiedene Paketmanager, die nicht kompatibel sind, selbst wenn es sich um gepackte Programme handelt. (Sie könnten ein Paket als Installationsdatei wie .msiDateien sehen).
  • Grundsätzlich haben verschiedene Distributionen / Versionen unterschiedliche Versionen von Kernbibliotheken, und aus Gründen der Konsistenz und Stabilität müssen Anwendungen für diese Versionen erstellt werden. (Linux-Version von DLL Hell).
  • Unterschiedliche Distributionen führen die Dinge auf leicht unterschiedliche Weise aus, und dies kann in einigen Fällen ein Kompatibilitätsproblem sein.
  • Die Befehlszeile kann schneller sein, und die Unix-Befehlszeile ist erheblich besser als die Windows-Befehlszeile.

Paketmanager

Zunächst Paketmanager. Der Hauptzweck eines Paketmanagers besteht darin, eine Datenbank mit installierten Paketen und den Dateien zu verwalten, aus denen dieses Paket besteht.

Paketmanager ermöglichen die einfache Installation von Paketen und im Allgemeinen auch das einfache Entfernen. Außerdem können Pakete verschiedene Skripts angeben, die möglicherweise bei der Installation / Entfernung ausgeführt werden müssen, um die Systemkonsistenz zu gewährleisten (z. B. die Registrierung des Pakets in einer subsystembezogenen Datenbank).

Verschiedene Paketmanager

Es gibt verschiedene Paketmanager mit unterschiedlichen Stärken und Schwächen. Beispiele sind rpm und der Debian-Paketmanager (.deb-Dateien), aber es gibt auch andere. Diese Paketmanager benötigen offensichtlich unterschiedliche Formate und sind daher nicht kompatibel.

Verschiedene Distributionen oder Versionen

Da der Großteil einer Linux-Distribution Open Source ist, wird viel mehr Code wiederverwendet als auf Windows-Systemen. Eine Anwendung verwendet möglicherweise eine Reihe von Bibliotheken für verschiedene Teile ihrer Funktionalität. Diese Bibliotheken selbst tun dies oft auch, manchmal dieselbe Bibliothek.

Leider gibt es Bibliotheken in verschiedenen Versionen und einige davon sind nicht kompatibel (insbesondere Binärkompatibilität für vorkompilierte ausführbare Dateien). Auf Unix-Systemen können mehrere Versionen nebeneinander existieren (aus dieser Perspektive weniger DLL-Hölle), aber in den meisten Fällen führt die Verwendung von zwei verschiedenen Versionen einer Bibliothek in einem laufenden Programm zu Abstürzen.

Binärdistributionen aktualisieren daher häufig ihre eigene Version, um auf neue Versionen verschiedener Kernpakete zuzugreifen (in anderen Fällen benötigen Sie große Updates).

Verschiedene andere Dateien

Verteilungen unterscheiden sich auch darin, wo sich bestimmte Dateien befinden und wie die Konfiguration verwaltet wird. Abhängig vom Paket, das sich auf dieses Paket auswirken könnte.

Befehlszeile

Unix ist in erster Linie ein Workstation- und Server-Betriebssystem. Dies bedeutet, dass es für professionelle Systemadministratoren konzipiert wurde. Die Automatisierung ist ein wichtiger Bestandteil der Systemverwaltungs-Toolbox, und Shell-Skripte sind der richtige Weg, dies zu tun. Versuchen Sie, im grafischen Dateimanager führende 0 bis 1000 Dateinamen hinzuzufügen.

Da Administratoren häufig viele Computer verwalten, müssen sie auf mehreren Systemen dasselbe tun. Mit Tools wie ssh ist es extrem einfach, die Aufgabe auf mehreren Systemen gleichzeitig auszuführen und nur zu warten, bis der Computer die Arbeit erledigt.

Durch präzise Spezifikation, Automatisierung und Wiederholbarkeit ist das Potenzial der Befehlszeile wesentlich besser als bei grafischen Tools für Verwaltungsaufgaben. Unix bietet auch eine Reihe verschiedener Shells an, und dieser Wettbewerb hat extrem leistungsstarke Shells erstellt, die mit der Windows-Eingabeaufforderung kaum zu vergleichen sind.

Microsoft hat dies tatsächlich gut verstanden und bietet Powershell als Befehlszeilenersatz an. Die neueste Version von Windows Server wird hauptsächlich über die Befehlszeile verwaltet.

Paul de Vrieze
quelle
3

Die ausführbaren Formate sind über alle Distributionen hinweg gleich, aber für ausführbare Dateien ist möglicherweise zusätzliche zugrunde liegende Software erforderlich, um ordnungsgemäß zu funktionieren. Wenn Sie sich Redhat-basierte Distributionen ansehen, ist das Installationsprodukt eine Drehzahl, die alle Anforderungen für eine bestimmte Software enthält und diese Software standardmäßig nur installiert, wenn die Anforderungen erfüllt sind. ( yumist eine Alternative zurpmund es wird von einigen Redhat-basierten Versionen verwendet). Per Definition muss eine GUI einen viel größeren Platzbedarf haben als eine Eingabeaufforderungsschnittstelle. Die zugrunde liegende Philosophie von UNIX besteht darin, alles zu vereinfachen, damit eine bestimmte Aufgabe so effizient wie möglich funktioniert. Aus diesem Grund gibt es so viele Dienstprogramme, die eine einzelne Aufgabe ausführen, wobei die Ausgabe dieser Aufgabe mit der Eingabe einer anderen Aufgabe verknüpft werden kann, um etwas anderes zu tun.

apolinsky
quelle
Um richtig zu sein, yum ist keine Alternative, es arbeitet über der Drehzahl und bietet eine schönere Schnittstelle und Funktionen wie Repositories.
RVS
1

Unterschiedliche Distributionen haben unterschiedliche Installationsvoraussetzungen. Es gibt jedoch RPMs oder DEBs (oder andere Pakete für andere Paketverwaltungssysteme), die für mehr als eine Distribution funktionieren. Die Linux-Philosophie macht Quellcodes leicht verfügbar. Wenn Sie Ihre eigene Software kompilieren, ist die Routine in allen Distributionen ziemlich gleich und es ist immer das gleiche .tar.gzArchiv, das Sie verwenden.

Kompilierte RPMs sind eher Teil des Systems. Eine Anwendung selbst als eigenständige Einheit soll auf jedem Ziel verteilt und kompiliert werden.

Ihre zweite Frage ist etwas völlig anderes ... Nun, "viele Linux-Benutzer" bevorzugen CLI-Anwendungen aus vielen verschiedenen Gründen. Ein geringer Speicherbedarf ist nur ein Grund. Bei Verwendung von SSH sind CLI-Anwendungen sinnvoller, insbesondere wenn Sie außerhalb des Standorts auf Servern arbeiten. In den meisten Fällen sind auf diesen Servern keine grafischen Umgebungen installiert. Wenn nicht daemonisierte Programme ausgeführt werden, können sie sehr einfach abgebrochen werden. Ctrl- cund das Programm ist weg. Außerdem melden sich viele Programme bei der Konsole an, sodass das Debuggen einfacher ist. Beim Programmieren erledigen Sie den größten Teil der Kompilierung in der Konsole. Es ist nur sinnvoller, schnelles Debuggen zu kompilieren. Entweder das oder das Lesen von Protokolldateien, manchmal ist das Lesen der Konsole schneller.

Polemon
quelle
0

Bogen. Oder FreeBSD, das als Ganzes entwickelt wird. (RHEL, SLES und ähnliches werden insgesamt unterstützt.)

Laptop-Nutzung: Mint

Verwendbare Hackbarkeit: Arch.

Sadistische Hackbarkeit: Genoo.

Spaß Hackbarkeit: LFS.

Unterstützbarkeit (Server): RHEL, Ubuntu LTS, FreeBSD (anders als Linux).

dhchdhd
quelle
Möglicherweise möchten Sie Ihre Antwort bearbeiten, um das, was Sie sagen möchten, klarer zu machen und einige Tippfehler / Grammatikfehler zu korrigieren.
Haziz