Von Gert Brinkmann
Anmerkung: Ich kann leider keine Garantie dafür übernehmen, daß diese Beschreibung vollständig und korrekt ist. Aber auf jeden Fall werden einige Dinge erwähnt, die mir etwas Zeit gekostet haben, sie herauszufinden. Falls jemand diese Anleitung für nützlich hält, oder auch Verbesserungsvorschläge bzw. Korrekturen anbringen möchte, würde ich mich über Feedback freuen (E-Mail-Adresse auf der Startseite). Die aktuelle Version dieses Howtos findet sich auf www.whatis.mynetcologne.de. Desweiteren übernehme ich keine Verantwortung für Schäden (an der eigenen Person, Hardware oder Systeminstallation, ...), die auftreten, wenn man versucht, dieser Anleitung zu folgen.
Auch soll erwähnt sein, daß es inzwischen möglich sein soll, die genannte Karte unter ISDN4Linux in Betrieb zu nehmen. Den einzigen Hinweis dazu habe ich in der FAQ auf den Seiten des ISDN4Linux Projektes gefunden: "The newest Fritz! PCI card (v2.0) is now supported by a new driver, however it has not yet been tested thoroughly." Ich habe mich mit dem Thema aber noch nicht tiefergehend befasst. Nachtrag: Wenn man dies probieren möchte, ist es wichtig, nicht den "hisax"-Treiber zu verwenden, sondern den "hisax_fcpcipnp"! Dieser Treiber kann entweder durch Eintragen in /etc/modules hart verdrahtet eingeladen werden, oder alternativ erst, wenn er benötigt wird. Dafür müssen die richtigen Einträge in der /etc/modules.conf vorhanden sein. Diese werden dort aber nicht direkt eingetragen, sondern über folgenden Mechanismus (alles als Knecht root-Recht durchführen):
update-modules
. Damit wird die Datei /etc/modules.conf automatisch erstellt.Ich bekam auch den Hinweis, dass unter http://ixi.thepenguin.de/ weitere Informationen zu finden sind (Stichworte: capidrv, ippp0, vbox). Desweiteren könnte http://www.pl-berichte.de/t_netzwerk/debian-isdn.html interessant sein.
Nun aber zu der auf CAPI basierenden Lösung.
1. Fritz Treiber beschaffen und entpacken
Hier stößt man direkt auf das erste Problem. Der Fritz Treiber muß von http://www.avm.de/ gezogen werden, was schwierig ist, ohne online zu sein. Dieses Problem muß also über einen schon online fähigen Rechner gelöst werden...
Bei der im Download-Bereich der AVM-Web-Seite geforderten Produktwahl muß "FRITZ!Card PCI" ausgewählt werden. Die PCI 2.0 Karte ist nicht speziell genannt. Zum Zeitpunkt der Howto-Erstellung findet sich der Treiber unter http://www.avm.de/ftp/cardware/fritzcrd/linux/index.html auf dem AVM Server. Aktueller scheint inzwischen die URL ftp://ftp.avm.de/cardware/fritzcrd.pci/linux/. Aus einem der Verzeichnisse "suse.xy" kann die Datei "fcpci-suse*.tar.gz" gezogen werden. An dem Kürzel "suse" darf man sich nicht stören. In der Datei ist neben der für Suse vorkompilierten Version auch ein Teil des Source-Codes zum Kompilieren für andere Distributionen enthalten.
Achtung: Mir ist berichtet worden, daß es mit manchen Versionen des Treibers zu Systemabstürzen (oder Hängern) kommen kann. Angeblich hilft dann der Wechsel auf eine andere Treiberversion. Leider gibt es keine generelle Aussage, welche Version die bessere ist. Mal funktioniert die eine, mal die andere. Ich würde mit der aktuellsten Version beginnen, zu testen. Unter Woody hatte ich "fcpci-suse8.0-03.09.10.tar.gz" ohne Probleme im Einsatz.
Vielleicht liegen die Probleme aber bei debian/Sarge Usern auch woanders: Wenn ein Kernel-Modul mit einer anderen Version des gcc Compilers übersetzt wird, als es der Kernel wurde, kann es zu solchen Problem kommen. AFAIK wurde der 2.4.20-686-1 Kernel, den ich benutze, mit gcc 2.95 übersetzt. Mit
In einem Fall, der mir berichtet wurde, war im Kernel fälschlicherweise SMP Support aktiviert. Nach Ausschalten desselben stürzte der Rechner beim Laden des fcpci Moduls nicht mehr ab.
Desweiteren muß darauf geachtet werden, ob der Treiber unter Kernel 2.4 oder 2.6 eingesetzt werden soll. Neuere Versionen des fritz-Treibers (ich meine, ab SuSe9.1, vielleicht aber auch schon 9.0?) sind für Kernel 2.6 bestimmt und funktionieren nicht mehr unter Kernel 2.4. Genauso können wohl die alten Treiber nicht unter Kernel 2.6 verwendet werden. Dazu bekam ich dann noch folgende E-Mail von jemandem, der Kernel 2.4.26-2-686 unter debian/Woody einsetzte:
2. Kernel für CAPI vorbereiten
Leider ist CAPI-Unterstützung im unter debian/Woody per default installierten Kernel-2.4.18-bf2.4 nicht aktiviert. Es gibt zwei verschiedene Möglichkeiten, CAPI Unterstützung anzuschalten: Entweder per einfachem Update auf ein anderes kernel-image oder durch Selbstkompilieren des Kernels.2.1. Anderen Kernel installieren
Der Wechsel auf einen anderen Kernel ist unter debian recht einfach. Man muss sich lediglich den richtigen Kernel suchen und zu diesem dann das kernel-image und die kernel-header installieren. MitNach Installation des Kernels muß der Rechner neu gestartet werden, damit der neue Kernel aktiv ist und die spätere Fritz-Treiber-Installation in das richtige Kernel-Modul-Verzeichnis installiert wird.
2.2. Alternativ: Kernel selber kompilieren
Dieser Abschnitt des Howtos stammt noch aus der Zeit als ich nicht wusste, daß es reicht, einfach ein anderes Kernel-Image zu installieren. Für den Fall, daß jemand mit einem vorgebauten Kernel nicht glücklich wird, belasse ich diesen Abschnitt weiterhin in dieser Anleitung. Im Normalfall kann dieser Teil also übersprungen werden und mit der CAPI Installation fortgefahren werden.
Falls aber der Kernel doch selbst konfiguriert und kompiliert werden soll, so findet sich in der Datei "src.sys/capi_modules.txt" des fritz-Packets eine genauere Information, welche Kernel-Optionen eingeschaltet werden müssen:
apt-get install kernel-source-2.4.18 kernel-package tk8.3-dev
zless /usr/doc/kernel-package/README.gz
(unbedingt durchlesen!)cd /usr/src/
tar xjf kernel-source-2.4.18.tar.bz2
cd kernel-source-2.4.18
make xconfig
aufrufen, für die GUI gestützte Kernel-Konfiguration. Funktioniert dies nicht, weil vielleicht kein X-Server läuft, findet sich in dem genannten "kernel-package/README.gz" der Hinweis, wie man den Kernel in der Shell konfigurieren kann: make menuconfig
. Dafür muß das ncursesX.X-dev Packet installiert sein.make-kpkg clean
make-kpkg --revision=custom.1.0 build
make-kpkg --revision=custom.1.0 kernel_image
cd ..
dpkg -i kernel-image-2.4.18_custom.1.0_i386.deb
reboot
, um den Rechenr neu zu starten.Zu den Kernel-Einstellungen habe ich noch folgende E-Mail erhalten, die ich nicht weiter geprüft habe. Zitat:
Ich habe lange gebraucht, um herauszufinden, daß nun noch einige Packete installiert werden müssen. Speziell daß ich das Packet "isdnactivecards" benötige, obwohl die Fritz PCI 2.0 eine passive Karte ist, war ziemlich verwirrend. Vielleicht hätte ich beim Kernel-Bauen besser aufpassen müssen, wo CAPI auch in dem Untermenü für "Active ISDN cards" angeschaltet wurde.
4. fritz-Treiber kompilieren und installieren
Falls eine andere als die voreingestellte C-Compiler-Version benötigt wird (siehe Abschnitt zum fritz-Treiber-Download), so kann die Auswahl beispielsweise mit
Damit der Compiler die Kernel-Header findet, muß ggf. noch ein Eintrag in der Datei src.drv/makefile des Fritz-Packets geändert werden. Es gibt dort eine Zeile, in der die Variable KRNLINCL gesetzt wird. Dies muß auf eine der folgenden Möglichkeiten gesetzt werden:
Nach dieser ganzen Vorarbeit sollte der Treiberbau recht einfach zu erledigen sein, wenn in der Datei /usr/local/src/fritz/make.card der Eintrag für den Kartentreiber korrekt ist. Bei mir war es aber mit "CARD=fcpci" korrekt voreingestellt.
Ein unschöne Sache, die bei mir nun auftrat, war eine "unresolved symbols" Meldung des fcpci Moduls, die ein "depmod -a", das auch bei jedem Systemstart aufgerufen wird, gemeldet hat:
5. CAPI konfigurieren und starten
Nun müssen nur noch in der Datei "/etc/isdn/capi.conf" alle Zeilen auskommentiert werden, bis auf die für die Karte "fcpci":# card file proto io irq mem cardnr options fcpci - - - - - -Damit sollte CAPI gestartet werden können, was bei einem Reboot automatisch erfolgt. Ohne Neustart des Rechners geht es mit Hilfe von
capiinit stop capiinit start
6. pppd konfigurieren und starten
6.1. Konfiguration: Username, Passwort, Telefonnummer
Als letztes muß für seinen Provider (ich nenne ihn hier "foo") eine Konfigurationsdatei angelegt werden. Dafür wechselt man als User "root " nach /etc/ppp/peers/isdn/ und benutzt eine dort schon vorhandene Datei als Vorlage. Bspw:cp arcor foo
. Nun editiert man die Datei foo und passt die Werte für die Optionen "user", "password" und "number" an, die wohl ziemlich selbsterklärend sein dürften. Bei Fragen hilft vielleicht "man pppd" und "man capiplugin". Sicherheitshinweis: Das Passwort sollte nur für den ersten Test in diese Datei eingetragen werden. Da die Datei für jeden lesbar ist, kann auch jeder das Passwort sehen, der auf dem Rechner eingeloggt ist. Stattdessen sollte, wenn alles läuft, das Passwort aus dieser Datei wieder herausgenommen werden und stattdessen in eine der beiden Dateien /etc/ppp/chap-secrets oder /etc/ppp/pap-secrets eingetragen werden. Welche Datei benötigt wird, hängt von der Verbindungsart ab. Wenn man sich, so wie ich, nicht sicher ist, welche Datei die richtige ist, wird das Passwort einfach in beide Dateien eingetragen. Beispieleintrag: pppd call isdn/foo
(ggf. als user root) die Einwahl ins Internet vollziehen. Parallel dazu sollten die Ausgaben in dem Logfile "/var/log/syslog" mitverfolgt werden, um zu sehen, was passiert. Alternativ kann dieser Aufruf auch mit pon isdn/foo
abgekürzt werden. Ganz bequem ist es, wenn die Konfigurationsdatei statt /etc/ppp/peers/isdn/foo in /etc/ppp/peers/provider umbenannt wird bzw. letzteres ein Sym-Link auf die Konfigurationsdatei ist. Diese Datei wird von pon
benutzt, wenn nichts anderes angegeben wird, so dass mit einem einfachen pon
die Verbindung gestartet werden kann.
Scheint alles zu funktionieren, lediglich der Browser kann keine Web-Site finden, so muß ggf. noch der DNS-Server konfiguriert werden. Dafür gibt es die Option "usepeerdns", die in der "foo"-Konfigurationsdatei eingetragen werden sollte (Wahrscheinlich ist dieser Eintrag schon vorhanden. Wenn nicht in der Datei foo, dann vielleicht in der globalen Konfigurationsdatei /etc/ppp/options, die die default-Optionen für alle Verbindungskonfigurationsdateien aufnimmt.) Damit werden die DNS-Adressen automatisch ermittelt und in die Datei /etc/resolv.conf eingetragen. Funktioniert dies nicht, können die Domain-Name-Server manuell in /etc/resolv.conf eingetragen werden.
Da ich "on demand" online gehen möchte, also dann, wenn ich bspw. im Browser einen Link anklicke, und nach einer bestimmten "idle"-Zeit ohne Datenübertragung wieder offline sein möchte, mußte ich manuell die DNS-Einträge in der resolv.conf vornehmen. Der DNS-Lookup triggert dann das Online-Gehen des pppd an. Es schadet aber nicht, zusätzlich auch die Option "usepeerdns" einzusetzen. Dann wird die resolv.conf Datei für die Dauer der Online-Verbindung neu erstellt, so daß alle aktuellen DNS-Server eingetragen sind. Allerdings habe ich häufig das Problem, dass die erste Online-Aktion scheitert. Der Browser (oder ein anderes Programm, das die Verbindung angestoßen hat) bekommt keine Antwort. Das erste Datenpacket scheint verloren gegangen zu sein. Wenn jemand weiß, warum dies so ist und wie man dies vermeidet, wäre ich für eine Info dankbar. Vielleich hängt dies mit der Firewall zusammen, die nach dem Verbindungsaufbau jedesmal neu aufgesetzt wird?
In der Konfigurationsdatei foo für die Verbindung müssen folgende Zeilen eingesetzt werden, wenn "on demand"-Online-Gehen gewünscht ist:
pon
(siehe oben) aufgerufen werden. Allerdings wird die Online-Verbindung erst hergestellt, wenn ein IP-Packet den Weg ins Internet sucht, bspw. weil in einem Web-Browser eine URL eingegeben wurde.
Zusätzlich ist eine Anpassung des active-Filters sinnvoll. Es kann passieren, daß der eigene Rechner von außen immer wieder IP-Packete zugeschickt bekommt, die es verhindern, dass die Verbindung automatisch beendet wird. Um dies zu vermeiden, kann dem pppd angewiesen werden, bestimmte Packete bei der idle-Zeit-Zählung gar nicht zu beachten. Dies erledigt der folgende Eintrag:
poff
den pppd beenden. Laufen irrtümlicherweise mehrere pppd, so hilft ein poff -a
. Funktioniert dies nicht, so hilft normalerweise ein "killall pppd" oder "capiinit stop" (ggf. unter "root"). Wenn ps axu | grep pppd
keinen entsprechenden Eintrag ausgibt, kann man sich wohl ziemlich sicher sein, daß der Rechner wieder offline ist.
Zu letztem Punkt bekam ich inzwischen noch den Hinweis (Dank an Steffen Barszus), dass die pppd Option "nodetach" dafür sorgt, daß pppd nicht als eigener Prozeß geforkt wird, sondern an der Shell, in der man ihn startet, hängen bleibt. Damit erscheinen zum einen die debug-Ausgabe direkt in der Shell, zum anderen kann der Prozeß und damit die Online-Verbindung mit CTRL-C direkt wieder beendet werden.
6.6. Fehlermeldung "diald[207]: No devices free to call out on"
Ich bekam eine E-Mail, die ich dem weltweiten Netz nicht vorenthalten möchte:http://groups.google.com/groups?hl=en&lr=&frame=right&th=7e6aba2096f375fb&seekm=3bc1c7c4.23344708%40news.cis.dfn.de#link6
Lizenz
Dieser Text unterliegt der GNU Free Documentation License (FDL). Freie Verbreitung in modifizierter oder unmodifizierter Form ist erlaubt; Modifikationen müssen unmißverständlich gekennzeichnet sein und ebenfalls unter der FDL vertrieben werden.
Copyright (C) Gert Brinkmann
Erschienen auf Pro-Linux, letzte
Änderung 2005-05-04