Zápisník

Nginx – webserver bez vláken

21. 9. 2009, 21:47
kategorie: web, net, linux

Nginx je malý HTTP server, který dokáže snadno obsloužit velké množství příchozích požadavků a paralelních spojení. Pro jednotlivé požadavky nevytváří nová vlákna, vše obsluhuje v jednom pracovním vlákně (event polling). Vlákna podporuje také, ale ty slouží hlavně k běhu na více procesorech.

Server se hodí například na servírování statického obsahu, ale ani dynamické stránky přes PHP/Python/Perl nejsou problém. Konfigurační soubory jsou v Debianu uspořádány do adresářů sites-available / sitest-enabled stejně jako u Apache.

Nejčastější nasazení Nginx je jako reverzní proxy server před Apache. Původní domény můžeme přesměrovat zpět do Apache (běžícím na portu 8001), nové nakonfigurovat již přímo pomocí Nginx.

server {
    listen 80;
    server_name  *.example.com *.neco.cz;

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect false;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://127.0.0.1:8001;
    }
}

Direktiva server_name může obsahovat více domén a také masky. Doména z HTTP požadavku je pak uložena v proměnné $http_host.

Zajímavou konfigurací je Tornado web server bežící za Nginx. Tornado je HTTP server a framework pro vytváření dynamických webových aplikací v Pythonu. Obsahuje všechny důležité komponenty, a co chybí v Tornadu, najdeme jistě jako nezávislý modul pro Python. Za projektem stojí Facebook (překvapil :). Stejně jako Nginx používá i Tornado event polling a sám běží jako plnohodnotný web server, takže opět stačí proxy.

server {
    listen 80;
    server_name example.com www.example.com;

    # remove www
    if ($host ~* www\.(.*)) {
        set $host_without_www $1;
        rewrite ^(.*)$ http://$host_without_www$1 permanent;
    }

    location ^~ /static/ {
        root /var/www/example;
        if ($query_string) {
            expires max;
        }
    }
    location = /favicon.ico {
        rewrite (.*) /static/favicon.ico;
    }
    location = /robots.txt {
        rewrite (.*) /static/robots.txt;
    }

    access_log  /var/log/nginx/dungame.access.log;

    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect false;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_pass http://127.0.0.1:8082;
    }
}

V této konfigurací také vidíme jak přepsat adresu s www na adresu bez. Syntaxe přepisování adres v Nginx je docela povedená – přehledná a konzistentní.

Jak zprovoznit PHP přes FastCGI si již snadno najdete na internetu.

Závěrem dodám, že na dedikovaném serveru může Nginx bez problému nahradit Apache. Horší je to s webhostingy, kde je vyžadována uživatelská konfigurace v .htaccess (mod_rewrite apod.). V této oblasti bude jistě nadále neohroženě vládnout Apache :-)

Komentáře: 1, nejnovější 05.02.2010, 15:19

Jak přeložit chybějící modul jádra

18. 5. 2009, 22:14
kategorie: linux

Aktuální jádro 2.6.26 v Debianu Lenny už neobsahuje modul prism54, má být nahrazen novými moduly p54_pci, p54_usb. Po upgradu z Etche mi ale wifi karta odmítla přejít do AP režimu, přestože se stejnou konfigurací už tři roky slouží bez nejmenšího problému. Domovská stránka modulu podporu režimu AP uvádí, ani slovo o nějaké výjimce. Vysvětlení jsem nikde nenašel, akorát spoustu dotazů ve fórech od zmatených uživatelů :)

Nevadí. Osvědčený modul prism54 v jádře stále je, vyřazen byl pouze z distribučního jádra Debianu. Abych kvůli jednomu modulu nemusel překládat celé jádro, použil jsem následující postup.

  1. Nainstalujeme zdrojové kódy a headers běžícího jádra.
  2. Najdeme ve stromu dotyčný modul (/drivers/net/wireless/prism54).
  3. Otevřeme Makefile v editoru.
  4. Na začátek přidáme CONFIG_PRISM54=m, nebo rovnou upravíme obj-$(CONFIG_PRISM54) += ... na obj-m += ....
  5. Na konec přidáme tyto řádky: (Pozor na tabelátor.)
    KDIR := /lib/modules/$(shell uname -r)/build
    default:
    	make -C $(KDIR) SUBDIRS=$(shell pwd) modules
    
  6. make
  7. Vytvořený modul prism54 zkopírujeme na příslušné místo do /lib/modules.
  8. depmod -a
  9. modprobe prism54

A wifi zase jede...

Po případném upgradu jádra bude samozřejmě nutné postup opakovat.

Manuálové stránky online – TFM.cz

11. 2. 2009, 17:52
kategorie: novinky, linux, web

V kolonce Tvorba mám již nějakou dobu odkaz na tfm.cz. Na této adrese běží aplikace, která obsahuje databázi všech manuálových stránek z distribuce Debian a umožňuje jejich prohledávání a zobrazování. Stránky jsou převáděny do HTML, prolinkovány a je k nim přidán obsah.

Původně byly použity manuálové stránky ze stabilního Debianu Etch, nyní jsem upravil skripty tak, aby používaly repositáře Debian Unstable, přestože na serveru dále běží Etch. Update trval zhruba 20 hodin a stránek je teď dvojnásobek. Další aktualizace již budou inkrementální.

Opravil jsem i nějaké chyby a kolize, takže by se neměly objevovat stránky useknuté v polovině a podobné větší problémy. Drobné nedostatky způsobené převodem dvou velmi rozdílných formátů se asi budou vyskytovat vždy.

Frontend aplikace je napsán v TurboGears, backend tvoří skripty v Bashi a Perlu. K převádění man stránek do HTML používám hned tři nástroje – vlastní perl skript, Doclifter a rman, v tomto pořadí. Pokud převod selže, zkusí se další nástroj v řetězci.

Převod man stránek probíhá na požádání až při přístupu. U rozsáhlých stránek tak může první načtení trvat relativně dlouho, v extrémním případě až hodinu. Upozorňuji, že refresh to neurychlí, ale klidně si to vyzkoušejte sami :-) Další přístupy jsou pak již normální.

Podobných služeb samozřejmě existuje spousta. Mým původním záměrem bylo nejen zkusit si něco takového naprogramovat, ale také dotáhnout tuto službu trochu dále, co se týče aktuality man stránek, kvality jejich zobrazení a vůbec rozsahu celé databáze. To jsem nyní více či méně splnil. Kromě toho jsem měl řadu nápadů ohledně přidaných funkcí a dalšího obsahu, ale to bude muset zase nějaký čas počkat…

Komentáře: 1, nejnovější 11.02.2009, 23:57

Článek o překladu vlastního jádra v Debianu

3. 2. 2009, 21:32
kategorie: novinky, linux

Tento článek jsem zde původně zveřejnil před čtyřmi lety. Když jsem pak dokončil novou podobu webu, článek již nebyl zcela aktuální a vyžadoval přepracování. Na to jsem však neměl příliš čas a chuť, takže jsem jej nechal jen na starém webu.

Včera mi téma kompilace jádra připomněl server debian-linux.cz a jelikož jsem měl dnes času a chuti dostatek, článek jsem znovu oživil. Doufám, že bude někomu užitečný.

Komentáře: 1, nejnovější 05.02.2010, 15:24

URL zkratky ve Firefoxu

17. 1. 2009, 17:34
kategorie: software, web

Jednou z méně známých vychytávek ve Firefoxu jsou zkratky pro URL adresy. Zkratku můžeme přiřadit libovolné stránce a navíc předat také jeden parametr.

Například následující zkratka přejde na článek o kávě na anglické Wikipedii.

w Coffee

Zkratku nastavíme v Knihovně stránek. V libovolné složce vytvoříme novou záložku. Pojmenujeme ji třeba Wikipedia, do Adresy vložíme http://en.wikipedia.org/wiki/%s a Klíčové slovo bude w.

Jako parametr slouží vše za zkratkou, oddělené mezerou. Tento řetězec v adrese odkazujeme pomocí %s.

Firefox umí zkratky pro vyhledávání vytvářet i sám, stačí pravým tlačítkem kliknout na nějaké vyhledávací pole a zvolit K vyhledávání přiřadit klíčové slovo.

Zde nabízím některé z mých zkratek.

wWikipediahttp://en.wikipedia.org/wiki/%s
wcČeská Wikipediehttp://cs.wikipedia.org/wiki/%s
/.Slashdothttp://slashdot.org/
fdČSFDhttp://www.csfd.cz/
gGooglehttp://www.google.com/search?q=%s
giGoogle Imageshttp://www.google.com/images?q=%s
glGoogle Linuxhttp://www.google.com/linux?q=%s
dGoogle Dictionaryhttp://www.google.com/dictionary?q=%s
grGoogle Readerhttp://www.google.com/reader/
igiGooglehttp://www.google.com/ig

Související pomůckou je klávesová zkratka Ctrl-L, kterou se přepneme na zadávání adresy a můžeme tak ihned použít jednu z definovaných zkratek. Toto je velmi efektivní způsob vyhledávání a přecházení na oblíbené stránky.

Komentáře: 4, nejnovější 08.04.2009, 00:44

Lokální měny na Steamu

22. 12. 2008, 22:17
kategorie: hry, windows, fun

Valve zavedlo „Evropské lokální měny“ pro placení na Steamu. Britové mají teď hry trochu levnější, zbytek Evropy včetně ČR pak podstatně dražší.

Například cena hry Fallout 3 je pro různé části světa následující:

celý svět mimo Evropu49.99 $~ 939 kč
Británie26.99 £~ 746 kč
zbytek Evropy49.99 €~ 1 306 kč

Valve o problému prý ví a pracuje na nápravě… Každopádně děkujeme za hezký dárek ;)

Prográmky: cpulimit, stress, crashme

6. 3. 2008, 19:11
kategorie: linux, software

Tři zajímavé prográmky, které mi přišly pod ruku.

cpulimit

limits the cpu usage of a process

cpulimit is a simple program that attempts to limit the cpu usage of a process (expressed in percentage, not in cpu time). This is useful to control batch jobs, when you don't want them to eat too much cpu. It does not act on the nice value or other priority stuff, but on the real cpu usage. Besides it is able to adapt itself to the overall system load, dynamically and quickly.

Jak je patrné z popisu, program slouží k omezování spotřeby CPU nenažranými procesy. Ty lze omezit (a později i osvobodit) přímo za běhu. Proces můžeme hledat podle PID nebo jména binárky. Viz příklad:

$ sudo cpulimit -e firefox-bin -l 60
Warning: no target process found. Waiting for it...
Process 6308 detected

stress

A tool to impose load on and stress test a computer system

stress is a tool that imposes a configurable amount of CPU, memory, I/O, or disk stress on a POSIX-compliant operating system and reports any errors it detects.

stress is not a benchmark. It is a tool used by system administrators to evaluate how well their systems will scale, by kernel programmers to evaluate perceived performance characteristics, and by systems programmers to expose the classes of bugs which only or more frequently manifest themselves when the system is under heavy load.

Program stress naopak dokáže CPU i jiné zdroje pořádně vytížit. Pohleďme do manuálu:

       -c, --cpu N
              spawn N workers spinning on sqrt()

       -i, --io N
              spawn N workers spinning on sync()

       -m, --vm N
              spawn N workers spinning on malloc()/free()

       -d, --hdd N
              spawn N workers spinning on write()/unlink()

crashme

Stress tests operating system stability

crashme generates strings of random bytes and then attempts to execute them. Used to test kernel stability.

**WARNING** While Linux has been known to survive days and weeks of crashme, IT IS NOT GUARANTEED THAT YOUR SYSTEM WILL SURVIVE! DO NOT USE THIS PROGRAM UNLESS YOU REALLY WANT TO CRASH YOUR COMPUTER

A tahle legrácka už tolik užitečná není, ale zase mi přijde docela vtipná.

Zdroj: aptitude

Utility dos2unix a flip

3. 3. 2008, 20:38
kategorie: linux

CR+LF v Midnight Commanderu Mezi operačními systémy se v historii vyskytly tři různé způsoby značení nových řádků textových souborů. V unixové řadě systémů je to LF (line feed, ASCII kód 10), ve starších OS od Applu CR (carriage return, ASCII kód 13) a v systémech řady CP/M, DOS a Windows CR+LF. Vzhledem k tomu, že Apple při uvedení Mac OS X přešel na unixový styl kódování, zbývají nám z živých variant pouze dvě.

V linuxu k převádění cizích textových souborů do nativní formy slouží utilita dos2unix. V Debianu je šikovně skryta v balíčku tofrodos, který je třeba nejdříve doinstalovat. V některých distribucích je ale tato utilita součástí výchozí instalace.

dos2unix soubor.txt

Alternativou je flip, který defaultně zachovává časové razítko a vlastníka souboru (dos2unix na to má parametr -p).

flip -u soubor.txt

Se soubory s dosovými řádky se setkávám obzvláště u open-source webových aplikací, kdy se autoři zřejmě snaží být přátelští k uživatelům s Notepadem. Takové soubory jsou pak sice použitelné a funkční, leč ošklivé v Midnight Commanderu, kde se na koncích řádků zobrazují černé zobáčky… :-)

Oficiální XMPP brána do sítě ICQ?

27. 1. 2008, 15:06
kategorie: net

XMPP je protokol pro instant messaging, jinak známý také pod jménem Jabber. Tento protokol byl přijat jako standard organizací IETF a pro přenos zpráv a událostí je využíván jazyk XML. Síť je otevřená – server si může založit kdokoliv a ihned komunikovat s ostatními servery a uživateli na nich.

Největší zádrhel pro síť Jabber v Čechách je ohromné rozšíření jiného, nekompatibilního protokolu – ICQ. Komunikace s lidmi na této síti se pak obvykle řeší dvěma způsoby, buď použitím více-protokolového klienta nebo ICQ transportu.

Nejnovější události však ukazují, že by se situace v budoucnu mohla rapidně zlepšit. Firma AOL, vlastník sítě ICQ, podle všeho pracuje na XMPP bráně pro tuto síť. Ta by měla umožnit komunikaci s uživateli sítě ICQ přímo protokolem XMPP – k ICQ účtům budou přiřazeny Jabber ID ve formě <icq-číslo>@aol.com. Kromě toho brána umožní i uživatelům ICQ připojit se do této sítě protokolem XMPP, tedy kterýmkoliv z mnoha Jabber klientů. Podrobnosti jsou v odkazovaném blogu.

To je vývoj, který rozhodně málokdo čekal, ale vypadá to nadějně a snahu firmy AOL určitě spousta lidí ocení. V našich končinách to navíc umožní větší rozšíření Jabberu mezi lidmi, neboť komunikace s kamarády na ICQ už nebude problém.

Brány Skeldalu

26. 1. 2008, 17:48
kategorie: hry, dos, windows

Na Brány Skeldalu mám pěkné vzpomínky – s touhle hrou jsem si kdysi užil spoustu hodin skvělé zábavy. Byl to jeden z posledních čtverečkových dungeonů, navíc plný hezké malované grafiky a zajímavých nápadů.

Obrázek ze hry Brány Skeldalu
Další obrázky na hrej.cz.

Hra byla nedávno uvolněna jako freeware a následovalo i uvolnění zdrojových kódů pod open-source licencí. Vše naleznete v následujících odkazech.

Teď tomu chybí už jen konverze pro ostatní operační systémy, a anglická lokalizace, aby si mohl zahrát celý svět :-)

Komentáře: 1, nejnovější 05.02.2010, 15:28