Dieses HOWTO befasst sich mit der Einrichtung von ISDN unter Linux.

Ein ähnliches HOWTO habe ich bereits im Netz gefunden. Leider finde ich es nicht mehr auf Anhieb. Bisher hab ich auch kein HOWTO gefunden, dass sich direkt mit Slackware befasst. Also hab ich mir mal die Mühe gemacht. ;-)

Arbeitsmaterial:
  Software:
    Linux 2.6.7
    Slackware 10.0
     capi4k-utils-2004-08-10
     mISDN-CVS-2004-08-29
     fxusb-suse9.1-3.11-04

  Hardware:
    AVM Fritz!X USB v3.0

  Sonstiges:
    Da mein CD-Laufwerk nach /mnt/cdrom gemountet wird, nutze ich in alle Beispielen auch diesen Pfad.
    Eventuell musst du den Pfad bei dir auf deinen Mountpoint ändern.

Der Kernel 2.6.7 wird bei Slackware 10.0 bereits als optionale Komponente mitgeliefert. Das tgz befindet sich auf der zweiten CD im Verzeichnis testing/packages/linux-2.6.7. Da auch die Alsa-Treiber aktuallisiert werden müssen, ist ein upgradepkg /mnt/cdrom/testing/packages/linux-2.6.7/*.tgz am einfachsten.

Aber vorher bitte /mnt/cdrom/testing/packages/linux-2.6.7/kernel-headers.WARNING lesen!

Ist kein aktueller Kernel ohne Download verfügbar, kann man sich einen von http://www.kernel.org downloaden.

Die capi4k-utils können unter ftp://ftp.in-berlin.de/pub/capi4linux heruntergeladen werden.

Unter ftp://ftp.isdn4linux.de/pub/isdn4linux/CVS-Snapshots findet man die aktuellen mISDN-Tarballs.

Ob man einen Treiber von der AVM-Website benötigt, kann man unter http://www.avm.de/de/Download/index.inhalt.php3 prüfen. Dann kommt man automatisch zum aktuellen Paket. Lasst euch nicht von dem SuSE im Namen irritieren. Der Treiber funktioniert auch unter anderen Systemen.

Jetzt, wo du alles hast, was du an Software brauchst, können wir uns ans Einrichten machen.

Wenn du dir den Kernel direkt von http://www.kernel.org besorgt hast, muss noch folgendes gemacht werden.

Zuerst muss der Kernel nach /usr/src entpackt und dann nach /usr/src/linux verlinkt werden.

  # tar -xjvf linux-<Version>.tar.bz2 -C /usr/src
oder
  # tar -xzvf linux-<Version>.tar.gz -C /usr/src

  # cd /usr/src
  # ln -sf linux-<Version> linux

Jetzt geht es richtig los.

Zuerst werden ein paar Dateien aus den mISDN-Sourcen in die Kernel-Sourcen kopiert. Nennen wir es mal gepatcht werden. ;-)

  # tar -xjvf mISDN-CVS-<Version>.tar.bz2
  # cd mISDN-CVS-<Version>
  # ./std2kern -k /usr/src/linux

Jetzt könne wir die capi4k-utils installieren.

  # tar -xzvf capi4k-utils-<Version>.tar.gz
  # cd capi4k-utils
  # make menuconfig
  # make subconfig

  (Das muss nicht immer gemacht werden. Schaden tut es auf keinen Fall.
  Wenn man es nicht ausführt, kann es bei der Installation nur manchmal Probleme geben.)

  # make
  # mkdir -p /tmp/build-capi4k/dev


  (Das ist notwendig, damit die Gerätedateien auch erstellt werden.)

  # make DESTDIR=/tmp/build-capi4k install

  (Hier arbeiten wir mit DESTDIR, damit wir schön ordentlich ein tgz Paket für Slackware erstellen können.
  Möchtest du das nicht, kannst du die nächsten Befehle weglassen und nur make install eingeben.)

  # cd /tmp/build-capi4k
  # makepkg capi4k_utils-<Version>-`uname -m`-1.tgz


  (Bei der Versionsnummer nehme ich nicht 2004-08-10, sondern 2004.08.10 oder
  20040810, da ich die vielen - eher irritierend finde.)

  # installpkg capi4k_utils-<Version>-`uname -m`-1.tgz

Als nächsten Schritt konfigurieren wir den Kernel. Es werden nur Optionen beschrieben, die für ISDN notwendig sind. Eventuell musst du noch weitere von dir benötigte Optionen aktivieren.

  # cd /usr/src/linux
  # make menuconfig


  (Möchte man lieber mit X arbeiten, kann man auch make xconfig verwenden.)

  Bus options (PCI, PCMCIA, EISA, MCA, ISA)    --->
    [*] ISA support
  Device Drivers   --->
    Plug and Play support    --->
    [*] Plug and Play support
  Networking support   --->
      <M> PPP (point-to-point protocol) support
      [*]   PPP multilink support (EXPERIMENTAL)
      [*]   PPP filtering
      <M>   PPP support for async serial ports
      <M>   PPP support for sync tty ports
      <M>   PPP Deflate compression
      <M>   PPP BSD-Compress compression
      <M>   PPP over Ethernet (EXPERIMENTAL)
      <M>   PPP over ATM
    ISDN subsystem
      <M> ISDN support
      <M>   CAPI2.0 support
      [*]   CAPI2.0 Middleware support (EXPERIMENTAL)
      <M>   CAPI2.0 /dev/capi support
      <M>      CAPI2.0 filesystem support
      Modular ISDN driver    --->
        <M> Support modular ISDN driver
        [*]    Support for AVM Fritz!Cards


Einträge, die mit <M> markiert sind, werden als Module und Einträge mit [*] fest in den Kernel kompiliert. Manche Module können auch fest in den Kernel einkompiliert werden. Dazu muss man nur zwei Mal <Select> auswählen, bzw. zwei Mal die Leertaste drücken.

Hat man alles fertig eingerichtet, geht man so oft auf <Exit>, bis sich eine Messagebox mit folgendem Inhalt öffnet.

  Do you wish to save your new kernel configuration?
  < Yes > < No >

Hier antworten wir mit < Yes >. Danach können wir nur den Kernel kompilieren.

  # make bzImage
  # make modules
  # make modules_install


Danach können wir die Dateien, die zum Booten notwendig sind nach /boot kopieren.

  # cp .config /boot/config-isdn-<Version>
  # cp System.map /boot/System.map-isdn-<Version>
  # cp arch/i386/boot/bzImage /boot/vmlinuz-isdn-<Version>
  # cd /boot
  # ln -sf config-isdn-<Version> config
  # ln -sf System.map-isdn-<Version> System.map
  # ln -sf vmlinuz-isdn-<Version> vmlinuz


Jetzt geht es an die einfachste Arbeit. Den AVM-Treiber installieren.

Für den Treiber werden wir kein tgz Paket erstellen. Es wird nämlich nur ein Kernelmodul nach /lib/modules/`uname -r`/misc kopiert. Würde man hier ein tgz Paket erstellen, könnte man auch mit Kanonen auf Spatzen schießen. ;-)

  # cd /zum/Paket/<AVM-Karte>-<Version>.tar.gz
  # tar -xzvf <AVM-Karte>-<Version>.tar.gz
  # cd fritz
  # make
  # make install


Wenn du unbeding ein tgz Paket erstellen möchtest, sind noch folgende Schritte notwendig.

  # mkdir -p /tmp/build-<AVM-Karte>/lib/modules/`uname -r`/misc
  # mv /lib/modules/`uname -r`/misc/<AVM-Karte>.ko /tmp/build-<AVM-Karte>/lib/modules/`uname -r`/misc/
  # cd /tmp/build-<AVM-Karte>
  # makepkg <AVM-Karte>-<Version>-`uname -m`-1.tgz


  (Bei mir würde das Paket fxusb-suse9.1-3.11-04-i686-1.tgz heißen.
  Kein guter Name für pkgtool. Daher würde ich das tgz Paket fxusb-3.11-i686-1.tgz nennen.)

  # installpkg <AVM-Karte>-<Version>-`uname -m`-1.tgz

Jetzt kommen die systemseitigen Änderungen.

Zuerst sollte unter /dev das Verzeichnis capi erstellt werden.

  # mkdir /dev/capi

Jetzt fügen wir noch in die /etc/fstab eine Zeile für capifs ein.

  capifs   /dev/capi   capifs   defaults   0   0

Um beim Systemstart alle benötigten Module zu laden, habe ich folgende Zeilen ans Ende der /etc/rc.modules angehängt.

  # ISDN
  for module in capi mISDN_core mISDN_l1 mISDN_l2 l3udss1 mISDN_capi mISDN_isac <AVM-Karte> ; do
    /sbin/modprobe ${module}
  done


Alternativ kann man diese Zeile auch in die /etc/rc.d/rc.local eintragen.

Nun muss noch eine Konfigurationsdatei für deinen ISP (Internet Service Provider) angelegt werden. Vorlagen dafür findet man bereits unter /etc/ppp/peers/isdn.

Da ich zur Einwahl ins Internet Arcor verwende, musste ich nur die bereits bestehende Datei abändern.

Wir gehen jetzt mal davon aus, dass die Einstellungen in den Beispielkonfigurationen bereits okay sind. Also müssen nur noch die Zeilen "user", "password" und "number" korrigiert werden.

  user <Dein Benutzername>
  password <Dein Passwort>
  number <Einwahlnummer>


Und jetzt geht es zum letzten Punkt. Wir müssen noch ein Skript für die Einwahl und das Auflegen erstellen. Wir machen uns etwas mehr Arbeit. Dafür haben wir dann auch etwas Komfort.

  #! /bin/sh
  # Einwahl
  if [ "$1" == "" ] ; then
    # Ich will standardmäßig über Arcor online gehen.
    DEFAULT=arcor
  else
    # Es muss natürlich geprüft werden, ob der entsprechende ISP angelegt ist.
    if [ -f /etc/ppp/peers/isdn/"$1" ] ; then
      DEFAULT="$1"
    else
      echo "Der gewünschte Provider ist nicht angelegt!"
      exit 1
    fi
  fi

  if [ -f /etc/resolv.conf ] ; then
    cp /etc/resolv.conf /etc/.resolv.conf.tmp
    echo "nameserver 145.253.2.81" >> /etc/resolv.conf
    echo "nameserver 145.253.2.203" >> /etc/resolv.conf
  else
    echo "nameserver 145.253.2.81" > /etc/resolv.conf
    echo "nameserver 145.253.2.203" >> /etc/resolv.conf
  fi

  pppd call isdn/"$DEFAULT"



  #! /bin/sh
  # Auflegen
  kill -SIGHUP `cat /var/run/ppp0.pid`

  if [ -f /etc/.resolv.conf.tmp ] ; then
    rm /etc/resolv.conf
    mv /etc/.resolv.conf.tmp /etc/resolv.conf
  else
    rm /etc/resolv.conf
  fi


Wenn auch normale Benutzer sich ins Internet einwählen dürfen, müssen die Gruppenrechte noch angepasst werden.

Hierfür habe ich mir als Vorlage die Gerätedateie /dev/ttyS0 ausgesucht, da sie ein externes Modem repräsentiert.

  # chgrp uucp /etc/ppp/peers/isdn/<ISP>
  # chmod g+r /etc/ppp/peers/isdn/<ISP>


In der Datei /etc/group muss noch der/die entprechende(n) Benutzer eingetragen werden.

  uucp::14:uucp,<Benutzer1>,<Benutzer2>

Man kann den Benutzern auch anders einer neuen Gruppe zuordnen.

  # usermod -G <Grupp1>,<Grupp2> <Benutzer>

Das Problem an diesem Befehl ist, dass man alle Zusatzgruppen nochmal mit angeben muss.

Der wirklich letzte Schritt ist UID beim /usr/sbin/pppd zu setzen.

  # chmod u+s /usr/sbin/pppd