Až Vám zčerná obrazovka, přejděte na Linux!

Proč používat Linux

čtvrtek 11. února 2010

Blokování nájezdů na server přes SSH

Dnes jsem řešil, jak více zabezpečit SSH před možným průnikem. Po chvilce Gůglení jsem narazil na podrobný popis, jak to zařídit na OpenSuSE 11.1 .
Použití sshguardu je rychlé, pěkné a účinné. K danému odkazu ještš přidám, že existuje OpenSuSE repository csbuild, které sshguard obsahuje.
Stačí tedy

sudo zypper ar http://download.opensuse.org/repositories/home:/csbuild/openSUSE_11.1/ csbuild

sudo zypper in sshguard

a nakonfigurovat podle onoho návodu na stránkách OpenSuSE.

POZOR! Pokud nemáte korektně rozchozený AppArmor, nechejte jej být. Při jeho nastartování vám syslog-ng zařve "Broken Pipe" na odeslání dat do roury sshguardu, takže Vám to nebude fungovat.

Snad to někomu pomůže

úterý 9. února 2010

JBoss 4.2 a kumulující se instance Stateless EJB

Asi týden jsem si hrál s J2EE aplikací Westico Visibility Platform a každou chvíli mi aplikace sletěla na OutOfMemoryError. Asi memory leak, řekl jsem si.
Stáhl jsem si tedy NetBeansy (qůli profileru) a začal hledat, kde tesař nechal v paměti díru. Zjistil jsem, že mi permanentně narůstá počet instancí dvou Session Stateless EJB, které volám z MDB ihned po sobě, těsně před ukončením zpracování zprávy. Protože provádím JMS ack ihned po příchodu zprávy, říkal jsem si, že si asi lookup vytvoří nové instance fazolí, ale požadavek neskončí a proto to bobtná. Dlouho jsem trasoval onu Message Driven Beanu, dokud jsem si opravdu nebyl jistý, že požadavek skončil a tudíž GC by měl odstranit "nepotřebné" instance a v poolu by měly zůstat jenom "potřebné". Tak jsem se zaměřil na pool a zjistil následující:
JBoss má oddělené pooly pro MDB a stateless EJB. Pro obejítí klasické Javovské synchronizace používá JBoss ThreadLocal pool. A v tom je právě šutr úrazu. Díky klasickému implicitnímu chování MDB se stane, že každý požadavek je zpracován jiným vláknem a tedy pool pro bezestavové fazole bobtná, přestože má nastaven maximální počet instancí v poolu.
Pokud tedy chcete v JBossu volat stateless EJB z MDB, musíte patřičné bezestavové fazoli nastavit jiný typ poolu. Ideálně org.jboss.ejb3.StrictMaxPool, a to třeba pomocí JBossí anotace @PoolClass, jak je popsáno zde.

Třeba to někomu zachrání kupu nervů.

úterý 19. ledna 2010

Jak rozchodit Joomla! pod Microsoft Windows

Nedávno jsem musel po telefonu a FTP rozchodit Joomla! na Widlích 2003, kde už navíc běží Lotus Notes. Pro příští generace tu zanechám minimalistický postup, jak to udělat:

Nejdřív si stáhneme Joomla!, MySQL, Apache a PHP (5.2.11)

V prvé řadě nainstalujte MySQL - stačí spustit instalátor a proklikat se na konec. V nastavení samozřejmě zvolte Server a Multilingual, zadejte heslo.
Potom v okně příkazového řádku
cd \Program Files\mysql\bin
mysql -u root -p
Password: sem zadejte heslo z instalace
mysql> CREATE USER 'joomla'@'localhost' IDENTIFIED BY 'heslo';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'joomla'@'localhost'
-> WITH GRANT OPTION;
mysql> \q

A tím je databáze připravena.
Potom nainstalujte Apache. Ponechejte základní nastavení.
Jako volbu při instalaci zvolte samostatnou aplikaci místo servisy - nastavíte ji až nakonec, až bude vše chodit. Nastavte port 8080.

Potom nainstalujte PHP. Doporučuji nainstalovat do adresáře C:\Program Files\Apache Software Foundation\PHP5.2.11 , protože pak je možné říct FileZille, aby Vám jako root spřístupnila pouze C:\Program Files\Apache Software Foundation a máte k dispozici jak httpd.conf, tak php.ini . V rámci instalace zvolte instalaci do Apache 2.2 jako modul (modul je rychlejší, pro testy je ale lepší použít CGI - nemusí se pořád restartovat Apache při změně php.ini).

V httpd.conf odkomentujte LoadModule pro moduly proxy, proxy_http a rewrite, v DirectoryIndex změňte na
DirectoryIndex index.php index.html

V sekci
změňte AllowOverride z None na All

A to by mělo být prozatím vše.

Otestujte konfiguraci pomocí Test Configuration ve Startmenu Apache.

V php.ini nastavte date.timezone na hodnotu, kterou považujete za rozumnou, například Europe/Prague

Přímo do adresáře C:\Program Files\Apache Software Foundation\Apache2.2\htdocs nakopírujte obsah adresáře joomla z instalačního balíku Joomla!
Přejmenutje htaccess.txt na .htaccess a odkomentujte v něm řádek
RewriteBase /

V danou chvíli je vše nachystáno ke konfiguraci Joomla!

Objevil se problém
Call stack
# Function Location
1 JSite->dispatch() C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\index.php:68
2 JComponentHelper->renderComponent() C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\includes\application.php:124
3 JError->raiseError() C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\libraries\joomla\application\component\helper.php:95
4 JError->raise() C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\libraries\joomla\error\error.php:171
5 JException->__construct() C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\libraries\joomla\error\error.php:136

Řešení je jednoduché:
http://discussion.accuwebhosting.com/joomla-issue-404-component-not-found_blog_by_ryan_125.html

Nakonec je třeba poslední věc: co s porty?
Jsou dvě možnosti - buď budete akceptovat, že na Joomla! půjdete přes port 8080 a necháte vše tak, nebo budete muset přesunout LotusNotes na jiný stroj a z Apache udělat reverzní proxy pro notesy.

Pokud to druhé, tak nejdříve Lotus Notes přemigrujte (to nechám na Vás jak).

Shoďte Notesy a Apache. V httpd.conf Apache změňte Listen 8080 na Listen 80 a restartujte Apache.

Pak je třeba nastavit mod_rewrite a mod_proxy.

TBD.

A je to.

sobota 9. ledna 2010

Připozamrzlá zima

Včera večer jsem jel pro Káťu do lidušky a cestou zpátky jsem mezi Holešovem a Přílepama dvakrát zastavoval (jednou skoro ve škarpě) a oškrabával okno, protože jsem nic neviděl. Všude kupa sněhu, pršelo a ten déšť ihned zamrzal. Protože mi auto stálo asi hodinu na takovém počasí, kompletně mi zamrzlo a s tím i stěrače, takže jsem je nemohl použít - ani se nehnuly. A než se auto tak zahřálo, aby rozumně fungovalo vyhřívání předního skla ofukem, byl jsem doma. Tak jsem jel téměř poslepu, v milimetrových průhledech, kde se na ledu na okně světlo lámalo jenom minimálně, jsem jel podle stop na cestě a popaměti. Auto pak ráno vypadalo asi takto:



Jenomže to nebylo všechno. Tak jsem se dneska ráno probudil a nevěřil jsem vlastním očím. Stromy kompletně obalené ledem! Však se podívejte sami.





čtvrtek 7. ledna 2010

Zlínské nastudování Goldoniho Sluhy dvou pánů

Dneska jsme byli s Jaruškou na Goldoniho Sluha dvou pánů ve Zlínském Městském Divadle. Už jsem na něm byl tamtéž před 18lety a viděl jsem i záznam z Národního s Mirkem Donutilem. Dneska to ale mělo šmrnc.

Doktor Lombardi v perfektním provedení Luďka Randára, jehož 90% replik byla rčení (Například když pan Pantalone spojil ruce Beatrice a Florinda a k tomu Lombardi dodal - "Kdo maže, ten jede!"
Úžasný byl také "telefonát" Lombardiho Pantalonovi z automatu. Scéna, kdy Lombardi Pantalona uráží, si nejdříve "před nosem" přivírají fiktivní dveře, až se to nic podaří Pantalonovi zavřít a tak Randár utíká k fiktivnímu telefonímu automatu, pulzně vytáčí, Pantalone zvedá mobil z palce a malíčku, ... Dál se na to musíte podívat sami, to byste přišli o pointu.

Dál to posouvají hlášky typu: "Kdo se směje nejlépe, ten se směje naposled!" nebo "Kde byste sehnali dašlího takového, tady ve Zlíně!" ... taky občasné prokládání jinými nářečími (např Brněnské Hantec).

Moc se mi líbilo postelové zakončení shledání Beatricce a Florinda...

Kdo jste poblíž, vřele doporučuji!

úterý 8. prosince 2009

Invalid checksum na UDP paketech

Nějakou dobu jsem laboroval s tím, že mi javovská aplikace běžící na IBM xSeries x3650 s OpenSuSE 11.0 generovala invalidní UDP pakety. Hlásil mi to WireShark (dříve ethreal).
Firmware jednočipu G2 to nebyl sto sežrat a pokud jsem na něj chtěl data dostat, musel jsem to vyřešit. Tak jsem Gůglil a zkoušel...

Výsledek mého snažení lze shrnout do těchto bodů:
  • Je to víc jak rok známý problém a řeší se, ale ještě není vyřešen.
  • Problém není v Javě, ale někde mezi jádrem a síťovkou. Stejný kernel na jiné síťovce funguje, jsou prý kernely, které s těmito síťovkami fungují. V tomto případě to nechodí na Broadcom Corporation NetXtreme II BCM5708 Gigabit Ethernet (rev 12)
  • Na vině je chybné generování checksumu síťovkou, neboť při použití Raw Socket (což Java dělá), generuje checksum právě síťovka (nebo její modul, nevím, ve zdrojácích jsem nebyl)
  • Řešením je použití TCP checksum offload, které vypíná ono generování kontrolního součtu.
  • Na Linuxu se k vypnutí použije ethtool -K ethN rx off tx off, kde ethN odpovídá konkrétní síťovce, kde to chcete vypnout (tedy eth0, eth1,...)

Třeba to někomu pomůže...

středa 2. prosince 2009

Pochromovaný chameleon aneb Google Chrome na OpenSuSE 11.2

JO! Už je to tady! Máme hrábě v ruce! Teda nikoli hrábě, ale Google Chrome. Jeden z uživatelů OpenSuSE Build Service, dbuck, připravil OpenSuSE Chromium repository s oním přelomovým prohlížečem. Až budu mít nějaké dlouhodobější zkušenosti, dám vědět. Na Ubuntu 9.10 64bit běhá naprosto krásně, a to včetně nepodporovaného Flashe.

Instalace probíhá násůedovně:
1) Přidejte dbuckovu repository pro zypper:
Pro uživatele openSUSE 11.2:
sudo zypper ar http://download.opensuse.org/repositories/home:/dbuck/openSUSE_Factory/ Chromium

Pro uživatele openSUSE 11.1:
sudo zypper ar http://download.opensuse.org/repositories/home:/dbuck/openSUSE_11.1/ Chromium

Pro uživatele openSUSE 11.0:
sudo zypper ar http://download.opensuse.org/repositories/home:/dbuck/openSUSE_11.1/ Chromium

Díky tomu, že dbuck nachystal build tak, že se zdrojáky tahají přímo ze svn projektu chromium, prohlížeč je tedy chromium-browser, nikoli chrome.

Když je repository přidána, můžeme instalovat:
sudo zypper in chromium-browser

No a spustí se pomocí
chromium-browser

Spolu pak můžeme jenom poděkovat dbuckovi za dobře odvedenou práci..