Home / LinuxUser / 2002 / 01 / The Answer Girl

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

War doch klar...
(229 Punkte bei 11 Stimmen)
Pardus Linux am Ende?
(201 Punkte bei 6 Stimmen)
Meinst Du: Patch CD Updates?
(179 Punkte bei 5 Stimmen)
One goes, one comes
(161 Punkte bei 4 Stimmen)
Speichern in der Cloud
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

Installieren ohne Reue

The Answer Girl

01.01.2002 Selbstkompilierte Software hat einen Nachteil: Ob sie sich später sauber deinstallieren lässt, hängt von der eigenen Disziplin ab. Zum Glück lässt sich der nachhelfen.

The Answer Girl

Dass der Computeralltag auch unter Linux des Öfteren für Überraschungen gut ist, ist eher eine Binsenweisheit: Immer wieder funktionieren Dinge nicht oder nicht so, wie eigentlich angenommen. Das Answer-Girl im LinuxUser zeigt, wie man mit solchen Problemchen elegant fertig wird.

Wer ausschließlich für die jeweilige Distribution vorkompilierte rpm- oder deb-Pakete mit dem vorgesehenen Paketmanager installiert, tut dies im Bewusstsein, sie bei Bedarf auf gleichem Wege auch wieder rückstandslos entfernen zu können. Selbst wenn "Leichen" auf dem System verbleiben, bleibt immer noch das gute Gefühl der eigenen Unschuld: In dem Fall hat der Paket-Packer schlampig gearbeitet.

Doch selbst softwaremäßig gut bestückte Distributionen müssen irgendwann passen: Nicht jedes nützliche Programm gibt es für alle Distributionen und Distributionsversionen fertig vorkonfektioniert. Sobald es "Selbstkompilieren" heißt, kommt spätestens beim make install die Stunde der Wahrheit: Wer hier nicht genauestens Buch führt, findet zwar sicherlich das installierte Binary und eventuell auch die entsprechende Manpage wieder, doch war das tatsächlich alles, was dieses unscheinbare Kommando, mit root-Rechten ausgeführt, in den Weiten des Dateisystems versteckt hat?

Arbeitsverbot für make

Immerhin gibt es auch zu make eine Manpage, und die erklärt, dass die Option -n alle Kommandos auflistet, die während der Abarbeitung des Makefile zum Zuge kommen, jedoch auf deren Ausführung verzichtet. Kein Problem, solange diese Liste einfach und übersichtlich ist wie beim mirror-Paket:

pjung@chekov:~/software/mirror$ make -n install[…]

install -m 755 -g gnu mirror.pl /usr/local/sbin/mirror[…]

Hier wird lediglich das install-Kommando aufgerufen, das die Datei mirror.pl ins Zielverzeichnis /usr/local/sbin kopiert und gleichzeitig in mirror umbenannt. Dort bekommt sie dank der Modus-Option -m 755 die Rechte rwxr-xr-x und wird mit -g der Gruppe gnu (die bereits vorhanden sein muss) zugeordnet.

Kopiert man die von make install auszuführenden Kommandos mit dem Umleitungsoperator > in eine zu archivierende Datei (make -n install > dateiname), kann man bei späteren Deinstallationsanwallungen den Installationsprozess rekonstruieren und /usr/local/sbin/mirror und Konsorten per Hand mit dem rm-Kommando aus dem System entfernen.

Sobald make install jedoch längliche, hochkomplexe Shell-Skripte ausführen soll, die ihrerseits wieder auf im Quellpaket mitgelieferte Skripte zurückgreifen, reicht der Wille zur Disziplin sicherlich nicht mehr aus. Ein anderer Ansatz muss her.

Jedem das seine Verzeichnis

Die einfachste Lösung wäre, jede selbstkompilierte Software in einem jeweils eigenen Verzeichnis unterzubringen. Der "Filesystem Hierarchy Standard" (http://www.pathname.com/fhs/) schlägt hier /opt/Paketname für "add-on application software packages", zusätzliche Anwendersoftware, vor. Sinnvoll ist jedoch auch die Alternative eines Paketverzeichnisses unterhalb von /usr/local, selbst wenn dies im FHS nicht vorgesehen ist.

In diesem Paketverzeichnis sollte dann wieder eine typische Unix-Verzeichnishierarchie mit bin-Verzeichnis für User-Programme, sbin für der Systemverwalterin root vorbehaltene Binaries, man für Manpages, lib für Bibliotheken, include für eventuelle Header-Files etc. angelegt werden, soweit das jeweilige Softwarepaket passende Dateien mitbringt.

Doch wie überzeugt man make install, in solch ein Verzeichnis hineinzukopieren? Anscheinend, indem man die Datei makefile oder Makefile modifiziert. Eine Sicherheitskopie angelegt, gilt es, nach dem Target ("Ziel") install zu suchen. Das Makefile bestimmt nämlich, mit welchen Argumenten make aufgerufen werden kann: Nur Wörter, die darin am Anfang einer Zeile stehen und von einem Doppelpunkt beendet werden, sind erlaubt. Das makefile aus dem mirror-Paket ist recht übersichtlich:

install:[…]

        install -m $(EXMODE) -g $(GRP) mirror.pl $(BINDIR)/mirror[…]

Hier finden wir, von genau einem Tabulatorzeichen eingerückt, die von make install auszuführenden Kommandos wieder – allerdings sind konkrete Werte durch Variablen ersetzt. Ein Vergleich zeigt, dass $(BINDIR) offensichtlich den Inhalt der Variablen BINDIR an dieser Stelle einfügt, und BINDIR bekommt einige Zeilen weiter oben den Wert /usr/local/sbin zugewiesen:

# directory to install public executables
BINDIR = /usr/local/sbin

Wollen wir das "Verzeichnis, in dem öffentlich zugängliche ausführbare Dateien" abgelegt werden, in /opt/mirror/sbin ändern, verlangt das lediglich eine Korrektur im makefile:

BINDIR = /opt/mirror/sbin

Die Herausforderung bei dieser Verfahrensweise besteht lediglich darin, alle Variablen herauszufinden, die sich auf den Installationsschritt beziehen. Das kann in Friemelarbeit ausarten, bei der viele Kontrollläufe in Form von make -n install nötig werden. Bei solchen handgeschriebenen Makefiles kommt es auch des Öfteren vor, dass der Autor nicht sauber gearbeitet und "versehentlich" statische Pfadangaben mit eingebaut haben. Hier hilft nur die konsequente Suche nach der hartnäckigen Verzeichnisangabe.

Ein Problem kommt hinzu: Wenn sich make install mit einer Fehlermeldung der Art

install: cannot create regular file `/opt/mirror/sbin': No such file or directory

beschwert, fehlt das Zielverzeichnis /opt/mirror/sbin, das per Hand angelegt werden muss. Fehlt nicht nur das letzte Unterverzeichnis sbin, sondern auch sein übergeordnetes Directory mirror, erspart man sich einen mkdir-Befehl, wenn man mit

mkdir -p /opt/mirror/sbin

alle nötigen Eltern-("parent"-)Verzeichnisse mit einem Mal anlegt.

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

750 Hits
Wertung: 69 Punkte (1 Stimme)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

title_2012_02

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Duden Korrektor unter 64-Bit
Duden Korrektor unter 64-Bit
Tim Schürmann, 06.02.2012 10:36, 0 Kommentare

Der Duden Korrektor bietet eine äußerst nützliche Rechtschreib- und Grammatikkorrektur für LibreOffice und bringt in der aktuellen Version 8 e...

Aktuelle Fragen

rndc reload zone - failed bad zone
Ludwig jun. B., 06.02.2012 16:08, 2 Antworten
Schönen guten Tag, ich habe folgendes Problem. Immer wenn ich folgendes Kommando ausführen bek...
Skype für 64-Bit-Prozessor u. Suse 12.1
Klaus Sigerist, 05.02.2012 11:39, 3 Antworten
Hallo Gemeinde! Ich bin nur ein einfacher Nutzer und habe Probleme mit der Installation von Skyp...
8! Anfängerfrage :) Wie finde ich in Ubuntu die Datenträger (Bild, Text)
samuel leusam, 04.02.2012 15:53, 1 Antworten
Ich habe neu Ubuntu. Wenn ich die SD Karte im Laptop einstecke, erkennt er sie und gibt ihr den N...
OpenSuse 12.1-Service Kit 01/12
Christoph-J. Walter, 28.01.2012 08:52, 2 Antworten
Hallo Gemeinde, ich habe 12.1 neu installiert. Alles in Ordnung! Nun möchte ich das Service Kit (...
Ubuntu 11.10 konfigurieren
Michael Hinz, 27.01.2012 17:52, 1 Antworten
Ubuntu läuft bei mir. Allerdings nur, wenn die Daten-CD eingelegt ist. Unabhängig von Bios-Einste...