1.102.4 Shared Libraries

800px-Siberian_Tiger_sf

Wikimedia Commons – Mila Zinkova

Aus dem Bereich 1.102 Installation und Paketmanagement der Unterlangen für die Linux Zertifizierung LPIC-1 [101]
Verwaltung von Shared Libraries
Prüfungskandidaten sollten in der Lage sein, Shared Libraries, die von ausführbaren Programmen benötigt werden, zu bestimmen und nötigenfalls zu installieren. Sie sollten ebenfalls fähig sein, anzugeben wo sich die Systembibliotheken befinden.
Die wichtigsten Dateien, Bezeichnungen und Anwendungen:
* ldd
* ldconfig
* /etc/ld.so.conf
* LD_LIBRARY_PATH
Die Technik der Shared Libraries
Shared Libraries sind Funktionsbibliotheken, die von mehreren Programmen benutzt werden können und die so nur einmal in den Speicher geladen werden müssen, anstatt für jedes Programm extra Platz zu verschwenden. Normalerweise würde ein Programm beim Linkvorgang (dem Vorgang, bei dem alle Objektdateien und die Systemlibraries zur ausführbaren Datei zusammengefügt werden) mit allen Libraries, aus denen das Programm Funktionen benötigt, statisch gelinkt. Das würde aber bedeuten, daß Programme, die gleichzeitig laufen, diese Funktionsbibliotheken – jedes Programm für sich – in den Speicher laden müsste. Die shared library Technik verhindert das. Ein Programm, das geladen wird, überprüft, ob die notwendigen Libraries schon im Arbeitsspeicher liegen. Tun sie das, so läd sich das Programm in den Arbeitsspeicher und benutzt einfach die schon geladenen Libraries. Liegen die benötigten Libraries noch nicht im Arbeitsspeicher, so werden sie zunächst geladen und erst dann läd sich das Programm.
So wird jede benötigte Library nur einmal in den Speicher geladen, was gerade in einem System, das viele Programme gleichzeitig geladen hält eine enorme Speichereinsparung bewirkt.
Wenn ein Programm geladen wird, dann muß es eine Instanz geben, die den geschilderten Vorgang startet. Denn das Programm selbst kann das nicht tun, es wird ja erst geladen, wenn die nötigen Libraries auch schon geladen sind. Diese Instanz ist sozusagen der Programmlader oder der sogenannte dynamische Linker und Lader. Der Name dieses Programms ist ld.so.

ld.so läd die shared libraries, die ein Programm benötigt, bereitet dann das Programm entsprechend vor und läd es selbst. Die shared libraries, die das zu ladende Programm benötigt, werden in der folgenden Reihenfolge gesucht:
* Alle Pfade, die in der Umgebungsvariable LD_LIBRARY_PATH eingetragen sind, werden nach den Libraries durchsucht. LD_LIBRARY_PATH ist eine Shellvariable, die eine durch Doppelpunkte getrennte Liste von Verzeichnissen enthält.
* Die Datei /etc/ld.so.cache enthält eine binäre Liste aller Librarie-Kandidaten, die schon vorher in den genannten Verzeichnissen gefunden wurden. (siehe weiter unten bei ldconfig.)
* Die Verzeichnisse /usr/lib und /lib werden durchsucht.
Ein Linux-Programm wird also von einem speziellen Programmlader (ld.so) geladen, der die notwendigen Libraries gleich mitläd. Aus diesem Grund ist es nötig, daß jedes Programm, das installiert wird, auch die entsprechenden Libraries mitinstalliert bzw. überprüft, ob sie schon installiert sind. Die Verwaltung dieser Libraries obliegt der Systemverwaltung.
Welches Programm braucht welche Library?
Um herauszufinden, welche Shared Libraries ein bestimmtes Programm benutzt, gibt es das kleine Programm ldd. Dieses Programm gibt eine Liste aller Libraries zurück, die das Programm benötigt, daß als Parameter ldd mitgegeben wurde. Um z.B. herauszubekommen, welche Libraries das Programm ls benötigt, schreiben wir
ldd /bin/ls
Das zu untersuchende Programm muß mit vollem Pfad angegeben werden. Die Ausgabe wäre für unser Beispiel dann etwas in der Art:
librt.so.1 => /lib/librt.so.1 (0x40022000)
libc.so.6 => /lib/libc.so.6 (0x40033000)
libpthread.so.0 => /lib/libpthread.so.0 (0x4014e000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Daraus geht hervor, daß das Programm ls vom Linker/Loader /lib/ld-linux.so.2 gestartet werden will und die Libraries librt.so.1, libc.so.6 und libpthread.so.0 benötigt. In der rechten Spalte sind die Fundorte der Libraries im Dateisystem zu lesen.
Wenn ein Programm neu installiert wird, so kann mit Hilfe dieses Befehls herausgefunden werden, ob alle Libraries für das Programm existieren oder ob einige nachinstalliert werden müssen.
Libraries installieren und aktualisieren
Wenn neue Libraries installiert werden sollen, dann stellt sich die Frage, wohin. Zunächst einmal bieten sich die Verzeichnisse /lib, /usr/lib und /usr/local/lib an. Sollen aber neue Verzeichnisse angelegt werden, die Libraries enthalten, dann muß das der internen Verwaltung der Libraries mitgeteilt werden.
Die interne Verwaltung der Libraries wird durch den Aufruf des Programms ldconfig vollzogen. Dieses Programm wartet den Library Cache und erstellt automatisch die notwendigen symbolischen Links auf Libraries. Der Librarie-Cache liegt in der Datei /etc/ld.so.cache und enthält eine binär codierte Liste aller dem System bekannten Libraries.
Damit ldconfig diese Datei erstellen kann und auch neu hinzugekommene Libraries dort aufgenommen werden, muß ldconfig wissen, welche Verzeichnisse nach Libraries durchsucht werden sollen. ldconfig durchsucht zunächst die beiden Verzeichnisse /usr/lib und /lib, danach alle Verzeichnisse, die in der Datei /etc/ld.so.conf aufgelistet sind.
Wenn also ein neues Programm foo installiert wird, das seine Shared Libraries im Verzeichnis /usr/local/foo/lib ablegt, so müssen wir nur dieses Verzeichnis in die Datei /etc/ld.so.conf aufnehmen. Nach der Installation neuer Libraries und/oder der Neuaufnahme von Pfaden in der Datei /etc/ld.so.conf muß das Programm ldconfig ausgeführt werden, bevor die neuen Libraries verwendet werden können. Erst nach dem Aufruf von ldconfig stehen sie ja in der Datei /etc/ld.so.cache und sind somit dem Linker/Loader bekannt.
Alle Artikel zur LPIC unterliegen der GNU Free Documentation License.

Quellen, Weblinks:

Prinz William hat mein Herz im Flug erobert

Prinz William

Prinz William, Quelle siehe Weblinks

und vermutlich nicht nur meines, denn wie er seine königlichen Vorrechte nützt gefällt bestimmt auch seiner Freundin Kate Middelton. Die Queen hingegen scheint nicht so sehr begeistert zu sein von seinen Aktionen. Er hat nun schon zum zweiten Mal einen Militärhubschrauber für private Zwecke mißbraucht und seine Freundin damit besucht. Mein Held ist gut im Garten seiner Liebsten gelandet. 😉
Eine Trainigsstunde mit einem Chinook kostet so an die € 20.000.- was den Militärexperten ein wenig Sorge macht, aber ich verstehe ihn voll und ganz.
Mach weiter so, mein kleiner Prinz!
Die AFP meint dazu:

Die Landung im Chinook-Hubschrauber, der im Irak und in Afghanistan zu Truppentransporten dient, habe nur 20 Sekunden gedauert und keiner der Insassen sei aus dem Hubschrauber ausgestiegen, hob das Verteidigungsministerium hervor. Die Boulevardzeitung “News of the World” hatte berichtet, Kate und ihre Eltern hätten dem Prinzen vom Haus aus bei dem Manöver zugeguckt. Der 25-jährige William und Middleton lernten sich beim Studium kennen. Abgesehen von einer vorübergehenden Trennung im vergangenen Jahr sind sie seit rund vier Jahren ein Paar.

Quellen und Weblinks:
William Mountbatten-Windsor
Prinzenflug in den Garten der Liebsten
Prinz William besuchte Kate Middleton mit Militärhelikopter
Prinz William fliegt zur Party
Ärger für William wegen Helikopterflug

Rapid holt sich den 32. Meistertitel der Klubgeschichte

A Soccer ball

Wikimedia Commons

Rapid ist Meister!
Die Mission 32 ist erfüllt: WIR SIND MEISTER!!!
Kooommt, sagt es allen Leuten, ruft es in alle Welt hinaus, kommt sagt es allen Leuten, der Meister ist in Hütteldorf zuhaus: Mit einem 3:0 Sieg über Altach wird Rapid zum 32. Mal österreichischer Meister. Nach dem Schlusspfiff brechen alle grün-weißen Dämme: JAAAAAAAAAA!!!!
Rapid sicherte sich am Sonntagnachmittag souverän den 32. Meistertitel der Klubgeschichte. Vor ausverkauftem Haus ließen die Hütteldorfer zu keiner der 90 Minuten Zweifel an ihrer Überlegenheit aufkommen und besiegten Altach durch Tore von Boskovic, Maierhofer und Hoffer mit 3:0.
Die Fans waren mit Anpfiff auf Betriebstemperatur, die Mannschaft von Peter Pacult stand dem um nichts nach. Nach nicht einmal sieben Minuten hatte der Tabellenführer gegen Altach sein Ziel fast schon erreicht. Ümit Korkmaz, der pfeilschnelle Flügelspieler, hatte sich wieder einmal links durchgesetzt, in der Mitte lauerte Branko Boskovic, der im Stile eines abgebrühten Legionärs zum 1:0 traf.
Nach der Partie glich das Stadion einem Tollhaus. Die Mannschaft musste vorzeitig ihre Ehrenrunde abbrechen, weil die Fans das Fußball-Feld stürmten. Um 17.55 Uhr stemmte Kapitän Steffen Hofmann schließlich den Meisterteller in die Höhe.

Weblinks und Quellen:
https://www.skrapid.at/
SK Rapid Wien ist zum 32. Mal Meister
Pfiffe für Gusi, teamreifer Ümit, Rapid Meister
Rapid ist Meister: “Mission 32” triumphal erfüllt
Das Meisterstück des zwölften Manns
Der SK Rapid Wien ist Meister

Ich verspüre ja so einige blöde Witze in den Fingerkuppen, aber ich verschone die Tastatur damit, denn in meiner grün-weißen Umgebung bekäme mir das vermutlich nicht gut. Rapidler verstehen meine Späße nicht und ich brauche nicht unbedingt ein Veillchen (blauses Auge und Farbe der Austria). LOL

Qigong – Morgenübung 1

Qigong -Morgenübung 1

Kirschbaum

Sauerkirsche von Benjamin Gimmel, BenHur auf Wikimedia Commons

Übungsfolge mit einer vorbereitenden Übung, einer Übung in in Bewegung und einer Abschlußübung.
Vorbereitende Übung: “Stehen wie ein Baum”
Man steht mit sich berührenden Fersen und nach außen zeigenden Zehen, geradem Rücken und entspannten Schultern, so wie locker zu beiden Seiten herabhängenden Armen (Handflächen zeigen nach innen). Man kann sich dabei einen Baum vorstellen und an “verwurzelt mit der Erde”, “fest im Leben stehen” , “unerschütterlich zu mir selbst stehen” oder ähnliches denken.
Man sammelt sich im Dantian und beachtet die Atmung. Dann dreht man die rechte Fußspitze nach vor und verlagert das Gewicht auf das rechte Bein. Das linke Bein wird parallel zum rechten gestellt, wobei der Abstand ungefähr schulterbreit sein soll. Das Gewicht wieder auf beide Beine verlagern. Die Knie werden gebeugt und das Becken wird bei entspanntem Lendenbereich gesenkt, als wollte man sich auf einen Tischrand setzen. Nicht verkrampft auf etwas konzentrieren, sondern den Blick einfach ungezwungen in die Ferne richten. Die innere Kraft (sich voll und fest fühlen) soll richtig verteilt sein, d.h. oberhalb des Nabels 3 und unterhalb 7 Anteile ihrer inneren Gesamtkraft.
Die Arme werden vom Ellbogen her leicht geöffnet bis sie neben dem Körper zwei Halbkreise bilden. Es muss nicht aussehen, als wollte Django beide Colts gleichzeitig ziehen, d.h. die Finger sind geschlossen, auch leicht gebeugt und berühren die Beine nicht. Die Schulter wird nicht hoch gezogen, trotzdem spürt man einen Raum unter den Achseln. Man stellt sich vor die Fingerspitzen wären mit einem elastischen Faden verbunden und man kann sie leicht auseinander ziehen. Die Kraft der Erde geht durch die Fußsohlen zum Dantian. Man verbindet Himmel und Erde im Dantian. Spannungen lösen sich duchrch leichte Ausgleichsbewegungen. Sich zulächeln und innerlich ruhig schwingen.

Übung in Bewegung: “Das Universum mit beiden Händen halten (Erste Brokatübung)”
siehe Qi Gong, Ba Duan Jin 1
Abschliesende Übung: “Das Qi zum Ursprung zurück führen”
Die Handflächen werden aus der Gebetshaltung (Handflächen berühren sich nicht) heraus nach unten gedreht und etwa in Schulterhöhe zur Seite und dann neben dem Körper nach unten geführt. Die Arme wie große Schwingen nach unten sinken lassen. Der Körper sinkt dabei mit. Gewicht auf das rechte Bein verlagern, die Fußspitzen nach außen drehen und das linke Bein heranziehen, damit die Ausgangsposition wieder erreicht wird. Das während der Übung zirkulierende Qi fließt zum Dantian zurück und wird dort gespeichert.
Weblinks:
Qigong Überischt
Youtube Videos – Qigong: Erle Montaigue
How to Practice Qigong Exercises
Dantian (Wikipedia engl.)

1.102.3 Vom Quellcode zum Programm

800px-Siberian_Tiger_sf

Wikimedia Commons – Mila Zinkova

Aus dem Bereich 1.102 Installation und Paketmanagement der Unterlangen für die Linux Zertifizierung LPIC-1 [101]
Vom Quellcode zum Programm
Prüfungskandidaten sollten in der Lage sein, ein ausführbares Programm aus dem Quellcode zu erstellen und zu installieren. Dieses Lernziel beinhaltet die Fähigkeit, ein Source-Paket aus einem Archiv zu extrahieren. Kandidaten sollten in der Lage sein, einfache Anpassungen im Makefile vorzunehmen, wie z.B. Pfade zu ändern oder zusätzliche Verzeichnisse einzubinden.
Die wichtigsten Dateien, Bezeichnungen und Anwendungen: * gunzip, * gzip, * bzip2, * tar, * configure,* make
Grundsätzlicher Vorgang
Ein Programm wird von seinem Programmierer (oder seinen Programmierern) in vielen einzelnen Quellcode-Dateien geschrieben. Diese Dateien enthalten den Quellcode in der Programmiersprache, die vom Programmierer benutzt wurde, also beispielsweise C.
Ein Compiler muß jetzt jede dieser einzelnen Dateien in sogenannte Objekt-Code Dateien compilieren. Diese Objekt-Dateien enthalten dann den Maschinencode, der vom Compiler erzeugt wurde, sind aber noch nicht selbst lauffähig. Für jede einzelne Quellcode-Datei wird eine entsprechende Objektdatei erzeugt. In der Regel tragen diese Dateien die Namensendung .o.
Erst im nächsten Schritt werden die verschiedenen erzeugten Objektdateien zusammen mit eventuellen weiteren Libraries zu einer ausführbaren Datei verbunden. Dieser Vorgang wird Linken (engl. to link – verbinden) genannt. Das Ergebnis dieses Vorgangs ist die ausführbare Datei, die dann verwendet werden kann.
Der Compilier- und Linkvorgang besteht also aus vielen Einzelschritten. Damit nicht bei jedem Compiliervorgang alle diese Einzelschritte angegeben werden müssen, gibt es das Programm make. Dieses Programm erhält seine Informationen welche Dateien mit welchem Compiler wie übersetzt werden müssen und welche Objektdateien dann wie zu welcher ausführbaren Datei zusammengefügt werden sollen aus einer Datei mit Namen Makefile.
Ein Programmierer kann also neben seinem Programm ein dazu passendes Makefile erstellen, so daß alle Schritte, die für die Compilierung notwendig sind, vom Programm make ausgeführt werden können. Dazu erstellt er im Makefile bestimmte Regeln, die dann die entsprechenden Befehle enthalten, die notwendig sind um eine Regel auszuführen.
Der Name einer Regel wird dann dem Programm make als Parameter mitgegeben. Das Programm sucht dann das Makefile nach der entsprechenden Regel ab und führt die dort gefundenen Befehle aus.
make arbeitet außerdem mit den Zeitmarken der Dateien. Bei einem zweiten Compiliervorgang wird für jede Objektdatei überprüft, ob die Zeitmarke der dazu passenden Quellcode-Datei älter als die der Objektdatei ist. Nur wenn die Zeitmarke der Quellcodedatei jünger als die der Objektdatei ist, wird die Quellcodedatei erneut compiliert.
Mit Hilfe dieser Technik ist es auch für einen Nicht-Programmierer einfach möglich, komplexe Programme, die im Quellcode vorliegen, selbst zu übersetzen und zu installieren. Im Linux-Bereich haben sich dazu bestimmte Standards herausgebildet, die im weiteren Verlauf besprochen werden sollen.
Format eines Quellcode-Paketes
Quellcode-Pakete werden im Linux-Bereich immer als Tar-Archive ausgeliefert. In der Regel sind diese Archive komprimiert, damit sie schneller übertragen werden können. Ein unkomprimiertes tar-Paket trägt die Endung .tar, ein mit gzip komprimiertes Paket hat entweder die Endung .tar.gz oder .tgz. Ist das Archiv mit bzip2 komprimiert worden, so lautet die Endung .tar.bz2.
Das tar-Programm von Linux ist in der Lage mit Archiven direkt umzugehen, die mit gzip komprimiert wurden, Archive, die mit bzip2 komprimiert wurden, müssen vorher entpackt werden.
Die Befehle zum Entpacken eines Tar-Archivs lauten also
tar -xzvf Archivname.tar.gz
für ein mit gzip gepacktes Archiv und
bzcat Archivname.tar.bz2 | tar -xvf –
für ein mit bzip2 komprimiertes Archiv. Dabei ist zu beachten, daß zwischen dem Parameter f und dem folgenden Bindestrich ein Leerzeichen steht. Eine genauere Beschreibung des tar-Programms findet sich in der Vorbereitung auf die LPI102 Prüfung im Abschnitt 1.111.5 – Aufrechterhaltung einer effektiven Datensicherungsstrategie.
Moderne Versionen von tar können auch .bz2-Archive direkt entpacken. Dazu muß statt dem z ein j angegeben werden.
Als Ergebnis dieses Vorganges wird jetzt ein Verzeichnis erstellt, das den Quellcode des zu compilierenden Programmes enthält.
Erstellen des Makefiles
Ein sehr einfaches Programm enthält jetzt bereits das passende Makefile, das für die Compilierung notwendig ist. Nachdem aber heute die meisten Programme von der Existenz bestimmter Libraries abhängig sind, ist in den meisten Fällen zunächst eine genaue Prüfung der in diesem System vorliegenden Besonderheiten nötig. Dazu dient das GNU-Autoconf Paket, das einen entsprechenden Test des Systems ermöglicht und aus den entsprechenden Ergebnissen dieses Tests das Makefile erstellt.
Wenn das Verzeichnis bereits eine Datei enthält, die den Namen Makefile trägt, so ist dieser Schritt nicht mehr nötig. Fehlt diese Datei jedoch aber es existieren die Dateie Makefile.in und configure und die Datei configure ist ausführbar, dann muß das Makefile erst erstellt werden.
Dazu wird einfach das Script configure in diesem Verzeichnis aufgerufen. Der Befehl erfordert die Eingabe eines Pfades (./) um zu verhindern, daß ein anderes Programm diesen Namens benutzt wird. Er lautet also einfach
./configure
Jetzt wird das System nach allen möglichen Dingen durchsucht, die notwendig sind, um das Programm zu compilieren. Fehlen entsprechende Elemente, so wird darauf hingewiesen und kein Makefile erstellt. Sind aber alle Voraussetzungen erfüllt, so endet das configure-Script mit der Meldung
Creating Makefile
und erstellt unser Makefile. Jetzt erst kann die wirkliche Compilierarbeit beginnen.
Manuelles Verändern des Makefiles
In manchen Fällen sind noch manuelle Veränderungen am Makefile notwendig. Diese Veränderungen beziehen sich in der Regel auf Pfadangaben zu bestimmten Programmen oder Angaben, wohin das Programm nach erfolgter Compilierung installiert werden soll. Diese Variablen können zumeist in den ersten paar Zeilen des Makefiles verändert werden.
Variablen werden in Makefiles ähnlich definiert, wie in Shellscripts. Eine einfache Definition sieht beispielsweise folgendermaßen aus:
installprefix=/usr/local
Der Zugriff auf Variableninhalte erfolgt aber über eine Konstruktion mit Dollarzeichen und geschweiften Klammern, also etwa ${Variablenname}. Es könnte also folgendermaßen weitergehen:
installprefix=/usr/local
installdir=${installprefix}/foo
mandir=${installprefix}/man
confdir=${installdir}/etc
Das würde zu folgenden realen Verzeichnisnamen führen:
* installprefix=/usr/local
* installdir=/usr/local/foo
* mandir=/usr/local/man
* confdir=/usr/local/foo/etc
Wenn wir jetzt daran Veränderungen vornehmen wollen, so können wir das durch entsprechende Anpassungen an unser System tun. Um beispielsweise dafür zu sorgen, daß das Programm seine Konfigurationsdateien nicht unter /usr/local/foo/etc sucht, sondern unter /etc/foo, so verändern wir die entsprechende Zeile in
confdir=/etc/foo
Manchmal finden sich in solchen Variablen auch ganze Listen von Verzeichnissen, die z.B. nach Include-Dateien durchsucht werden sollen. Auch solche Listen können natürlich entsprechend angepasst werden, um beispielsweise mehr Verzeichnisse aufzunehmen. In der Regel werden Listenelemente durch Leerzeichen voneinander getrennt.
Aufruf von make
Wenn alle Veränderungen am Makefile abgeschlossen wurden, so kann das Programm jetzt compiliert werden. Dazu wird einfach der Befehl
make
eingegeben. Er compiliert jetzt das Programm nach der Regel, die im Makefile all genannt wurde. Der Aufruf ist also einfach eine Abkürzung für
make all
Ist dieser Befehl fehlerfrei abgearbeitet worden, dann ist das Programm jetzt compiliert. Das heißt, es liegen jetzt für jede Quellcodedatei eine Objektdatei vor und es existiert das fertige ausführbare Programm. Damit das Programm auch noch in die vorgesehenen Verzeichnisse kopiert (installiert) wird, haben die meisten Makefiles noch eine Regel, die install heisst und entsprechend mit
make install
aufgerufen wird. Dadurch werden die notwendigen Dateien in die vorgesehenen Zielverzeichnisse kopiert. Um alle Objektdateien wieder zu löschen kann der Befehl
make clean
benutzt werden, um sicherzustellen, daß bei einem zweiten Compiliervorgang alles erneut übersetzt wird.
Zusammenfassung
Nachdem ein Quellcode-Paket ausgepackt wurde müssen praktisch immer die drei einfachen Befehle
./configure
make
make install
in dem Verzeichnis ausgeführt werden, in dem der Quellcode liegt. In der Regel ist mindestens für make install das root-Recht erforderlich, denn dieser Befehl installiert das Programm ja an Orte im System, an denen niemand außer root Schreibrecht hat.
Alle Artikel zur LPIC unterliegen der GNU Free Documentation License.

Quellen, Weblinks: