„Wiele jest prac, których nie możesz wykonać, dopóki się nie odważysz, lecz jeszcze więcej takich, których się nie nauczysz, nie wykonując”.

(przysłowie armeńskie)

Konfiguracja UPS-a pod Debianem

wtorek, 19 lipca 2011 @ 22:45
Do kategorii: GNU/Linux, Komputer

Podłączenie serwera do UPS-a nie zapewnia automatycznie bezpieczeństwa danych zgromadzonych na dyskach twardych w przypadku awarii zasilania, gdyż każdy UPS ma ograniczony czas pracy na baterii. Po jej rozładowaniu następuje zanik napięcia zasilania i dyski w nieskonfigurowanym serwerze narażone są na uszkodzenie na skutek gwałtownego zatrzymania, nie mówiąc o integralności danych w przypadku trwającej operacji zapisu.

Jedną z usług, dbającą o monitorowanie stanu UPS-a i wywołująca zamykanie systemu w przypadku krytycznie niskiego poziomu energii w UPS-ie, jest NUT (Network UPS Tools). Możliwości NUT-a są całkiem spore — zasadniczo jest to serwer wraz z klientami, umożliwiający zbudowanie całej sieci maszyn, które podłączając się do serwera, monitorują stan UPS-ów i podejmują decyzję np. o wyłączeniu poszczególnych serwerów.

Poniżej przedstawię konfigurację w najprostszej sytuacji, gdy posiadamy tylko jedną maszynę, która monitoruje bezpośrednio podłączony do niej UPS, czyli pełni rolę serwera, i jednocześnie jest jedynym klientem, który po otrzymaniu informacji o krytycznie niskim poziomie baterii zamyka system operacyjny i wyłącza się. Konfiguracja została przetestowana na Debianie 5.0.

Czytaj dalszą część wpisu »

Znaki diakrytyczne w plikach uploadowanych przez Django i Apache’a

poniedziałek, 23 maja 2011 @ 22:26
Do kategorii: GNU/Linux, Komputer

Django na ogół znakomicie radzi sobie z obsługą znaków diakrytycznych i możemy śmiało używać ogonków w aplikacjach pisanych za pomocą tego frameworka. Możemy jednak natknąć się na problem, jeżeli spróbujemy za pomocą formularza wysłać na serwer plik z nazwą zawierającą nasze ogonki:

Exception Type:   UnicodeEncodeError
Exception Value:  'ascii' codec can't encode characters in position 46-49: ordinal not in range(128)

Czytaj dalszą część wpisu »

VirtualBox uruchamiający Windowsa z partycji dysku twardego

sobota, 6 listopada 2010 @ 12:57
Do kategorii: GNU/Linux, Komputer

VirtualBox jest świetnym narzędziem, także dla osób, które preferują korzystanie z Linuksa, ale od czasu do czasu muszą uruchomić programy windowsowe, nieszczególnie chętnie współpracujące z Wine’em. Niestety, tak samo jak Wine ma swoje braki, tak i maszyna wirtualna nie jest idealna i wprowadza pewien narzut na zużycie pamięci i procesora, nie mówiąc o kłopotach z wydajnością grafiki, nawet przy operacjach 2D. Stąd czasem chciałoby się mieć możliwość szybkiego odpalenia Windowsa w maszynie wirtualnej, nie będąc pozbawionym opcji uruchamiania go jako samodzielnego systemu wprost z dysku twardego.

Nie wszyscy o tym wiedzą, ale przy odrobinie dobrej woli VirtualBox jest w stanie uruchomić system z partycji zamiast z obrazu dysku. W przypadku Windowsa, przynajmniej w wersji XP, istnieje jednak pewna niedogodność — uruchamianie systemu na przemian z dysku i w maszynie wirtualnej powoduje zgłaszanie uciążliwego komunikatu o wykryciu zmian sprzętowych i prośby o ponowną rejestrację. Na razie nie znalazłem sposobu na legalne pozbycie się tego problemu, niemniej warto wiedzieć, jak skłonić maszynę wirtualną do odpalania systemu z fizycznie istniejącej partycji.

Czytaj dalszą część wpisu »

Konfiguracja jądra Linux z GPIO

piątek, 14 maja 2010 @ 18:54
Do kategorii: Elektronika, GNU/Linux, Komputer

Na ogół w systemach wbudowanych potrzebujemy dostępu do GPIO przynajmniej w jednym celu — do migania diodami, sygnalizującymi stan pracy urządzenia. W gruncie rzeczy błyskanie LED-em jest zresztą pierwszym i podstawowym zadaniem większości urządzeń…

Niestety, opisując proces kompilacji Linuksa dla MMneta1002 zapomniałem o zapewnieniu dostępu do GPIO. Sterowanie pinami na potrzeby migania diodą, załączania przekaźnika czy sprawdzania stanu przełącznika jest jednak bardzo proste — wymaga tylko włączenia odpowiednich opcji w konfiguracji jądra i wykonywania operacji na plikach reprezentujących poszczególne piny. Dodatkowo mamy możliwość automatycznej obsługi LED-ów przez jądro w celu sygnalizacji np. dostępu do nośników danych.

Czytaj dalszą część wpisu »

Django na ARM-ie

środa, 24 marca 2010 @ 15:11
Do kategorii: Elektronika, GNU/Linux, Komputer

Dziś kontynuuję wątek Linuksa na ARM-ie, a konkretnie na płycie ewaluacyjnej MMnet1002. W projekcie, nad którym pracuję potrzebuję aplikacji webowej, która umożliwi zarządzanie harmonogramami zadań. Ponieważ mam bardzo dobre doświadczenia z frameworkiem Django, postanowiłem zaryzykować i uruchomić go na wspomnianej płycie. Ryzyko wynika z faktu, że Python, w którym jest napisane Django, to język interpretowany i można mieć poważne obawy, czy 200MHz-owy mikrokontroler z 64MB RAM-u da sobie radę z tym zadaniem.

Buildroot, z którego korzystam ma w paczkach jedynie Pythona w wersji 2.4. Pomyślałem, że byłoby dobrze mieć nieco świeższą wersję, więc postanowiłem zmodyfikować patche i skompilować wersję 2.6. Nie było to łatwe zadanie, ale łącząc oryginalne patche Buildroota z tym, co udało mi się wygooglować otrzymałem działające rozwiązanie.

Czytaj dalszą część wpisu »

Budowa Linuksa na MMneta1002

wtorek, 16 marca 2010 @ 19:54
Do kategorii: Elektronika, GNU/Linux, Komputer

Płyta ewaluacyjna MMnet1002 firmy Propox jest świetną zabawką dla miłośników Linuksa zainteresowanych jego wykorzystaniem w systemach wbudowanych. Od kilku tygodni eksperymentuję z tą platformą i próbuję zbudować własnego Linuksa z użyciem narzędzi takich jak Buildroot. Płyta jest podobna do atmelowskiej AT91SAM9260-EK, jednak występują pewne różnice, które sprawiają, że nie sposób wykorzystać bez zmian pliki konfiguracyjne przewidziane dla AT91SAM9260-EK. Dotyczy to w szczególności MMneta z pamięcią NANDFlash — 1GiB pamięci nieulotnej to świetna sprawa, ale podstawową i najbardziej popularną konfiguracją jest procesor połączony z pamięcią DataFlash, słusznie należy więc oczekiwać, że czeka nas trochę programistycznej gimnastyki. Nie obędzie się też bez patchowania źródeł, ale w zamian otrzymamy system operacyjny, nad którego każdą częścią będziemy jako-tako panowali i nie będziemy skazani tylko na dostarczaną przez Propox binarną wersję dystrybucji OpenWRT.

Poniższy tutorial nie jest zbyt szczegółowy, zakładam, że Czytelnik pracuje na Linuksie i umie się nim posłużyć w podstawowym zakresie, a także, że zapoznał się z dokumentacją rzeczonej płyty ewaluacyjnej i umie posługiwać się programatorem SAM-BA.

Czytaj dalszą część wpisu »

Szybkie poskromienie SELinuksa

czwartek, 11 marca 2010 @ 23:14
Do kategorii: GNU/Linux, Komputer

SELinux to nakładka na linuksowe jądro, kontrolująca przydzielanie zasobów dla różnych aplikacji. Początkujący administratorzy systemów redhatopodobnych, jak CentOS czy Fedora niejednokrotnie stają przed poważnym problemem: jak uporać się z restrykcyjną polityką SELinuksa, który niczym Hubert Urbański w „Milionerach” będzie się dwieście razy pytał, czy „ostatecznie i definitywnie” pozwolić Apache’owi na dostęp do takiego czy innego katalogu?

Czytaj dalszą część wpisu »

Edytor heksadecymalny na Linuksa

środa, 10 marca 2010 @ 22:17
Do kategorii: Elektronika, GNU/Linux, Komputer

Nie tylko crackerzy i miłośnicy inżynierii wstecznej potrzebują czasem zajrzeć do jakiejś binarki. Niejeden elektronik potwierdzi, że dobrze jest mieć możliwość odczytu czy nawet edycji tzw. „wsadów”, a sam nieraz podglądałem pliki wykonywalne, by sprawdzić, z jakich bibliotek korzystają, w szczególności, gdy programu nie dawało się uruchomić i nie było mowy o skorzystaniu z lsof.

Na ogół używałem do tego po prostu mojego ulubionego Vima i to w zwykłym trybie tekstowym. Uruchomienie trybu heksadecymalnego, zwłaszcza z możliwością edycji wymaga zaklęć tak długich i bezecnych, że do dziś boję się je wpisywać.

Zmuszony jednak przez los postanowiłem wyposażyć się w jakiś porządny edytor heksadecymalny, najlepiej działający w X-ach, żeby mieć pełną wygodę użytkowania.

Czytaj dalszą część wpisu »

Minicom jako terminal szeregowy

piątek, 5 marca 2010 @ 22:21
Do kategorii: Elektronika, GNU/Linux, Komputer

Ostatnio dużo pracuję na porcie szeregowym RS-232, przez który obsługuję także linuksową powłokę. Niezbędny jest do tego emulator terminala szeregowego. Dotychczas korzystałem przede wszystkim z programu GTKTerm, znacznie rzadziej z CuteCom. Na dłuższą metę w GTKTermie doskwierają dwie niedogodności. Po pierwsze na moim systemie lubi on wstawiać od czasu puste linie, jest to jednak tylko pewien wizualny mankament. Po drugie GTKTerm nie radzi sobie z edycją już wydrukowanej linii tekstu, przez co przeglądanie historii poleceń powłoki owocuje ciągłym zadrukowywaniem ekranu, nie mówiąc już o różnej maści paskach postępu, które błyskawicznie zapełniają dostępną historię ekranu; w tych warunkach na vi w ogóle nie da się pracować. Po trzecie — aplikacja ma bardzo krótką historię ekranu, przez co zwykłego dmesg-a trudno obejrzeć w całości.

CuteCom w ogóle jest nieporozumieniem: nie obsługuje kolorów, wejście działa w trybie liniowym a nie znakowym, a jego log potrafi zapchać RAM, zwłaszcza jeżeli będzie monitorował port, na którym działa programator ISP (co ma miejsce w ATmedze128). W pewnych zastosowaniach mógłby się sprawdzić, ale na pewno nie jest to wygodny emulator terminala.

Oczywiście, oprócz tych dwóch programów, znałem też Minicoma, ale zawsze miałem go za program bardzo nieprzyjazny użytkownikowi i nadający się tylko do współpracy z modemami. Okazuje się jednak, że bardzo prosto jest zmusić go do pracy w roli pełnoprawnego terminala szeregowego. To tylko kwestia dodania kilku opcji w wierszu poleceń:

$ minicom -m -o -w -c on

lub krócej:

$ minicom -mowc on

Czytaj dalszą część wpisu »

Przywracanie SAM-B-y w MMnecie1002

czwartek, 4 marca 2010 @ 16:04
Do kategorii: Elektronika

Eksperymentując z bootloaderami i jądrami Linuksa na AT91SAM9260 zablokowałem sobie w pewnym momencie moduł MMnet1002. Mikrokontroler programowany jest przez atmelowski interfejs ISP o nazwie SAM-BA (SAM Boot Assistant), który jest bardzo wygodny, bo nie wymaga żadnego sprzętowego programatora — wystarczy podłączyć się przez USB do ARM-a i użyć oprogramowania dostarczonego przez Atmela.

Niestety, nie jest tak, że tryb programowania włącza podanie odpowiedniego stanu na jakiś pin i restart mikrokontrolera. SAM-BA znajduje się na samym końcu sekwencji startowej i jest uruchamiana tylko wtedy, gdy nie uda się wczytać programu z pamięci DataFlash i NANDFlash. Wprawdzie na płytce MMnet1002 znajduje się zworka SAMBA podłączona do pinu PC15 (NWAIT), której założenie w połączeniu z dwukrotnym restartem wprowadza system w stan programowania, ale ta tajemnicza metoda nie zawsze skutkuje. W szczególności, gdy doprowadzimy system do takiego stanu, że będzie w stanie wczytać z pamięci wadliwy program, utkniemy w miejsu — algorytm startowy stwierdzi, że program wczytano i nie ma potrzeby uruchamiania SAM-B-y, nawet gdy program będzie błędny. W efekcie na konsoli DBGU zobaczymy tylko smutne:

RomBOOT
>

Czytaj dalszą część wpisu »