Softwareinstallation: Unterschied zwischen den Versionen

Aus Mikiwiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 10: Zeile 10:
| <b>C-Compiler</b> || [[gcc]] ist hier der traditionelle Standard. Als C++-Compiler kann daneben auch [[g++]] benötigt werden.
| <b>C-Compiler</b> || [[gcc]] ist hier der traditionelle Standard. Als C++-Compiler kann daneben auch [[g++]] benötigt werden.
|-
|-
| <b>Header-Dateien</b><br>(engl. header files, include files) || Sie enthalten [[Betriebssystem]]-Definitionen, die der C-Compiler zum [[Kompilieren]] fast jeden Programms benötigt. Normalerweise tragen sie die Dateiendung ".h". Zusätzlich zum in [[Libc]] bzw. [[Glibc]] enthaltenen Standardset werden die Kernel-Headerdateien benötigt, die mit dem Kernel-Quellcode ausgeliefert werden und sich üblicherweise unter "/usr/src/linux-<Version>/include" befinden.
| <b>Header-Dateien</b><br>(engl. header files, include files) || Sie enthalten [[Betriebssystem]]-Definitionen, die der C-Compiler zum [[Kompilieren]] fast jeden Programms benötigt. Normalerweise tragen sie die Dateiendung ".h". Zusätzlich zum in [[Libc]] bzw. [[Glibc]] enthaltenen Standardset werden die Linux-Kernel-Headerdateien benötigt, die mit dem Kernel-Quellcode ausgeliefert werden und sich üblicherweise unter "/usr/src/linux-<Version>/include" befinden.
|-
|-
| <b>binutils</b> || Sie enthalten u. a. den Assembler ([[as]]), den Linker ([[ln]]) sowie den "library archiver" ([[ar]]). Diese Programme verarbeiten und verbinden die Ausgabe des C-Compilers um die schliesslichen Programme in Maschinencode zu erstellen.
| <b>binutils</b> || Sie enthalten u. a. den Assembler ([[as]]), den Linker ([[ln]]) sowie den "library archiver" ([[ar]]). Diese Programme verarbeiten und verbinden die Ausgabe des C-Compilers um die schliesslichen Programme in Maschinencode zu erstellen.

Version vom 30. Juli 2009, 21:06 Uhr

Zur Softwareinstallation wird unter Linux entweder der Quellcode (engl. source code) oder ein sogenanntes Paket (binary) benötigt. Pakete funktionieren jedoch üblicherweise nur für eine Architektur und ein Betriebssystem. Flexibler ist deshalb die Installation des Quellcodes, welche lokale Veränderungen am Programm ermöglicht und auch die Installation von Bug Fixes erlaubt.

Neue Software wird normalerweise ins Verzeichnis "/usr/local" installiert.

Softwareinstallation aus Quellcode

Dafür wird üblicherweise folgendes benötigt.

C-Compiler gcc ist hier der traditionelle Standard. Als C++-Compiler kann daneben auch g++ benötigt werden.
Header-Dateien
(engl. header files, include files)
Sie enthalten Betriebssystem-Definitionen, die der C-Compiler zum Kompilieren fast jeden Programms benötigt. Normalerweise tragen sie die Dateiendung ".h". Zusätzlich zum in Libc bzw. Glibc enthaltenen Standardset werden die Linux-Kernel-Headerdateien benötigt, die mit dem Kernel-Quellcode ausgeliefert werden und sich üblicherweise unter "/usr/src/linux-<Version>/include" befinden.
binutils Sie enthalten u. a. den Assembler (as), den Linker (ln) sowie den "library archiver" (ar). Diese Programme verarbeiten und verbinden die Ausgabe des C-Compilers um die schliesslichen Programme in Maschinencode zu erstellen.
make Diesr Befehl überwacht das Kompilieren. Dazu sollte GNU make installiert sein, da einige "Makefiles" von seinen nichtstandardisierten Erweiterungen abhängen.
perl Dieser Skriptinterpreter von vielen Konfigurationsskripten, Codegeneratoren, Parsern und ähnlichen Dienstprogrammen verwendet.
X Window System Header-Dateien

Das Selberinstallieren von Software aus dem Quellcode hat Vor- und Nachteile.

Vorteile Nachteile
  • Änderungen über das Netz vorzunehmen wird einfacher, da es ein gemeinsames Installations-Prefix gibt.
  • Das Verzeichnis bleibt dasselbe, wenn das Betriebssystem aktualisiert wird. Auch das Erstellen einer Sicherung ist so einfacher.
  • Es wird immer die neueste Version eines Pakets installiert.
  • Es können Benutzeranpassungen vorgenommen werden, sofern das Paket solche erlaubt.
  • Manchmal sind Optimierungen möglich.
  • Üblicherweise erhält man einen besseren Überblick, wie das Programm zu verwenden ist.
  • Es kann einige Zeit dauern.
  • Falls das Programm von niemand benutzt wird, ist es verlorene Zeit.
  • Es können Fehler auftreten, die nicht mit eigenen Kenntnissen behoben werden können.

Vorgehen

Quellcode wird üblicherweise in komprimierter Form ("*.tar.gz", "*.tar.bz2", "*.tgz") bereitgestellt.

  • Ansehen der komprimierten Quellcode-Datei ("tarball") mit "tar -tv". Der Inhalt sollte immer in ein Verzeichnis entpacken und keinesfalls Dateien enthalten, die mit einem Schrägstrich beginnen!
  • Entpacken der komprimierten Quellcode-Datei mit tar.
  • Ansehen der entpackten Dateien, darunter können sein:
    • die Datei "README" sollte zuerst gelesen werden und beschreibt die enthaltene Software.
    • die Datei "INSTALL" enthält eine Installationsanleitung.
    • die Datei "Imakefile" (welche das Programm imake benutzt) ist enthalten, wenn das Paket nicht GNU autoconf benutzt.
    • die Dateien "build", "compile" oder ähnliche kleine Skripte vom Softwareautor.
  • C-Quelldateien haben die Endung ".c", C++-Dateien haben Endungen wie ".cc", ".C" und ".cxx". Header-Dateien für beide enden mit ".h".
  • Wird das Paket GNU autoconf verwendet, so ist wie folgt vorzugehen:
    • Ausführen des Skripts "configure", das üblicherweise die Dateien "Makefile" und "config.h" erzeugt.
      • Dabei kann unter anderem mit "--prefix=" angegeben werden, in welches Verzeichnis die Installation erfolgen soll.
      • Ebenfalls können die Umgebungsvariablen beeinflusst werden. Normalerweise benutzt "configure" für "CFLAGS" die beiden Optionen "-g" (generate debugging information) und "-O2" (optimize 2 levels). Obwohl damit optimierter Code erzeugt wird, ensteht dabei auch überflüssiges Zeug, das mehr Festplattenplatz beansprucht als nötig. Normalerweise wird also nur die Option "-O2" benötigt. Die Option "-I" gibt das Verzeichnis an, in dem "configure" und der Compiler nach Include-Dateien suchen sollen.
    • Ausführen von make zum Kompilieren des Programms.
    • Testen des frisch kompilierten Programms durch einfachen Aufruf.
    • Testweise Installation des Programms mit "make -n install <Programm>". Dabei wird bloss ausgegeben, was "make install" tun würde, aber es wird nichts installiert.
    • Installation des Programms mit "make install".

SUID-Problematik

Das SUID-Flag (siehe auch Zugriffsrechte) sorgt dafür, dass Programme unter den Rechten des Besitzers und nicht unter denen des ausführenden Anwenders ablaufen. Dadurch erhalten auch unprivilegierte Benutzer vorübergehend die Rechte von Benutzer "root". Beispielsweise muss der Befehl ping besondere Pakete erzeugen, was einem unprivilegierten Benutzer normalerweise verwehrt bleibt. Daher hat der Befehl ein SUID-Flag und gehört dem Benutzer "root".

Solange die Befehle ihre ursprüngliche Funktion beibehalten, ist alles in Ordnung. Unsaubere oder bösartige Programmierung führt jedoch dazu, dass die Rechte von Benutzer "root" missbraucht werden können. Es empfiehlt sich deshalb vor der Installation die Installer-Routinen zu überprüfen.

Um den Ausführungspfad ansehen zu können, hilft es den Befehl "set -x" zu Beginn des Installationsskripts einzufügen. Danach protokolliert set alle Shellaufrufe auf der Standardausgabe.

Um auch trotz fehlender Quellen die Programmabläufe sichtbar zu machen kann das Programm strace in die Schnittstelle zwischen Userspace und Kernel geschaltet werden. strace protokolliert alle Systemaufrufe, die ein Programm auslöst. Die enstehende Logdatei muss danach betreffend Änderung der Zugriffsrechte durchsucht werden (z. B. Suche nach "chmod"). Schreibende Zugriffe in Systemverzeichnisse und Systemdateien sind dabei ebenso verdächtig wie die Zugriffsrechteänderung anderer Programme.

Weblinks

Vorlage:Weblinks1