back
irc v lidove slovesnosti
~~~~~~~~~~~~~~~~~~~~~~~~
za devatero horami a devatero rekami a peti fjordy, kdesi v chladnem a dalekem
kralovstvi zvane finsko, bylo, nebylo, spis asi nebylo jedno male mestecko.
a vtom mestecku, jmenovalo se oulu, zil byl jakys sikovny clovicek - jmenoval
se jarkko oikarinen. jarkko si jednou sedl ke svemu pocitaci, prihlasil se,
a chtel si s nekym povidat. pustil si tedy program talk, ale zjistil ze to
neni ono - mohl totiz mluvit vzdy jenom s kazdym clovekem oddelene, aniz
by ostatni videli co si povida s tim dalsim. jarkko ke svemu zdeseni
zjistil ze je z toho tuze nestastny, a ze by to chtelo neco, kde by
se dalo vykecavat jako nekde v senku u tuplaku piva (tj. od rana do
vecera). nu a tak spachal irc, coz se po technicke strance rovna temer
sebevrazde, nicmene po strance uzivatelske to docela ujde.
toliko pohadka pro romantiky, aby usnuli dokavad je cas, ponevadz irc nic
romantickeho neni. je to hukot; gigabajty dat si to denne tecou mezi servery
v desitkach zemi, statisice uzivatelu hledice do obrazovky busi do klavesnic
neznaje bratra (nebo prikazu /quit). od roku 1988 kdy bylo irc povolano v
existenci se zvrhlo naprosto v neco necekane perverzniho - podezreni
na navykovost na internetu se tedy stoprocentne potvrdila, nemluve
o faktu ze se ze skandinavie se co nevidet rozlezlo do celeho sveta, coz,
ac je to k neuvereni, i k nam, zkratka, irc asi predstavovat nemusim ;-)
podstata irc
~~~~~~~~~~~~
ale k tematu, o cem si tady dneska budu placat jatra - jak to cele vlastne
funguje. kazdemu irc-ckari je uz dnes asi jasne ze cele to funguje; na
principu server-klient. je to tak jednoduche. honza novak se rozhodne
ze zabije zase par hodin nicnedelanim, tak pusti irc klienta a pripoji se
k irc serveru. servery jsou propojene mezi sebou, aby si i jini novaci
kteri visi na jinych serverech mohli povidat mezi sebou, pripadne mit
spolecny channel, #novaci.
vypada to asi takhle:
zloun spatnak
\ /
irc.zlylide.cz
|
servery irc.novaci.cz -- irc.noviaci.sk -- irc.newmans.com
---- / | | |
klienti novak1 novak2 noviak3 n0w4k
vsichni novaci sedi v kanalu #novaci. kdyz novak1 neco v napise na kanal #novaci,
zpravu uvidi vsichni ostatni. jak ? rekneme ze pise novak1, irc.novaci.cz
vi ze dalsi ucastnici kanalu - noviak3 a n0w4k nejsou _jeho_ klienti, to znamena
ze bude treba poslat zpravu dal, vi na jakych dalsich serverech jsou
ostatni novaci a urci cestu kudy zpravu preposlat. tudiz nekdo na irc.zlylide.cz,
kdyby napriklad pouzival upraveny irc server, se nikdy nedozvi co novak1
posilal na kanal, treba proto ze novaci zlym lidem zakazali pristup na kanal
(+b/+k/+i/+l ?). ovsem hlavni duvod proc se to dela tak slozite je ze cely tento
model funguje v nekolikset tisickrat vetsim meritku, takze se tim usetri
spousta sitovych prostredku voli-li se cesta efektivne. toto se samozrejme
nevztahuje jen na posilani zprav, ale i na channel mody, akce na channelu,
na cokoliv. vyjimkou jsou registrace uzivatelu a kanalu, o tech vzdy _kazdy_
server musi vedet, aby se pak nemusel "blbe" ptat ostatnich pokud by
nekdo zadal stejny nick/kanal jestli uz ho nekdo nema.
servery jsou zapojeny ve zvlastnim druhu stromove struktury - na spici
je vzdy ten server ze ktereho se zrovna na ostatni servery koukate, v praxi
to znamena ze servery mohou byt propojeny naprosto chaoticky (zpravidla
kopirujou sitovou topologii, peeringy mezi providery a tak), ale _nikdy_
se nelze dostat z nejakeho serveru na jiny server vice nez jednou cestou. (nekde
v topologii kruh) samozrejme ze tu je i pevna hiearchi, jako treba:
server.de
________________|______________
| |
hubserver.cz hubserver.pl
/ | \ / |
server1.cz server2.cz server3.cz server1.pl server2.pl
timto se zajisti ze zpravy mezi ceskymi uzivateli se zbytecne netoulaji po svete,
ale zase s polakama si muzeme povidat jenom pres nemce. v tomto priklade to
znamena ze pro polaky a pro nas jsou nemci "hub" a mi jsme pro nemce "leaf".
rekneme ze polaci a cesi maj spolecny kanal (veskera komunikace v nem jde pres server.de)
to znamena ze je v nem alespon jeden cech a alespon jeden polak.
pokud by server.de spadnul (treba z duvodu restartu), nastal by tzv. netsplit,
polsko a cesko by zustalo odriznuto od sveta, to sou ta masova opousteni
kanalu - uzivatele kteri takto "vyskoci" byli na druhe strane hub serveru, a ponevadz
hubserver.cz s nimi v tuto chvili nemuze navazat spojeni, prohlasi je pro tu chvili
za nezvestne.
za par minut, kdy server.de nabootoval se po chvilce usili kdy to marne
zkouseli hubserver.cz a hubserver.pl k nemu zpatky pripoji a cesi uvidi
polaky jak se vraci a polaci zase cechy. tomu se rika netjoin. pokud v
dobe netsplitu dojde k situaci ze na polske a ceske strane ma nekdo
stejny nick (at uz nahodou nebo umyslem ;) pri netjoinu budou oba klienti
(v pripade ircnetu) "zabiti" (kill) serverem a nedovoli nikomu nekolik
minut dany nick pouzit, ponevadz mit 2 stejne nicky v jedne irc siti je
nepripustne. jine site, jako treba undernet nebo efnet to resi tak ze
si server pamatuji ktery z nicku je novejsi, a zabije jenom jeho, coz
je velice sikovne, jenze na druhe strane to umoznuje zlym lidem mu
pak takovy nick "jupnout", tj. pri netsplitu nejakym zpusobem
obetdonutit aby "uhnila" od sveho irc serveru a tim padem, az se znovu pripoji,
mela novejsi nick, pri netjoinu pak dostane kill. pokud utocnik nuti
servery neustale splitovat, muze obet neustale zabijet coz muze byt
nekdy velice neprijemne.
irc site
~~~~~~~~
v soucasne dobe jsou na svete 3 nejvetsi irc site - to znamena skupin
pospojovanych serveru - ircnet (i unas v cechach a na slovensku), efnet
a undernet, dejme tomu dnes jiz zanikajici dalnet. (quakenet, ackoli
je velkej nepocitam - ponevadz vetsina uzivatelu co tam je, je zrejme
nesvepravna) dohromady by dali co do velikosti temer pul milionu uzivatelu.
tyto site jsou rozdeleny predevsim z duvodu nekompatibility serveru, kazda
irc sit se vydala svou vlastni cestou pri vyvoji serveru pri rozpadu puvodni
irc site (te se rikalo proste 'irc'). efnet pouziva hybrid, undernet ircu
a jediny ircnet je jeste stale zpetne kompatibilni s puvodnim irc, takze
ircnet server je normalni naslednik verzi v rade puvodnich irc serveru.
(momentalne stale jeste myslim 2.10.3p3)
velike site maji sva pro a proti. zarucene pro je ze se muzete bavit
s uzasnym okruhem lidi takrka o vsem (za predpokladu ze umis anglicky
a zjistis si patricne nazvy kanalu). z velkeho poctu uzivatelu vyplivaji
i ta proti - se jmeny nicku a kanalama to je jako s zenskejma - ty
hezky uz jsou zabrany. proti je taky neustaly tzv. abuse, tzn. ze
nekdo kdo trpi syndromem maleho penisu (sps - small penis syndrome) si
sve komplexy neustale kompenzuje na irc na nejake skupine uzivatelu
(takeovery kanalu), ale i jednotlivcich. proto si lide zakladaji vlastni
irc, zpravidla jen pro uzkou skupinu pratel, kde predchozi 'proti'
odpadaji, dovoluje to pouzivat upravene servery s ohledem na
anonymitu/privatnost atd., lze to videt treba na http://www.netsplit.de,
kde se vedou statistiky akrka vsech irc siti. nu, a tady je jak na to.
konfigurace vlastniho irc serveru
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mam zkusenosti jen s ircnet servery jez jsou nejstarsi, nejsou nijak
slozite a v nasich koncinach jsou a nekteri z jejich
programatoru videt nejcasteji ;-), u tech si lze, pokud budete
hodne kopat, dupat a kricet vydobit nejakou tu pomoc pri
uprave/konfiguraci vlastniho irc serveru ;-)
takze, recept:
co potrebujeme:
1x irc2.10.3xp3, http://ftp.irc.org/servers/irc2.10.3p3.tgz
1x hemp.patch, http://jv.irc.cz/hemp/hemp.diff
1x unixovy nebo windows+cygwin system s vyvojovym softwarem
(tj. nejaky ten c prekladac a "normalni" knihovny)
vsechny soubory si stahnem do jednoho adresare, a tady je postum
v [] sou komentare.
sd@devastace:~/irc$ tar -xzf irc2.10.3p3.tgz
sd@devastace:~/irc$ cd irc2.10.3p3.tgz
sd@devastace:~/irc/irc2.10.3p3$ patch -p1 < ../hemp.diff
sd@devastace:~/irc/irc2.10.3p3$ ./configure
..... tady spousta textu o detekovanych knihovnach, systemu a tak .....
Next cd i686-pc-linux-gnu, edit "config.h" and "Makefile",
run "make all" to build and "make install" to install.
[ podle toho co ti to napise, v mem pripade i686-pc-linux-gnu, tak to je
build adresar, tento nazev nahrad tim svym pokud budes mit nejaky jiny ]
sd@devastace:~/irc/irc2.10.3p3$ cd i686-pc-linux-gnu
sd@devastace:~/irc/irc2.10.3p3/i686-pc-linux-gnu$ vim config.h
[ a ted zeditujeme config.h:
navesti ktera tu nebudou uvedena nechat jak jsou, sou zatim pro
nas nezajimava.
zapnute polozky polozky jsou #define, vypnute #undef pripadne
zakomentovane v /* .. */, kdyz tu ja pisu #define/#undef
je to moje doporuceni.
#define CACHED_MOTD
toto z namena ze server si ma motd pamatovat v pameti a nacist ho
jen pri rehashi, jinak ho bude nacitat pokazde kdyz si ho klient
vyzada.
#undef NO_DEFAULT_INVISIBLE
je li #define-ovano, uzivatele nebudou dostavat +i flag pri zacatku
irc spojeni, takze se budou zobrazovat v seznamech uzivatelu.
#define OPER_*
tato navesti urcuji co _globalni_ operatori mohou, respektive nemohou
delat (KILL,REHASH,RESTART,DIE), OPER_REMOTE nechat zaple ;-)
#define LOCOP_*
tato navesti urcuji co _lokalni_ operatori mohou, respektive nemohou
delat v ramci tohoto serveru (KILL,REHASH,RESTART,DIE)
#define MAXCONNECTIONS 1024
maximalni pocet konexi, sem dej odhadovany maximalni pocet klientu + 10 navic
#define MAXIMUM_LINKS 1
vzdy nechat na 1, nezpusobuje to pak zmatky ;-)
#define HUB
zapnout pokud planujes mit pod sebou dalsi servery ktere se k tomuto
budou pripojovat
#define TIMEDKLINES 60
umoznuje casovane k-lineovani, toto je cas po kterem se cekuje jestli
by meli bejt odstraneny.
#undef R_LINES
kdyz je zapnuto, pote muzes definovat adresy, ze kterych bude mozny
jen omezeny pristup (+r)
#define CMDLINE_CONFIG
radeji zapnout, umozni ti zadat konfiguracni soubor na prikazove radce
#define SLOW_ACCEPT
pokud ma nekdo blazniveho klienta kterej se furt reconnectovat, tak
aby to nezabiralo tolik casu procesoru
#undef CLONE_CHECK
je-li zapnuto, kontroluje zda-li prilis mnoho useru nechodi
ze stejneho stroje/identu (t.j. jeden a ten samej clovek se
nam klonuje ;-) ja osobne to nechavam vypnute, ponevadz
u malych siti to je beztak jedno
#define RESTRICT_USERNAMES
zakaze urcite znaky v username, nechat zaple, docela uzitecne
OPER_KLINE
povolit globalnim operatorum pernamentne k-line-ovat on-line
LOCOP_KLINE
povolit lokalnim operatorum pernamentne k-line-ovat on-line
OPER_TKLINE
povolit globalnim operatorum docasne k-line-ovat on-line
LOCOP_TKLINE
povolit lokalnim operatorum docasne k-line-ovat on-line
#define EXTRA_STATISTICS
povolene zobrazuje maximalni lokalni a globalni pocet uzivatelu,
uzitecne, nechat zaple
#define CLIENTS_CHANNEL
&client kanal pro operatory, pro server statistiky (connecty,nicky,quity,
stats vyzadane od useru atd)
#define TOPICWHOTIME
zobrazovat/pamatovat si kdo a kdy nastavil topic
#define DELAYCLOSETIME 5
pri odmitnuti klienta, cas ktery ho jeste budeme zdrzovat nez bude finalne
odpojen (simulace pomaleho spojeni ;-), 5 je takova prijemnejsi hodnota
#undef SPLIT_HANDLE
#undef DELAY_ACCEPT
nerozumne pouzivat u standalone/malych serveru
(split-mode/delayaccept)
#define ILINE_FLAGS
umoznuje specifikovat pridavne priznaky u I:
(vyjimku z k-lines, +r dyz nema revers)
#undef LOCAL_KILL_ONLY
povolit globalni kill-ovani
#undef USE_IAUTH
v tvych skromnych podminkach iauth nebude treba
NO_IDENT
nezjistovat ident uzivatele (vsichni ~)
NO_PREFIX
nepridavat (~ nebo ^) flag, jako by vsichni meli funkcni ident
]
no, a mame zkonfigurovano, a ted:
sd@devastace:~/irc/irc2.10.3p3/i686-pc-linux-gnu$ make ircd
nyni zabehni do nejblizsiho zahradnictvi a kup asi tak pul metraku jilu
(takovy ten mazlavy, vite jaky myslim). uplacej pred svym terminalem velkou
modlu, rozestav okolo svicky (skuseni doporucuji do pentagramu) a zapal
je. a zacni se modlit:
neco je tvoreno bity, v tichem kabelu. menici se, zvetsujici se a zmensujici se.
je stale tam ale jeste ne tamhle. toto je srdcem irc. neznam prave jmeno, proto
tomu budu rikat kult irc. je-li kult dobry, pak irc bezi bez
problemu. je li irc dobre, server neustale bezi, bez prestavky. je-li server
dobry, pak klient bude vzdy serverem. pak prijde clovek a svetlo sveta spatri
chat.
pokud jsi se opravdu modlil a myslel jsi to uprime, prelozeni serveru probehlo
bez problemu, pokud ne, mas smulu. v aktualnim adresari by se mel objevit
spustitelny soubor 'ircd', coz znamena ze uz takrka neni co podelat.
nez se ale vrhneme na testovani serveru, musime ho zkofingurovat (uz zase ?)
v config.h byla jen pevna nastaveni, ted prijdou ta menitelna.
sd@devastace:~/irc/irc2.10.3p3/i686-pc-linux-gnu$ vim ircd.conf
a vytvorime soubor ircd.conf. jednotlive konfiguracni polozky se oznacuji
pismenem a dvojteckou, treba I: a za tim je ruzny pocet argumentu, jejichz
pocet a vyznam se meni v zavislost na konfigurovanem parametru. radky
zacinajici na '#' jsou ignorovany, je to jenom komentar.
uvadim sem vzdy obecnou syntaxi radky pod tim pripklad.
tady popisu linky co _musi_ byt aby server fungoval:
M:<domenovy nazev serveru>:<ip serveru>:<geograficke umisteni>:<Port>
M:irc.hysteria.sk:195.168.3.83:nextra isp, slovensko, bratislava:6667
domenovy nazev urcuje fqdn nazev serveru, takto se bude hlasit i uzivatelum
takze _musi_ ukazovat na realnou adresu serveru (klidne i alias).
ip serveru, muze byt vynechana, slouzi jen pro informativni ucely, nevidim
duvod proc ji tam nezadat.
do geografickeho umisteni by se melo spravne psat kde a u jakeho isp je,
ale casto se tam vyskytuje nejaka radoby chytra hlaska nebo proste neco
o serveru.
P:<ip>:::<port>:
P:195.168.3.83:::6667:
<ip> urcuje kde server bude naslouchat pro prichozi pripojeni od klientu,
pokud tam nedas nic, jako treba
P::::6667
server bude poslouchat na vsech dostupnych adresach stroje kde bezi.
do <port> napis na jakem ma server poslouchat. chces-li portu vic, udelej
vic P-linek, pro kazdy port jednu, treba:
P::::6667
P::::6668
P::::6669
Y:<trida>:<ping frekvence>:<frekvence rekonektu>:<maxlinks>:<velikost bufferu>:<lokalni limit>:<globalni limit>
Y:10:300::100:512000:0.1:0.2
na uvod trochu vysvetleni. irc server rozdeluje spojeni do tzv. trid (class), takze
pak muzes v jednom radku zmenit nastaveni pro siroky okruh pripojeni (jinak by jsi musel
pro kazdeho zvlast).
<trida> je nejake cislo vetsi nez nula, je jedno jake, pozdeji se na nej budes odkazovat
pri specifikovani uzivatelskych pristupu v I: radkach.
<ping frekvence> jak casto (v sekundach) budou klienti/servery v teto tride dostavat
ping zpravu (cim vetsi je ocekavany lag, tim vetsi cislo tady).
<frekvence rekonektu> udava se pouze u y-linek ktere budou pouze pro servery, znamena
to po kolika sekundach se znovu pokusi automaticky pripojit (je li definovano automaticke
pripojovani) k danemu hub serveru v C/N dvojici.
<maxlinks> ve tride pro servery znamena maximalni pocet automatickych spojeni k hub
serverum. v pripade klientu maximalni pocet pripojenych uzivatelu (plati vzdy
v ramci jedne I: linky)
<velikost buferu> server data ktera ma odeslat uzivateli/jinemu serveru uklada do zasobniku,
v pripade ze uzivatel/server ma pomalou linku a nestiha si data od serveru "vybirat".
toto cislo definuje velikost v bajtech kolik zde uzivatel/server muze ulozit nez ho bude nucen
nas server odpojit (sendQ exceed). pro klienty se pouziva pul megabajtu - 512000, pro servery
4 megabajty - 4000000.
tyto je pouze pro uzivatelske Y: linky:
<lokalni limit> definuje se jako dvojice cisel x.y, kde x znamena povoleny pocet
pripojeni ze stejne ip adresy, kdezto y omezuje pocet pripojeni ze stejneho
uzivatel@pocitace.cz, to znamena ze adresa muze byt stale stejna ale uzivatel ruzny.
tam kde se zapise 0 neni nic omezeno, plati _pouze_ v ramci naseho serveru.
<globalni limit> definuje limity stejnym zpusobem jako <lokalni limit>, _ale_ pusobi
v ramci cele site (tj. pocitaji se uzivatele resp. ten samy i z jinych serveru)
I:<adresa>:<heslo>:<maska>:<port>:<trida>
I:147.0.0.0/8::*.cz::10
toto je alfa a omega konfigurace kazdeho irc serveru. temito radky se specifikuji
pristupy useru k serveru.
<adresa> host nebo network adresa odkud se uzivatel muze pripojovat
<heslo> musi byt zadane pokud user matchuje adresku/masku
<maska> pokud je definovana, musi matchovat adresu prevedenou na domain name
<port> pres jaky port je tato radka platna (zadny = vsechny)
<trida> definuje do jake tridy uzivatel spada, viz predchozi Y:
dulezite - I-lines server vzdy prochazi od konce ircd.conf souboru