Přechod firmy na Linux - 2. díl (PRAKTICKÁ REALIZACE)
Minulý díl shrnoval první tři týdny (resp. 15x pracovní směna), kde jsem si během čtení vypisoval poznámky (které jsem považoval za důležité pro to, co budu chtít dělat a to, co ještě nevím), které jsem poté převedl do tohoto "krátkého" článku. Až potud je to teorie. Teď se tedy postíme do praxe. Předem upozorňuji, že to bude opět dlouhé, nudné a pro někoho možná zbytečné (navíc toto není ani poslední díl!). Takže vřele doporučuji dávat pozor na to, co vlastně čtete :-). Nebudu to dělit na kapitoly, takže si to buď přečtěte od začátku do konce nebo použijte Vyhledávání těch slov, které Vás zajímají. A teď... Vložil jsem Ubuntu 5.10 do mechaniky a začal instalovat.
Instalátor našel obě síťové karty (Windows si s tou druhou neporadil). Nastavil jsem ručně síťovou adresu a masku, dokonce i bránu (ale tu mi to nevzalo, protože se k ní nemohl připojit). Zadal jsem také 2 DNS a jméno PC. Vytvořil jsem na 120 GB disku prázdnou oblast, a poté oblasti 0.1GB pro /boot (zaváděcí), 20 GB pro /usr, 70 GB pro /home, 10 GB pro /var, 15 GB pro /, a 5 GB pro swap a budu se modlit, aby to nějak fungovalo :-) Nainstaloval se zavaděč GRUB. Vypnul jsem bootování z CD a diskety, zahesloval BIOS a zamknul počítač. V BIOSu jsem také zapnul kontrolu instrukce otevření víka a automatický start každý den o půlnoci, pokud by napájení vypadlo na déle než 30 minut a tedy by se server musel i s UPS vypnout. Nastavil jsem heslo pro roota v recovery módu. Počítač se teď startuje dost rychle (ale samotné program startují více méně stejně jako na 300 MHz se 128 MB RAM). Máme tu ale první problém: nefunguje mi heslo pro roota (resp. to, které se zadává ve Správci v GUI). Asi to bylo tím, že se mi neustále během jeho zadávání (i mimo to) vypisoval nějaký nápis o kartě eth0. Tak jsem dal novou instalaci, na platných oddílech jsem jen zase zadal přípojné body a raději ze zformátoval, a jako primární jsem zvolil druhou síťovou kartu (budoucí vnitřní). Tentokrát se už i závěrečná fáze instalace vypisovala dobře (bez rozsypání) a žádné výpisy v nouzovém režimu nebyly. Raději jsem si ještě ověřil, jestli je prohozené Z a Y (platí IBM, zatímco v X česká, ale to jsem před tím také zkoušel prohodit). Heslo je ale divné. Když jsem ho nastavil, tak se mohu přihlásit jako ROOT v recovery i přes SU v Gnome. Ale SUDO a tím pádem ani přístup do Správy nefunguje (heslo je špatně). Naštěstí ale mohu spustit všechno tak, že zadám v Terminálu SU a pak název panelu, který potřebuji (nahlásí mi ho přímo "SUDO", když mi sděluje, že to heslo je "špatně"). Nastavil jsem tedy síť podle svého návodu (zatím jen adresy). Ke každé EHTx jsem dodal správnou bránu (k té druhé ještě IP a masku) podle seznamu, jako kdyby to byl Windows. Aktivní jsou tedy obě. ETH1 je podle plánu vnitřní síť a ETH0 vnější. Ověřil jsem si, že jsem velikosti oddílů nastavil zřejmě docela rozumně. Pro sdílení složek jsem si nainstaloval NFS, protože to umožní lepší řízení správy pro přístup než Samba (Windows se tam prostě nedostane, jedině přes VNC, kde bude muset zadat heslo). Nastavil jsem automatické stahování balíčků a jejich ponechávání v cache po dobu 30 dnů (pro stanice). Nastavil jsem spořič na 1 minutu (Blank), a zároveň jeho zamknutí heslem (0 minut). Lepší ale bude, když pak přidám do programů po spuštění nějaký ten zamykač. Tak jsem se ztrapnil na fóru, abych zjistil, že do SUDO se zadává heslo uživatele, ne superuživatele, a tudíž asi i do těch nabídek v menu Správa. Takže ta reinstalace byla na nic (no co, trvala asi jen 15 minut). Popravdě, až sem to musí zvládnout každý blbeček :-)
Dále jsem nastavil prostředí pro roota i pro normální účet, změnil soubory hosts, networks, host, menu.lst pro GRUB (vypnul boot do Windows a skryl menu, navíc jsem si udělal kopii jádra a přidal ho jako zálohu pro případ, že bych nějak to normální zkazil). Příkazy ROUTE a IPTABLES se pak zřejmě napíší do skriptu /etc/rcS.d/S40networking na konec. V adresáři /home jsem si vytvořil adresáře www a ftp, až budu později provozovat tyto služby. Nakonec jsem si udělal skript startup v adresáři /etc/init.d a do /etc/rc2.d jsem dal link pomocí:
ln -s /etc/init.d/startup.sh /etc/rc2.d/S09startup.sh
Jeho obsah je prozatím následující (než to dokonale pochopím) - vše je v kódování UTF8:
Obrazky\STARTUP.SH
Ale tento skript mi nefungoval (iptables hlásilo nějaké divné chyby). Nakonec jsem získal radu používat iptables-save, takže jsem celý skript vložil do bashe přes CTRL+SHIFT+V a pak napsal iptables-save > /etc/iptable, který poté už budu obnovovat pomocí iptables-restore
/proc/sys/net/ipv4/ip_forward" a ověřil si, že maska pro roota (umask) je opravdu 022 (nejpřísnější). A v souboru /etc/network/options jsem změnil ip_forward na yes. Vytvořil jsem si na serveru všechny další uživatele (celkem 6), kteří by se k němu mohli přihlašovat, kromě mě jsem jim dal skoro nulová práva ve využívání HW, a dal je do zvláštní skupiny. Uživatel na serveru k nim nepatří. Také jsem stvořil další verzi skriptu (která ovšem zase není funkční, protože jsem stále nechápal význam všech těch příkazů):
Obrazky\IPTABLES-SET
Tak jsem zjistil, že mi ping funguje, když celé IPTABLES dám na ACCEPT. Tzn., že tam musí být někde chyba (nastavení adres a bran je zřejmě správně). Dokonce mám i problémy s tím, že po kliknutí na Odhlásit čekám poprvé tak 3 minuty, než se to okno objeví (pak až do restartu ne). Po krátké práci mi už práce s terminálem připadá zcela normální (a rychlejší než používání Nautila), takže příkazy jako LS, CD, CAT, GEDIT, SU používám, jako kdybych je znal odjakživa.
Možná bude vhodné nainstalovat ještě: Konqueror, Kppp (raději nechat WVDIAL), Krusader, MC, Ark, K3B, GQview, KArchiveur, program pro internetové rádio (najdu si ve Správci; nejlépe pro XMMS), namísto Corel Draw prý stačí XFIG (viz. seznam na http://proc.linux.cz/ekvivalenty.html), a balíček msttcorefonts pro fonty. S tím skriptem jsem se zeptal na fóru a během víkendu jsem dostal nejen informaci o tom, proč nefunguje ping (nemám povolené ICMP), ale také odkaz na kompletní (anglický) tutoriál. Nejvíce mne ale potěšil zaslaný skript na firewall, který obsahuje i spoustu ochran proti červům. Takže si ho jen přepíšu, abych se v té syntaxi vyznal. Docela mne to pomohlo. Jediný problém byl v tom, že můj skript tak nějak nefunguje (asi). Tak jsem raději použil ten původní skript a jen jsem si ho přeložil, upravil, atd. Sice po jeho aktivaci trvá skoro 10 minut, než IPTABLES vypíše všechny pravidla, ale zdá se, že PING funguje (až na to, že hlásí nedostupný port, ale to by mohlo být u serveru v pořádku). Ale po kliknutí na Odhlásit/Vypnout už to čeká asi jen 5 vteřin, takže se to o dost zlepšilo! A to hlavní: docela už začínám i chápat, co ta kompletní pravidla znamenají. Také mi došla jedna zajímavá věc. Na serveru asi nebudu zadávat bránu poskytovatele, ale bránu IP adresu toho ADSL modemu. Tomu budu asi muset přidělit adresu pro LAN jako 192.168.2.1, aby se na požadavky na něj nesměrovaly zpět do 192.168.1.0. Windows XP si v současném stavu vybrali automaticky pro DHCP, DNS servery a Bránu adresu 192.168.1.1, což je právě adresa ADSL modemu. Teprve asi až modem má nastavenu bránu poskytovatele. Pokud bude sloužit jen jako router a ne jako NAT, nemělo by to ničemu vadit. Našel jsem také použití příkazu IP:
ip route add 192.168.1.0/24 via 192.168.1.127
je zřejmě stejné jako toto:
route add -net 192.168.1.0/24 netmask 255.255.255.0 gw 192.168.1.127
Asi ROUTE z bootovacího skriptu zatím úplně vyhodím a uvidím, co to udělá. Třeba Ubuntu už využívá IP (viz. "ip route show"). Modem jsem raději nastavil na adresu 192.168.1.128, protože 192.168.2.1 mu zatím dát nemohu, a nechtěl bych, aby se pak hádal s adresou serveru. Jsem jen zvědavý, jak budu routovat, když bude mít modem stejný typ adresy jako ostatní počítače v LAN. Sice X.X.X.128 bude jen jeden, ale router by měl umět rozlišit, že 1-127 půjde na ETH1, a zbytek (když bude chtít ETH0 posílat data na router modem) pryč z ETH0. Stvořil jsem tedy nějaké ty příkazy a umístil je do /etc/rcS.d/S55bootmisc.sh.
Obrazky\S55BOOTMISC.SH
Uvidíme (tento skript je už definitivní verze po různých úpravách, takže je snad funkční). Vyzkoušel jsem si, že k počítači není možné se připojit ani přes SSH. Zavedené účtování si můžeme prohlížet následujícím příkazem: iptables -L -Z -v -x
Modem si po vypnutí ale zase nastavil svou adresu 192.168.1.1. Já už fakt nevím. Řešením bude asi následující: v současné době dělá modem NAT, route a bridge. Vypnutím NAT zajistím, že veřejná adresa připadne serveru. Ale modem bude stále fungovat asi jako brána. Takže musím vypnout i routování, aby fungoval jen jako bridge. Ale ten modem má nějaké divné nastavení. Zatím má zapnuté všechno. Zkusím, když vypnu jen NAT a nastavím jako bránu na serveru tu, co používá modem, jestli to bude fungovat. Raději asi nastavím adresu serveru na 192.168.1.127, aby se to nemíchalo s modemem, když ho bude chtít někdo ze sítě nastavit přes WWW rozhraní. Vypnul jsem si v BIOSu hlášení chyb klávesnice, abych ji mohl vyhodit. Trochu jsem si upravil soubor firewall, takže už mohu používat vzdálenou plochu (z interní sítě) a pingnout server (z interní sítě). Připsal jsem si adresy a jména počítačů i do Windows 98 do souboru hosts.sam. Při současné konfiguraci mohu pingnout modem, svoji veřejnou IP a bránu poskytovatele. Když ale připojím server, tak mohu pingnout jen LAN počítače (a ty zase jen server). Nemohu ani na modem, ani na internet. Otázkou je, zda je špatně firewall, routování nebo něco jiného. Také budu asi muset opravit adresy ve skriptu nastavení firewallu. Zřejmě se budu muset podívat do účtování nebo do /var/log/messages. Podle výpisu ve Windows 98 si i tady myslí počítač, že na 192.168.1.1 je nejen brána, ale i DHCP server.
Manuál k modemu tvrdí, že se údaje přeci jen dají nějak uložit (a už jsem to našel, takže by to neměl ovlivňovat ani výpadek proudu). A také radí, že pokud funguje modem současně jako router a bridge, tak pokud chceme využívat router, zadáme jako bránu jeho IP adresu, pokud bridge, zadáme bránu, kterou nám zadal poskytovatel. Zkusil jsem tedy zatím vypnout DHCP server, WAN to WAN a NAT. Přes 4 hodiny jsem to zkoušel a nepovedlo se mi to. Když jsem modem připojil na eth1, tak jsem se k němu dostal, z eth0 ne. Ale mělo to i jednu pozitivní věc: během mých experimentů s firewallem jsem se dokonale naučil používat IPTABLES a IP příkazy. Povedlo se mi nastavit server tak, aby mohl pingnout sám sebe (na obě síťové karty). Původně jsem si myslel, že bude stačit, když na modemu vypnu všechno (NAT, DHCP, Route) a nechám jen Bridge, takže nastavím adresu WAN na svou síťovku. Ale podle informací z fóra a toho, jak se to chovalo (PING na modem, který na eth1 šel, se na eth0 ztrácel, přitom podle logů a diod na modemu bylo jasné, že se směruje správně; PING na bránu nyní generoval na modemu i ACK, ale na INPUT firewallu se už zase nedostal) jsem usoudil, že se mi asi mlátí WAN adresa modemu s WAN adresou eth0. Zkusím tedy podle rady vypnout DHCP (nebude potřeba), nechat na modemu NAT, firewall vypnout, router a bridge (ten by se prý měl vypnout, ještě uvidíme) nechat. Pak prý stačí udělat mezi modemem a serverem síť, takže na modemu zatím tu adresu nechám, ale na vnější síťovou kartu dám adresu třeba 192.168.1.129 a masku 255.255.255.0. Uvidíme, jestli se dostanu alespoň na modem, bránu (bránu na vnější síťovce budu muset dát 192.168.1.1) a popř. na internet. Pokud ano, tak pak nastavím i ostatní počítače v síti, aby mohly na Internet. Sice mi není jasné, jak se přes NAT někdo bude moci připojit k serveru, ale prý by to měl modem pustit dál na eth0. No, jsem sám zvědavý. To ale vyžaduje úpravu nastavení IP, Správce sítě a IPTABLES (naštěstí jde všude jen o změnu adresy, nic víc). Hlavně aby šel ten internet (protože jinak totiž mohu dělat úpravy a pokusy jen tehdy, když už ve firmě nikdo není, resp. není potřeba internet, a přepojovat kabely stále dokola také není tak zábavné). Když o tom ale tak přemýšlím, asi by bylo nejjednodušší, kdybych modem nechal na 192.168.1.1 tak jak je, vnější síťovou kartu dal na 192.168.1.2, a vnitřní síť dal tak, že server bude 192.168.2.1 a ostatní počítače zůstávají (jen se změní třetí byte na 1). To mi ulehčí situaci kdy bude nutné modem resetovat a zároveň to ukazuje postupně cestu od modemu do vnitřní sítě. Takže na všech počítačích to by mělo vypadat takto (už si s tím prakticky hraji 2 týdny):
127.0.0.1 localhost
192.168.1.1 modem
192.168.1.2 wanlan
192.168.2.1 server
192.168.2.2 ucto
192.168.2.3 abc
192.168.2.4 milanpc
192.168.2.5 dilnapc
192.168.2.6 manippc
Takže efekt je už lepší. Server může nyní na internet. To je skvělé. Dokonce může nastavit i modem přes jeho WWW rozhraní. Pingovat může na všechny strany. Stanice mohou také pingnout server, dokonce i modem, dokonce mohou i nastavit modem. Ale tady to končí. Na internet (i v prohlížeči) se prostě nedostanou. U serveru jsem sice raději nastavil zpět dané DNS servery, změnil nastavení ve Správci včetně bran (eth1=1.2 a eth0=1.1), ale prostě to nejde. Stanice také nemůže pingnout nic, co je za modemem. A to ani tehdy, když povolím kompletně celou komunikaci. Nepomáhá ani čachrování s NATem na modemu, serveru (popř. i s maškarádou, pokud totiž vypnu NAT na serveru, tak se nedostane do internetu už ani server, zvláštní), či firewallu na modem. Navíc jsem zjistil, že když na modemu vypnu firewall, tak ačkoliv mám přístup na porty 21 a 80 zakázané (to jsem dělal až dodatečně, s těmi chybami stanic to nemá na 99% žádnou souvislost), stále mi je hlásí stránka http://test.bezpecnosti.cz/ jako otevřené (naštěstí jsou jediné, ani červi by neprolezli). Možná, že testuje jen ten modem. Uvidíme, co dál ve třetím týdnu.
Obrazky\FIREWALL
Tak, třetí týden přinesl své ovoce. U modemu jsem raději routování zase zapnul. Zjistil jsem, že jsem prostě měl chybu v blokování firewallu. Takže jsem ta pravidla pro FORWARD přesunul výše a nyní už mohou stanice pingnout i internet (mají jako bránu 192.168.2.1 a statickou IP adresu 192.168.2.X). Ale nefunguje mail, ICQ ani internet. Tedy, pokud zadám IP adresu např. Seznamu, tak se na něj dostanu, ale přes jméno ne. Tak jsem si do Windows v Okolní počítače přidal ještě DNS servery (ty dva, co jsem obdržel - jako hostitelský počítač jsem zadal server, nebo-li 192.168.2.1). A světe div se, ono to funguje! Kompletně všechno, i FTP a aktualizace AVG! A test bezpečnosti stále prošel na výbornou (prakticky jsou stanice za 2 firewally). Dva úkoly ze tří jsou hotové. Teď ještě zajistit, aby se dalo připojit na server. No, to jsem sám zvědavý...
Nainstaloval jsem ještě nějaké ty "potřebné" balíčky (a např. ještě Gnome Commander, a pro vypalování DVD ještě K3B). Rozlišení jsem dal 800x600, abych měl ve Windows 98 s 1024x768 přehled o celé ploše a nemusel ji neustále posunovat (navíc je to méně náročné na straně serveru). Pomocí příkazu "SMBPASSWD -A uživatel" jsem přidal uživatele, kteří se budou moci připojovat přes Sambu (kvůli jednomu počítači s Windows 98). Jen stále nevidím SERVER v Ostatních počítačích ve Windows, dokonce ani žádné počítače v síti Microsoft v Linuxu. Zkusil jsem raději ještě test na http://security.symantec.com/ a všechno také OK.
Teď jsem se pustil do toho serveru. Načetl jsem si modem a v jeho NATu jsem přidal položku RDR, kde jsem zadal rozsah vstupních adres (Local From/To stejné) na 192.168.1.2, což je vnější síťová karta serveru. Dále jsem povolil jen 1 port jak pro cílový, tak pro místní (aby se to nemuselo překládat), na kterém budu naslouchat. A jako Global From/To jsem dal u obou svou veřejnou adresu. Otázkou je, zda se nebude muset povolit ještě firewall na modemu pro dané účely. Na něm jsem raději nastavil maximální ochranu. A přidal jsem si jako pravidlo s nejvyšší prioritou, aby propouštěl jen ten provoz, který je na mém portu pro moji veřejnou adresu, a zařadil ho do všech možných nastavení. Jako protokol jsem zvolil TCP (stejně jako u NATu), abych mohl zadat příslušný cílový port. Jako status pro packety jsem dal jak SYN, tak NOT-SYN. K tomuto jsem už rady naštěstí nepotřeboval. Pomocí testu bezpečnosti jsem si ověřil, že jsem neprovedl nějakou blbost. Ještě jsem musel povolit přístup na daný port na firewallu v Linuxu (teď se už všechno dělá přes VNC klienta).
Přístup přes SAMBU jsem vyřešil opět úpravou firewallu, kde jsem povolil porty, na kterých pracuje. Ještě jsou potíže s přístupem (vyžaduji heslo). Také jsem si nainstaloval Free Pascal (stáhnul z Internetu, rozbalil a spustil SH INSTALL.SH), abych mohl později pracovat na tom databázovém systému přímo na Linuxu (mám potíže kompilovat pro Linux pod Windows). Dokonce tu funguje i IDE! Jen v balení chybí program LD. Budu si ho muset někde ještě sehnat... asi chybička distribuce FP. Ale stačilo jen doinstalovat GCC4 a už to fungovalo i z IDE. Už jsem si tedy zkompiloval i server pro můj program (jedna úprava integer -> longint) a vyzkoušel, že se na něj mohu připojit z interní sítě (musel jsem povolit zase něco ve firewallu). Ještě by chtělo vyzkoušet, zda to půjde také zvenčí. Dneska mne také Samba poprvé pustila do serveru z jeho samého poté přes Síťové servery, co jsem zadal uživatele a heslo. Zatím se tam ale nemůže dostat Windows :-( Tak jsem do /etc/samba/smb.cong přidal "host allow = 192.168.2." a při "valid users" ještě pro případ uživatele "abc", což je název počítače s Windows (a zároveň i daného uživatele). Pak jsem restartoval Sambu pomocí "/etc/init.d/samba restart". Teď už mi Windows dovolí zadat heslo, ale to je špatně. Tzn., že budu asi muset vytvořit ještě uživatele "abc". Přidal jsem ho tedy jako uživatele, i pomocí "smbpasswd -a abc". Teď už mi Windows po zadání správného hesla povolil vidět můj uživatelský adresář, a navíc i ty ostatní sdílené. Byly menší potíže s připojením na home.tiscali, ale to vyřešilo povolení dalšího portu (naštěstí jsem za dvěma firewally a NATy). Povolil jsem si automatickou synchronizaci času a přidal ji do S55bootmisc (program NTPDATE). Protože se ale server tak často restartovat nebude, přidal jsem si do adresáře /etc/cron.daily jako root soubor "updatetime", do kterého jsem zadal příkaz "ntpdate ntp.cesnet.cz" (kromě obligátního #!/bin/sh), takže se bude spouštět každý den (což se vzhledem k tomu, že server bude dělat i evidenci docházky, dost hodí).
Obrazky\SMB.CONF
Obrazky\DOSBOX.CONF
Teď jsem zjistil, že mi přestala zase chodit Samba a dokonce i připojení na server na můj program z vnitřní sítě. Když povolím ve firewallu všechno, tak začne pracovat jen Samba, ale můj systém ne. To by mne zajímalo, kde je chyba. Aha, takže jsem zjistil, že to funguje pro Okolní počítače (resp. když dám ve Windows vyhledat Server, dostanu se na něj, ale v Okolních počítačích není), ale sám server se na sebe nemůže dostat (resp. v nevidí žádné další počítače). No, resp., mohu zadat v Místa a Připojit se k serveru... název počítače Server a sdílený prostředek, a tak se k němu dostanu, ale nevidím prostředky v Servery (po připojení Server však mohu dát Nahoru a tam vidím všechny ostatní disky). Budu se asi muset zase zeptat. Mohu se ze serveru stejným způsobem připojit i na stanice. Už se mi tak nějak podařilo stvořit pravidla, abych viděl i ostatní počítače, ale vždy mi to po chvíli prostě zmizelo. Nechápu. Tak jsem se opět šel zase jednou zeptat, co s tím (je to jen kosmetická záležitost, neboť server se na stanice dostane, stejně tak stanice na něj, jen musí člověk vědět, jak se počítače a jejich disky jmenují - což by mohlo mít výhodu v bezpečnosti).
A náhodou jsem také přišel na to, jak bude fungovat ten můj databázový program. Musí být spuštěn pod rootem (nebo s nastaveným bitem)! To ale asi nebude moc bezpečné (i když, můj program neposkytuje služby nad diskem, ty si obsluhuje sám, takže jeho zneužití by mohlo být asi tak stejné jako zneužití hry Quake 1 bez skriptů). Jenom funguje neustále, i když port 40 nepovolím, stejně se s ním můj klient dovede spojit. Asi to akceptuje ještě něco jiného, ale když ten port opravdu zakážu, tak už se spojit nedokáže. Takže naslouchá opravdu na něm. Jen by mne zajímalo, jak klient pozná, ke kterému portu se má připojit, když zadávám jen jeho vlastní. Sice jsem zjistil, že mi FP odmítá pro Linux zkompilovat Graph (stále mu chybí -lvga, a to i když jsem nainstaloval SVGAlib), takže se budu muset asi naučit SDL (žádná škoda), ale zase se mi podařilo spustit (funkčně) server pod nerootem, když jsem mu změnil práva na roota a nastavil příznak uživatele (alespoň něco). Jo, u té GRAPH jsem už pokročil. Nainstaloval jsem i DEV balík pro SVGA. Teď to zase nemůže najít LC. A aby prý nemusel mít server práva roota, tak musí používat port větší než 1024. Časem to možná takto změním, jen si budu muset v /etc/services najít volné číslo... tak, stalo se. A opravdu to pracuje. Zkusil jsem také ještě zapnout na modemu RIP pro ppp-0 a eth-0 (na něm). DNS na něm už je nastavené. Firewall a NAT mám snad dobře a přesto se nemůže můj klient připojit k mému serveru zvenčí.
Zjistil jsem, že mi nejde pingnout ani brána, ačkoliv třeba Seznam ano. Snad to není jen dočasná chybička. A také mi zlobí nějak IDE od FP (Win32 verze se dost často ani nespustí), tak jsem si raději stáhl Lazarus pro Windows. A s tím firewallem zkusím jeden trik. Zkusím naroutovat cestu k 111.222.333.444 tak, aby se požadavek nejprve posílal na bránu 111.555.666.777, která leží až za modemem, a tedy bude muset projít skrze oba firewally. Tak budu moci testovat i zevnitř sítě. No, tak ten FPC už se nastartoval, ale trvalo mu to skoro 1 minutu. Ale ta brána nejde vůbec, ani při totálně povolném firewallu. Tak ten trik s tou bránou ani není potřeba (stejně se na ní nedostanu), protože moje veřejná adresa by se měla automaticky posílal do Internetu. Ping na veřejnou IP už mi jde, protože jsem měl předtím špatné jedno pravidlo.
Zkusil jsem na modemu přidat do routovací tabulky adresu 111.222.333.444, aby ji routoval na 192.168.1.2, ale to nepomohlo. Dokonce ani vypnutí bridge. Tak jsem to zase vrátil. ALe už vím, proč mi nejde pingnout ta brána. Poskytovatel si ji změnil na 111.555.66.77. Ještě, že na její IP adresu nejsem nijak vázaný. Ale to spojení mi asi blokuje modem, protože nejde, ani když povolím na serverovském firewallu totálně všechno. Aha, tak už jsem zjistil, že musím nejprve povolit forward na serveru :-), protože pravidlo filtru na modemu ty packety započítává, když je dostane. Takže tam to funguje! Asi zlobí NAT na modemu.
Nakonec jsem nastavil NAT typu BIMAP (Two-Way), protože se na něj stejně bude vztahovat jen příchozí provoz (neboť odchozí zpracuje první pravidlo typu NAPT). Tam se příchozí packety objevují. Zkusil jsem zakázat všechny packety přicházející z Netu na server a zjistil jsem, že se opravdu vždy zahazuje tolik packetů (x2), kolikrát spustím klienta. Ale zřejmě se nejednalo o port 12345, na kterém naslouchám. Ale vysílač měl port 12345, to jsem z IPTABLES zjistil. Zkusil jsem přidat pravidlo RDR, aby všechny pokusy o spojení směroval na port 12345, ale stejně toto pravidlo nic nezachytí a všechno leze do BIMAP. Budu asi muset zjistit, na který port ty data dostávám.
Protože mne nenapadlo nic lepšího, zkoušel jsem blokovat postupně rozsahy 0:X po tisících, a zjistil jsem, že to je port 1565. Jenže za 5 minut už to byl jiný port. Řekl bych, že to dělá ten NAT. Jenže BIMAP neumí pevný port, takže si ho neustále mění. Což je nesmysl.
Zázrak. Z ničeho nic začal fungovat i ten RDR, když jsem ho přidal podruhé. Tak doufejme, že mu to vydrží. Nemám rád tyhle věci, kdy něco z ničeho nic začne samo fungovat (protože to později zase může přestat). Ale stále to přichází na úplně jiném portu, než potřebuji. Teď jsem si zkusil dát znovu Test bezpečnosti a dopadl jsem lépe, než minule. Nyní mám už všechno zelené :-O. No, tak jsem vypnul i ten RDR NAT, a nechal tam je příkaz pro router, aby požadavky na 111.222.333.444 směroval na 192.168.1.2 a ono to chodí stejně. Takže se to podle mne asi k NAT ani nedostalo (i když se tam objevovaly packety).
Zkusím ještě jednu věc. Routování vypnout (resp. jen u té veřejné IP adresy) a nastavit znovu RDR pro veřejnou IP adresu a daný port. Pokud se ovšem dostanu na modem. Prevít má zase vrtochy a nechce zobrazit WWW rozhraní (a vůbec, dva počítače s Windows 98 stejně nastavené, jeden v Okolních počítačích ty ostatní vidí, druhý ne. Co se divím). No, tak modem mi najednou sdělil, že nemá nakonfigurované PPP rozhraní. Tak jsem ho resetoval, znovu zapsal uživatelské jméno a heslo, přidal pravidlo do filtru, RDR NAT a uložil (routování veřejné IP je nastavení standardně na 127.0.0.1 na modemu). A jsem tam, kde jsem byl. Packety přijdou, ale snaží se spojit na jiný port než by měly. Tak jsem se šel zeptat na Zive :-), abych neobtěžoval stále jen na ABClinuxu.
A pokud nepřijdu na to, jak zprovoznit grafiku pod Linuxem (server ji nebude potřebovat, ale stanice ano), tak to budu muset udělat jako Windows a provozovat pod WINE :-). Test bezpečnosti je už zpět na žlutozelené (asi to dělal ten router). Tak, router musí mít směrování veřejné adresy na svoje LO, jinak to prostě nebude fungovat. Takže dělám všechno správně a stejně to nejde. A zjistil jsem, že si ten zmetek posílá packety, i když je na modemu zakážu. Zkusil jsem schválně i příkaz:
telnet 111.222.333.444 12345
a prošel také filtrem na modemu i filtrem na serveru. Ale stále má zdrojový port 12345, ale ne cílový! Pokud ovšem projde na modemu, kde musí mít cílový port 12345, tak to znamená, že ho otáčí RDR NAT na modemu. Jiné vysvětlení mne nenapadá. Zkusil jsem vypnout oba vstupní firewally na modemu, a stejně se ke mne ty packety dostaly, ovšem zachytil je až ACCEPT pro vstupní port, nikoliv pro cílový (který jde dřív). A dokonce, když jsem na modemu nastavil filtr pouze pro ppp0, tak tam neprošlo údajně nic, ale Linux packety obdržel. Přitom mi není jasné, kdo je mohl směrovat z veřejné IP na lokální, když filtr je měl blokovat, a RDR údajně žádné nezachytil. Nebo jsem blbec a funguje to takto: stanice v síti pošle data na server, ten je podle povoleného pravidla přesměruje do internetu, resp. na vnější kartu. Na tu se nějak dostanou i packety pro veřejnou adresu, takže je akceptuje (?), packety jdou ale dále do internetu, kde ovšem záhadným způsobem zmizí, stejně jako packety z počítačů úplně mimo moji LAN adresované na mojí veřejnou adresu. Pak by byl na vině zřejmě poskytovatel připojení.
Teď mne ale napadlo něco jiného. I pokud se snažím spojit s veřejnou adresou pomocí Telnetu, tak se mi přicházejí packety na lokální adresu, ale se zdrojovým portem 12345, přitom telnet určitě nenastavoval zdrojový port! Takže to vypadá, že ty packety se zastaví na modemu, a modem pošle své vlastní (z daného portu). To je pěkné, ale co teď s tím? A proč nedorazí packety, které posílají počítače mimo LAN (např. kamarád)? Zkusil jsem si zatím na www.ripe.net (WhoIs) zadat svou adresu, abych si ověřil, zda je opravdu veřejná. A také jsem si ve Windows pomocí programu TRACERT zjistil, přes které servery jdou požadavky na moji veřejnou adresu. A na modem se také mohu dostat i přes tu moji veřejnou adresu, takže by to asi honem rychle chtělo změnit heslo!
Také jsem se dočetl, že prý ten můj způsob testování, co používám, je na nic. Tímto způsobem se prý dostanu na modem, ale už ne dál. Pro test toho, zda se jde připojit přes modem k serveru je opravdu nutný někdo mimo síť. Tak jsem zkusil, aby se server na adrese:
http://anonymouse.org/anonwww.html
pokusil připojit na 111.222.333.444:12345 a i když modem nezachytil žádné packety ve vstupním filtru, tak na RDR NATu se konečně vytvořila spousta spojení a packetů. Ale do počítače mě tentokrát žádné packety nedošly... divné. Stále totiž nějak nechápu vlastnosti těchto spojení:
Translation Direction: Inside
NAT Age: 52
Translated InAddress: 111.222.333.444
In Address: 192.168.1.2
Out Address: 85.195.123.29
In Packets: 5
Out Packets: 0
In Ports: 12345
Out Ports: 43498
Translated In Ports: 12345
Zkusil jsem na modemu přidat ještě pravidlo, které propouští příchozí packety pro cílový port 12345 na cílové adrese 192.168.1.2, což je cíl pro RDR. A kupodivu, už sem ty packety prošly. Ale na Linuxu (IPTABLES) se tyto packety neobjevily vůbec. Řekl bych, že modem jen neví, kam má ty packety posílat. Přitom má v routovací tabulce napsáno, aby všechno na 192.168.1.2 směroval na eth0 na 192.168.1.1. Ovšem zároveň tam má i to, aby všechno z 1.1 směroval na LO. Ale když se pokusím přidat směrování na 192.168.1.2 (nebo smažu směrování na 192.168.1.1), přestane fungovat konfigurace přes WWW a vůbec celý internet.
Zkusil jsem zatím na firewallu modemu povolit všechno, abych zjistil, kde mi váznou ty packety. Jen tak z legrace jsem zkusil udělat znovu test bezpečnosti a údajně mám nezabezpečené služby 21, 23 a 80, ačkoliv je mám na firewallu v Linuxu zakázané pro vstup i směrování z venčí. Divné. Zmenšil jsem ještě na modemu timeout pro TCP spojení z 86400 vteřin na 3600 vteřin, ať se zbytečně nezahltí tabulka NATu.
Spojení se také dá testovat na adrese http://tdn.no-ip.org/connection_test, kde jen zadáte svůj port (adresu si to zjistí samo). Když jsem ho zkusil, tak byly packety "zachyceny" filtrem pro 192.168.1.2, ale ne pro veřejnou adresu, ačkoliv je první. Ale co je hlavní! Packety byly přijaty na Linuxu s cílovým portem 12345! I ten předchozí test už mi tentokrát nepsal Time Out, ale Connection Refused. Ho ho ho. A fungovalo to i tehdy, když jsem zase zakázal všechny vstupy kromě 192.168.1.2. Takže byly packety blokovány na výstupu. Takže jsem ještě do firewallu přidal pravidlo, aby propouštěl i packety pro port 12345 na adrese 192.168.1.2 i ven. A zajímavé je to, že filtr pro propouštění packetů pro veřejnou IP už nezachytil nic. Tak doufám, že to nepřestane z ničeho nic fungovat. Teď ještě chybí poslední test: zda se dokáže připojit můj klient. Raději jsem tam přidal ještě pravidlo, aby modem propouštěl i odchozí packety z portu 12345 a jak veřejné adresy, tak lokální 192.168.1.2. Uvidíme, které z nich se uplatní.
Zkusil jsem schválně spustit svůj server a vyzkoušet obě dvě stránky (viz. výše). Obě se dokázaly spojit a server si přečetl vzkaz od nich. Pravda, TDN dostalo asi něco jiného než čekalo, takže nahlásilo chybu hlavičky, a ANNOY zprávu ignorovalo, ale server vypsal oba vzkazy od nich, takže spojení proběhlo dobře. Zkouška od kamaráda v práci nedopadla, zřejmě kvůli jejich firewallu. Také jsem ve firewallu na Linuxu povolil FORWARD pro FTP, jinak mi totiž nešlo posílat soubory k sobě (ale jen od sebe). Filtry na modemu se uplatňují pouze pro adresy 192.168.1.2 (ať už odchozí nebo příchozí).
Teď se budeme muset pustit do výběru webové kamery. Tu bych měl po připojení najít pomocí příkazu lsusb (obdoba lspci) a pak použít nějaký program na grabování obrázků na disk. Mezitím se budu snažit nainstalovat IMAP server. Zkusil jsem Courier. Zadal jsem ho zatím jen jako lokální typ, a také heslo. Pak jsem zkusil Cyrus. Jenže ani jeden nemá GUI a tedy jsou pro mne zatím nepoužitelné. Výběr kamery v počítačové firmě nedopadl moc dobře. Doporučili mi kameru za 13 tisíc. To ale není nic moc. Tak jsem se schválně podíval na Internet do obchodu a našel jsem kameru Trust Webcam WB-1400T. Podíval jsem se na ABCLinuxu a tam je pro ní kompletní podpora a ovladač (spca5xx). Dokonce i sám Linux Ubuntu má tento ovladač (modul) už nainstalovaný, takže ho stačí případně jen zavést (asi). Kamera má udanou cenu 330 Kč včetně DPH. Asi půjdeme do ní.
Server měl svou první havárii (po necelých 3 týdnech provozu). Během víkendu vypadlo napětí na delší dobu, než dokázala UPS zachránit. Naštěstí se sám pak spustil, ale ne do X serveru. I po restartu to mělo nějakou chybu, která čekala na CTRL+D. Ale pak se do GUI dostal. Tak jsme objednali další UPS (ORVALDI UPS 620 PL), který má dokonce i schéma zapojení, takže bude stačit pod Linuxem číst sériový port a v případě informace o špatném stavu baterie server vypnout (měl by se sám zapnout o půlnoci, resp., pokud napětí opravdu vypadne i z baterie, zapne se pak sám po obnovení proudu). Původní a stará UPS se zapojí do série. Pro větší klid jsme objednali i ten nejhorší UPS (za 800 Kč) k počítači s databankou, aby se dal v případě výpadku normálně vypnout (a nepoškodil se disk, resp. data na něm).
Teď se budu zatím snažit rozchodit web server. Apache již v Linuxu je, takže ještě zjistit, jak na něj. Vida, stačilo jen povolit port 80 pro INPUT a po zadání adresy 192.168.2.1 ve vnitřní síti jsem se dostal na dokument index.html v adresáři /var/www. Teď jsem mazal na modem a vytvořil RDR pravidlo pro port 80. Když jsem ale zadal svou veřejnou adresu v prohlížeči, dostal jsem webové rozhraní modemu. Opět jsem si zvenčí ověřil, že RDR přeposílá packety. A už vím zase proč. Zadal jsem ještě do filtru na modemu kromě příchozích i odchozí packety (u obou je adresa 192.168.1.2). A ono to chodí (pokud použiji AnonymousWWW, pokud zadám svou veřejnou z LAN, dostanu se vždy na modem). To bylo fakt jednoduché. Jen jsem si trochu upravil soubor /etc/apache/httpd.conf pro 404.html soubory (403 a 500 také), přístupy, znaková sada.. adresář pro WWW jsem si přesunul do /home/www. Pak jsem restartoval Apache pomocí příkazu "/etc/rc0.d/K91apache restart". Nezapomeňte, aby adresář /www měl povoleno "spouštění" i pro ostatní uživatele, nebo dostanete "Permision Denied". Tak toto bylo snadné. Restart Apache by měl jít prý i přes "service httpd restart", ale v Ubuntu to nefunguje.
Pro jistotu jsem si zálohoval zatím adresář /etc na druhý disk (nejprve "mount" do /mnt a poté "cp -pR /etc/* /mnt"). Budu se ale muset naučit vypalovat na DVD i z příkazové řádky, aby se to dalo zautomatizovat do skriptu. Našel jsem si zatím příkaz CDRECORD, který palí, a příkaz MKISOFS, který vytváří ISO soubory pro CDRECORD. Takže pálení bude vypadat nějak takto:
mkisofs -rJ /etc /home /var | cdrecord -v fs=16m speed=8 dev=/dev/dvdrw -
kdy vypálí adresáře /etc, /home a /var na médium. Sice celý můj filesystém má 4.6 GB, takže by se na médium vešel, ale časem tam budou data určitě spíše přibývat, a dost možná, že bude stačit pak už jen pálit adresář /home, resp. jen některé jeho podadresáře.
Rozhodl jsem se zase vrátit se k poštovnímu serveru, tak jsem si stáhl Courier s IMAP serverem. Budu tomu muset přijít na kloub. Nakonfiguroval jsem ho bez WEBové konfigurace a složky jsou pojmenované MAILDIR. Příkaz "maildirmake slozka" vytvoří tuto složku v aktuálním uživateli (a to i když jej spouštítě přes SUDO nebo SU). Na pozadí běží démon "imapd", restartovat se dá pomocí "/etc/init.d/courier-imap restart". Ale píše mi to chybu ERR, že mu chybí konfigurační soubor. A dále jsem se nedostal. Konečně jsem zjistil, že se stáhnuté balíčky ukládají do složky /var/cache/apt/archives, odkud si je mohou stahovat i klientské stanice.
Zatím přišel jeden z nových zdrojů. Tak jsem ho připojil hned za ten původní zdroj (včetně sériového kabelu (a také 2m USB kabelu, i když nevím na co), který byl součástí dodávky, na COM1), v BIOSu počítače jsem nastavil, aby se počítač sám zapnul v 5:00 než v 0:00 (kdyby vypadl proudu těsně před začátkem směny), a také, aby se při každém obnovení napětí (stačí vypnout a zapnout zdroj) nastartoval nehledě na to, zda byl vypnutý nebo ne (pokud se sám vypne díky hlášení od UPS a jí dojdou baterie, jakmile se obnoví proudu v síti, počítač zase nastartuje). Ta chyba s CTRL+D se už neobjevila. Naštěstí.
K UPS se dodávají ovladače ve formě RPM pro Linux, ale bohužel se mi nepodařilo otevřít ani jeden archív. To ale nevadí. K UPS je dokumentace, takže se dočtete, že přes kabel se posílají do počítače tyto informace: pin 8 (CTS) "1" = napětí v síti OK ("0" = napětí selhalo, jede se na baterie); pin 1 (DCD) "1" = baterie jsou OK ("0" = docházejí baterie; pokud je "0" i na pinu 8, je nutné vypnout počítač - tento stav by měl být patrně indikován na pinu 7, tj. RTS). Pin 3 (TxD) se využívá jako země, takže by na něm měla být vždy 0 (nic nevysílejte). Zajímavý je pin 4 (DTR). Ten není vstupní, ale naopak výstupní a počítač jím ("1") přikazuje UPS, aby se vypnula. Příkazem "cat /proc/tty/driver/serial" zjistíme stav linek. Teď to chce ale nějak převést do Pascalu :-) Nebo by možná stačil i skript. Zdá se, že FP na to má v jednotce BASEUNIX funkce pro IOCTL, a na ABCLinuxu jsem našel příklad pro jazyk C, takže to snad nějak dám dohromady.
Příkaz pro aktualizaci času jsem si upravil na
"ntpdate ntp.cesnet.cz > /var/log/updatetime.log"
kvůli logování, ale zjistil jsem, že mi to hlásí Přístup odmítnut, když to nespustím jako Root. Ale i když mu dám IDuživatele, tak mi to hlásí zase nějakou jinou hlášku (LOG soubor jsem nastavil jako vlastníka na obyčejného uživatele, takže tady by snad chyba být neměla). Nicméně jakmile CRON spustil v 7:37 tento příkaz, tak proběhl v pořádku (podle logu). Na stránkách FP už zase funguje komunita (musel jsem si navíc povolit port 10000 na firewallu), tak jsem se zeptal na to -LC a jedná se o knihovny GLIBC (-gLibC), ale k těm se dá bohužel nainstalovat jen dokumentace, ne samotné knihovny. Nicméně mne to netrápí, tak tam pojede WinGraph a WINE.
Začal jsem pracovat na programu pro čtení stavu UPS. Našel jsem si pro FP jednotku SERIAL, která umí číst stavy pinů na lince. Našel jsem ale jen CTS. Prohledal jsem zdrojové kódy, ale DCD je pojem neznámý. Naštěstí jsem našel konstantu pro RTS, který má údajně sdružovat jak výpadek napájení, tak i slabé baterie. Takže si stačí napsat vlastní funkci. Našel jsem si také funkci pro spouštění ostatních programů (resp. příkazu "shutdown"), funkci Delay (abych nečetl stav portu stále, ale třeba jen 2x za minutu). Program bude jednoduchý, bude muset běžet s právy roota (aby mohl vypnout počítač), a budu ho muset přidat do menu Spustit při startu (dal jsem ho do /usr/bin jako ups-stat a spustil se znakem & za příkazem, aby se spustil na pozadí). Jinak server zatím ještě nezklamal a už běží přes měsíc.
Mezitím mi doma došla baterie na desce u mého prvního Pentia. Vydržela tedy 8 let přesně (a asi 3 měsíce). Budu muset koupit novou :-( Naštěstí mám zálohovanou CMOS svým programem, takže si Windows stejně ničeho nevšimly :-) To ale s naším článkem moc nesouvisí (kdybych se měl ještě zmínit o Windows vs. Linux, tak Linux má stále velkou výhodu v tom, že je zdarma. Co se týče jednoduchosti ovládání, už mi oba systémy přijdou nastejno. V obou, když něco uděláte špatně, tak to nebude fungovat, ale bohužel Windows má oproti Linuxu tu nevýhodu, že tam nemá textovou konfiguraci, takže přesně víte, co děláte a když se něco pokazí, prostě z příkazové řádky zeditujete 1 soubor a už to jede. Oproti Windows 98 také oceňuji možnost měnit cokoliv, aniž by se musel systém celý restartovat. A kdybych si měl ještě rýpnout, tak jsem teď např. 3 dny trávil ve Windows98 instalací ovladačů: zjistil jsem, že pokud k ATi RAGE XL ovladačům nedám Direct X8, budou mi tvrdit, že karta v mém PC není kompatibilní. To bych ještě snesl, ale když jsem instaloval zvukovou kartu CS4280, tak pokud byly ovladače v adresáři OVLADAČE, Windows mi tvrdil "zadané místo neobsahuje informace o hardware". Jakmile jsem je dal do OVL, už nic nenamítal. Blbec). Začal jsem také pracovat na programu na Automatické kalkulace, jehož většina jednotek se pak stane základem pro databázový systém. A celkem se mi daří.
Tak, už se dostavila i ta kamera (cca. 3.týden) s vedlejším zdrojem. S ním snad problémy nebudou, takže jdeme na tu kameru. Připojil jsem jí do USB a našel ji jak ve výpisu LSHW, tak i LSUSB. Pomocí V4L-CONF jsem si našel, že jádro má podporu Video4Linux. Pomocí LSMOD jsem zjistil, že mám v paměti USB_STORAGE, USBVIDEO, UHCI_HCD a nově zavedený modul SPCA5XX (pomocí modprobe).
Sehnal jsem prohlížeč pro SPCA5View, ale musel jsem si nainstaloval MAKE, abych ho byl schopen přeložit. Jenže pro to potřebuji SDL, které jsem si stáhl na:
http://www.libsdl.org/release/SDL-1.2.11-1.i386.rpm.
Na to jsem si ale musel doinstaloval RPM manažera z Red Hatu. Rozbalil jsem archív a dostal adresář USR. Ale i stejně potom to na mě při MAKE vychrlilo hromadu chyb. Zkusil také zavést modul VIDEODEV, ale nic. Zkoušel jsem jak WEBCAM, tak STREAMER, ale oběma vadí, že není zařízení /dev/video0. Napadlo, že bych ho mohl vytvořit. Ale jak? Tak jsem podle návodu:
http://gentoo-wiki.com/HOWTO_logitech_quickcam_on_2.6.x_kernel
napsal toto:
mknod /dev/video0 c 81 0
ln -s /dev/video0 /dev/video
Ale zdá se, že bez efektu. Tak jsem zkusil zadat "/dev/MAKEDEV video" a už se tam objevilo "video". Když jsem pak chtěl na něj dát link, napsalo to, že "video0" už existuje a pak se také v /dev objevilo. Ale stejně mi "webcam" hlásí chybu. Nahrávat z kamery by měl umět program STREAMER, tento příkaz by např. měl přečíst 1 obrázek z /dev/video0 ve formátu RGB (RAW), tj. něco jako BMP (pro JPEG by se zadalo místo "rgb" slovo "jpeg"):
streamer -f rgb -o /home/www/kamera.raw
Ale hlásí to samé, co webcam. Dokonce i příkaz v4l-conf mi hlásí, že není zařízení /dev/video0. Asi budu muset zavítat opět na fórum. Přidal jsem spca5xx a v4l2-common do /etc/modules. Video4Linux je prý součástí jádra už od verze 2.4., takže tady by problém být neměl.
Ptal jsem se na fóru, a očividně dělám všechno dobře. Už už jsem se málem dostal na radu ke kompilaci jádra (abych to tam změnil), protože nemám zdrojáky, a tedy mi nejdou ani zkompilovat moduly, či spca5xxview, a nefunguje server k jejich stažení (potřebuji verzi 2.6.12.10, jinde jsem našel jen .17.4). Pak jsem si četl na Internetu o Video4Linux a dočetl se o modulu v4l. Zkusil jsem MAN V4L a něco si přečetl. Ovšem MODPROBE tento modul neznal. Většina lidí má tento modul v /etc/X11/xorg.cong v sekci "modules" za Load. Já ne. Zkusil jsem přes MODPROBE načíst např. jiný modul z té sekce - i2c. A také ho neznal. Tak jsem si schválně zkusil přidat "v4l" do té samé sekce. Zkontroloval jsem si, že mám nainstalovaný balíček "xserver-xorg-driver-v4l" (ten už byl nainstalován). V /var/log/Xorg.0.log jsem si zjistil, že se modul "v4l" nahrává. Ale stejně to nepomohlo. Zkusil jsem si nakonfigurovat webcam do home adresáře, ale ani ten nic nenašel:
Obrazky\.WEBCAMRC
Teď jsem se dočetl, že ovladač spca5xx, který se dodává s Ubuntu 5.10 je vadný a musí se vyměnit. Měla by k tomuto sloužit tato sekvence příkazů:
cd ~
wget http://mxhaard.free.fr/spca50x/Download/spca5xx-20051212.tar.gz
sudo -s
cd /usr/src
mv ~/spca5xx-20051212.tar.gz .
tar xfvz spca5xx-20051212.tar.gz
cd spca5xx-20051212
export CC=gcc-3.4
ln -s /usr/src/linux-headers-`uname -r` /lib/modules/`uname -r`/build
make
modprobe -r spca5xx
rm -rf /lib/modules/`uname -r`/kernel/drivers/usb/media/spca5xx*
make install
modprobe spca5xx
A musíte mít tyto balíčky:
linux-headers-2.6.X.Y
linux-restricted-modules-2.6.X.Y
build-essential
gcc-3.4
když je zadáte za apt-get jako parametry, tak se Vám stáhnou (nebo použijte synaptic). Nebo přejděte na Ubuntu 6.X a bude to v pohodě (jenže to vyžaduje stovky MB, prakticky se jedná o novou instalaci). Já zkusím zatím to první (snad bylo jádro kompilováno také s GCC v3.4). Jenže zrovna jako na potvoru dneska nefunguje server s Ubuntu balíčky (alespoň pro Synaptic ne). Tak musím počkat.
A hle, nešlo o chybu serverů, ale o chybu u mne. Nevím proč. Ale vyřešil jsem ji. Když Synaptic hlásil, že nemůže načíst seznamy balíků a nabízel jen asi 1500 základních, spustil jsem v konzoli "apt-get update", ten všechny seznamy načetl a po novém spuštění Synapticu už nabízel všechny balíky. Tak jsem si šel stáhnout balík Build-Essential, protože ten jediný mi chybí.
Použil jsem svou stáhnutou verzi 20050906. Mohl bych stáhnout verzi GCC 3.4, ale protože ta tu není, zřejmě se s ní jádro nepřekládalo. Takže jsem do EXPORT příkazu zadal gcc-4.0. Rozbalil jsem si tedy svůj TAR GZ archív, a zadal v něm MAKE. Po zadání všech dalších příkazů, které všechny proběhly dobře mi ovšem MODPROBE sdělil, že modul má neplatný formát. Tak jsem si stáhl GCC3.4 a od příkazu EXPORT včetně se se všeho držel. Tentokrát už všechno proběhlo OK. Tak jsem si zkusil stáhnout verzi 20060402, třeba ta už fungovat bude. Provedl jsem zase všechno znovu (vlastně jen TAR, MAKE, a ten zbytek). A už v DMESG kamera je! Hurá! Kamera dokonce už i zhasla (dioda).
Ovšem problém nastal jinde. XAWTV mi nezobrazilo nic, v DMESG je po připojení kamery asi 9 řádků chyb (špatný parametr) a STREAMER mi hlásí "movie writer initialisation failed". Ani v4l-conf není bez chyby. Zkrátka, ioctl: VIDIOCMCAPTURE hlásí chybu u všech režimů. Napsal jsem to na fórum, ale jak jsem se tak díval všude po světě, tento problém má více lidí, a zatím jim nikdo ještě neodpověděl. Počkám.
Mezitím jsem si vyzkoušel, že když napíši příkaz "cat /dev/video0", kamera se rozsvítí a na konzoli se mi začínají vypisovat data (tipuji RAW ve formátu RGB?). Ještě zjistit, v jakém jsou rozlišení (160x120 nebo 384x288?) a jak poznám, kde končí snímek (nebo ho kamera začne posílat od XY=0,0 a pak už jde jen o to dopočítat si X*Y*3 bytů?). Kdyby to bylo takto jednoduché, tak si můžu v FP napsat vlastní zobrazovací program. Jak jsem ale zkoušel číst ta data, není to jednoduchého. Navíc bude výstup asi nějak kódovaný (Huffman?).
Zkusil jsem tedy ještě stáhnout SPCAVIEW verze 20051127, k němu budu potřebovat balík LIBSDL1.2-DEV (je naštěstí i v Synapticu). Rozbalil jsem si archív, zadal MAKE, dlouho se to kompilovalo a se spoustou "warning" hlášení, ale na konec se to dodělalo. Pak jsem dal MAKE INSTALL a po zadání SPCAVIEW se mi otevřelo okno, ve kterém jsem viděl výstup z kamery (zdrojáky k ovladači i prohlížeči jsem si dal do /usr/src). Průměrná rychlost byla 15 fps (pod Windows 98 s jejich ovladači asi okolo 25-30 fps). Potřebuji ale vždy jen jeden snímek za 1-5 minut. Manuál MAN tu není. V README jsem se ale dočetl, že musím zadat toto:
spcacat -v -b -N 1 -o > /dev/null
A dostanu vytvořený JPEG s rozlišením 352x288 (pokud máte více kamer, vyberete si jednu pomocí -d /dev/videoX). Pokud vynechám -o, bude jméno souboru čas jeho vytvoření. Pokud namísto -N použiji -p, bude program běžet neustále a každých X vteřin (např. 60) típat obrázek. Prohlížet se můžete také např. přes spcaview, který umí i video, ale to já osobně nepotřebuji. Můj program ale bude potřebovat BMP, aby byl schopen obrázky zobrazovat (jiné formáty, kromě ještě GIF, PCX a TGA, zatím neumím).
Naučil jsem se teď ale hodně nových věcí. Mezitím jsem zjistil, že počítač na server, ač je starý, tak si umí regulovat otáčky, tj. pokud je velké vedro, zapne se ventilátor na plné pecky. Doma jsem zatím vyřešil problém s alokací paměti (WITH chyba) pro Kalkulace (jednotky budou sloužit pak jako základ pro databázový systém). FP má jednotku PasJPEG. Asi se jí budu muset naučit. Zdálo se, že je celkem jednoduchá. Problémy ovšem nastaly, že je pro starší verzi, takže jsem musel doplňovat @ před přiřazování procedur a nakonec to celé stejně nechodilo (Access Violation). Asi využiji nějaký Linux nebo Windows program pro klienty, kteří budou JPEG převádět na něco jiného, popř. linux program pro Server, který JPEGy od klientů převede na nějaký svůj formát, který dokáží pak zobrazit i klienti. S JPEG asi není legrace.
Přechod celé firmy na Linux selhal v tom, že pod Linuxem neběží Corel 11 (špatně, nebo vůbec). Je tedy nutné vyřešit kompromis. Na jeden počítač se koupily Windows XP a Corel Draw 11. Na druhém počítači se legalizovaly Windows 98 a Microsoft Office 2000 (tady je nutný Windows kvůli SW pro Tajima systém). Na ostatní počítače se dal Open Office. Další dva počítače ve firmě dostanou přímo Linux Ubuntu 6 (vč.Open Office). Ještě to ale chce vyřešit sdílení pošty minimálně mezi Windows XP a jedním počítačem s Linuxem. Pravděpodobně se na oba dá něco jako ThunderBird.
Kameru jsme vyzkoušeli na ostro a zjistili, že je moc citlivá na světlo, resp. je to přesvětlené. Nicméně jsme ji umístili do kanceláře a tam svůj úkol plní znamenitě. Tak se objednala od stejného výrobce kamera s čipem 640x480, která by snad mohla být lepší. Našel jsem také převodník JPG2BMP a zpět pro příkazovou řádku (asi pro DOS), což se velmi hodí pro můj program Kalkulace (a zároveň později pro databázový systém), protože JPEG je dost hodně používaný formát. Našel jsem také převodníky pro GIF a PGA. To se hodí :-)
Objednali jsme novou kameru pro druhou místnost. Přišla kupodivu druhý den. Je to Trust WB-3400T, výrobce Microdia s čipem Sonix (aby to nebylo tak jednoduché). Když jsem ji připojil, tak mi systém napsal:
sn9c102: V4L2 driver for SN9C10x PC Camera Controlers v1:1.24
usb 1-2: SN9C103 PC Camera Controler Detected (vid/pid 0x0C45/0x60AF)
usb 1-2: No supported image sensor detected
usbcore: registered new driver sn9c102
Což není moc pěkné. Kamera je připojena přes 2 kabely USB, takže celková délka je 5.6 metru, ale stejně se chová i připojená přes 1 kabel. Tipoval jsem na chybu v ovladačích. Někde jsem se dočetl, že by měly stačit ovladače SPCA5XX, ale očividně ne. Když jsem modul SN9C102 přejmenoval, tak už Linux kameru vůbec nepoznal. Ovladače SONIX mi nešly zkompilovat. Podle názorů na fórech jsem zjistil, že s touto kamerou jsou pěkné potíže (ostatně stejné jako s tou minulou). Ale našel jsem stránku
http://who.is.free.fr/wiki/index.php?Sonix
kde jsem se "přesvědčil", že by kamera měla chodit, a že ovladače jsou pravděpodobně určitě vadné (co vlastně ve verzi 5.X funguje? :-D). Stáhl jsem si tedy ovladače verze 1.32 z adresy:
http://www.linux-projects.org/modules/mydownloads/viewcat.php?cid=2
a zkusil je zkompilovat. Ovšem po příkazu "make modules" jsem dostal hromadu hlášek a žádný modul. Zřejmě bude opět chybět nějaká knihovna. Ale protože zatím nevím, jaká, musel jsem se opět obrátit na ABCLinuxu. Zkusil jsem také patch, který jsem našel na fóru LinuxProject, ale ten jen zmenšil počet chyb, jinak nic. Dočetl jsem se, že ovladač potřebuje jádro 2.6.16. To sice vyšlo, ale zdá se, že Ubuntu jej zatím nemá (a verze 5.10 asi mít ani nebude).
Podle informací na fóru jsem nabyl dojmu, že se světlem mají potíže všechny kamery v ceně do 500-1000 Kč, a že ty 640x480 stejně většinou toto rozlišení pod Linuxem nepodporují (pokud vůbec chodí). Takže pravděpodobně objednáme ještě jednou tu 1400T a pokusíme se jí dát tak, aby se pokud možno nedívala do oken. Tu novou kameru si naštěstí vzala majitelka (jinak bych si ji asi musel vzít já). Jen ještě poznámka k ovládání, SPCACAT se musí vždy volat s -N 1, jinak bude stále čekat. Nevím proč, ale je to tak. No, tak dobře. Takže tu 1400 kameru jsme objednali ve vedlejší PC firmě, kde snad ani nebudeme platit poštovné. Zároveň jsem přikoupil další 2 metrový USB kabel a budu se modlit, aby kamera fungovala i na 7.5 metru (což je o 50% víc než by teoreticky mělo chodit).
Teď ještě ale musím vyřešit další problém s mým programem: když je tam WinGraph, tam mi nefunguje klávesnice a myš ignoruje stisky tlačítek (což je dost blbé, nemyslíte?). Napsal jsem autorovi, snad se to nějak vyřeší. Mezitím zatím vytvářím jeho jednotky pro práci s obrázky, tlačítky, texty, okny, seznamy a nakonec i komunikaci přes sockety (TCP). Autor se bohužel zatím ještě neozval. Pokud to nepůjde, bude muset asi program otevírat druhé okno v textovém módu pro zadávání údajů a myš mačkat tlačítka stylem "1 vteřina nad ním = stisknuté".
Tak, doma jsem zkusil postupně odebírat, přidávat a prohazovat jednotky od autora WinGraph (přejmenoval jsem si jen na WinCrtB a WinMous), a ono to kupodivu nějak začalo fungovat. Nejprve se chytla Crt (ani nevím, v čem byla vlastně chyba) a následně WinMous (ačkoliv se původně program, pokud jsem tam tuto jednotku jen USES, "zaseknul"). A už to funguje. I klikání, i správné souřadnice. Tomu fakt nerozumím, ale alespoň něco. Také jsem dokončil jednotku, která v pravidelných intervalech típe z kamer obrázky a ukládá je do tříděných složek. Teď ještě jednotku na komunikaci přes Socks a bude to snad všechno. Mimochodem, je konec Července 2006. Už ani nevím, jak dlouho na tom vlastně dělám :-)
Začali jsme také řešit evidenci docházky a alarm, což jsou poslední dvě technické věci. Zatím jsem si vybral Snímač MG karet MSR-2000-12R, dvoustopý, RS-232 (2130 Kč), neboť se dá připojit přes sériový kabel (druhá jeho verze přes klávesnici, ale to se mi u serveru nezdá moc vhodné :-D), navíc má jednoduchý výstup (prostý neformátovaný text), takže jeho ovládání spočívá ve čtení sériového portu. A k něm samozřejmě karty, to se ještě musí zjistit. Co se týče snímačů pohybu (2-3), tak nejlevnější je Orion (655 Kč vč. DPH). Má napájení 9-16V, takže na výstupu bude asi něco takového taky, takže by se to při troše štěstí dalo přes nějaký převodník/trafo/tranzistor připojit i k paralelnímu portu. Uvidíme.
Kvůli alarmu by měl být databázový systém doplněn něčím, jako posílání e-mailů. Pak stačí, aby v cílové schránce bylo nastaveno, že e-maily s určitým předmětem budou zaslány na mobilní telefon uživatele schránky. Jak jsem si zjistil, ač je tu již nainstalován sendmail, asi nejjednodušší bude použít pine. Problém u sendmailu je ten, že když napíši:
sendmail -t martin.lux@worldonline.cz
pokusna zprava
.
tak mám ve /var/mail/database uloženo, že uživatel "martin.lux" je neznámý. Asi si nechám něco doporučit... Jinak, automatická aktualizace času mi hlásí, že má server každý den cca. 3-4 vteřiny odchylku. To je tedy dost. A aby to nebylo tak jednoduché, zjistil jsem, že přímo ze serveru nemohu na Internet, nebo poštu, pokud se tam zadávají názvy místo IP adres (jinými slovy, nefunguje DNS). Přes IP adresy totiž internet funguje. Ve firewallu asi chyba nebude, protože server má stejná pravidla pro FORWARD jako pro OUTPUT, a tedy pokud to běží na stanicích, mělo by to běžet i na serveru....
Hm, tak jsem asi blbec. Zadal jsem IP adresu Seznamu. Byl jsem tam. Provedl jsem "iptables -L -Z -x", abych zjistil, kde se ztrácí packety a když jsem poté zkusil znovu seznam, už šel i přes jméno. A nejen on. I ostatní servery. I pošta. Tak já nevím. Nevím o co šlo, stanice mohly přes DNS neustále. Nechápu to. Každopádně Sendmail nechodí stále. Dneska také přišla konečně ta kamera (tentokrát jen 5 dnů) a funguje po zasunutí perfektně i přes 7.5 metrů dlouhý kabel. Ještě jí chybí zaostřit a umístit, aby jí tolik nevadilo to zatracené světlo.
Podle návodu z ABCLinuxu jsem si nainstaloval MUTT. Vypadá velice nadějně. Konfiguraci má uloženu v /etc/, ale ta mi toho moc neřekla. Pracuje na příkazové řádce nebo i v textovém "grafickém" prostředí. Na ABCLinuxu je dokonce i článek o tom, jak s MUTT začít. Tak uvidíme.
http://www.abclinuxu.cz/clanky/navody/mutt-jak-zacit
Prý by mělo jít odesílat stylem 'echo "Zprava" | mutt martin.lux@worldonline.cz". Hm, tak ta legrace stejně potřebuje nějaký další program pro odesílání pošty. Že by fakt ano? No nic, zkusím si sem dát ještě Exim. Během konfigurace ho musíte nastavit. Dále jeho konfigurační soubor naleznete v /etc/exim/. V LDP je o Eximu všechno možné, ale jak s ním mám odesílat poštu na jiný SMTP, to už jsem se nedozvěděl. Exim se ale očividně už pokouší e-maily posílat kamsi, jen mi přišla zpět zpráva, že mne jakýsi "dnsbl.sorbs.net" blokuje.
Pak jsem ale našel, že bych mohl použít SSMTP, který při instalaci EXIM odinstaloval. Nastavil jsem ho v /etc/ssmtp/, kde jsem jako odchozí poštu zadal smtp.mybox.cz (máme ADSL od Contactelu), a jako odchozího uživatele martin.lux@wordonline.cz. Zkusil jsem pak zadal "ssmpt martin.lux@worldonline.cz" a pak už jen text zprávy zakončený prázdným řádkem. Odeslalo se, ale nic nepřišlo. Tak jsem si na radu zkusil stáhnout ještě NAIL. Ten se obsluhuje stejně, jen se nic nenastavuje a na posledním řádku musí být tečka (obdoba SENDMAILu). Zkusil jsem odeslat, ale zase nic. Už jsem chtěl vyšilovat, ale asi po 10 minutách mi přišel na mou adresu mail od "Databázový systém" (popis mého účtu v Linuxu) s adresou databaze@worldonline.cz. No, pozdě a blbě, ale přeci :-). To jsem rád. Asi 3 minuty poté dorazil i testovací mail, který jsem posílal z Evolution. Co se týče těch SMS, tak je potřeba nastavit jen pravidlo filtru pro přeposílání mailů pro Tiscali (z určitého jména nebo s určitým předmětem) na e-mail pro mobilní telefon (u T-Mobile je potřeba být u T-Zones). Co se týče syntaxe příkazu SSMTP, tak se všechno dá zadat přímo do zprávy (musíte znát syntaxi From, atd. polí) nebo pomocí parametrů. Tj. -Fjméno nastaví jméno odesílatele. Možná je ale fakt lepší sestavit celou zprávu:
Reply-To: "Martin Lux"
Obrazky\MARTIN.LUX@WORLDONLINE.CZFrom: "Databazovy system"
Obrazky\DATABAZE@WORLDONLINE.CZTo: "Martin Lux"
Obrazky\MARTIN.LUX@TISCALI.CZSubject: Zprava ze serveru
Text zpravy po prazdnem radku (po ni take prazdny radek)
Jinak asi za 10 minut po tomto všem dorazil i e-mail z příkazu NAIL. Všechno v něm bylo stejné jako v případě SSMPT. Takže si můžete vybrat. Ale trvalo to o dost déle (nevím, jestli přesně o tolik, jaký byl interval mezi zadáváním těch dvou příkazů v Linuxu). Avšak druhý den už dorazil TXT (kde jsem měl i REPLY-TO, SUBJECT, atd. příkazy) e-mail cca. do 5 vteřin od odeslání. To je bezvadné.
Do firmy se co se týče licencí koupily jedny Windows XP, k nim Corel Draw 11 a AVG 7. Na ostatní přišel Linux Ubuntu 6. Vzhledem k nutnosti platit i za Windows Office se všechny počítače včetně Windows dal Open Office 2. Jeho rychlost se na 2 GHz strojích vyrovná Microsoft Office. Zatím pokračuje vývoj databázového programu. Souběžně se programuje automatický kalkulátor, který vytrasuje bitmapový podklad a zjistí odhadem počet stehů, který bude mít toto logo po vyšití. Co se týče samotné databáze, systém pomocí magnetických karet se ukázal jako drahý, neboť jedna karta by stála přes 50 Kč a navíc by se musela každých 3-6 měsíců obnovovat. Takže jsme prozatím vymysleli klávesnici s 12 tlačítky připojenou na paralelní port, kde si každý zadá svůj osobní kód a zda přišel či odešel. Zamezí to také problémům s tím, zda si daná osoba při přejetí kartou zapsala příchod či odchod. Toto řešení se technicky vejde do 200 Kč (odhadem).
Také jsem si zkusil v Linuxu vypálit své první DVD. Zálohoval jsem celý disk včetně práv kromě DEV, PROC a TMP adresáře (celkem 3.1 GB) přes GUI program K3B. S tím byla také legrace. Neustále mi to psalo, že něco a tohle (proto nepálím tyto tři adresáře, což dává logiku). Pak to ale psalo, že nemůže zjistit velikost image souboru. Tak jsem vypnul Joilet (stejně to nebudu potřebovat). Nakonec jsem zjistil, že musím mít povolené sledování linků, pokud jsem je přidal do sestavy. Tedy, ale trvalo přes 4.5 minuty, než si vůbec připravil data. Další 4 minuty si připravoval pálení (je ale pravda, že něco podobného dělal i Nero pod Windows, ale ten pálil data přes síť). Pak začal pálit rychlostí 16x (ovšem odhadovaná rychlost je pod 2x, což ovšem i pod Windows bylo asi pod 4x - asi to je médii). Ale jsem rád, že jsem to rozběhl. Příště by to ovšem chtělo pálit jako Root, aby se nahrály na disk všechny systémové soubory. Zápis totiž teď sice proběhl dobře (kromě asi X souborů, které jsem neměl právo číst), ale kontrola selhala v 50% průběhu. Každopádně disk připojit šel a jeho obsah jsem viděl, takže tam ta ostatní data zřejmě budou (i když podle spodní části disku bylo vypáleno tak 50% plochy). No, co, byl to teprve první pokus. Třeba druhý už vyjde lépe. A uvidíme, jak to dopadne při pokusu s příkazovou řádkou. Můj nultý pokus, to byla vůbec legrace (pokud vložíte do mechaniky průhlednou "kopii" (náhražku) disku, tak se nedivte, proč na něj mechanika nechce pálit).
POKRAČOVÁNÍ REALIZACE VE TŘETÍM DÍLU ...