<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>guzik &#187; Tech</title>
	<atom:link href="http://guzik.net.pl/blog/category/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://guzik.net.pl/blog</link>
	<description>Mój blog</description>
	<lastBuildDate>Fri, 27 Jan 2012 22:13:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Oracle standby</title>
		<link>http://guzik.net.pl/blog/2012/01/oracle-standby/</link>
		<comments>http://guzik.net.pl/blog/2012/01/oracle-standby/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 22:12:47 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[DB]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Szkolenia]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3683</guid>
		<description><![CDATA[Ukończyłem dziś szkolenie &#8222;Zaawansowana administracja bazą danych Oracle&#8221; w ramach Oracle Partner Academy. Szkolenie odbyło się w Krakowie, a prowadził je Kamil Stawiarski. Ciekawa formuła, a w zasadzie jej brak &#8211; to szkolenie odbyło się po raz pierwszy i my niejako kreowaliśmy jak będzie wyglądać w przyszłości. Ja wyniosłem wiele, więc wydaje mi się, że [...]]]></description>
			<content:encoded><![CDATA[<p>Ukończyłem dziś szkolenie &#8222;<a href="http://arrowecsservices.pl/www/news.nsf/id/Zaawansowana_administracja_baza_danych_Oracle">Zaawansowana administracja bazą danych Oracle</a>&#8221; w ramach <a href="http://arrowecs.pl/WWW/News.nsf/id/Partner_Academy">Oracle Partner Academy</a>. Szkolenie odbyło się w Krakowie, a prowadził je <a href="http://ora-600.pl/">Kamil Stawiarski</a>. </p>
<p>Ciekawa formuła, a w zasadzie jej brak &#8211; to szkolenie odbyło się po raz pierwszy i my niejako kreowaliśmy jak będzie wyglądać w przyszłości. <span id="more-3683"></span>Ja wyniosłem wiele, więc wydaje mi się, że się udało.</p>
<p>Zaczęło się nietuzinkowo &#8211; dostaliśmy jakąś kopię bazy, która uległa awarii i żeby robić cokolwiek przez resztę dni, musieliśmy to odratować. Później było jeszcze ciekawiej.<!--more--></p>
<p>Żeby było jeszcze bardziej PRO, zrobiliśmy nawet <em>standby</em> na ekspresie do kawy ;-)</p>
<p><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/01/Zdjęcie0688.jpg"><img src="http://guzik.net.pl/blog/wp-content/uploads/2012/01/Zdjęcie0688-300x225.jpg" alt="" title="Zdjęcie0688" width="300" height="225" class="aligncenter size-medium wp-image-3685" /></a></p>
<p>Żeby nie było &#8211; ja też dałem coś od siebie prowadzącemu i kursantom. Promowałem <a href="http://orbada.sourceforge.net/html/www_orbada_doc.html">Orbadę</a> i <a href="http://tmux.sourceforge.net/">tmux</a>&#8216;a!</p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/01/oracle-standby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux MPIO &#8211; Hitachi vs. Fujitsu</title>
		<link>http://guzik.net.pl/blog/2012/01/linux-mpio-hitachi-vs-fujitsu/</link>
		<comments>http://guzik.net.pl/blog/2012/01/linux-mpio-hitachi-vs-fujitsu/#comments</comments>
		<pubDate>Fri, 27 Jan 2012 21:56:07 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[AMS2100]]></category>
		<category><![CDATA[DX80]]></category>
		<category><![CDATA[Eternus]]></category>
		<category><![CDATA[Fujitsu]]></category>
		<category><![CDATA[Hitachi]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3665</guid>
		<description><![CDATA[Od jakiegoś czasu używam macierzy Hitachi AMS2100 i Fujitsu DX80 (pisałem wcześniej o niej w kontekście automatyzacji migawek). Obie połączone są wieloma ścieżkami FC do serwerów. Na serwerach (np. Red Hat Enterprise Linux Server release 5.5) są sterowniki dostarczane przez obu producentów. Wszystko działa dobrze, ale jest jeden szczegół, który różni sposób dostępu do zasobów. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.hds.com/products/storage-systems/adaptable-modular-storage-2000-family/"><img alt="" src="http://www.hds.com/hdscorp/groups/public/documents/webcontent/hds_138382.jpg" class="alignleft" width="62" height="100" /></a><br />
Od jakiegoś czasu używam macierzy <a href="http://www.hds.com/products/storage-systems/adaptable-modular-storage-2000-family/">Hitachi AMS2100</a> i <a href="http://www.fujitsu.com/global/services/computing/storage/eternus/products/diskstorage/dx-entry/">Fujitsu DX80</a> (<a href="http://guzik.net.pl/blog/2011/05/czego-mozna-sie-spodziewac-po-expect-i-macierzy-fujitsu-eternus-dx80/">pisałem wcześniej o niej</a> w kontekście automatyzacji migawek). Obie połączone są wieloma ścieżkami FC do serwerów. Na serwerach (np. Red Hat Enterprise Linux Server release 5.5) są sterowniki dostarczane przez obu producentów. Wszystko działa dobrze, ale jest jeden szczegół, który różni sposób dostępu do zasobów. <span id="more-3665"></span><br />
Mianowicie wolumeny wystawione przez DX80 widoczne są jako jedno urządzenie w drzewie <code>/dev/</code>:</p>
<blockquote><p><code>/opt/FJSVmpd/bin/iompadm info</p>
<p>IOMP: vhba0<br />
Element:<br />
    DISK: ETERNUS_DXL-  010309-0000-0002 (sdf)<br />
    PATH:<br />
        sdf 0000:02:00.0 standby "online" 11, 11, 2<br />
        sdf 0000:02:00.0 active "online" 10, 10, 0<br />
        sdf 0000:03:00.0 fail "no such device or address" 11, 11, 2<br />
        sdf 0000:03:00.0 fail "no such device or address" 10, 10, 0</p>
<p>    DISK: ETERNUS_DXL-  010309-0000-0000 (sdg)<br />
    PATH:<br />
        sdg 0000:02:00.0 standby "online" 11, 11, 2<br />
        sdg 0000:02:00.0 active "online" 10, 10, 0<br />
        sdg 0000:03:00.0 fail "no such device or address" 11, 11, 2<br />
        sdg 0000:03:00.0 fail "no such device or address" 10, 10, 0</code></p></blockquote>
<p>Nie zwracajcie uwagi na fail na jednej karcie &#8211; chwilowo światłowody od strony macierzy wpięte są do jednego przełącznika. Ważne to, że mamy dwa wolumeny i dwa urządzenia <code>/dev/sdf</code> i <code>/dev/sdg</code>.<br />
Na AMS2100 wygląda to inaczej:</p>
<blockquote><p><code>/opt/DynamicLinkManager/bin/dlnkmgr view -drv<br />
PathID HDevName Device   LDEV<br />
000000 <strong>sddlmae</strong>  <strong>/dev/sdb</strong> AMS.83004182.0001<br />
000001 sddlmaf  /dev/sdc AMS.83004182.0002<br />
000002 sddlmag  /dev/sdd AMS.83004182.0003<br />
000003 sddlmah  /dev/sde AMS.83004182.0004<br />
000008 <strong>sddlmae</strong>  <strong>/dev/sdh</strong> AMS.83004182.0001<br />
000009 sddlmaf  /dev/sdi AMS.83004182.0002<br />
000010 sddlmag  /dev/sdj AMS.83004182.0003<br />
000011 sddlmah  /dev/sdk AMS.83004182.0004<br />
KAPL01001-I The HDLM command completed normally. Operation name = view, completion time = 2012/01/27 22:09:41</code></p></blockquote>
<p><a href="http://www.fujitsu.com/global/services/computing/storage/eternus/products/diskstorage/dx-entry/"><img alt="" src="http://www.fujitsu.com/img/STRSYS/system/11-photo_dx80s2.jpg" class="alignright" width="150" height="130" /></a>Mamy <code>/dev/sddlmae</code>, które to jest złączeniem <code>/dev/sdb</code> i <code>/dev/sdh</code> (analogicznie reszta). Możemy odwołać się do tego pierwszego urządzenia i wtedy mamy wielościeżkowość zapewnioną, ale równie dobrze możemy korzystać z pojedynczych urządzeń (naturalnie bez MPIO).<br />
Niestety domyślnie składowe urządzenia są widoczne. Jeśli podłączając zasób odwołujemy się bezpośrednio do nazwy <code>/dev/sddlmae</code> to nie ma problemu. Gorzej, gdy montujemy korzystając z <em>label</em>&#8216;i. Jako, że może istnieć wiele urządzeń tak samo nazwanych, system wybierze pierwsze i z niego skorzysta. W takim przypadku jak mój pierwsze oznacza to przez jedną ścieżkę (<code>fdisk -l 2>&#038;1|grep ^Disk</code>).</p>
<p>Swego czasu przy przenoszeniu danych z macierzy Fujitsu na Hitachi nie zwróciłem na to uwagi, a to spowodowało krótką niedostępność&#8230;</p>
<p>Gdyby się ktoś nad tym zastanawiał, to UUID niczego nie zmienia:</p>
<blockquote><p><code>/dev/sdb1: LABEL="database" UUID="e275b221-be9f-449b-a0ff-88de3a01799a" TYPE="ext3"<br />
/dev/sdh1: LABEL="database" UUID="e275b221-be9f-449b-a0ff-88de3a01799a" TYPE="ext3"<br />
/dev/sddlmae1: LABEL="database" UUID="e275b221-be9f-449b-a0ff-88de3a01799a" TYPE="ext3"</code></p></blockquote>
<p>Kto dopisze jak ukryć urządzenia składowe przez <code>udev</code>?</p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/01/linux-mpio-hitachi-vs-fujitsu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rlwrap czyli historia w sqlplus</title>
		<link>http://guzik.net.pl/blog/2012/01/rlwrap-czyli-historia-w-sqlplus/</link>
		<comments>http://guzik.net.pl/blog/2012/01/rlwrap-czyli-historia-w-sqlplus/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 22:05:18 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[DB]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[rlwrap]]></category>
		<category><![CDATA[SQL*Plus]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3649</guid>
		<description><![CDATA[Od zawsze irytował mnie brak historii poleceń w sqlplus pod Linuksem. Owszem, można się dostać do ostatniego, ale chodzi mi o wygodne przewijanie góra &#8211; dół i ew. edycję. Czemu w ogóle pod Windows to działa, a pod Linuksem nie? Częściowym rozwiązaniem problemu jest użycie rlwrap. To małe narzędzie pozwala na edycję poleceń wpisywanych w [...]]]></description>
			<content:encoded><![CDATA[<p>Od zawsze irytował mnie brak historii poleceń w sqlplus pod Linuksem. Owszem, można się dostać do ostatniego, ale chodzi mi o wygodne przewijanie góra &#8211; dół i ew. edycję. Czemu w ogóle pod Windows to działa, a pod Linuksem nie?<br />
Częściowym rozwiązaniem problemu jest użycie <a href="http://utopia.knoware.nl/~hlub/uck/rlwrap">rlwrap</a>. To małe narzędzie pozwala na edycję poleceń wpisywanych w jakimkolwiek programie. Utrzymuje osobną historię dla każdej komendy i obsługuje uzupełnianie słów.<br />
Użycie równie trywialne jak instalacja, np.:</p>
<blockquote><p><code>rlwrap sqlplus</code></p></blockquote>
<p><span id="more-3649"></span><br />
Historię możemy również przeszukiwać wstecz przy użyciu kombinacji [Ctrl] + [R].<br />
Aby zadziałało uzupełnianie, musimy podać plik z listą słów (<code>-f</code>). Oczywiście nie będzie to tak inteligentne jak psql z PostgreSQL, bo dopasowywać będzie każde słowo, niezależnie od kontekstu, ale zawsze to coś.</p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/01/rlwrap-czyli-historia-w-sqlplus/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Odświeżony Clientron U720</title>
		<link>http://guzik.net.pl/blog/2012/01/odswiezony-clientron-u720/</link>
		<comments>http://guzik.net.pl/blog/2012/01/odswiezony-clientron-u720/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 17:48:50 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Clientron]]></category>
		<category><![CDATA[U720]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3636</guid>
		<description><![CDATA[Dostałem sprzęt z nowej dostawy. Dystrybutor zapowiadał zmiany i rzeczywiście parę różnic jest. Porównuję do ostatnio dotykanych modeli U720: procesor VIA Eden Processor 1000MHz, 1995.11 bogomips (wcześniej 500 MHz z 997.54 bogomips), pamięć w standardzie 512 MB (wcześniej 256 MB), karta graficzna bez zmian, ale jest wyjście DVI zamiast VGA (dają adapter DVI-VGA; minimum dla [...]]]></description>
			<content:encoded><![CDATA[<p>Dostałem sprzęt z <a href="http://www.clientron.com/en/product_detail.php?cid=4&amp;id=15">nowej dostawy</a>. Dystrybutor zapowiadał zmiany i rzeczywiście parę różnic jest. Porównuję do ostatnio dotykanych <a href="http://guzik.net.pl/blog/2011/02/clientron-u720/">modeli U720</a>:</p>
<ul>
<li>procesor VIA Eden Processor 1000MHz, 1995.11 bogomips (wcześniej 500 MHz z 997.54 bogomips),</li>
<li>pamięć w standardzie 512 MB (wcześniej 256 MB),</li>
<li>karta graficzna bez zmian, ale jest wyjście DVI zamiast VGA (dają adapter DVI-VGA; minimum dla grafiki to 32 MB),</li>
<li>sieć Realtek RTL-8110SC/8169SC (czyli Gigabit zamiast Fast Ethernet na RTL-8139/8139C/8139C+).</li>
</ul>
<p><span id="more-3636"></span><br />
10ZiG sprzedaje to obecnie jako RBT-5572.<br />
Dla zainteresowanych pliki z SystemRescueCD 2.4.0:</p>
<ul>
<li><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/01/cpuinfo.txt">cpuinfo</a></li>
<li><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/01/dmesg.txt">dmesg</a></li>
<li><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/01/fdisk.txt">fdisk</a></li>
<li><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/01/lspci.txt">lspci</a></li>
<li><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/01/lsusb.txt">lsusb</a></li>
<li><a href="http://guzik.net.pl/blog/wp-content/uploads/2012/01/meminfo.txt">meminfo</a></li>
</ul>
<p>Przy okazji &#8211; jestem żywo zainteresowany ściągnięciem i przetestowaniem <a href="http://www.raspberrypi.org/">Raspberry Pi</a>. Jeśli ktoś chce się podpiąć pod zamówienie, proszę o kontakt.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/01/odswiezony-clientron-u720/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Aktualizacja Nokia Suite &#8211; jest połączenie z Thunderbird!</title>
		<link>http://guzik.net.pl/blog/2012/01/aktualizacja-nokia-suite-jest-polaczenie-z-thunderbird/</link>
		<comments>http://guzik.net.pl/blog/2012/01/aktualizacja-nokia-suite-jest-polaczenie-z-thunderbird/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 21:58:10 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Mozilla Thunderbird]]></category>
		<category><![CDATA[Nokia]]></category>
		<category><![CDATA[Nokia Suite]]></category>
		<category><![CDATA[Thunderbird]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3613</guid>
		<description><![CDATA[Rok temu wyżalałem się z powodu problemów z synchronizacją pomiędzy Nokia i Thunderbird, a tu (przed)wczoraj niespodzianka &#8211; aktualizacja Nokia Suite umożliwiająca takie połączenie: Nie cieszmy się jednak pochopnie, synchronizacja dotyczy na razie (mam nadzieję, że tylko na razie) jedynie kontaktów. Jest już opisana w pomocy: Udostępnianie kontaktów w programach Outlook, Outlook Express i Mozilla [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://guzik.net.pl/blog/2011/01/nokia-i-mozilla-thunderbird-lightning-na-windows-7/">Rok temu wyżalałem się</a> z powodu problemów z synchronizacją pomiędzy Nokia i Thunderbird, a tu (przed)wczoraj niespodzianka &#8211; aktualizacja Nokia Suite umożliwiająca takie połączenie:<br />
<a href="http://guzik.net.pl/blog/wp-content/uploads/2012/01/nokiasuite.png"><img src="http://guzik.net.pl/blog/wp-content/uploads/2012/01/nokiasuite-300x172.png" alt="" title="nokiasuite" width="300" height="172" class="aligncenter size-medium wp-image-3616" /></a><br />
<span id="more-3613"></span><br />
Nie cieszmy się jednak pochopnie, synchronizacja dotyczy na razie (mam nadzieję, że tylko na razie) jedynie kontaktów. Jest już opisana w pomocy:</p>
<ul>
<li><a href="http://www.nokia.pl/pomoc/produkty-pomoc/nokia-ovi-suite/how-to/organise-your-contacts/share-contacts-with-outlook-or-outlook-express">Udostępnianie kontaktów w programach Outlook, Outlook Express i Mozilla Thunderbird</a></li>
</ul>
<p>A! Można jeszcze synchronizować zakładki z Mozilla Firefox.</p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2012/01/aktualizacja-nokia-suite-jest-polaczenie-z-thunderbird/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Temperatura i wilgotność przez SNMP z Clever NPM &#8211; a jednak się da</title>
		<link>http://guzik.net.pl/blog/2011/12/temperatura-i-wilgotnosc-przez-snmp-z-clever-npm-a-jednak-sie-da/</link>
		<comments>http://guzik.net.pl/blog/2011/12/temperatura-i-wilgotnosc-przez-snmp-z-clever-npm-a-jednak-sie-da/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 21:49:13 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Clever]]></category>
		<category><![CDATA[NPM]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3576</guid>
		<description><![CDATA[Mniej więcej tydzień temu napisałem, że nie da się wyciągnąć wskazań czujników temperatury i wilgotności przez SNMP z listwy Clever NPM (używam modelu ND312C0812). Nadal to podtrzymuję, bo bezpośrednio z urządzenia się nie da, ale znalazłem na to sposób, a wstępem do tego był niedzielny wpis: &#8222;O (Net-)SNMP jeszcze trochę&#8222;. Jedna uwaga &#8211; to samo [...]]]></description>
			<content:encoded><![CDATA[<p>Mniej więcej <a href="http://guzik.net.pl/blog/2011/12/clever-npm-cz-2/">tydzień temu napisałem</a>, że nie da się wyciągnąć wskazań czujników temperatury i wilgotności przez SNMP z listwy Clever NPM (używam modelu ND312C0812). Nadal to podtrzymuję, bo bezpośrednio z urządzenia się nie da, ale znalazłem na to sposób, a wstępem do tego był niedzielny wpis: &#8222;<a href="http://guzik.net.pl/blog/2011/12/o-net-snmp-jeszcze-troche/">O (Net-)SNMP jeszcze trochę</a>&#8222;. <span id="more-3576"></span></p>
<p>Jedna uwaga &#8211; to samo urządzenie (z zewnątrz łudząco podobne) znalazłem w ofercie firmy <a href="http://tecnosteel.info/">Tecnosteel</a> jako model <a href="http://tecnosteel.info/BladeShelter/default.aspx?ACTIPDU">F3520</a>, jeśli oprogramowanie ma to samo, to też można zastosować poniższy fortel.</p>
<p>I jeszcze jedna uwaga &#8211; obecnie używam <em>firmware</em> 1.3.111 (z 24-06-2011; wcześniej 1.3.108 z 12-04-2010). Zdobycie go nie było łatwe, bo kilka miesięcy próbowałem zarejestrować się na stronie producenta, a udało się dopiero niedawno. Na wiadomości e-mail nie odpisują.</p>
<p><a href="http://guzik.net.pl/blog/wp-content/uploads/2011/12/clever.jpg"><img src="http://guzik.net.pl/blog/wp-content/uploads/2011/12/clever-150x150.jpg" alt="" title="clever" width="150" height="150" class="alignright size-thumbnail wp-image-3585" /></a>A sztuczka z wyciągnięciem wskazań to nic innego jak parsowanie strony, na której można te dane wyświetlić. Droga do celu nie była trudna, choć zaskoczył mnie kod owej strony.<br />
Na początku pomyślałem, że wystarczy wywołać stronę, która wyświetla się w ramce i z niej pobrać dane (<code>/Sensors.htm</code>). I tu zdziwienie &#8211; na stronie widzę 20&deg;C, a w źródle &#8222;Not found&#8221;. O co chodzi? No tak, jest <code>onLoad</code> (<code>InitPageSensors()</code>)! A tam jakiś JavaScript, który umieszcza te wartości w miejscu &#8222;Not found&#8221;.</p>
<p>Funkcja <code>InitPageSensors()</code> wywołuje <code>SetSensorStatus()</code> przekazując jej łańcuch <code>valstring</code>, który jest ukrytym polem formularza (na <code>/Sensors.htm</code>). Przykładowa wartość: <code>C0003C123C130000000000</code>.</p>
<p>Po analizie funkcji <code>SetSensorStatus()</code> wiem, że:</p>
<ul>
<li>dwa pierwsze znaki zamienione z <code>HEX</code> na <code>BIN</code> dadzą nam informacje o podłączonych czujnikach &#8211; w moim przypadku <code>C0</code> = <code>11000000</code> czyli:</p>
<ul>
<li>pierwszy czujnik T/H obecny,</li>
<li>drugi czujnik T/H obecny,</li>
<li>trzeci czujnik T/H nieobecny,</li>
<li>pierwszy czujnik otwarcia drzwi nieobecny,</li>
<li>drugi czujnik otwarcia drzwi nieobecny,</li>
<li>czujnik dymu nieobecny,</li>
<li>czujnik zalania nieobecny.</li>
</ul>
</li>
<li>pozycja 5 i 6 to temperatura pierwszego czujnika w <code>HEX</code> powiększona o 40,</li>
<li>7 i 8 &#8211; wilgotność w <code>HEX</code> (czujnik pierwszy),</li>
<li>8-9, 10-11, 12-13 i 14-15 to odpowiednio t2, h2, t3 i h3 (oczywiście również w <code>HEX</code> i również temperatura powiększona o 40),</li>
<li>i na koniec drzwi, dym i woda &#8211; te wskazania można odczytywać jedynie binarnie.</li>
</ul>
<p>Z racji tego, że <code>valstring</code> znajduje się w kodzie <code>HTML</code>, nie trzeba się przejmować JavaScript, a jedynie wyciąć go i odpowiednio przetworzyć.<br />
Ja to zrobiłem w Perl, żeby użyć jako wtyczki do Net-SNMP i móc odczytać z Cacti, choć <a href="http://blip.pl/s/855248395">shasta na Blip twierdzi</a>, że Cacti nie robi różnicy czy dostaje <code>STRING</code> czy <code>INTEGER</code>. Tak czy inaczej mój kod w kawałkach wygląda tak:</p>
<blockquote><p><code>use strict;<br />
use WWW::Mechanize;</p>
<p>my $host = "1.2.3.4";<br />
my $rootOID = ".1.3.6.1.4.1.39133.1";<br />
my $url = "http://" . $host . "/Sensors.htm";</p>
<p>my $browser = WWW::Mechanize->new();</p>
<p>$browser->credentials("username", "password");<br />
$browser->get($url, "selectNPM" => "00000001");</p>
<p>my $content = $browser->content();</p>
<p>$content =~ m/valstring" VALUE="(.*?)" RpSize/;</p>
<p>my $valstring = $1;</code></p></blockquote>
<p>Jak widać w powyższym przykładzie nie używam już PEN 31337, a 39133, bo takim właśnie się opiekuję. W artykule &#8222;<a href="http://guzik.net.pl/blog/2011/12/snmp-co-potrafi-moje-urzadzenie/">SNMP – co potrafi moje urządzenie?</a>&#8221; ogłosiłem konkurs na znalezienie się w <a href="http://www.iana.org/assignments/enterprise-numbers">bazie IANA</a> do końca roku. Czasu jeszcze trochę zostało, a procedura nie trwa długo.</p>
<p>Wycięcie właściwych danych załatwiły wyrażenia regularne. Na podane powyżej nie łapie się nic innego, więc na razie można bezpiecznie tego używać.</p>
<p>Dalej mamy już obsługę SNMP:</p>
<blockquote><p><code>use strict;<br />
use NetSNMP::agent;<br />
use NetSNMP::ASN qw(ASN_OCTET_STR ASN_INTEGER);</p>
<p>my $index = 0;<br />
my $bin = sprintf "%b", hex(substr $valstring, 0, 2);</p>
<p>sub callback_function {<br />
&nbsp;&nbsp;my ($handler, $registration_info, $request_info, $requests) = @_;<br />
&nbsp;&nbsp;my $request;</p>
<p>&nbsp;&nbsp;for($request = $requests; $request; $request = $request->next()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $oid = $request->getOID();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($oid == new NetSNMP::OID($rootOID . ".1.0")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (substr($bin, 0, 1) == 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$request->setValue(ASN_OCTET_STR, "Not found");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$request->setValue(ASN_INTEGER, hex(substr $valstring, 4, 2)-40);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;elsif ($oid == new NetSNMP::OID($rootOID . ".2.0")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (substr($bin, 0, 1) == 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$request->setValue(ASN_OCTET_STR, "Not found");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$request->setValue(ASN_INTEGER, hex(substr $valstring, 6, 2));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
}</p>
<p>my $agent = new NetSNMP::agent();<br />
$agent->register("callback function", $rootOID, \&#038;callback_function);
</p></blockquote>
<p></code><br />
Naturalnie <code>if</code>&#8216;ów jest więcej &#8211; powyżej to tylko przykład na obsługę pierwszego czujnika temperatury i wilgotności. Zainteresowanym mogę podesłać cały skrypt.</p>
<p>Cały skrypt dorzucamy jako wtyczkę do Net-SNMP i cieszymy się wykresami w Cacti ;-)</p>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2011/12/temperatura-i-wilgotnosc-przez-snmp-z-clever-npm-a-jednak-sie-da/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>O (Net-)SNMP jeszcze trochę</title>
		<link>http://guzik.net.pl/blog/2011/12/o-net-snmp-jeszcze-troche/</link>
		<comments>http://guzik.net.pl/blog/2011/12/o-net-snmp-jeszcze-troche/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 13:36:38 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Programowanie]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[SNMP]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3560</guid>
		<description><![CDATA[O SNMP pisałem już kilka razy. Tym razem notka o rozszerzeniu możliwości serwera (Net-SNMP) i prezentacji danych we własnych OID&#8217;ach. Najprościej wykonać to można dodając do konfiguracji dyrektywę extend (kiedyś exec lub sh). Składnia wygląda tak: extend [MIBOID] NAME PROG ARGS A na przykładzie: extend .1.3.6.1.4.1.31337 Test /root/scripts/test.sh testarg1 Przy okazji pozdrawiam firmę Union &#038; [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://guzik.net.pl/blog/tag/snmp/">O SNMP pisałem już kilka razy</a>. Tym razem notka o rozszerzeniu możliwości serwera (Net-SNMP) i prezentacji danych we własnych OID&#8217;ach.</p>
<p>Najprościej wykonać to można dodając do konfiguracji dyrektywę <code>extend</code> (kiedyś <code>exec</code> lub <code>sh</code>). Składnia wygląda tak:</p>
<blockquote><p><code>extend [MIBOID] NAME PROG ARGS</code></p></blockquote>
<p>A na przykładzie:</p>
<blockquote><p><code>extend .1.3.6.1.4.1.31337 Test /root/scripts/test.sh testarg1</code></p></blockquote>
<p>Przy okazji pozdrawiam firmę Union &#038; Comstar, której PEN (<em>Private Enterprise Number</em>) pożyczyłem :-) <span id="more-3560"></span><br />
Wadą tego rozwiązania jest fakt, że każdy wynik zwracany przez zewnętrzny program (<code>printf</code> czy <code>echo</code>) traktowany jest jak <code>STRING</code>. Gdy chcemy uzyskać <code>INTEGER</code> możemy wprawdzie posłużyć się kodem wyjścia, ale mamy do dyspozycji zakres 0-255. Do pomiaru temperatury w serwerowni czy na procesorze się może przyda, ale do sprawdzenia pamięci wykorzystywanej przez dany proces już niekoniecznie.</p>
<p>Net-SNMP umożliwia nam wykorzystanie Perl&#8217;a &#8211; a konkretnie modułu NetSNMP::agent, do tworzenia własnych wtyczek (chyba dla Python też jest wsparcie).<br />
Jako że kiepski ze mnie programista, a w szczególności programista Perl, postaram się wspierać swój przekaz kodem. I tak stworzenie agenta możemy wykonać następująco:</p>
<blockquote><p><code>use NetSNMP::agent;</p>
<p>my $agent = new NetSNMP::agent();</code></p></blockquote>
<p>Następnie tworzymy funkcję i rejestrujemy ją, by użyć przy wywołaniu konkretnego OID&#8217;a:</p>
<blockquote><p><code>sub callback_function {<br />
&nbsp;&nbsp;my ($handler, $registration_info, $request_info, $requests) = @_;<br />
&nbsp;&nbsp;my $request;<br />
&nbsp;&nbsp;for($request = $requests; $request; $request = $request->next()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $oid = $request->getOID();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($oid == new NetSNMP::OID(".1.3.6.1.4.1.31337.1.1.0")) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$request->setValue(ASN_INTEGER, hex(substr $valstring, 4, 2)-40);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}</p>
<p>$agent->register("callback function", ".1.3.6.1.4.1.31337.1", \&#038;callback_function);</code></p></blockquote>
<p>Funkcja jest wywoływana z czteroma parametrami: <code>HANDLER</code>, <code>REGISTRATION_INFO</code>, <code>REQUEST_INFO</code>, i <code>REQUESTS</code>. <code>REQUEST_INFO</code> może zawierać dwa tryby &#8211; <code>MODE_GET</code> i <code>MODE_GETNEXT</code>. Oczywiście przy jednokrotnym sprawdzaniu OID&#8217;a (np. przez Cacti) nie ma to znaczenia, ale gdybyśmy chcieli sprawdzić całe drzewo używając np. <code>snmpwalk</code>, to przy <code>MODE_GETNEXT</code> musimy podać adres kolejnego OID&#8217;a, który ma być sprawdzony po bieżącym. W przeciwnym razie <code>snmpwalk</code> skończy odczyt.</p>
<blockquote><p><code>$request->setOID(".1.3.6.1.4.1.31337.1.1.1");</code></p></blockquote>
<p>W odpowiedzi agent może zwrócić jeden spośród dwudziestu typów danych. Ja używam jedynie <code>ASN_INTEGER</code> i <code>ASN_OCTET_STR</code>. Resztę można znaleźć w dokumentacji.</p>
<p>Po stworzeniu modułu dodajemy jego wywołanie do Net-SNMP w pliku <code>snmpd.conf</code>:</p>
<blockquote><p><code>perl do "/root/scripts/test.pl"</code></p></blockquote>
<p>Następnie restartujemy demona i możemy odczytywać nasze dane. Należy pamiętać, że po każdej zmianie wtyczki niezbędne jest ponowne przeładowanie.</p>
<p>Czytaj też:</p>
<ul>
<li><a href="http://www.net-snmp.org/wiki/index.php/Tut:Extending_snmpd_using_perl">Extending snmpd using perl</a></li>
<li><a href="http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sect-System_Monitoring_Tools-Net-SNMP-Extending.html">RedHat Documentation: Extending Net-SNMP</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2011/12/o-net-snmp-jeszcze-troche/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jak z konsoli sprawdzić usługi czyli podstawy protokołów internetowych cz. I</title>
		<link>http://guzik.net.pl/blog/2011/12/jak-z-konsoli-sprawdzic-uslugi-czyli-podstawy-protokolow-internetowych-cz-i/</link>
		<comments>http://guzik.net.pl/blog/2011/12/jak-z-konsoli-sprawdzic-uslugi-czyli-podstawy-protokolow-internetowych-cz-i/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 15:00:28 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[IMAP]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[POP3]]></category>
		<category><![CDATA[SMTP]]></category>
		<category><![CDATA[telnet]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3553</guid>
		<description><![CDATA[Ten tekst miał się ukazać w serwisie varlog.pl. Być może kiedyś się tam jeszcze znajdzie. Na razie daję go tu. Zostawiam tak jak jest. O testowaniu usług w serwisie varlog.pl było już wiele wpisów. O tym, że ciągle warto to robić nie muszę chyba przypominać. Czasami sprawdzenie serwera za pomocą standardowego klienta jest niewystarczające. Ba! [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.varlog.pl/"><img alt="" src="http://www.varlog.pl/wp-content/uploads/2010/12/varlog_small.jpg" class="alignright" width="150" height="150" /></a>Ten tekst miał się ukazać w serwisie <a href="http://varlog.pl/">varlog.pl</a>. Być może kiedyś się tam jeszcze znajdzie. Na razie daję go tu. Zostawiam tak jak jest.</p>
<p>O testowaniu usług w serwisie <a href="http://varlog.pl/">varlog.pl</a> było już wiele wpisów. O tym, że ciągle warto to robić nie muszę chyba przypominać.<br />
Czasami sprawdzenie serwera za pomocą standardowego klienta jest niewystarczające. Ba! W niektórych przypadkach do tego klienta możemy po prostu nie mieć dostępu. Co w przypadku gdy mamy do dyspozycji jedynie konsolę tekstową, a użytkownicy twierdzą, że np. ich połączenie z pocztą jest odrzucane?<br />
Warto poznać budowę protokołów internetowych, by mieć możliwość dogłębnego zdiagnozowania problemu.</p>
<p>Poniższy wpis ma za zadanie przybliżyć budowę najpopularniejszych protokołów wymiany informacji, co pomoże początkującym administratorom zrozumieć zasadę działania usług i radzić sobie z ich błędami.<br />
<span id="more-3553"></span></p>
<p>Konwencja zastosowana w tym wpisie &#8211; każdy <em>listing</em> zawiera komendy wpisywane przez użytkownika i odpowiedzi serwera. Te pierwsze zostały pogrubione.<br />
Odpowiedzi serwera mogą się różnić w zależności od rodzaju i wersji oprogramowania. Ważne są kody odpowiedzi występujące na początku linii (np. <code>+OK</code> czy numeryczne <code>250</code>).</p>
<p>W przykładach posługiwałem się narzędziem telnet po stronie klienta. Zazwyczaj jest dostępny. Wskazówki dla Windows jak go dodać do systemu znajdziesz tu: <a href="http://windows.microsoft.com/pl-PL/windows-vista/Telnet-frequently-asked-questions">Telnet: często zadawane pytania</a>. Możesz też użyć <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">PuTTY</a>. W przypadku Gentoo Linux niezbędna będzie paczka <a href="http://packages.gentoo.org/package/net-misc/telnet-bsd">net-misc/telnet-bsd</a>.<br />
Bardziej zaawansowani administratorzy na pewno wybiorą <a href="http://netcat.sourceforge.net/">netcat</a> (nc). Za <a href="http://linux.die.net/man/1/nc">dokumentacją</a>:</p>
<blockquote><p>Unlike telnet, nc scripts nicely, and separates error messages onto standard error instead of sending them to standard output, as telnet does with some.</p></blockquote>
<p>Jeśli myślimy o skryptach, które to zautomatyzują, możemy wybrać również <a href="http://guzik.net.pl/blog/2011/05/czego-mozna-sie-spodziewac-po-expect-i-macierzy-fujitsu-eternus-dx80/">expect</a>.</p>
<p>Dobra, tyle wstępu &#8211; do dzieła! Na pierwszy rzut poczta &#8211; zacznijmy od pobierania wiadomości przez POP3. Standardowa komunikacja może wyglądać tak:</p>
<blockquote><p><code>$ <strong>telnet serwer pop3</strong><br />
Trying 1.2.3.4...<br />
Connected to serwer (1.2.3.4).<br />
Escape character is '^]'.<br />
+OK<br />
<strong>USER guzik</strong><br />
+OK Tell me your password.<br />
<strong>PASS 11^ak-to-jest-haslo-plain-text-JAhsus</strong><br />
+OK Welcome aboard! You have 820 messages.<br />
<strong>LIST</strong><br />
+OK Scan list follows:<br />
1 2912404<br />
2 3562487<br />
3 98194<br />
[...]<br />
818 157144<br />
819 4260<br />
820 1900<br />
<strong>RETR 814</strong><br />
+OK Message follows<br />
[...]<br />
.<br />
<strong>QUIT</strong><br />
+OK Done<br />
Connection closed by foreign host.</code></p></blockquote>
<p>Najprostszy test może sprowadzić się do komend <code>USER</code> i <code>PASS</code>. Już na tym etapie możemy sprawdzić czy serwer działa i czy na pewno uwierzytelnia użytkowników. Pozostałe komendy to:</p>
<ul>
<li><code>LIST</code> &#8211; lista wiadomości (lp. i rozmiar),</li>
<li><code>RETR nr</code> &#8211; pobranie konkretnej wiadomości,</li>
<li><code>QUIT</code> &#8211; to chyba jasne.</li>
</ul>
<p>Gdyby nie powiodło się uwierzytelnienie z powodu błędnego hasła bądź serwer nie mógł sprawdzić danych np. w bazie, dostaniemy stosowny komunikat. Wiedzę o POP3 można rozszerzyć przeglądając dokument <a href="http://www.ietf.org/rfc/rfc1939.txt">RFC 1939</a>.</p>
<p>Czas na IMAP. Pamiętać należy, że każda komenda poprzedzona jest identyfikatorem. Może to być dowolny ciąg &#8211; w zasadzie nic nie stoi na przeszkodzie, by zawsze ten sam, ale dla rozróżnienia odpowiedzi warto zastosować za każdym razem inny (w moim przykładzie zastosowałem <code>Cx</code>, gdzie x jest kolejną cyfrą).</p>
<blockquote><p><code>$ <strong>telnet serwer imap</strong><br />
Trying 1.2.3.4...<br />
Connected to serwer (1.2.3.4).<br />
Escape character is '^]'.<br />
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc.  See COPYING for distribution information.<br />
<strong>C1 LOGIN guzik 11^ak-to-jest-haslo-plain-text-JAhsus</strong><br />
C1 OK LOGIN Ok.<br />
<strong>C2 SELECT Inbox</strong><br />
* FLAGS ($MDNSent Junk NonJunk $Forwarded Draft Answered Flagged Deleted Seen Recent)<br />
* OK [PERMANENTFLAGS ($MDNSent Junk NonJunk $Forwarded * Draft Answered Flagged Deleted Seen)] Limited<br />
* 821 EXISTS<br />
* 0 RECENT<br />
* OK [UIDVALIDITY 1301686504] Ok<br />
* OK [MYRIGHTS "acdilrsw"] ACL<br />
C2 OK [READ-WRITE] Ok<br />
<strong>C3 FETCH 814 BODY[HEADER]</strong><br />
* 814 FETCH (BODY[HEADER] {1805}<br />
[...]<br />
* 814 FETCH (FLAGS (Seen NonJunk))<br />
C3 OK FETCH completed.<br />
<strong>C4 LOGOUT</strong><br />
* BYE Courier-IMAP server shutting down<br />
C4 OK LOGOUT completed<br />
Connection closed by foreign host.</code></p></blockquote>
<p>Moje testy IMAP zazwyczaj sprowadzają się do powyższego (minimum to <code>LOGIN</code> i <code>LOGOUT</code>). Nigdy nie diagnozowałem ustawiania flag i nie robiłem niczego bardziej zaawansowanego. Gdyby ktoś z czytelników chciał zgłębić wiedzę o tym protokole, odsyłam do <a href="http://www.ietf.org/rfc/rfc3501.txt">RFC 3501</a> (IMAP v4.1).</p>
<p>Nadeszła kolej na wysyłanie poczty. Standardem jest protokół SMTP (<a href="http://www.ietf.org/rfc/rfc2821.txt">RFC 2821</a>). Sesja może wyglądać następująco:</p>
<blockquote><p><code>$ <strong>telnet serwer smtp</strong><br />
Trying 1.2.3.4...<br />
Connected to serwer<br />
Escape character is '^]'.<br />
220 serwer ESMTP j10si7143407wij.97<br />
<strong>HELO client</strong><br />
250 serwer at your service<br />
<strong>MAIL FROM: &lt;guzik@___.edu.pl&gt;</strong><br />
250 2.1.0 OK j10si7143407wij.97<br />
<strong>RCPT TO: &lt;jamzed@______.pl&gt;</strong><br />
250 2.1.5 OK j10si7143407wij.97<br />
<strong>DATA</strong><br />
354  Go ahead j10si7143407wij.97<br />
<strong>Subject: TEST<br />
test<br />
.</strong><br />
250 2.0.0 j10si7143407wij.97 Message accepted for delivery<br />
<strong>QUIT</strong><br />
221 2.0.0 serwer closing connection<br />
Connection closed by foreign host.</code></p></blockquote>
<p>I krótkie wyjaśnienie: na początek przywitanie z serwerem komendą <code>HELO</code> z podaniem hosta, z którego się łączymy. Następnie definiujemy nadawcę wiadomości &#8211; <code>MAIL FROM:</code> oraz jej adresata &#8211; <code>RCPT TO:</code>. Na koniec pozostaje podać treść wiadomości za komendą <code>DATA</code>. Wpisywanie kończymy podając pojedynczy znak &#8222;.&#8221; w linii. Transmisję kończymy za pomocą <code>QUIT</code>.<br />
Treść wiadomości to nie tylko to co faktycznie chcemy przekazać adresatowi. Za <code>DATA</code> powinny się znaleźć nagłówki, które normalnie formatuje za nas program pocztowy. Ja w testach ograniczam się zazwyczaj do <code>Subject:</code>, ew. <code>Date:</code>.</p>
<p>W kolejnej części postaram się przybliżyć protokół HTTP i FTP oraz IRC. W przyszłości planuję również rozwinięcie tematu o transmisję szyfrowaną (SSL).</p>
<p>Zobacz także:</p>
<ul>
<li><a title="Testuj, zanim będzie za późno" href="../2010/05/testuj-zanim-bedzie-za-pozno/" rel="bookmark">Testuj, zanim będzie za późno</a></li>
<li><a title="Q&amp;A – jak pobrać stronę bez używania przeglądarki?" href="../2010/03/qa-jak-pobrac-strone-bez-uzywania-przegladarki/" rel="bookmark">Q&amp;A – jak pobrać stronę bez używania przeglądarki?</a></li>
<li><a title="Basic Auth – proste zabezpieczenie zasobów WWW" href="../2011/03/basic-auth-proste-zabezpieczenie-zasobow-www/" rel="bookmark">Basic Auth – proste zabezpieczenie zasobów WWW</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2011/12/jak-z-konsoli-sprawdzic-uslugi-czyli-podstawy-protokolow-internetowych-cz-i/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SNMP &#8211; co potrafi moje urządzenie?</title>
		<link>http://guzik.net.pl/blog/2011/12/snmp-co-potrafi-moje-urzadzenie/</link>
		<comments>http://guzik.net.pl/blog/2011/12/snmp-co-potrafi-moje-urzadzenie/#comments</comments>
		<pubDate>Wed, 14 Dec 2011 04:00:09 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[SNMP]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3520</guid>
		<description><![CDATA[SNMP (Simple Network Management Protocol) to protokół służący do zarządzania urządzeniami sieciowymi. Za pomocą SNMP możemy pobierać informacje z urządzenia (Get, GetNext) lub wysyłać do niego konfigurację (Set). Urządzenia same również mogą się komunikować z nami wysyłając sygnał (Trap) do serwera SNMP. Każdy komunikat to osobna zmienna &#8211; tzw. OID (Object IDentifier). Zmienne tworzą bazę [...]]]></description>
			<content:encoded><![CDATA[<p>SNMP (<em>Simple Network Management Protocol</em>) to protokół służący do zarządzania urządzeniami sieciowymi. Za pomocą SNMP możemy pobierać informacje z urządzenia (<code>Get</code>, <code>GetNext</code>) lub wysyłać do niego konfigurację (<code>Set</code>). Urządzenia same również mogą się komunikować z nami wysyłając sygnał (<code>Trap</code>) do serwera SNMP.<br />
Każdy komunikat to osobna zmienna &#8211; tzw. OID (<em>Object IDentifier</em>). Zmienne tworzą bazę zwaną MIB (<em>Management Information Base</em>), w której rozmieszczone są w strukturze drzewiastej. Nazwa zmiennej ma odwzorowanie na adres w postaci numerycznej, gdzie każdy poziom oddzielony jest kropką. Np.:</p>
<ul>
<li><code>sysDescr.0</code> (<code>1.3.6.1.2.1.1.1.0</code>) &#8211; nazwa urządzenia,</li>
<li><code>sysUpTimeInstance</code> (<code>1.3.6.1.2.1.1.3.0</code>) &#8211; czas od uruchomienia,</li>
<li><code>sysLocation.0</code> (<code>1.3.6.1.2.1.1.6.0</code>) &#8211; lokalizacja.</li>
</ul>
<p>Zmienne przechowują konkretny rodzaj danych. Dla powyższych będzie to odpowiednio <code>STRING</code>, <code>Timeticks</code> i ponownie <code>STRING</code>. <span id="more-3520"></span>Mogą występować również inne typy, np. <code>INTEGER</code>, <code>Gauge32</code> czy <code>Counter32</code>. W szczególnym przypadku możemy dostać zmienną typu <code>OID</code> czyli wskazanie na adres w drzewie.<br />
Więcej na temat SNMP można znaleźć w <a href="http://www.faqs.org/rfcs/rfc1157.html">RFC 1157</a>. Ja chciałbym się skupić na tym ostatnim typie, bo to jest odpowiedź na tytułowe pytanie.</p>
<p>Istnieje specjalny OID, który jest wskazaniem na gałąź zawierającą zmienne dotyczące konkretnego modelu sprzętu danego producenta. W <code>sysObjectID.0</code> (<code>1.3.6.1.2.1.1.2.0</code>) znajduje się OID, pod którym należy szukać szczególnych danych dotyczących konkretnego urządzenia. To co dostajemy w standardzie (np. za pomocą zwykłego odczytu <code>snmpwalk</code>) to ogólnie zdefiniowane wartości, tak jak wspomniane wcześniej nazwa urządzenia, lokalizacja czy ruch na interfejsach sieciowych. Dopiero to, na co wskazuje <code>sysObjectID.0</code> może wyciągnąć z naszego urządzenia dane, których szukamy.</p>
<p>W <code>sysObjectID.0</code> może znajdować się np. taka wartość: <code>enterprises.211.1.21.1.60</code> (<code>1.3.6.1.4.1.211.1.21.1.60</code>). Jak widać część jest rozwiązywana na tekst, a część pozostaje w postaci numerycznej (używam <code>snmpwalk</code>). Dzieje się tak dlatego, że pierwszy człon po nazwie to identyfikator producenta (a później jego gałęzie), o których <code>snmpwalk</code> nic nie wie. Identyfikatory nadawane są producentom sprzętu (takim jak Royal Bank of Canada czy Samodzielny Publiczny Centralny Szpital Kliniczny :&gt;) przez IANA, a ich lista jest <a href="http://www.iana.org/assignments/enterprise-numbers">publicznie dostępna</a>.</p>
<p><strong>Dwa piwa</strong> dla pierwszej osoby, która w komentarzu opisze w jaki sposób zdobyć swój numer, <span style="text-decoration: underline;"><strong>cztery</strong></span> dla tego kto znajdzie się w bazie do końca roku (chyba, że czas na umieszczenie jest dłuższy; na dzień dzisiejszy jest tam niespełna 1% firm, czyli ~300, których adres kontaktowy kończy się na &#8222;.pl&#8221;).</p>
<p>Kiedyś w artykule <a href="http://guzik.net.pl/blog/2009/05/xerox-phaser-6180dn-jako-czujnik-temperatury-i-wilgotnosci/">Xerox Phaser 6180DN jako czujnik temperatury i wilgotności</a> opisałem moją walkę o wyciągnięcie wskazań temperatury i wilgotności z czujników wewnętrznych drukarki. Nie pamiętam czy posłużyłem się SNMP i gałęzią odpowiednią dla tego modelu. Teraz nie mam już pod ręką tego modelu. <strong>Piwo</strong> dla osoby, która sprawdzi czy może to tam jest.</p>
<p>Jeśli nie potrafimy się odnaleźć w specyficznych wartościach zwracanych przez urządzenie, można posiłkować się bazą opisową dostarczaną przez producentów sprzętu. Plik taki kopiujemy do <code>/usr/share/snmp/mibs</code>, a następnie przy wywołaniu <code>snmpwalk</code> czy <code>snmpget</code> podajemy nazwę bazy (jedna z pierwszych linii, tuż przed <code>DEFINITIONS ::= BEGIN</code>; często też nazwa samego pliku), np. tak:</p>
<blockquote><p><code>snmpget -On -c public -v 1 <strong>-m FJDARY-E60</strong> host fjdaryPfcmCount.0</code></p></blockquote>
<p>Przy okazji &#8211; przełącznik <code>-On</code> nie rozwiązuje nazw i pokazuje je w postaci numerycznej.<br />
Jeśli producent bazy nie dostarcza (niestety zdarzają się tacy) pozostaje nam samodzielne zgadywanie.</p>
<p>Zobacz także:</p>
<ul>
<li><a href="http://www.karlkatzke.com/using-snmpwalk-and-a-vendor-mib-file/">Using SNMPwalk and a vendor MIB file</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2011/12/snmp-co-potrafi-moje-urzadzenie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>I jeszcze jeden, i jeszcze raz&#8230;</title>
		<link>http://guzik.net.pl/blog/2011/12/i-jeszcze-jeden-i-jeszcze-raz/</link>
		<comments>http://guzik.net.pl/blog/2011/12/i-jeszcze-jeden-i-jeszcze-raz/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 23:06:03 +0000</pubDate>
		<dc:creator>guzik</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[Expert Power Control]]></category>
		<category><![CDATA[Gude]]></category>
		<category><![CDATA[PDU]]></category>

		<guid isPermaLink="false">http://guzik.net.pl/blog/?p=3541</guid>
		<description><![CDATA[Kolejny test zarządzalnej listwy zasilającej. Tym razem Expert Power Control 8213 firmy Gude Analog- und Digitalsysteme. Tak, Made in Germany (bardzo się tym chwalą). Testowany przeze mnie model ma tylko 4 gniazda zasilające &#8211; taki sprzęt dostałem do testów, ale są też z ośmioma (8210/8211). Generalnie pod projekt szukałem konkretnego sprzętu, który spełnił by następujące [...]]]></description>
			<content:encoded><![CDATA[<p>Kolejny test zarządzalnej listwy zasilającej. Tym razem <a href="http://www.gude.info/index.php?lng=1&#038;section=products&#038;product=epc8213">Expert Power Control 8213</a> firmy Gude Analog- und Digitalsysteme. Tak, Made in Germany (bardzo się tym chwalą).<br />
<a href="http://www.gude.info/index.php?lng=1&#038;section=products&#038;product=epc8213"><img alt="" src="http://www.gude.info/pics/epc-4x-8213_shadow_500.jpg" class="alignleft" width="500" height="143" /></a><br />
Testowany przeze mnie model ma tylko 4 gniazda zasilające &#8211; taki sprzęt dostałem do testów, ale są też z ośmioma (<a href="http://www.gude.info/index.php?lng=1&#038;section=products&#038;product=epc8211">8210/8211</a>).<br />
Generalnie pod projekt szukałem konkretnego sprzętu, który spełnił by następujące wymagania:<span id="more-3541"></span></p>
<ul>
<li>zdalne zarządzanie gniazdami zasilającymi (włącz/wyłącz),</li>
<li>pomiar temperatury i wilgotności z możliwością odczytu wartości przez SNMP,</li>
<li>gniazda cyfrowe wyjściowe &#8211; np. do sterowania wentylatorem,</li>
<li>możliwość rozliczania gniazd (moc/prąd) &#8211; najlepiej też przez SNMP.</li>
</ul>
<p>Reszta wodotrysków bezpośrednio mnie nie interesuje.<br />
Krótko o tym urządzeniu &#8211; nie spełnia moich wymagań, ale nie jest złe. Przede wszystkim nie ma cyfrowych wyjść (wejść również nie). Jest wskazanie ogólnego poboru prądu, nie ma per gniazdo.</p>
<p>Co ciekawe domyślnie wszystkie gniazda są w stanie wyłączonym (chyba, że ktoś przestawił je tak przede mną), więc po zaniku zasilania znów trzeba je było włączyć. Dzięki tej zaskakującej właściwości wiem, że można je ustawić w jednym z trzech trybów: włączone, wyłączone i ostatni stan.<br />
Domyślnie nie ma też żadnego opóźnienia przy starcie gniazd. Ale można to &#8216;doklikać&#8217;.</p>
<p>Zaskakująca jest również implementacja klienta DHCP, który nie pamięta poprzedniego adresu i za każdym razem prosi o nowy. W dodatku po jednokrotnym pobraniu adresu z DHCP następnym razem nie chce już sobie ustawić domyślnego nadanego przez producenta. Naturalnie można ustawić adres na stałe.</p>
<p>Do listwy można podłączyć dwa czujniki &#8211; jeden do dedykowanego gniazda, drugi do portu szeregowego (tracimy wtedy możliwość zarządzania przez ten port). Testowałem tylko czujnik temperatury, na pewno są też dwu-funkcyjne (temperatura i wilgotność), nie wiem czy są inne w sprzedaży.<br />
Dużą wadą jest typ zastosowanych gniazd pod czujniki &#8211; PS/2. Pewnie można użyć przedłużacza do klawiatury, żeby wyciągnąć czujnik dalej, ale nie jest to tak wygodne jak RJ/11 czy RJ/45, gdzie możemy wykorzystać okablowanie strukturalne.</p>
<p>Oprócz zarządzania przez WWW (strona wręcz prymitywna, ale przynajmniej dobrze i szybko się wyświetla) jest oczywiście SNMP i Syslog. Choć w przypadku tego ostatniego w ciągu kilku dni złapał mi się tylko jeden komunikat: </p>
<blockquote><p><code>EPC-NET-4x: device powered up</code></p></blockquote>
<p>Być może &#8211; tak jak w przypadku SNMP, trzeba ustawić jakieś wyzwalacze.</p>
<p><img alt="" src="http://www.gude.info/pics/made-in-germany2.png" class="alignleft" width="130" height="95" />Sprzęt wygląda porządnie i chyba ta etykietka jest zasłużona, jeśli by przyjąć stereotyp &#8222;niemiecka precyzja&#8221;.</p>
<p>Wiem, że nie ma rzeczy idealnych, ale szukam dalej czegoś, co zbliży się do ideału. Z drugiej strony jeśli coś jest do wszystkiego&#8230; Dlatego rozważam rozbicie funkcjonalności &#8211; osobno monitoring i sterowanie (np. <a href="http://infratec.ednt.eu/produktlinien/monitoring/rms-3xx/rms300/">Infratec RMS300</a>), a osobno zarządzanie zasilaniem. I tu opisywane powyżej listwy świetnie pasują.</p>
<p>Czytaj w tym temacie także:</p>
<ul>
<li><a href="http://guzik.net.pl/blog/2008/11/monitoring-srodowiska-informatycznego/">Monitoring środowiska informatycznego</a></li>
<li><a href="http://guzik.net.pl/blog/2009/05/infratec-pm-8-ujarzmiony/">Infratec PM 8 ujarzmiony!</a></li>
<li><a href="http://guzik.net.pl/blog/2009/10/infratec-ag-rms-310-nowe-czujniki/">Infratec AG: RMS 310 – nowe czujniki</a></li>
<li><a href="http://guzik.net.pl/blog/2011/02/clever-npm/">Clever NPM</a></li>
<li><a href="http://guzik.net.pl/blog/2011/12/clever-npm-cz-2/">Clever NPM cz. 2</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://guzik.net.pl/blog/2011/12/i-jeszcze-jeden-i-jeszcze-raz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

