Tutorial: chan_skype auf Debian Sarge

n8isch

Mitglied
Mitglied seit
22 Mrz 2005
Beiträge
275
Punkte für Reaktionen
0
Punkte
0
Zutaten:
1x debian
1x window-manager xfce
1x asterisk > 1.2.9
1x skype > 1.3 (nicht per apt sondern direkt von skype)
1x vncserver
1x chan_skype (UBUNTU!!!!!) von h++p://www2.chanskype.com/chanskype/download/packages/
oder ftp://ftp.chanskype.com/download/packages/

----------------------------

1. readme lesen! h++p://www2.chanskype.com/chanskype/download/packages/README.txt

das ist wichtig, da ich hier die dronen-accounts außen vor lasse. entweder das funktioniert unter debian nicht oder ich habe es nicht verstanden, aber nur weil ich es nicht hinbekomme will ich niemandem die möglichkeit nehmen.
alles in allem halte ich es für sinnvoll diese accounts nachträglich einzurichten und ersteinmal eine tragfähige installation zu bauen.

2. Installation:

- window-manager installieren (falls nicht schon geschehen)
ich habe mich für xfce entschieden, weil der schön schlank ist. der noch schlankere twm kam mit dem x11signaller nicht zurecht. achtung also!
Code:
apt-get install xfce4
- skype herunterladen, installieren und nicht ausführen.

Code:
wget [url]http://www.skype.com/go/getskype-linux-deb[/url]
dpkg -i skype skype_debian-1.3.0.53-1_i386.deb

- vnc installieren

Code:
apt-get install vnc-server

- Chanskype installieren

Code:
wget [url]http://www2.chanskype.com/chanskype/download/packages/chanskype-VERSIONSNUMMER-UBUNTU6.06.bin[/url] 
./chanskype-VERSIONSNUMMER-UBUNTU6.06.bin


hier sind wir fertig!

3. Fix (danke an divB) ---> laut divB seit chan_skype 1.2.9 obsolet
damit asterisk nicht beim laden von chan_skype abbricht, müssen wir für debian ein library beim start mitgeben. divB kann das aber viel besser erklären, hören wir also was er dazu sagt ;) :

divB schrieb:
Ich hab mir die Funktion aus dem Source der aktuellen libc besorgt, dieser sieht erstaunlich unspektakulär aus:

Code:
unsigned long long int gnu_dev_makedev (unsigned int major, unsigned int minor)
{
        return ((minor & 0xff) | ((major & 0xfff) << 8)
                | (((unsigned long long int) (minor & ~0xff)) << 12)
                | (((unsigned long long int) (major & ~0xfff)) << 32));
}

Nun erstelle ich einfach eine library mit dieser Funktion und linke sie dazu, die o.g. Funktion ist in libfixchanskype.c.

Code:
$ gcc -fPIC -c -Wall fixchanskype.c
$ gcc -shared -Wl,-soname,libfixchanskype.so -o libfixchanskype.so fixchanskype.o -lc

Die "Library" wird nach /usr/local/lib kopiert und Asterisk so gestartet:

Code:
LD_PRELOAD=/usr/local/lib/libfixchanskype.so asterisk -U asterisk -gcvvvvvvvv

3. Asterisk konfigurieren:


/etc/asterisk/modules.conf

Code:
load => chan_skype


/etc/asterisk/skype.conf

Code:
[general]
; general config options, default values are shown
; all but debug can go also in the device-specific sections.
debug=1             ; misc debug flags, default is 0
channels=1
context=skype-in

c'est ca.

4. chan_skype-fix (auf langsamen systemen <= k6-II 400)
da skype, wie wir später noch sehen werden, relativ oft neu gestartet werden muß, ist es unabdingbar, daß skype nicht jedesmal nachfragt, ob sich chan_skype mit skype verbinden darf. die auswahl wird auf langsamen systemen zwar gespeichert, offenbar reicht die zeit wärend dem start aber nicht aus, das wieder einzulesen, weshalb skype trotzdem bei jedem neustart noch einmal fragt. abhilfe schafft ein kleine modifikation der loadskype.sh:

Code:
...
LD_PRELOAD=
sleep 20
echo /usr/local/bin/x11signaller -I$INSIGNAL -O$OUTSIGNAL
...

relevant ist "sleep 20", die zeilen darüber und darunter geben die position an ;). jetzt schläft das script 20 sek bevor der x11signaller gestartet wird. die zeit reicht aus, um skype in ruhe seine config laden zu lassen.

5. Konfiguration von Skype

Um skype zu konfigurieren starten wir erst einmal den vncserver
Code:
vncserver :1 -geometry 1280x1000 -depth 24

danach gehen wir nach readme vor:
Code:
a. alles unnötige des wm abschalten (wallpaper, screensaver, etc)
b. console öffnen und skype mit ~: skype starten
c. username passwort angeben und "automatisch anmelden" auswählen
d. Tools -> Options
     General:  "Show emoticons" AUS
                  "Do not show main window at startup" AN
                   inactive times "Away", "Not Available" = 0
     Privacy:  "only people from my Contacts can call" oder "anyone"
                  "only people from my Contacts can start chat"
                  "Automatically pop up requests for my contact details" AUS
     Notifications:  Alles AUS
     Sounds: Alles AUS
     Sound Devices: "OSS" und "/dev/dsp"
                           sollte das nicht auszuwählen sein: root-console starten und "makedsp.sh" ausführen
     Advanced: "Check for updates automatically" AUS
                    "Close call tab after a complete call" AN
                    "Pop up chat window" AUS

Jetzt das Ganze mit "Save" speichern und ganz wichtig: Skype per close aus dem Menu beenden.


6. Alles starten:
da der vnc desktop ein wenig groß ist schließen wir den jetzt wieder:
Code:
vncserver -kill :1
zuerst starten wir asterisk neu (falls noch nicht geschehen)

Code:
LD_PRELOAD=/usr/local/lib/libfixchanskype.so asterisk -U asterisk -gcvvvvvvvv
bitte nicht vergessen die startskripte dementsprechend anzupassen.

---> laut divB seit chan_skype 1.2.9 obsolet


Code:
/usr/sbin/asterisk -f -q

wenn asterisk fehlerfrei gestartet ist können wir schonmal schauen was chanskype so macht:
Code:
asterisk -rx skype_status
die ausgabe sollte so aussehen:
Code:
        DEV         USER   CALL#  LASTFR  LASTCS  CONNST  USERST LASTDUR
-------------------------------------------------------------------------
      skype1                             0       0       0       2       1       0
Licensed channels: 1

sollte dort nicht skype1 auftauchen, nicht weiterlesen, sondern fehler suchen und hier posten ;)

dann starten wir den vncserver (etwas kleiner und weniger bunt)
Code:
vncserver :1 -geometry 300x800 -depth 8
dann verbinden wir uns mit dem client, öffnen eine console oder bauen einen shortcut auf:
Code:
/usr/local/bin/loadskypex.sh 1
dann warten wir ein wenig und schauen zu, wie sich zuerst skype öffnet, dann ein kleines fenster (der X11signaller), dann fragt skype nach, ob chan_skype skype nutzen darf. das erlauben wir und sagen, daß er nicht mehr nachfragen soll.

danach skype wieder mit close beenden.
(skype sollte nach ein paar sekunden automatisch erneut starten, wenn ich mich richtig erinnere)

nun in die asterisk CLI wechseln und den skype status erneut abfragen.

das sollte jetzt so aussehen
Code:
         DEV         USER   CALL#  LASTFR  LASTCS  CONNST  USERST LASTDUR
-------------------------------------------------------------------------
      skype1     MeinUserName         0       0       0       2       1       0
Licensed channels: 1
Bis der username dort auftaucht kann schonmal eine minute vergehen, also keine panik. laut support kann man aber schon telefonieren, wenn er dort noch nicht angezeigt wird. probiert habe ich das noch nicht.

jetzt kann man mal die extension.conf bearbeiten, in etwa in diesem stil
Code:
[skype-in]
exten=> skype1,1,dial(zap/g1/0310)

[skype-out]
exten=> 1,1,dial(Skype/any/<skypename>)

speichern, "extensions reload" und mal mit einem anderen skype-client anrufen. wenn alles gut geht sollte man im beispiel oben die kostenlose netzbetreiber-ansage hören.

wenn alles gut gegangen ist, kommt der letzte teil, der cron-job.

7. cronjob
da, wie wir alle wissen, skype rotz ist und wir das ja nur benutzen, weil unsere bekannten sich nicht zu besserem bekehren lassen :) , wird es niemanden wundern, daß es auch gar nicht richtig funktioniert:

skype wird (auch nach aussage von celliax) nach mehr als 10 minuten nichtstun instabil. wenn nun doch ein anruf reinkommt geht die prozessorlast auf 100% und der rechner macht gar nichts mehr (und das mitunter ganz schön lange). uns bleibt also nichts anderes übrig, als skype alle 10 minuten neu zu starten (das macht auch celliax so) um auf der sicheren seite zu sein.
Das ist zwar ärgerlich, aber es macht insofern nicht allzuviel, als das chan_skype sinnvollerweise den neustart verweigert, wenn man sich im gespräch befindet. so ist man halt einfach alle 10 minuten eine nicht mehr erreichbar (zur freude aller buddies, die einen incoming-sound eingestellt haben ;) ).

das machen wir mit einem kleinen cronjob (oder mit 6)

crontab -e

Code:
01 * * * * /usr/sbin/asterisk -rx "skype reload skype1" >>/var/log/asterisk/skype_reload.log 2>&1
11 * * * * /usr/sbin/asterisk -rx "skype reload skype1" >>/var/log/asterisk/skype_reload.log 2>&1
21 * * * * /usr/sbin/asterisk -rx "skype reload skype1" >>/var/log/asterisk/skype_reload.log 2>&1
31 * * * * /usr/sbin/asterisk -rx "skype reload skype1" >>/var/log/asterisk/skype_reload.log 2>&1
41 * * * * /usr/sbin/asterisk -rx "skype reload skype1" >>/var/log/asterisk/skype_reload.log 2>&1
51 * * * * /usr/sbin/asterisk -rx "skype reload skype1" >>/var/log/asterisk/skype_reload.log 2>&1


nunja, ich denke, das wars. Vielleicht kann uns ja noch jemand in das Geheimnis der Dronenbildung einweihen ;)

viel erfolg und viel spaß damit
n8|
 
Zuletzt bearbeitet:
Viel Dank für das TUT werde mich nachher dran setzten wenn ich zeit habe.
aber mal ne Frage wie soll das mit dem VNC gehen wenn man doch keine Grafische oberfläche hat?
 
das macht der server und der windowmanager. starte einfach mal vnc, verbinde dich damit und schau mal was du siehst. wenns nicht funktioniert, dann installiere xfce. den mag ich.

falls du eine karierte oberfläche bekommst und da per mauklick ein grünes menu aufgeht dann benutzt du sicherlich twm, der wie erwähnt nicht so recht funktioniert. auch dann bitte xfce installieren.
 
Kurze Anmerkungen:

1.) Warum nicht per apt?? Bringt doch nur Vorteile!

Code:
$ cat /etc/apt/sources.list
[...]
# Skype
deb http://download.skype.com/linux/repos/debian/ stable non-free
[...]

2.) Was funktioniert bez. den Dronenaccounts genau nicht? Bei mir ging da alles...

3.) Zum Window-Manager hab ich gesehn hast du eh bereits geschrieben. Ich kann nur wiederholen: NICHT twm! Deswegen nämlich, weil twm beim Starten eines Programms wartet, bis es mit einem Mausklick positioniert wurde. Wird das Programm also in VNC im Hintergrund gestartet, gibts auch keinen Klick und dementsprechend keinen Start!

Wenn man ganz mutig ist, kann man auf den Window-Manager auch ganz verzichten. Bei mir sieht das so aus:

Code:
unset SESSION_MANAGER
exec /usr/bin/X11/xterm -e '/usr/local/bin/loadskypex.sh 1'

Mir persönlich ist xfce bereits zu fett (das muss bei mir weitere 32 Pakete wegen der Abhängigkeit installieren).

4.) Danke ;-) - allerdings ist hier nicht viel mehr zu sagen. Allerdings: Glücklicherweise ist bei der neuen Version der Sourcecode dabei! D.h. wenn man chan_skype.c selbst compiliert, würde man den Fix wohl nicht mehr brauchen (hab ich aber noch nicht probiert)!

Kommen tut der Fehler, weil die libc in Debian zu alt ist und die Funktion nicht mehr bietet. Das einfachste ist es nun einfach, diese kleine libfixchanskype.so zu schreiben, die die Funktion zu Verfügung stellt und Asterisk beim Start mitlinken lassen!

Dazu ein "Achtung" was mir zum Verhängnis geworden ist: Bitte unbedingt auf 755 chmodden! Ich hab das einmal vergessen (und hatte 700). Was passiert? Asterisk startet zwar und linkt erfolgreich zur Library, weil es als root startet. Danach gibt es aber seine Rechte ab, das LD_PRELOAD befindet sich für Kinder allerdings noch immer im Environment und deswegen wollen die Kinder auch libfixchanskype dazulinken. Haben sie aber keine Rechte dazu (weil die Datei 700 ist) passiert stillschweigend gar nichts beim Starten von externen Programmen (AGI, System, Monitor, ....)

lg,
div \vec{B}
 
1. ich habe "nicht per apt" geschrieben, weil eine apt-get ohne die sources.list zu editieren eine 1.2er version von skype bereitstellt. das fiel zumindest mir nicht direkt auf, so daß ich sicherheitshalber auf skype.com verweise. aber so gehts ja auch.
2. ich weiß nicht genau, was ich mit welchen startscripts machen muß, damit der ganze kram startet. weil ich nur inen account habem hab' ichs dann gelassen.
3. das werde ich mal probieren ;)
4. das hört sich gut an. ich habe jetzt auch die *.9er version. eine source habe ich allerdings nicht bemerkt. mir fehlt allerdings auch das know-how um iregndwas mit irgendetwas zu linken ;)

danke und lg
n8|
 
NEWS NEWS NEWS NEWS!!

Hab mir das einmal genauer angesehen und grad bemerkt, der Source ist bei der 9er Version gar nicht zum Spass dabei! Die Installation compiliert chan_skype selbst!! Das finde ich vorbildlich!

Dementsprechend: Wie ich gesagt habe, würde man dann den Fix nicht mehr brauchen. Und so ist es! chan_skype.so wird so automatisch zur installierten libc gelinkt und funktioniert daher!

D.h. das mit libfixchanskype sollte man nicht mehr brauchen....
 
Kostet das Programm immer noch was? Ist die Installation auf einem V-Server möglich? Funzt das dann als sip2skype oder als skype2sip?
 
Wieso sollt es nix mehr kosten?

Das mit dem VServer müsstest einfach probieren, ich denke schon dass es funktioniert könnte aber stressig werden (verwendet Devicefiles, einen Dummytreiber und so). Kommt sicher auf die Virtualisierungstechnologie an
 
Ich habe einen billigen Starhosting V-Server. Die Anleitung im ersten Post habe ich ausprobiert - aber an irgendwas scheitert es (z.B. kriege ich den vnc-server nicht gestartet).
Nachtrag: Am liebsten würde ich es ohne diesen xfce installieren.
 
Zuletzt bearbeitet:
wenn ich jetzt einmal versuche ein Frage herauszulesen:

in der anleitung die mit dem chanskype kommt ist eine ziemlich gute anleitung, wei es mit einem schlankeren fenstermanager zu bewerkstelligen ist. READMEs sollte man trotz Anleitungen immer lesen, Dinge ändern sich.

warum der vnc nicht startet können dir am besten die logs sagen. oftmals hängt es an schriften, die nicht da stecken, wo sie erwartet werden (debian).

chanskype ist eine ziemlich wackelige angelegenheit, da können 1000Dinge schiefgehen. deshalb solltest du alles 10x überprüfen und konkret fragen, sonst kann man Dir nicht helfen. achja, die neuste skype-version wird nicht unterstützt!

lg, n8isch
 
Kostenlos!

Statistik des Forums

Themen
248,887
Beiträge
2,303,973
Mitglieder
378,565
Neuestes Mitglied
BenGradish