pondělí 25. března 2013

Jak zjistit rychlost připojení síťové karty - Linux command

Další z věcí, který se můj mozek nedokáže zapamatovat, avšak je to naprosto jednoduché :-)

dmesg | grep eth0
Samozřejmě eth0 nahraďte za identifikaci vašeho interface (eth0, eth1, wlan0m vnet0, ...). Výsledek bude vypadat nějak takto:
e1000 0000:00:12.0: eth0: (PCI:33MHz:32-bit) 52:54:00:01:00:1c
e1000 0000:00:12.0: eth0: Intel(R) PRO/1000 Network Connection
device eth0 entered promiscuous mode
e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
vmbr0: port 1(eth0) entering forwarding state
eth0: no IPv6 routers present

úterý 3. dubna 2012

eGreat - IMS by DMD - Zabezpečení webového admin rozhraní heslem

Nedávno jsem narazil náhodou na vylepšení mého multimediálního centra, které mám doma. Své doby to byla namakaná mašinka, které jsem ještě nadělil 2x 1TB disky. Ovšem postupem času přestaly nové filmy chodit, kvůli novým kodekům. Tak jsem hledal aktualizace a našel jsem jiný firmware s trochou vylepšení, jak je vidět na této stránce s videem.
Nový firmware podporuje root přístup k linuxu, který je v eGreatu jako OS. To mi na jednu stranu hraje do karet. Ovšem má to jednu takovou nevýhodu, jste-li na veřejné IP, je snadné zjistit porty, které na IP běží a tím se tak kdokoliv může dostat až k webovému rozhraní multimediálního centra. Takže mimo FTP a dalších vymožeností potřebuji webové rozhraní trochu zabezpečit, ideálně přístupem pod heslem.
Budeme tedy potřebovat jen nastavit heslo pro aplikaci cgi na serveru httpd.
Nastavení nalezneme v souboru /etc/httpd.conf

Takže po přihlášení na telnet eGreatu spustíme příkaz:
vi /etc/httpd.conf

Pokud by někdo nevěděl, ovládání vim editoru je:
Klávesa i (malé i) - spuštění editace
Klávesa ESC - zrušení editace
Uložení změn provedeme napsáním - :w, ENTER
Zavření editoru - :q, ENTER
Pokud nechceme uložit změny, které jsme provedli, zavřeme editor napsáním - :q!, ENTER


Můj původní soubor:
#Allow address from 172.20.*.*
#A:172.20.
#Deny from other IP connections
#D:*
#No need account to access cgi
/cgi-bin::
#You need root account to access "adm" pages. See here: http://www.uclibc.org/lists/busybox/2004-November/013053.html
#If you need to store password here, enable "CONFIG_FEATURE_HTTPD_AUTH_MD5"
#/adm:root:
#The second account to access "adm" pages
#/adm:nobody:

Budu-li chtít nastavit pouze heslo nezašifrované v MD5, odkomentuju řádek:
/adm:root:

a na konec řádku dopíšu heslo:
/adm:root:nejakyheslo

To je celé.
Pokud by někdo chtěl heslo zašifrované v MD5, ukáži jak jej vygenerovat a poté aktivovat a nastavit.

čtvrtek 29. března 2012

frantisek-preissler.cz

Zrušil jsem osobní web frantisek-preissler.cz a nasměroval ho na tento blog.
Web jsem již delší dobu neudržoval, nebyl na to čas.
Dokonce mi díky tomu webu začali psát i ze státní zprávy, zejména jsem něco řešil přes datovou schránku a pak mi ta paní úřednice psala na soukromý email. Když jsem se jí zeptal, kde vzala mojí adresu, tak jí prej našla na mém webu. Ano, i toto se děje v ČR, napíšete přes datovku a odpověď máte na emailu ze svýho webu.
Proto začínám za sebou zametat stopy, jelikož po vygooglení mého jména jsem podezřele nějak moc nahoře.

čtvrtek 13. října 2011

fail2ban unban IP

Mám na jednom serveru aplikaci fail2ban a potřeboval jsem odbanovat IP pro pureftpd ban.
Není to těžký, ale špatně se to dělá celé z hlavy :-)
fail2ban používá asi tu nejlepší možnost banování IP a to iptables, tam také je potřeba ban zrušit.
Nejdříve si vylistujeme iptables příkazem:
iptables -L -n --line-numbers

...dostaneme něco jako tohle:
Chain fail2ban-courierimap (1 references)
num  target     prot opt source               destination
1    RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Chain fail2ban-courierpop3 (1 references)
num  target     prot opt source               destination
1    DROP       all  --  xxx.xxx.xxx.xxx      0.0.0.0/0
2    RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Chain fail2ban-courierpop3s (1 references)
num  target     prot opt source               destination
1    RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Chain fail2ban-postfix (1 references)
num  target     prot opt source               destination
1    DROP       all  --  xxx.xxx.xxx.xxx      0.0.0.0/0
2    RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Chain fail2ban-pureftpd (1 references)
num  target     prot opt source               destination
1    DROP       all  --  xxx.xxx.xxx.xxx      0.0.0.0/0
2    RETURN     all  --  0.0.0.0/0            0.0.0.0/0

Budu-li chtít odstranit ban IP xxx.xxx.xxx.xxx pro PureFTPd, zadáme příkaz:
iptables -D fail2ban-pureftpd -s xxx.xxx.xxx.xxx -j DROP
Důležitý je tzv. chain, vidíme ho v listu iptables "[...] Chain fail2ban-postfix (1 references) [...]" a také IP (xxx.xxx.xxx.xxx).

Po zadání příkazu je ban zrušen, ověřit si to můžeme opět prvním příkazem na list iptables.

pátek 7. října 2011

Hlášky.net - úkol č. 2

Úkol č. 2 je takový, že musím myslet na to, že mám i vlastní projekty jako jsou hlášky, páč vůbec nestihám... :-)

Starting web server: apache2(98)Address already in use: make_sock: could not bind to address [::]:80

Tohle je celkem zapeklitá chyba.
Stačí jen restartovat apache2 příkazem:
/etc/init.d/apache2 restart
...a je to v řiti.

Vyskočí vám tam pak chyba:
Starting web server: apache2(98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
 failed!

V tuto chvíli neběží web server a nejde ho ani jednoduše nastartovat.
Prohledal jsem celý Google o tom. Snad téměř každý s tím má problém. Já taky :-/
Jediné co mi pomohlo v případě, že už apache nenastartoval bylo killnutí procesu, ale u mě na Debian Squeeze pomohl jen tento postup:

1) zjistit PID (process id) třeba příkazem:
netstat -nlp | grep :80
Vyhodí to něco jako:
tcp6   0   0 :::80     :::*   LISTEN      2434/apache2
tcp6   0   0 :::8081   :::*   LISTEN      2434/apache2
PID je v tomto případě 2434 (pokaždé bude jiný, tak to hlavně dál nekopírujte přesně a nepište, že vám to nejde :-D)

2) Killnout proces:
kill -9 2434
Na mnoha diskuzích píšou, že máme killnout apache pomocí killall apache2, ale mě nefunguje.

3) Spustit apache
/etc/init.d/apache2 start

Teď už by měl apache normálně běžet.

Další variantou je restartovat apache příkazem:
apache2ctl graceful

btw: Musel jsem si to sem napsat, páč vždy když to řeším, tak zapomenu řešení ;o)

pondělí 12. září 2011

Total Commander - Hromadné přejmenování stáhnutých souborů

Tě pic,
normálně, znám lidi, kteří si stáhnou nějakou věc z netu a prostě si to hodí do nějaký složky, nebo co hůř, si to něchájí do konce života ve složce Stažené soubory.
U mě je to trochu jinak, vše co stáhnu si stahuju do Stažených souborů, kde si to přesunu do podsložky podle toho co to je, např. Hudba. V té složce si to pak ještě vše přejmenuju, aby to nějak vypadalo, protože soubor staženej z netu má třeba formát 01-neco_neco-neco_dalsiho__original_mix.mp3. A tohle fakt v PC nechci. Je trochu vopruz tohle přejmenovávat po jednom souboru. Proto vám ukážu jak v Total Commanderu pomocí regulárních výrazů přejmenovat tyto soubory. Pokud regulární výrazy neumíte, nesnažte se je naučit, není to těžké, ale chce to trochu logického myšlení a taky trochu teorie.
Takže postup jak přejmenovat více souborů:

1) Otevřete si Total Commander a najeďte do složky, kde máte soubory, které chcete hromadně přejmenovat. Tyto soubory označte.


2) Poté stačí stiknout CTRL+M, nebo jít přes menu na Soubor > Hromadné přejmenování. Otevře se vám pro vás možná neznámé okno.

V tomto okně bude pro vás nejdůležitější sloupec Původní název a Nový název. Dále také sekce Najít a nahradit. Ostatní věci jsou taky fajn, dá se třebas očíslovat hromadně soubory od např. 000001 až do 999999 apod.

3) Nejprve odstraníme čísla ze začátku souborů. Napište do sekce Najít toto:
^([\d\-]+)
Pole Nahradit za, nechte "Vymazat". A zaškrtněte Reg. výraz.

Pak stačí kliknout na Spustit. Tím provedeme změny, které jsme udělali.
Dál neklikejte na Zavřít, ale klikněte vlevo od tlačítka Spustit na tlačítko se zpětnou šipkou.

4) Dále, hlavně pokud se jedná o písničky, tak většinou bývá text v závorce napsaný po dvou podtržítkách a bez závorek. Toto upravíme napsáním reguláru do pole Najít:
__([\w\d\_\-]+)\.([\w\d]+)$
a do pole Nahradit za napíšeme:
($1).$2
pozn. je tam mezera na začátku


A zase klikneme na Spustit a tlačítko se šipkou zpět.

5) Nahradíme pomlčky za mezeru a pomlčku a to tak, že nejdříve napíšeme do Najít pomlčku:
([^\s]+)\-([^\s]+)
a Nahradit za:
$1 - $2
Spustit > Zpět

6) Už to vypadá lépe co? Napište do pole Najít podtržítko a do pole Nahradit za napište mezeru, zaškrtávátko Reg. výraz odškrtněte. Dejte Spustit a zase tu zpětnou šipku.

7) V posledním kroku vymažte pole Najít a Nahradit za. V sekci Velikost písmen vyberte První Písmeno Slov Velké a dejte Spustit a pak Zavřít.

Hotovo, máte soubory rychle a "snadno" přejmenované do nějakého přijatelnějšího tvaru. Používám tohle mraky let a zatím jsem nenašel nic lepšího. Můžete se to na první pohled zdát zdlouhavé, ale jakmile se to člověk naučí, tak to ušetří mnoho času a nervů.

středa 7. září 2011

[MySQL] - ORDER BY VARCHAR jako INT

Stručně a snadno.
Potřebuji řadit sloupec jako INT, ale jeho typ je VARCHAR.
Toto lze provézt pomocí funkce CAST.

ORDER BY CAST(`name` AS SIGNED)

Další možné konverze:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL[(M[,D])]
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]

středa 31. srpna 2011

Filesystem notification initialization error -- contact your mail administrator (check for configuration errors with the FAM/Gamin library)

Nedávno mi umřel systémový disk na serveru a musel jsem přeinstalovat Linux, "naštěstí" jsem neměl disky v raidu, takže stačilo vše jen přeinstalovat. Nicméně po instalaci postfixu a nastavení mailů zpět mi Thunderbird házel chybu "Filesystem notification initialization error -- contact your mail administrator (check for configuration errors with the FAM/Gamin library)". Tato chyba se zobrazila vždy jen, když jsem poprvé klikl na nějakou složku v mailu. Ve webovém rozhraní Roundcube to nic nepsalo. I když se ale zobrazovala v Thunderbirdu tato chyba, vše fungovalo jak má.
Nicméně jsem googlil, ale nic moc jsem nenašel. Řešení je tak jednoduché, že to snad ani nemělo cenu hledat a rovnou to zkusit.
Stačí nainstalovat balíček Gamin.

apt-get install gamin

To jen tak, kdyby to náhodou někdo řešil :-)

pondělí 8. srpna 2011

Jak zpracovat velké objekty v JavaScriptu...

... aniž by se zasekl prohlížeč.
V práci jsem řešil jeden velký problém. Potřeboval jsem zpracovat mnoho JavaScriptových objektů a ne zrovna malých. Doufám, že nebude vadit, když se podělím s malým know how, které vykonávám pro firmu :-) Ale třeba si to přečte někdo, kdo mi poradí jiný a lepší způsob.
Hlavní problém je v tom, že uživatel vykoná pro něj obyčejnou akci a já (JavaScript) musím na pozadí stránky provést složité zpracování. V tuto chvíli, ač se to tak nezdá, je potřeba hrát na rychlost skriptů, které se provádí pouze na straně prohlížeče.
Např. tedy, uživatel klikne na označit vše v ul>li seznamu A, který má třeba 10 elementů a v seznamu B s 5000 elementy označit ty elementy, které obsahují v atributu rel hodnotu z označeného elementu v seznamu A.
Používám pro svojí práci knihovnu jQuery a musím říct, že funkcí each cesta fakt nevede. Každá tisícina vteřiny je pak znát a to hlavně, pokud necháte vše zpracovat jak se říká "na jedno našlápnutí" :-)
On je taky rozdíl v použitém prohlížeči, protože třeba Firefox si při spuštění takových skriptů je schopný vzít i dalších 300 MB paměti a 30% navíc na procesoru.
Další nepříjemná věc je ta, že takové skripty děláme hlavně pro klienty, kterým moc nevysvětlíme, že je to normální, když kliknou na jeden "odkaz" a najednou se jim začne zahřívat procesor jak cip a k tomu jim v prohlížeči vyskočí dotaz zda počkat na zpracování skriptu nebo skript ukončit a ještě k tomu se jim zobrazí, že prohlížeč neodpovídá :-D
No takže jediný řešení, který mě napadlo je zpracovat vždy kousek a poté zpracovat další kousek. Snažil jsem se něco vygooglit, ale nenašel jsem nikoho, kdo by toto řešil.
Výsledek je několik funkcí v JS a jQuery jako takovém, ale hlavně s tím, že vždy jsem dopředu věděl jak budou zpracovávané objekty velké a kolik toho bude.
Například asi takto:

(function(){
$.selectLinks = {
  all: function(){
    this.nextObject(0); // spustíme první element seznamu
  },
  nextObject: function(objectIndex){
    // ukončíme, protože neexistuje žádný element s tímto "indexem"
    if($("ul.list li[class!='active']:eq("+objectIndex+")").length == 0){
      return false;
    }

    var thisObj = $("ul.list li[class!='active']:eq("+objectIndex+")");

    // nějaké další akce v JS

    if(objectIndex % 100 == 0){ // modulo na každý stý záznam a následné zajištění pozastavení zpracovávání v prohlížeči na půl vteřiny
      window.setTimeout(function(){
        $.selectLinks.nextObject((objectIndex+1));
      }, 500);
    }else{
      $.selectLinks.nextObject((objectIndex+1));
    }
  }
};
})(jQuery);

Neříkám, že skripty se zrychlí nebo budou méně náročné na počítač, ale důležité v tomto případě je hlavně nedát najevo klientům, že vznikla nějaká chyba s jejich draze zaplaceným systémem.
Výše uvedený kód jsem tu vyhaluzil jen tak na první našlápnutí, takže ani nemusí v podstatě fungovat, nicméně důležité na tom vidět je.
Hlavní a myslím si, že nejjednodušší je pouštět jednu funkci rekurzivně dokud je to možné s tím, že občas počkáme pomocí setTimeout na nové spuštění, k tomu klidně stačí půl vteřiny i méně.
V mém případě na projektu v práci jde o daleko složitější skripty, které zahrnují spoustu jiných věcí.
Budu rád, když někdo hodí koment a třeba mě i přiučí lepším věcem.

Ave já

PS: Jo a kdyby někdo nevěděl, spouštěl bych to $.selectLinks.all();
 
]]>