Nerdstuff: IRCnet – Eggdrop „bauen“

IRCnetok, alle „nicht-nerds“ jetzt bitte einmal weg schauen.
seit einigen tagen graben wir hier in unseren alten datenbestaenden und scripte-kisten und buddeln immer wieder alte schaetzchen aus. jetzt haben zwei meiner besten freunde das ircnet wieder fuer sich entdeckt und da ich ja im moment urlaub habe, wurde ich quasi direkt mitgeschleppt. oh man, da werden tatsaechlich erinnerungen wach…

da viele leute mittlerweile auf andere plattformen wie facebook usw. abgewandert sind, fristet das IRCnet nur noch ein nischendasein. von daher bin ich auch eher der meinung, dass dieser artikel fuer die wenigsten von euch interessant ist.

fuer alle die nicht wissen was das IRCnet ist, es ist die aelteste form des chats im internet. alle bekannten abgruende dienste wie knuddels oder sonstiges, basieren auf dieser technik.

ganz einfach erklaert: das ircnet ist ein serververbund von verschiedenen universitaeten und einigen anderen traegern. diese server sind untereinander vernetzt und bieten die moeglichkeit, kostenlos mit menschen auf der ganzen welt in echtzeit zu chatten. voellig ohne bilder, klickibunti-internetseiten, avataren, facebook-walls usw. ganz einfach nur platter text. und tatsaechlich (wenn man gewisse dinge beachtet) komplett anonym.

Wikipedia sagt dazu folgendes:
Das dem IRCnet zugrunde liegende IRC-Protokoll (Internet Relay Chat) basiert auf einer von Jarkko Oikarinens ursprünglich für das Bulletin Board System (BBS) entwickelten Chat-Erweiterung. Der erste IRC-Server, tolsun.oulu.fi, entstand dabei 1988 an der Universität Oulu, Finnland. Das erste IRC-Netz entstand durch den Zusammenschluss des IRC-Servers der Universität Oulu mit denen der Universitäten Helsinki und Tampere, später mit den Servern der Universitäten von Denver und Oregon.[…]

der grund weswegen ich heute mal einen artikel dazu schreibe ist folgender:
im ircnet kann jeder einen eigenen raum zum chatten erstellen. (zum beispiel: „/join #login-essen.de„)
wenn dieser raum vorher noch nicht existierte, hat man ihn hiermit erschaffen.
analog zur redewendung „der letzte macht das licht aus“, funktioniert es im ircnet genau so.
ist man der letzte user in einem raum und man verlaesst ihn (zum beispiel; „/part #login-essen.de„), loest er sich quasi in luft auf. dann hat jeder die moeglichkeit, diesen raum neu zu erstellen und somit quasi zu uebernehmen.

das ircnet war damals (und ist teilweise auch leider heute noch) eine art „wilder westen“ in dem man -aus meiner sicht- real nicht vorhandene erfolge kompensiert. damals war es eine art schwanzvergleich von nerds, mit „ich take deinen channel“ (ich uebernehme- und nehme dir dann deinen chatraum weg), ddos-attacken, etc…
wiederum andere wollten einfach nur flamen (stunk machen) und nerven. diesen problemen kann man mit verschiedenen moeglichkeiten entgegentreten. auf eine art, bots -speziell eggdrop-bots-, moechte ich hier einmal (verkuerzt) eingehen.

als ich also heute morgen (voller freude) einen bot installieren wollte kompilieren musste, ist mir aufgefallen, dass ich das vor knapp 7 jahren das letzte mal gemacht habe. das wars dann auch direkt wieder mit der freude! meine reaktion darauf war: „OMFG, ich werd alt!!!“ ich musste mich also erst mal wieder in die thematik einlesen. das traurige ist, vor 7 jahren habe ich sowas blind gemacht…

fuer die nicht-nerds: es gibt verschiedene bot-systeme fuer das IRCnet. manche setzen auf psotnic (welche sich eher zum taken von channels eignen), wiederum andere schwoeren auf eggdrop. da wir mittlerweile in einem alter sind, in dem wir eigentlich nur in frieden chatten- und ggf. das eine oder andere script auf die beine stellen wollen, verwende ich lieber eggdrops.
eggdrops arbeiten mit der scriptsprache TCL, die es (fuer halbwegs geuebte programmierer) erlaubt, eigene scripte zu erstellen. so hatten wir damals auf unserer channel-homepage eine uebersicht ueber alle anwesenden user, chat-themen und auch inhalte aus dem chat live auf der website.

wie schon gesagt, dieser artikel wird hier nur die wenigsten von euch interessieren. er richtet sich nur an zwei bis drei kollegen von mir, die sich seit kurzem wieder dem IRCnet zugewand haben. wenn allerdings noch jemand auf die idee kommen sollte und sich einen eggdrop-bot einrichten moechte, hier habe ich alle meine schritte kurz zusammengefasst.

Wikipedia sagt dazu folgendes:
Bei Eggdrop handelt es sich um einen der ersten IRC-Bots, welcher einen IRC-Channel rund um die Uhr offen halten kann und bei Aufruf spezielle Funktionen ausführt. Er selbst ist dabei wie jeder andere User sichtbar. Die Entwicklung startete im Jahre 1993 durch Robey Pointer. Heute umfasst das Entwickler-Team über 40 Personen und eine Vielzahl an Personen, die Patches beigetragen haben.[…]

wie ihr wisst, benoetigt man einen server, auf dem man den bot installieren kann kompilieren muss. das kann ein windows-, mac-, oder linux-system sein. unter linux gibt es meisstens das problem, dass die fertigen programme nicht laufen, da diverse libs (bibliotheks-dateien) fehlen. somit ist der bot entweder instabil oder startet erst gar nicht. damit solche probleme erst gar nicht auftreten, kompiliert man den bot am besten selbst.

(bei mir) unter linux sieht es wie folgt aus:

als erstes laden wir uns den quellcode runter:
wget https://ftp.eggheads.org/pub/eggdrop/source/1.8/eggdrop-1.8.4.tar.gz
dann auspacken: „tar -xvzf eggdrop-1.8.4.tar.gz
im ausgepackten verzeichnis („cd eggdrop-1.8.4) beginnen wir dann mit dem kompilieren:
zuerst „./configure„, dann „make config“ (oder „make iconfig„, wenn ihr gewisse module de/aktivieren fest ein/ausbauen wollt). danach gehts mit „make“ weiter.
zum schluss sagen wir, dass wir den bot dann komplett in ein eigenes verzeichnis packen moechten: „make install

waehrend meines ersten installationsversuchs hatte ich nach ./configure diverse fehlermeldungen.
die erste war:

configure: error: in `/home/marc/eggdrop-1.8.4′:
configure: error: no acceptable C compiler found in $PATH
See `config.log‘ for more details

das bedeutet, dass ein c-compiler fehlt. das problem ist schnell mit „apt-get install build-essential“ (als root) geloest.

die zweite fehlermeldung sah so aus:

configure: error:
Tcl cannot be found on this system.
Eggdrop requires Tcl and the Tcl development files to compile.
If you already have Tcl installed on this system, make sure you
also have the development files (common package names include
‚tcl-dev‘ and ‚tcl-devel‘). If I just wasn’t looking
in the right place for it, re-run ./configure using the
–with-tcllib=’/path/to/libtcl.so‘ and
–with-tclinc=’/path/to/tcl.h‘ options.
See doc/COMPILE-GUIDE’s ‚Tcl Detection and Installation‘ section for more
information.

ich hab sie dann kurzer hand (als root) mit „apt-get install tcl8.5-dev tcl8.5“ nachinstalliert.
nach der installation von tcl fuehrt man „./configure“ noch mal aus und faehrt dann ganz normal mit dem kompilieren fort.

also noch mal alles zusammen:
wget https://ftp.eggheads.org/pub/eggdrop/source/1.8/eggdrop-1.8.4.tar.gz
tar -xvzf eggdrop-1.8.4.tar.gz
cd eggdrop-1.8.4
./configure
make config
make
make install

ihr findet dann in eurem homeverzeichnis den ordner „eggdrop„. dieses verzeichnis beinhaltet unter anderem die konfigurationsdatei fuer euren bot („eggdrop.conf„). ihr koennt sie mit einem editor (pico, nano, vi) bearbeiten und alle parameter selbst festlegen. fuer alle unter euch, die nicht unbedingt alles zeile fuer zeile durchgehen moechten, habe ich hier meine eggdrop.conf online gestellt.

### General Stuff ###
set username „BOTNAME“
set admin „ADMIN_NAME“
set network „IRCnet“
set timezone „CET“
set offset „-1“
set my-hostname „HOSTNAME_EINGEBEN“
set my-ip „IP_EINGEBEN“

### Log Files ###
set max-logs 999
set max-logsize 0
set quick-logs 0
logfile mco * „logs/eggdrop.log“
set log-time 1
set keep-all-logs 1
set logfile-suffix „.%Y%m%d“
set switch-logfiles-at 300

set console „mkcobxs“

### Files and Directories ###
set userfile „BOTNAME.user“
set sort-users 1
set help-path „help/“
set temp-path „tmp“
set motd „text/motd“
set telnet-banner „text/banner“
set userfile-perm 0600

### BOT NET ###
listen 1234 all
set protect-telnet 1
set dcc-sanitycheck 0
set ident-timeout 5
set require-p 0
set open-telnets 0
set stealth-telnets 1
set use-telnet-banner 1
set dcc-flood-thr 3
set telnet-flood 10:60
set paranoid-telnet-flood 1
set resolve-timeout 15

### More Advanced Stuff ###
set ignore-time 10
set hourly-updates 00
set owner „ADMIN_NAME“
set notify-newusers „$owner“
set default-flags „“
set whois-fields „url birthday“
set remote-boots 0
set share-unlinks 0
set die-on-sighup 0
set die-on-sigterm 1
unbind dcc n tcl *dcc:tcl
unbind dcc n set *dcc:set
set must-be-owner 0
unbind dcc n simul *dcc:simul
set max-dcc 50
set dcc-portrange 1024:65535
set enable-simul 1
set allow-dk-cmds 1
set dupwait-timeout 5

### Modules ###
set mod-path „modules/“

### DNS ###
loadmodule dns

### Channels ###
loadmodule channels
set chanfile „BOTNAME.chan“
set ban-time 0
set exempt-time 0
set invite-time 0
set force-expire 0
set share-greet 0
set use-info 1
set global-flood-chan 0:0
set global-flood-deop 0:0
set global-flood-kick 0:0
set global-flood-join 0:0
set global-flood-ctcp 0:0
set global-flood-nick 0:0
set global-aop-delay 0:0
set global-idle-kick 0
set global-chanmode „“
set global-stopnethack-mode 0
set global-revenge-mode 0
set global-chanset {
-autoop -autovoice
-bitch -cycle
-dontkickops -dynamicbans
-dynamicexempts -dynamicinvites
-enforcebans -greet
-inactive -protectfriends
-protectops -revenge
-revengebot -secret
-seen -shared
+statuslog +userbans
+userexempts +userinvites
-nodesynch
}

### Server ###
loadmodule server
set net-type 1
set nick „BOTNAME“
set altnick „|BOTNAME|“
set realname „visit me @ http://marc.w.erfel.de :)“
set init-server { putserv „MODE $botnick +iws“ }
set default-port 6668
set servers {
irc.fu-berlin.de:6668
irc.belwue.de:6668
irc.uni-erlangen.de:6668
irc.freenet.de:6668
}
set keep-nick 1
set use-ison 1
set strict-host 0
set quiet-reject 1
set lowercase-ctcp 0
set answer-ctcp 3
set flood-msg 10:60
set flood-ctcp 10:60
set never-give-up 1
set strict-servernames 0
set server-cycle-wait 60
set server-timeout 15
set servlimit 0
set check-stoned 1
set use-console-r 0
set debug-output 1
set serverror-quit 1
set max-queue-msg 300
set trigger-on-ignore 0
set double-mode 0
set double-server 0
set double-help 0
set optimize-kicks 0
set nick-len 15

### CTCP ###
loadmodule ctcp
set ctcp-mode 0

### IRC ###
loadmodule irc
set bounce-bans 0
set bounce-modes 0
set max-bans 0
set max-modes 0
set kick-fun 0
set ban-fun 0
set learn-users 0
set wait-split 200
set wait-info 180
set mode-buf-length 200
#bind msg – ident *msg:ident
unbind msg – hello *msg:hello
unbind msg – ident *msg:ident
unbind msg – addhost *msg:addhost
set no-chanrec-info 0

#### IRC MODULE – net-type 1 specific features (IRCnet) ####
set bounce-exempts 0
set bounce-invites 0
set max-exempts 0
set max-invites 0
set use-exempts 0
set use-invites 0
set prevent-mixing 0

#### IRC MODULE – net-type 5 specific features (other networks) ####
set kick-method 1
set modes-per-line 3
set include-lk 1
set use-354 0
set rfc-compliant 1

### TRANSFER ###
loadmodule transfer
set max-dloads 3
set dcc-block 0
set copy-to-tmp 1
set xfer-timeout 45

## SHARE ###
loadmodule share
set allow-resync 0
set resync-time 900
set private-global 0
set private-globals „“
set private-user 0
set override-bots 0

### CONSOLE ###
loadmodule console
set console-autosave 1
set force-channel 1
set info-party 0

### WOOBIE ###
#loadmodule woobie

### SEEN ###
#loadmodule seen

### BLOWFISH ###
checkmodule blowfish

### ASSOC ###
loadmodule assoc

### WIRE ###
loadmodule wire

### SCRIPTS ###
source scripts/alltools.tcl
source scripts/action.fix.tcl
source scripts/compat.tcl
source scripts/userinfo.tcl
source scripts/getops.tcl
loadhelp userinfo.help

wie schon gesagt, das hier ist meine konfiguration. bitte passt sie euren beduerfnissen entsprechend an.
da unser bot im IRCnet eingesetzt wird, muesstet ihr fuer andere netzwerke (quakenet, dalnet, undernet, etc) die config etwas anpassen. unter eggwiki.org findet man eine sehr gute erklaerung fuer die einzelnen punkte in der eggdrop.conf.

zum schluss muss noch das tmp-verzeichnis mittels „mkdir tmp“ angelegt werden und dann koennt ihr den bot endlich starten.

der allererste start des bots wird einmalig mit „./eggdrop -m eggdrop.conf“ ausgefuehrt.
dadurch wird der bot angewiesen, eine neue user-datei anzulegen. er wird sich auf einen irc-server verbinden und dort warten (er joint keine channel). wenn ihr wissen wollt, ob er bereits online ist, koennt ihr das mit „/whois BOTNAME“ machen. sobald er online ist, koennt ihr euch das erste mal mit ihm in verbindung setzen und ihn einrichten. dazu gebt ihr „/msg BOTNAME hello“ ein und dann folgt ihr seinen instruktionen. 🙂

in meinem fall laeuft jetzt ein bot bei mir zuhause auf meinem raspberryPI. er frisst kaum ressourcen und sorgt dafuer, dass wir uns um den erhalt unseres channels keine sorgen machen muessen.

im naechsten artikel erkläre ich euch, wie man mehrere eggdrops miteinander verlinkt, um ein botnet zu erzeugen.

[UPDATE]
Auf neue Version eggdrop-1.8.4 updated.
[/UPDATE]