Diese Anleitung bezieht sich auf Uberspace 6, welches nicht weiter aktualisiert wird und Ende 2020 sein End of life (EOL) erreicht. Für neue Deployments solltet ihr Uberspace 7 nutzen. Anleitungen gibt es jetzt einheitlich und mit Support der Ubernauten im Uberspace Lab.

Einleitung

Seit Version 1.6.0 wird ein Compiler benötigt, der C++11 kann. Hierfür müsst ihr euch erst eine neuere GCC Version (4.8.x oder neuer) bauen stellt Uberspace inzwischen eine neuere Version von GCC bereit. Diese muss entsprechend aktiviert werden. Alternativ könnt ihr Version 1.4 nutzen.

In diesem Tutorial befassen wir uns mit dem IRC Bouncer ZNC. Bouncer (BNC) kann man wegen verschiedener Szenarien benutzen. Meine persönliche Motivation: Zwecks Privatsphäre benutze ich ständig einen VPN-Provider. Diese werden leider seit einiger Zeit von Freenode geblockt, da darüber wohl viel Spam versendet wird. ZNC dient mir quasi als IRC Proxy. Freenode sieht nur die IP des Uberspace Servers. Gleichzeitig hat ein Bouncer noch den Vorteil, das die Unterhaltung mitgehört wird (Buffer), und man so quasi in ein Gespräch noch einsteigen kann.

Ein Tutorial, wie man psyBNC einrichten kann, gibt es im Blog von Gehaxelt. Da dieser aber schon länger nicht mehr weiterentwickelt wird, habe ich mich nach einer Alternative umgesehen und bin so auf ZNC gestoßen. Mit der Installation und Konfiguration wollen wir uns nun befassen. Dabei gehe ich davon aus, dass ihr den Bouncer als Einziger nutzen möchtet. Sollte dies nicht der Fall sein, müsst ihr auch einen Port beantragen, damit andere Leute auf den Service zugreifen können.

Vorkentnisse

Ich erwarte zumindest minimale Vorkenntnisse für dieses Tutorial. Ihr solltet wissen, wie ihr euch per SSH auf euren Uberspace einloggt. Außerdem braucht ihr natürlich einen Uberspace, oder ein vergleichbares Hosting um euren eigenen ZNC-Bouncer zu installieren.

Weiterhin solltet ihr natürlich wissen, was IRC ist, und es auch nutzen. Sonst macht das ganze keinen Sinn.

Also los gehts.

Aktuellere Version von GCC nutzen

Im Wiki von Uberspace wird schön beschrieben, was wir machen müssen, um eine neuere Version zu nutzen. Wir nehmen die aktuellste Version vom 4.x Zweig:

$ echo 'export PATH=/package/host/localhost/gcc-4/bin:$PATH' >> ~/.bashrc
$ echo 'export LD_LIBRARY_PATH=/package/host/localhost/gcc-4/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
$ source ~/.bashrc

Nach diesen Befehlen sollte ein gcc -v eine neue Version von GCC zurückliefern. Bspw: gcc version 4.9.2 (GCC).

Installation

Zuerst loggen wir uns per SSH auf unserem Uberspace ein. Wie von Alexander in den Kommentaren empfohlen nutzen wir toast um uns ZNC herunterzuladen und zu installieren.

$ toast arm http://znc.in/

Toast führt nun automatisch den Download, die initiale Konfiguration und die Kompilierung durch. Dies kann einige Minuten dauern. Am Ende sollte das ganze so aussehen:

$ which znc
~/.toast/armed/bin/znc

ZNC ist also unter ~/.toast/armed/bin/znc installiert. Später ermöglicht uns toast auch eine einfache Aktualisierung von ZNC.

Damit wir im nächsten Schritt mit unserem präferierten IRC Client auf ZNC zugreifen können, müssen wir den BNC noch grundsätzlich konfigurieren. Dazu müssen wir das Binary mit --makeconf aufrufen. Als Konfigurationseinstellungen wählen wir größtenteils die Standardeinstellungen, indem wir diese einfach mit der Eingabetaste bestätigen. Angaben, die ihr ändern müsst sind hervorgehoben.

$ ~/znc/bin/znc --makeconf

[...]

[ ?? ] What port would you like ZNC to listen on? (1025 to 65535): 64545
[ ?? ] Would you like ZNC to listen using SSL? (yes/no) [no]: 
[ ?? ] Would you like ZNC to listen using both IPv4 and IPv6? (yes/no) [yes]: 
[ .. ] Verifying the listener...
[ >> ] ok

[...]

[ ?? ] Username (AlphaNumeric): Weishaupt
[ ?? ] Enter Password: 
[ ?? ] Confirm Password: 
[ ?? ] Would you like this user to be an admin? (yes/no) [yes]: 
[ ?? ] Nick [Weishaupt]: 
[ ?? ] Alt Nick [Weishaupt_]: wh
[ ?? ] Ident [Weishaupt]: 
[ ?? ] Real Name [Got ZNC?]: Marvin Dickhaus
[ ?? ] Bind Host (optional):
[ ?? ] Number of lines to buffer per channel [50]:

[...]

[ ?? ] Load module <chansaver>? (yes/no) [no]: 
[ ?? ] Load module <controlpanel>? (yes/no) [no]: yes
[ ?? ] Load module <perform>? (yes/no) [no]: 

[...]

[ ?? ] Launch ZNC now? (yes/no) [yes]: no

Bei Port, UsernamePassword, Nick, Alt Nick & Real Name müsst ihr natürlich eure eigenen Daten angeben.

Auf der Serverseite sind wir nun fast fertig. In der letzten Zeile haben wir no angegeben, da wir ZNC auf eine etwas andere Weise starten wollen, nämlich über die daemontools.

ZNC Überwachen und Starten

ZNC soll eigentlich immer laufen. Aber was passiert, wenn der Prozess mal crasht, oder der Server neu gestartet wird? In diesem Fall müssten wir bisher ZNC von Hand neu starten. Aber keine Angst, auch das lässt sich ganz einfach automatisieren. Dazu gibt es die daemontools, die im Uberspace Wiki noch etwas ausführlicher beschrieben werden.

$ cd ~
$ test -d ~/service || uberspace-setup-svscan
$ cat << __EOF__ > ~/bin/znc-daemon
#! /bin/sh
exec ~/.toast/armed/bin/znc --foreground --debug 2>&1
__EOF__
$ chmod +x ~/bin/znc-daemon
$ uberspace-setup-service znc-daemon ~/bin/znc-daemon
[...]
Waiting for the service to start ... 1 2 3 4 5 started!
[...]

Wir haben gerade

  • ein ~/service-Verzeichnis (falls es noch nicht existiert hat) eingerichtet,
  • ein Script zum starten von ZNC geschrieben,
  • das Script ausführbar gemacht, und
  • den Deamon gestartet.

ZNC wird nun durch einen Supervise Prozess gestartet und überwacht. Immer wenn der Prozess abstürzt, oder der Server neu gestartet wird, startet auch ZNC wieder ohne weiteres zutun.

Abschließend werfen wir noch einen Blick auf das Logfile, damit wir sichergehen können, das alles Okay ist. Das könnte ungefähr so aussehen.

$ cat ~/service/znc-daemon/log/main/* | tai64nlocal | less
2014-10-27 11:34:56.281277500 Checking for list of available modules... 
2014-10-27 11:34:56.789967500 Opening config [/home/wh/.znc/configs/znc.conf]... 
2014-10-27 11:34:56.833400500 Binding to port [64545]... 
2014-10-27 11:34:56.833659500 Loading user [Weishaupt]
2014-10-27 11:34:56.834257500 Loading user module [controlpanel]... [/home/wh/.toast/armed/lib/znc/controlpanel.so]
2014-10-27 11:34:56.854248500 Staying open for debugging [pid: 5418]
2014-10-27 11:34:56.854340500 ZNC 1.4 - http://znc.in

ZNC ist nun konfiguriert. Da wir den Bouncer als einziger nutzen, spare wir uns die Öffnung eines Ports zu beantragen. Stattdessen nutze wir wie von Uberspace empfohlen einen SSH Tunnel.

SSH Tunnel zum Uberspace aufbauen

Bei der Konfiguration habe ich angegeben, dass sich ZNC sich nur an localhost:64545 binden soll. Um auf diesen Port zuzugreifen leite ich nun einen lokalen Port auf den Port von Uberspace weiter. Das muss nicht unbedingt die gleiche Portnummer sein.

ssh -f -L 65432:localhost:64545 $USER@$SERVER.uberspace.de -N

Mit -f weise ich ssh an, dass es im Hintergrund laufen soll. mit -L 65432:localhost:64545 binde ich den lokalen Port 65432 an localhost:64545 des entfernten Servers. Anschließend gebe ich den entfernten Server an, auf den ich mich per SSH verbinden will. Hier müsst ihr $USER mit eurem Benutzernamen ersetzen, $SERVER mit dem Uberspace Server (z.B. Bernd als Benutzer und Cepheus als Server). Schließlich gebe ich mit -N an, dass auf dem entfernten Server keine Kommandos ausgeführt werden sollen. Ich habe ja nur die Absicht, einen Port weiterzuleiten. Nun solltet ihr euch mit eurem Lokalen Rechner auf Port 635432 zu ZNC verbinden können.

ZNC Konfigurieren

In eurem Lieblings IRC Client verbindet ihr euch zu ZNC wie zu jedem anderen IRC Netzwerk auch:

Server: localhost
Port: 65432

Das sollte dann ungefähr so aussehen: irc: verbinde zum Server localhost/65432… irc: Verbindung zu localhost/65432 (127.0.0.1) hergestellt Password required irc.znc.in (irc.znc.in): *** You need to send your password. Try /quote PASS :

Nach der Eingabe des Passworts mit dem vorher konfigurierten Benutzer, also in meinem Fall /quote PASS Weishaupt:TotalTollesPasswort haben wir uns erfolgreich zu unserem ZNC Bouncer verbunden. Das Passwort könnt ihr in den meisten Clients auch schon in der Konfiguration angeben.

*status (znc@znc.in): You have no networks configured. Use /znc AddNetwork &lt;network&gt; to add one.
 - Welcome to ZNC -

Abschließend wollen wir ZNC natürlich noch mit einem IRC Netzwerk verbinden. Hier beispielhaft freenode.

/msg *status AddNetwork freenode
/msg *status JumpNetwork freenode
/msg *status AddServer kornbluth.freenode.net +7070

Das + vor der Portnummer ist dazu da, um ZNC mitzuteilen, dass die Verbindung per SSL gesichert werden soll. Der IRC Server muss das natürlich auch können.

Fertig. Das war’s. Ihr solltet nun verbunden sein. Jedes Mal, wenn ihr eure Verbindung zu ZNC trennt (z.B. /quit), erhält ZNC die Verbindung zu dem gewählten Server trotzdem aufrecht. Natürlich lässt sich ZNC noch weiter konfigurieren. Hierbei hilft das ZNC Wiki als erste Anlaufstelle weiter.

ZNC aktualisieren

Sollet ihr dieser Anleitung gefolgt sein, so ist ein Update recht einfach.

Ein Backup machen

Sollte etwas schief gehen, so ist ein Backup immer hilfreich. Alle wichtigen Dinge sind im Konfigurationsordner in eurem Home-Verzeichnis unter ~/.znc/. Das Backup ist also schnell gemacht:

tar cfvj znc-backup.tar.gz ~/.znc

Aktualisierung

Toast nimmt uns die komplette Arbeit ab.

Beim Update von Version 1.4 auf eine neuere bitte den Hinweis ganz oben beachten.

Zuerst aktualisieren wir ZNC

$ toast upgrade znc

Nun müssen wir noch einmal unseren Service neu starten, damit die neue Version aktiv wird.

$ svc -du ~/service/znc-daemon

Fertig. 🙂 Schon seid ihr wieder auf dem aktuellen Stand. Wenn ihr euch normal mit eurem Bouncer verbinden könnt, dann könnt ihr das Backup auch noch löschen.

$ rm znc-backup.tar.gz

Installation nach toast überführen

Solltet ihr einer früheren Version dieser Anleitung gefolgt sein, so ist es nicht schwer, diese zu überführen und künftig toast zu nutzen.

$ toast arm http://znc.in/

Nun müsst ihr noch in ~/bin/znc-daemon exec ~/znc/bin/znc auf exec ~/.toast/armed/bin/znc ändern und anschließend den Service neu starten.

$ svc -du ~/service/znc-daemon

Wenn die Verbindung klappt könnt ihr den alten Ordner löschen.

$ rm ~/znc/ -r