CZF4BFU
CZF4BFU (CZFree for BFU) je projekt a softwarova specifikace na inzerovani vnitrnich zdroju CZFree.Netu uzivatelum. Cloudy inzeruji pomoci DEU souboru svoje zdroje v otevrenem formatu (Data Exchange Unit) a distribuuji je pomoci ftp, http ostatnim. Specifikace definuje jak popsat zdroj a jak vytvorit popisny soubor DEU (inzeraty cloudu). Vzniklo nekolik implementaci. Pozadavek byl maximalni jednoduchost vytvareni, editace, inzerovani souboru existujicimi nastroji na prenos dat.
Implementace klienta pro Windows
Implementace klienta pro Linux
Převzato ze zdroje: http://www.czela.net/wiki/index.php/CZF4BFU
Obsah
Úvod
Celá aplikace je založena na schématu, které tu již bylo navrženo: program u uživatele získává seznam zdrojů sítě CZFree.Net z nějakého datového serveru, kterých je více a data si mezi sebou předávají.
Informace o zdrojích sítě jsme rozdělili na 3 skupiny. - globální (volně siritelne, bez dalších informací) - lokální volně (volně siritelne, nesou informací o tom kde jsou rozumné dostupné např. 10.15.xx.xx atd.) - lokální privátní (siritelne pouze v rámci definované oblasti) které jsou uloženy ve dvou souborech, první globální obsahuje první dvě skupiny a je součástí komunikace mezi servery. Druhý lokálně privátní se mezi servery nepřenáší, ale jen přímo uživatelům v daném lokálním rozsahu.
komunikace mezi servery
informace o zdrojích jsou předávány formou textových souboru mezi servery. Textové soubory jsou v DEU formátu na adrese: http://$host/czf4bfu/global-$host.txt, kde $host je IP adresa případně FQDN webserveru který soubor nabízí.
Zpočátku předpokládáme menší množství serverů (pro Prahu cca 5), takže znalost ostatních může být ve verzi 1 uchovávána statickým seznamem, později třeba podle níže uvedeného algoritmu nebo prostě nějak jinak.
Výměna dat probíhá každý s každým, takže při n serverech je uchováváno n globálních souborů. Výměnu navrhujeme realizovat pomoci rsync. Nedostupnost spojení mezi některými servery není nutná, stačí aby server měl dostupnost alespoň na jeden další server a množina všech servru byla konzistentní.
komunikace server - klient
Pokud klient nema zadne zdroje, pokusi se je najit a to podle nasledujiciho schematu:
Poradi pri hledani zdroju
- z domenoveho jmena (zjisti se bud z registru, winsocku nebo z DNS prvni IP z cloudu): pokud je PC napr. pepa.hodne.daleko.czf tak se vyzkousi
- czf4bfu.hodne.daleko.czf, www.hodne.daleko.czf, hodne.daleko.czf
- czf4bfu.daleko.czf, www.daleko.czf, daleko.czf
- Pod WinXP se hleda na adresah DNS, DHCP a GW serveru
Co se hleda?
stranka http://<adresa>/czf4bfu/ ktera nevrati "404 not found". Tato stranka se dale parsuje na stringy global-*.txt a tyto soubory se nacitaji z aktualniho adresare - http://<adresa>/czf4bfu/global-*.txt
Format DEU
TYP: (DC, FTP, HTTP, IRC ......) URL: http//..../....php URLIP: http://10.1.2.3/...php, nepovinne URLINET: http://nejakaadresa.na.inetu, nepovinne NAZEV: kratky nazev sluzby - napr. Connected forum POPIS: popis sluzby, az neco kolem 100 znaku, nepovinne OBLAST: ve formatu x.x.x.x/y, napr. 10.11.0.0/16,10.1.128.0/17,10.15.0.0/24 ICON: adresa na soubor s ikonkou KONTAKT: url, text, email....., nepovinne ALT: doplnujici udaje ke zdroji, aplikacne specificke napr: DC - 10.12.34.56:4411 GPS: gps souradnice v WGS84 formatu, nepovinne
TYP: uvozuje dalsi polozku {je to opravdu potreba?}
nazvy souboru jsou ve formatu global(local/privat)-IPadresa serveru.txt tj. global-10.40.0.2.txt GPG nebo PGP podpis je externi soubor stejneho nazvu s priponou .gpg {nevyuziva se}
Bylo dohodnuto umisteni techto souboru v adresari /czf4bfu na serveru, kterou tento server poskytuje. Zatim se primarne pouziva HTTP protokol, ale je planovana moznost pouzivat i jine protokoly pro synchronizaci.
To co se musi dodrzet:
- Polozky musi byt oddeleny prazdnou radkou
- Kodovani WIN1250, konce radek CRLF, pokracovani radky = \ na konci
- Zaznam musi obsahovat: TYP a NAZEV
Defaulty
- OBLAST - pokud se neuvede, pouzije se 10.0.0.0/8
- ICON - pokud se neuvede soubor s ikonou, program priradi vlastni ikonu podle typu (doporucuji pouzivat ikony jenom pokud je to neco extra, napr. logo)
TYP
- GAME/*=Herní servery
- GAME/Q3=- Quake 3
- GAME/CS=- Counter Strike
- GAME/CS-S=- Counter Strike: Source
- GAME/CS-CZ=- Counter Strike: Condition Zero
- GAME/HL=- HalfLife
- GAME/HL2=- HalfLife 2
- GAME/OPENTTD=- OpenTTD
- GAME/ET=- Enemy Territory
- GAME/SOLDAT=- Soldat
- GAME/WOW=- World of WarCraft
- GAME/W3=- Warcraft III
- GAME/BNET=- Battle.net emulátory
- GAME/COD=- Call of Duty
- GAME/UT=- Unreal Tournament
- GAME/UT2004=- Unreal Tournament 2004
- WEB/*=Webové stránky
- WEB/PORTAL=- portály
- WEB/STATS=- statistiky
- WEB/WEBCAM=- webkamery
- WEB/RADIO=- rádia
- WEB/ROUTER=- routery
- WEB/CZF4BFU=- CZF4BFU server
- WEB/GIS=- Geografický informační systém
- WEB/TV=- Televize
- WEB/PAGE=- ostatní
- P2P/*=Peer to Peer sítě
- P2P/DC=- Direct Connect
- P2P/ED2K=- eDonkey
- P2P/BTT=- BitTorrent Tracker
- VOIP/*=Hlasová komunikace
- VOIP/VENTRILO=- Ventrilo
- VOIP/TS=- TeamSpeak
- VOIP/SIP=- SIP
- VOIP/H323=- H323
- UPDATE/*=Aktualizace
- UPDATE/SUS=- Windows Update
- UPDATE/AVG=- AVG Antivirus
- UPDATE/NOD=- NOD32 Antivirus
- MIRROR/*=Mirrory
- MIRROR/CENTOS=- CentOS
- MIRROR/DEBIAN=- Debian
- MIRROR/FEDORA=- Fedora
- MIRROR/FREEBSD=- FreeBSD
- MIRROR/UBUNTU=- Ubuntu
- MIRROR/SUSE=- SuSE
- MIRROR/KERNEL=- Kernel
- IRC=IRC chat
- FTP=FTP
- JABBER=Jabber
- SMTP=STMP
- NTP=NTP
- PROXY=PROXY
- SAMBA=SAMBA
URL*
URL, URLIP a URLINET, tyto tri polozky reprezentuji tri moznosti odkazovani se na zdroj. URL odkazem do site CZFree (pripadne je bran za hlavni), URLIP je odkaz do CZF vyjadreny IP adresou (pro pripad nefunkcniho DNS), URLINET je alternativni odkaz pres Internet (pro sluzby s verejnou IP).
OBLAST
Polozka oblast je ve formatu IP.AD.RE.SA/XX. Neni-li oblast vyplnena, predpoklada se defaultni hodnota 10.0.0.0/8.
ICON
Ikony musi byt ve formatu PNG. V programu se pouzivaji ikony 32x32 a 16x16 pixelu, pokud ma soubor jine rozmery, konvertuje se na 32x32. Pokud item obsahuje jen jeden odkaz na ikonu, druhy rozmer se automaticky dopocita, takze vetsinou staci vytvorit ikonu 32x32 a program si vytvori 16x16. PNG muze byt libovolneho druhu (cb,paleta,rgb) s libovolnou pruhlednosti (zadna,color,map,translucent). Program pri konverzi ikon na jiny rozmer konvertuje i pruhlednost.
Priklad DEU
TYP: HTTP URL: http://www.czfree.net POPIS: Domaci stranka site CZFree.Net NAZEV: CZFree.Net forum TIMESTAMP: 75264675646 Sat Apr 16 23:49:46 CEST 2005 OBLAST: PRIVATNi: N KONTAKT: deu@serenanasvsechny.nikdynezvednetelefon.czf IDPOLOZKY: 1 TYP: HTTP URL: http://connected.czf URLIP: http://10.24.1.2 NAZEV: Connected forum POPIS: Neverejne forum Connected je pracovni nastroj komunity CZFreenet dostupny jen zvnitru site TIMESTAMP: 75264675800 Sat Apr 16 23:52:50 CEST 2005 OBLAST: 10.55.0.0/24,10.10.128.0/17 PRIVATNi: N KONTAKT: carlos@cojavim.kde IDPOLOZKY: 2 TYP: IRC URL: irc://irc.bakulak.kosire.czf URLIP: irc://10.15.0.1 NAZEV: Bakulak IRC server POPIS: IRC kecani dostupne zevnire 10.15cloudu TIMESTAMP: 75264675800 Sat Apr 16 23:52:50 CEST 2005 OBLAST: 10.15.0.0/16 IDPOLOZKY: 3 ALT: #czfree.net
Interpretace DEU jednotek
Dalsi veci je jak interpretovat DEU jednotky... Navrhuji zatim nejaky jednoduchy PHP nebo Perl parser, ktery z DEU jednotek vytvori nejakou jednoduchou HTML stranku s urcitou moznosti setrideni podle typu zdroje ci mista urceni...
neco uz facha: http://www.czela.net/czf4bfu/services.php download: http://www.czela.net/czf4bfu/czf4bfu.tar.bz2 mirror: http://www.jklir.net/czf4bfu.tar.gz
Unreal][ův rozcestník: http://czf4bfu.kobylisy.czf/ download: http://www.jklir.net/jklir_soubory2/odkazy/tar.gz.php?get=czf4bfu
Dobre bude take udelat nejaky html help soubor kde budou popsany jednotlive typy zdroju (predpoklad je, ze totalni lama nevi co znamena zkratka irc atd...)... vyhodou tohodle je, ze na server nebudou kladeny naky velky naroky, staci web server, phpko nebo perl a to je vsechno, klient si vystaci s prohlizecem....
Dale az se system nak tak rozjede bylo by dobre popsat CZF4BFU pomoci DNS (ne pro komunikaci server-server ale pro komunikaci klienta se serverem), aby lama mohla navazat kontakt na html se zdrojema pomoci dotazu http://bfu.mujcloud.czf
Jo a snad posledni postreh, mozna by nebylo od veci do DEU zakomponovat ID nodu v mape... bylo by velmi elegantni pri nalezeni nakeho zdroje hned vedet kde presne fyzicky je (+ napr. u takove web kamery je to uplnne husta informace....)
Dostupné implementace
- R00tuv win32 program: http://www.r00t.cz/czf4bfu/czf4bfu.zip
- R00tuv win32 editor: http://www.r00t.cz/czf4bfu/bfuedit.zip
- Majkluv php/perl/mysql www frontend: http://www.czela.net/czf4bfu/czf4bfu.tar.bz2
- Pihhanuv perl-only jednoduchy frontend: http://pihhan.cipis.net/czfree/czf4bfu/
- Lankviluv python frontend: http://lankvil.wz.cz/czf4bfu-gtk/czf4bfu-gtk.rar
- Quoinguv PHP web-frontend http://czf.gorila.cz/czf4bfu-web-fe.tar.gz
- Unreal][uv php/shell www frontend http://www.jklir.net/jklir_soubory2/odkazy/tar.gz.php?get=czf4bfu
Cloudy
INSERT INTO `clouds` VALUES ('10.1.0.0/16', 'Connection.cz / AS Centrum network', 'AS64550'); INSERT INTO `clouds` VALUES ('10.2.0.0/16', 'Praha - Connection.cz', 'AS64602'); INSERT INTO `clouds` VALUES ('10.10.0.0/16', 'reserved', 'AS64510'); INSERT INTO `clouds` VALUES ('10.11.0.0/16', 'Praha - Střešovice, Břevnov, Hradčany, Strahov', 'AS64611'); INSERT INTO `clouds` VALUES ('10.12.0.0/16', 'Praha - Nusle, Michle, Ruská ul.', 'AS64512'); INSERT INTO `clouds` VALUES ('10.13.0.0/16', 'Praha - Stodůlky, Nové Butovice, Luka, Lužiny, Řeporyje', 'AS64513'); INSERT INTO `clouds` VALUES ('10.14.0.0/16', 'Praha 6', 'AS64514'); INSERT INTO `clouds` VALUES ('10.15.0.0/16', 'Praha - Malvazinky, Kosíře, Motol', 'AS64515'); INSERT INTO `clouds` VALUES ('10.16.0.0/16', 'Praha - Barrandov', 'AS64516'); INSERT INTO `clouds` VALUES ('10.17.0.0/16', 'Praha - Záběhlice, Zahradní město', 'AS64517'); INSERT INTO `clouds` VALUES ('10.18.0.0/16', 'Praha - Dejvice, Podbaba', 'AS64518'); INSERT INTO `clouds` VALUES ('10.19.0.0/16', 'Praha - Suchdol', 'AS64519'); INSERT INTO `clouds` VALUES ('10.21.0.0/16', 'Praha - Řepy, Zličín', 'AS64521'); INSERT INTO `clouds` VALUES ('10.22.0.0/16', 'Praha - Holešovice', 'AS64522'); INSERT INTO `clouds` VALUES ('10.23.0.0/16', 'Praha - Žižkov, Vinohrady', 'AS64523'); INSERT INTO `clouds` VALUES ('10.24.0.0/16', 'Praha - Jarov, Strašnice, Malešice, Skalka', 'AS64524'); INSERT INTO `clouds` VALUES ('10.25.0.0/16', 'Praha - Hlubočepy, Podolí, Braník', 'AS64525'); INSERT INTO `clouds` VALUES ('10.26.0.0/16', 'Praha - Černošice, Zbraslav, Radotín', 'AS64526'); INSERT INTO `clouds` VALUES ('10.27.0.0/16', 'Praha - Modřany, Velká Chuchle, Hodkovicky', 'AS64527'); INSERT INTO `clouds` VALUES ('10.28.0.0/16', 'VYPAL (VYsočany, PAlmovka, Líben)', 'AS64528'); INSERT INTO `clouds` VALUES ('10.30.0.0/16', 'Praha - Hostivař, Horní Měcholupy, Dolní Měcholupy, Běchovice', 'AS64530'); INSERT INTO `clouds` VALUES ('10.31.0.0/16', 'Praha - Bohnice, Cimice', 'AS64531'); INSERT INTO `clouds` VALUES ('10.32.0.0/16', 'Praha - Dolní Chabry, Ďáblice, Kobylisy, Vychovatelna', 'AS64532'); INSERT INTO `clouds` VALUES ('10.33.0.0/16', 'Praha - Prosek, Letnany, Čakovice', 'AS64533'); INSERT INTO `clouds` VALUES ('10.34.0.0/16', 'Praha - Letná, Strossmajerak', 'AS64534'); INSERT INTO `clouds` VALUES ('10.37.0.0/16', 'Praha - Radotín', 'AS64537'); INSERT INTO `clouds` VALUES ('10.38.0.0/16', 'Praha - Chodov, Opatov, Háje, Kateřinky', 'AS64538'); INSERT INTO `clouds` VALUES ('10.39.0.0/16', 'Praha - Šibřina, Újezd nad Lesy, Koloděje, Květnice', 'AS64539'); INSERT INTO `clouds` VALUES ('10.40.0.0/16', 'Praha - Krč, sidl.Novodvorská, Kačerov, Spořilov, Roztyly', 'AS64540'); INSERT INTO `clouds` VALUES ('10.41.0.0/16', 'HMNet', 'AS64541'); INSERT INTO `clouds` VALUES ('10.42.0.0/16', 'Černošice, Všenory, Mokropsy a okolí', 'AS64542'); INSERT INTO `clouds` VALUES ('10.43.0.0/16', 'Řepná pole', 'AS64543'); INSERT INTO `clouds` VALUES ('10.50.0.0/16', 'Praha - Centrum Prahy', 'AS64550'); INSERT INTO `clouds` VALUES ('10.51.0.0/16', 'Praha - Petřiny', 'AS64551'); INSERT INTO `clouds` VALUES ('10.55.0.0/16', 'Connection.cz', 'AS64550'); INSERT INTO `clouds` VALUES ('10.63.0.0/17', 'Rakovník a okolí', 'AS65063'); INSERT INTO `clouds` VALUES ('10.66.0.0/16', 'Praha - Hostivice, Rudná u Prahy, Chyne, Ptice, Červený Újezd, Sobín, Úhonice', 'AS65065'); INSERT INTO `clouds` VALUES ('10.69.0.0/17', 'Mělník a okolí', 'AS64690'); INSERT INTO `clouds` VALUES ('10.69.128.0/17', 'Neratovice a okolí', 'AS64690'); INSERT INTO `clouds` VALUES ('10.81.0.0/16', 'Jihlava', 'AS64810'); INSERT INTO `clouds` VALUES ('10.88.0.0/16', 'Říčany, Mnichovice a okolí', 'AS64880'); INSERT INTO `clouds` VALUES ('10.91.0.0/16', 'Velké Přílepy', 'AS64910'); INSERT INTO `clouds` VALUES ('10.92.0.0/16', 'Libcice nad Vltavou', 'AS64920'); INSERT INTO `clouds` VALUES ('10.93.0.0/16', 'Čelákovice', 'AS64930'); INSERT INTO `clouds` VALUES ('10.95.0.0/16', 'Řevnice, Dobřichovice', 'AS64950'); INSERT INTO `clouds` VALUES ('10.99.0.0/16', 'Třebestovice', 'AS64990'); INSERT INTO `clouds` VALUES ('10.100.0.0/16', 'Říčany', 'AS65100'); INSERT INTO `clouds` VALUES ('10.101.0.0/16', 'Liberec', 'AS65101'); INSERT INTO `clouds` VALUES ('10.102.0.0/16', 'Kladno, Unhošť a okolí', 'AS65102'); INSERT INTO `clouds` VALUES ('10.103.0.0/16', 'Karlovy Vary', 'AS65103'); INSERT INTO `clouds` VALUES ('10.104.0.0/16', 'Jablonec', 'AS65104'); INSERT INTO `clouds` VALUES ('10.105.0.0/16', 'Kolín', 'AS65105'); INSERT INTO `clouds` VALUES ('10.106.0.0/16', 'Kutná Hora - okres', 'AS65106'); INSERT INTO `clouds` VALUES ('10.107.0.0/16', 'Hradec Králové', 'AS65107'); INSERT INTO `clouds` VALUES ('10.108.0.0/16', 'České Budějovice', 'AS65108'); INSERT INTO `clouds` VALUES ('10.109.0.0/16', 'Plzeň', 'AS65109'); INSERT INTO `clouds` VALUES ('10.110.0.0/16', 'Chrudim', 'AS65110'); INSERT INTO `clouds` VALUES ('10.111.0.0/16', 'Plzeň - sever', 'AS65111'); INSERT INTO `clouds` VALUES ('10.112.0.0/16', 'Lysá nad Labem', 'AS65112'); INSERT INTO `clouds` VALUES ('10.114.0.0/16', 'Příbram', 'AS65114'); INSERT INTO `clouds` VALUES ('10.128.0.0/16', 'Brno - město', 'AS65533'); INSERT INTO `clouds` VALUES ('10.129.0.0/16', 'okolí Brna', 'AS65533'); INSERT INTO `clouds` VALUES ('10.130.0.0/16', 'Severní Morava', 'AS65130'); INSERT INTO `clouds` VALUES ('10.131.0.0/16', 'Jižní Morava', 'AS65131'); INSERT INTO `clouds` VALUES ('10.132.0.0/16', 'Morava - Olomouc', 'AS64632'); INSERT INTO `clouds` VALUES ('10.133.0.0/16', 'Prostějov', 'AS65533'); INSERT INTO `clouds` VALUES ('10.134.0.0/16', 'rezerva pro Moravu', 'AS65533'); INSERT INTO `clouds` VALUES ('10.135.0.0/16', 'rezerva pro Moravu', 'AS65533'); INSERT INTO `clouds` VALUES ('10.136.0.0/16', 'testovací sítě pro Moravu', 'AS64636'); INSERT INTO `clouds` VALUES ('10.144.0.0/16', 'Zlín, Vsetín, Valašské Meziříčí - okresy', 'AS65144'); INSERT INTO `clouds` VALUES ('10.152.0.0/16', 'Ostrava - okres', 'AS65152'); INSERT INTO `clouds` VALUES ('10.153.0.0/16', 'Ostrava - okres', 'AS65152'); INSERT INTO `clouds` VALUES ('10.154.0.0/16', 'Ostrava - okres', 'AS65152'); INSERT INTO `clouds` VALUES ('10.155.0.0/16', 'Ostrava - okres', 'AS65152'); INSERT INTO `clouds` VALUES ('10.160.0.0/16', 'Teplice a okolí', 'AS65166'); INSERT INTO `clouds` VALUES ('10.253.0.0/16', 'NCX - Zápy', 'AS64802'); INSERT INTO `clouds` VALUES ('10.254.0.0/16', 'NCX-BACKB-1', 'AS64801');
FAQ
Kde zjistím jestli mnou připravený konfig systém czf4fbu čte?
- v logu HTTP serveru, pokud ho cte klient tak ma user-agent: CZF4BFU
Mohu systém czf4bfu nějak upozornit že jsem vytvořil/pozměnil konfiguraci?
- Servery 1x denne stahuji seznamy ze vsech cloudu ktere maji v configu (= zmena se projevi za den)
- Klientska aplikace aktualizuje data z lokalniho cloudu pri startu nebo pokud bezi dele tak 1x denne
Je někde na webu aktuální databáze systému czf4bfu?
- databaze nodu se zatim udrzuje prez forum/domluvou, je potreba doresit
Kdo projekt czf4bfu řídí?
- projekt se deli na dve casti:
- server-server cast: neparsuje nijak vlastni format, stara se pouze o aktualni data na serveru
- client-server cast: zde jde o interpretaci dat uzivateli a jejich aktualizace ze serveru z nejblizsiho cloudu. Format dat se domluvil na foru
Kdo na projektu czf4bfu spolupracuje a co mají tito lidé na starosti?
- viz. odstavec Dostupné implementace
Co mám udělat když bych chtěl zprovoznit server systému czf4bfu?
- 1. Vytvorit na HTTP serveru adresar /czf4bfu/ a povolit vypis adresare (je dobre si precist komunikace server - klient - poradi pri hledani zdroju)
- 2. Vytvorit soubor global-<cloud>.txt s popisem sluzeb
- 3. Stahnout a nastavit PERL skipty aby synchronizovaly data z ostatnich serveru (pls. nekdo tohle rozepiste jako navod)
- 4. Oznamit ostatnim ze bezi novy server at si ho pridaji do seznamu