Aufmacher Artikel

Fernsehdoktor und Kernprobleme

Dr. Linux

01.09.2001 Mit dem Erscheinen neuer Linux-Distributionen häuft sich in den Newsgroups die Frage: "Was bedeutet eigentlich char-major-[1…255]?" Die Antwort auf diese und andere Fragen gibt der folgende Artikel.

Dr. Linux:

Komplizierte Organismen, wie Linux-Systeme es nun einmal sind, haben so ihre ganz eigenen Wehwehchen. Dr. Linux: beobachtet die Patienten in den Linux-Newsgruppen, stellt an dieser Stelle Rezepte für aktuelle Probleme aus und alternative Heilmethoden vor.

Welche Library?

Ich wollte auf meinem System ein neues Netscape installieren, bekomme aber Fehlermeldungen über fehlende Shared Libraries:

$ ./netscape-installer
 error while loading shared libraries: cannot open shared library: cannot
 load shared object file: No such file or directory

Wie bekomme ich heraus, welche Bibliotheken gebraucht werden?

Dr. Linux: Wenn Anwender Schwierigkeiten mit fehlenden Shared Libraries bekommen, sind folgende Problem-Konstellationen denkbar:

  • Sie installieren eine Programm-Version, die so neu ist, dass die benötigte Bibliotheksversion (noch) nicht im System verhanden ist.
  • Im Gegenteil kann das Programm so veraltet sein, dass Sie die zugehörigen Library-Versionen auf dem aktuellen System nicht finden.
  • Auch der Fall, dass die fehlende Bibliothek tatsächlich nicht installiert ist, tritt auf. Um festzustellen, welche Bibliotheken fehlen, benutzt man den Befehl ldd Programm. Das nicht startende Programm geben Sie dabei am besten mit Pfadnamen an.

Wenn Sie die ldd-Anfrage auf die Datei ./netscape-installer richten, führt das Ergebnis allerdings nicht sofort ans Ziel:

not a dynamic executable (nicht dynamisch ausführbar)

Gehen wir also etwas systematischer vor. Ein Blick ins Installer-Verzeichnis gibt folgende Auskunft:

perle@maxi:~/netscape-installer > ls -l
 total 172
 -rw-r--r--    1 perle    users        4725 Nov 22  2000 README
 -rw-r--r--    1 perle    users        7671 Dec  2  2000 config.ini
 -rw-r--r--    1 perle    users        2206 Dec  2  2000 installer.ini
 -rwxr-xr-x    1 perle    users       19308 Nov 22  2000 license.txt
 -rwxr-xr-x    1 perle    users        1521 Nov 22  2000 netscape-installer
 -rwxr-xr-x    1 perle    users      126032 Nov 22  2000 netscape-installer-bin

Zunächst einmal wollen wir wissen, um was für Dateien es sich handelt. Dazu benutzen wir das Kommando file, das Dateitypen identifiziert und das Ergebnis gleich auf der Kommandozeile ausgibt. Der Aufruf ist denkbar einfach:

perle@maxi:~/netscape-installer > file netscape-installer
 netscape-installer: Bourne shell script text

Es handelt sich bei dieser Datei also nicht um ein Binärprogramm, sondern um ein Shell-Skript, das den eigentlichen, übersetzten Netscape-Code erst startet. Dieser versteckt sich in netscape-installer-bin, was uns das Kommando file bestätigt:

perle@maxi:~/netscape-installer > file netscape-installer-bin
 netscape-installer-bin: ELF 32-bit LSB executable, Intel 80386, version 1,
 dynamically linked (uses shared libs), stripped

Dass sich hinter ausführbaren Dateien ein Skript verbirgt, dessen Inhalt Sie sich mit einem beliebigen ASCII-Editor ansehen können, kommt recht häufig vor. Bei der Auflistung eines Verzeichnisses geht jedoch durchaus nicht sofort eindeutig hervor, ob es sich um ein Skript bzw. ein Binärprogramm handelt, da Dateinamenerweiterung wie z. B. .bat für Linux-Skripte unüblich sind. Nur manchmal werden in der Skriptsprache Perl geschriebene Programme mit .pl und Shell-Skripte mit .sh gekennzeichnet.

Bleibt noch zu demonstrieren, was der Befehl ldd ausgibt, wenn er auf ein kompiliertes Programm angewendet wird:

perle@maxi:~ > ldd ~/netscape-installer/netscape-installer-bin
         libgtk-1.2.so.0 => /usr/lib/libgtk-1.2.so.0 (0x40025000)
         libgdk-1.2.so.0 => /usr/lib/libgdk-1.2.so.0 (0x40155000)
         libgmodule-1.2.so.0 => /usr/lib/libgmodule-1.2.so.0 (0x4018c000)
         libglib-1.2.so.0 => /usr/lib/libglib-1.2.so.0 (0x4018f000)
         libdl.so.2 => /lib/libdl.so.2 (0x401b4000)
         libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x401b8000)
         libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x401c6000)
         libnsl.so.1 => /lib/libnsl.so.1 (0x402a9000)
         libutil.so.1 => /lib/libutil.so.1 (0x402bf000)
         libresolv.so.2 => /lib/libresolv.so.2 (0x402c2000)
         libm.so.6 => /lib/libm.so.6 (0x402d5000)
         libstdc++-libc6.1-1.so.2 => /usr/lib/libstdc++-libc6.1-1.so.2 (0x402f4000)
         libpthread.so.0 => /lib/libpthread.so.0 (0x4033c000)
         libc.so.6 => /lib/libc.so.6 (0x40352000)
         libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0x4046f000)
         /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Fehlt auf Ihrem System z. B. die libm.so.6, so liefert ldd die Meldung => not found anstelle des Pfades zur Library:

[…]
         libresolv.so.2 => /lib/libresolv.so.2 (0x402c2000)
         libm.so.6 => not found
         libstdc++-libc6.1-1.so.2 => /usr/lib/libstdc++-libc6.1-1.so.2 (0x402f4000)[…]

Ich glotz' TV

Ich benutze Xawtv zum Fernsehen auf meinem Linux-System. Nun hätte ich die TV-Programme gerne in einer bestimmten Reihenfolge im Channel Window angezeigt. (Das ist das Fenster, das die verfügbaren Programme zur Auswahl per Mausklick präsentiert.) Mit dem Channel Editor ist das eine mühselige Arbeit, da alle Details wie Kanäle und Sendernamen nochmal eingegeben werden müssten. Eine Konfigurationsdatei namens Xawtv.config o. ä. kann ich im System nicht finden.

Abbildung 1

Abbildung 1: Xawtv im Einsatz

Dr. Linux: Wenn ein Linux-Anwender eine Software individuell konfiguriert hat, liegt die zugehörige Konfigurationsdatei (fast) immer in seinem Home-Verzeichnis. Normalerweise werden solche Dateien und Verzeichnisse als Dot-Dateien angelegt. Das sind Dateien/Verzeichnissse, deren Namen ein Punkt (.) vorangestellt ist. Sie werden auch als versteckte Dateien bezeichnet, da sie in Datei-Managern, aber auch von ls nicht ohne Weiteres angezeigt werden.

Wenn Sie auf einer Kommandozeile den Befehl ls ("(auf)listen") mit der Option a wie alle absetzen, bekommen Sie auch die Punkt-Dateien präsentiert. Das Flag l liefert zusätzlich eine lange Ausgabe, die mehr Informationen bietet.

perle@maxi:~ > ls -al 
 total 1876
 drwx——   44 perle    users        4096 Jul  2 16:25 .
 drwxr-xr-x    7 root     root         4096 Jun 26 14:11 ..[…] 
 -rw-r--r--    1 perle    users        1090 Jul  2 15:06 .xawtv[…] 
Abbildung 2

Abbildung 2: Rechts zeigt der Konqueror versteckte Dateien an, links nicht

Natürlich gibt es auch bei allen Datei-Managern eine Möglichkeit, sich die versteckten Dateien anzeigen zu lassen. Im Konqueror von KDE 2.1.x geht das beispielsweise über Ansicht / Versteckte Dateien anzeigen (Abbildung 2).

Die Konfigurationsdatei für Xawtv heißt schlicht .xawtv und lässt sich in einen beliebigen Editor laden.

Ihr Aufbau ist einfach und übersichtlich. Hinter einigen Konfigurationanweisungen stehen Sender und Sendeplätze, die Sie bereits eingerichtet haben, untereinander. Mittels Editor-Funktionen wie Ausschneiden und Einfügen erledigen Sie das Ändern der Programm-Reihenfolge sehr schnell.

Bei dieser Gelegenheit lassen sich auch alle "überflüssigen" Sender auskommentieren. (Listing 1 zeigt ein Beispiel.)

Wenn Sie diese irgendwann doch wieder aktivieren möchten, entfernen Sie einfach das Kommentarzeichen (#), und der Sender steht zur Verfügung, ohne dass Sie einen lästigen Suchlauf starten bzw. Xawtv neu konfigurieren müssen.

Listing 1

Auszug aus der

~/.xawtv
[…]
 [defaults]
 norm = PAL
 input = Television
 capture = over[…]
 [BBC]
 channel = SE14
 [CNN]
 channel = SE12
 # Kommentare, denen ein # vorangestellt
 # ist, werden nicht weiter beachtet.
 #
 #[DSF]
 #channel = S23
 [PHOENIX]
 channel = SE19
 [n-tv]
 channel = SE5
 [N24]
 channel = S25[…]

Modulare Probleme

Ich bekomme immer die Fehlermeldung

modprobe: Couldn't find module char-major-108

Leider weiß ich nicht, wie ich die Fehlerbehebung angehen soll, denn mir ist nicht bekannt, was char-major-Ziffer überhaupt bedeuten soll. Gibt es irgendwo eine Übersicht darüber?

Dr. Linux: So eine Meldung tritt u. a. gern nach einem System-Crash oder nach einem fehlerhaften Update beim Booten und bei Programmaufrufen auf. Die angegebene besagt, dass das Kernel-Modul für PPP (Point to Point Protocol) nicht gefunden und deshalb nicht geladen wurde.

Die Dokumentation hierzu befindet sich in der Datei /usr/src/linux/Documentation/devices.txt und gehört zur Kernel-Dokumentation. Diese ist auf Ihrem System nur vorhanden, wenn Sie die Sourcen des Kernels auf Ihrem System installiert haben. Da diese sehr umfangreich sind, werden sie bei einer Standard-Installation meist nicht automatisch im System abgelegt.

Die Kernel-Sourcen für Ihr aktuelles System befinden sich bei den bekannten Distributionen auf dem Installationsmedium. Von dort können sie je nach System mit YaST (SuSE), gnorpm, rpm oder apt-get (Debian) nachinstalliert werden. Im Internet finden Sie als tar.gz oder tar.bz2 gepackte Kernel-Archive u. a. unter http://www.kernel.org/.

Wer sich keine Sorgen um Onlinezeiten machen muss, kann die neueste Version der Dokumentation auch auf der Web-Seite http://www.kernel.org/pub/linux/docs/device-list/devices.txt nachlesen. Per FTP lässt sie sich auch separat ( ftp://ftp.kernel.org/pub/linux/docs/device-list/) herunterladen.

Die Datei devices.txt führt auf, welches Gerät sich hinter einer bestimmten Nummer versteckt. Das Dokument ist englischsprachig, aber dank seiner Listenform sehr übersichtlich.

Hinter der Nummer in der ersten Spalte ist der Typ aufgeführt: char steht für Character-Devices und block für die Block-Devices.

Listing 2

Ins Deutsche übersetzter Auszug aus der Datei

devices.txt
[…]
 108 char       Geräteunabhängige PPP-Schnittstelle
                  0 = /dev/ppp          Geräteunabhängige PPP-Schnittstelle
     block      Compaq Next Generation Drive Array, fünfter Controller
                  0 = /dev/cciss/c4d0   Erstes logisches Laufwerk, ganze Diskette
                         16 = /dev/cciss/c4d1   Zweites logisches Laufwerk, ganze Diskette[…]
                  240 =/dev/cciss/c4d15 16tes logisches Laufwerk, ganze Diskette
                Die Partitionen werden wie Mylex DAC960 behandelt
                 (siehe Major-Nummer 48), wenn man von der Obergrenze von 15
                 möglichen Partitionen absieht.[…]

Geduld ist mein zweiter Vorname

Es kommt gelegentlich vor, dass ich mich bei der Passwort-Eingabe vertippe. Dann dauert es viel zu lange, bis ein neuer Login-Prompt erscheint. Kann diese Wartezeit verkürzt werden?

Dr. Linux: Bei Systemen, die ein hohes Maß an Sicherheit bieten wollen, kann der Timeout bis zum nächsten Login-Prompt schon sehr lang sein. Die Zeit, die ein Bösewicht benötigt, um verschiedene Passworte auszuprobieren, steigt damit erheblich an.

Wie hoch das Sicherheitsbedürfnis für einen bestimmten Rechner ist, bestimmt der Superuser. In der Datei /etc/login.defs schreibt die Zeile

FAIL_DELAY Ziffer

fest, wieviele Sekunden die Pause zwischen zwei Login-Versuchen lang sein soll.

Allerdings hilft auch der längste Timeout nichts gegen Benutzer, die ein Passwort verwenden, das einfach zu erraten ist bzw. auf einem Zettelchen am Monitor klebt…

Glossar

Shared Libraries

Shared Libraries zu Deutsch gemeinsam genutzte Bibliotheken enthalten Standardfunktionen, die von vielen Programmen benutzt werden, z. B. für die Bildschirmausgabe. Sie werden einmal geladen, wenn ein Binärprogramm sie benötigt, und können dann auch von anderen Programmen benutzt werden.

auskommentieren

In Skripten und vielen Konfigurationsdateien besteht die Möglichkeit, Zeilen vom einlesenden Programm ignorieren zu lassen, indem das Zeichen # an den Anfang einer Zeile gesetzt wird. Damit können Sie Erklärungen in eine Datei einzufügen, ohne dass ihre Funktion beeinträchtigt wird. Diese Zusatzinformationen bleiben weiterhin für den Menschen sichtbar, werden bei der "maschinellen" Auswertung der Datei aber ignoriert.

Modul

Ein Treiber, der erst bei Bedarf in einen (modularisierten) Kernel geladen wird. Der Vorteil eines solchen Kernels im Gegensatz zum monolithischen Kernel, der alle Treiber fest eingebunden hat, ist, dass nur benötigte Treiber zur Laufzeit geladen werden und im nicht gebrauchten Zustand keinen Speicherplatz belegen.

Sourcen

Oft auch Quellcode, Quelltext oder kurz Quellen genannt. Der Text, den ein Programmierer (in einer Programmiersprache wie z. B. C++) geschrieben hat. Erst durch Compiler genannte "Übersetzungsprogramme" wird aus diesem von Menschen lesbaren Text ein binäres Programm bzw. eine von der Maschine ausführbare Datei.

Character-Devices

Ein Character-Device, auch zeichenorientiertes Gerät genannt, wird sequentiell (der Reihe nach) gelesen und geschrieben, d. h., die Ein- und Ausgaben erfolgen byteweise. Eine serielle Schnittstelle ist z. B. ein zeichenorientiertes Gerät.

Byte

Speicher ist in Speicherzellen unterteilt, die entweder den Wert 0 oder 1 enthalten. Eine solche Speicherzelle bzw. die in ihr gespeicherte Information heißt Bit. Mehrere Bits können in Einheiten wie Byte, Wort oder Langwort zusammengefasst werden: Ein Byte beispielsweise entspricht acht Bit.

Block-Devices

Auf ein solches blockorientiertes Gerät werden Daten blockweise geschrieben bzw. auch so von dort gelesen, wobei das Gerät bestimmt, wie groß diese Blöcke sind. Festplatten oder Diskettenlaufwerke sind typische Beispiele für blockorientierte Geräte. Sie können wahlweise auf diese Geräte zugreifen, indem Sie sie mit dem mount-Befehl in den Dateibaum ein- und sie später mit umount wieder aushängen.

Tip a friend    Druckansicht beenden Bookmark and Share
Kommentare