sobota, lipiec 11, 2009

Spalony kontroler klawiatury i już po laptopie

Laptop się nie włącza, ale świeci się dioda baterii. Rozbieramy obudowę i wyjmujemy płytę główną.



Po przyłożeniu baterii okazuje się, że jeden układ parzy - PC87541V-VTC (NT618G), czyli mamy zwarcie. Niestety układ ma za dużo nóżek i są one za małe, żeby w domowych warunkach go wylutować. Płyta główna jest do wyrzucenia.



A tu zdjęcie GMA945 i Celerona - rozmiary kontrolera grafiki i procesora są zbliżone.

czwartek, lipiec 09, 2009

C++ Builder still alive (wersja 2009)

środa, lipiec 08, 2009

Duża liczba połączeń w stanie CLOSE_WAIT na Apache'u

W ramach rekomendacji poaudytowych Altkom radzi firmom bezkrytycznie włączać najlepiej wszystkie reguły SmartDefense na firewallu CheckPoint. Gdyby chociaż raz przetestowali to, co proponują, to by wiedzieli, że mogą swoim doradztwem zrobić ludziom bajzel na produkcji.

Zablokowanie połączeń TPC/IP keep-alive realizowane jest w ten sposób, że firewall preparuje pojedyńczy pakiet FIN+ACK, który wysyła do hosta. Host ten liczy, że wyśle ACK-a i dostanie w odpowiedzi FIN+ACK, a po wysłaniu LAST_ACK zamknie połączenie. Tymczasem taka wyminana pakietów nie zachodzi i mamy wiszące połączenia w stanie CLOSE_WAIT. Po pewnym czasie procesy Apache'a strasznie się mnożą, a cały serwis WWW przestaje odpowiadać.

Workaround w httpd.conf:
KeepAlive Off
TimeOut 60

piątek, lipiec 03, 2009

SMSGW: mail-sms gateway

Techbase NPE is a device that comes with 180MHz 32-bit ARM processor, 64 MB of RAM, 4MB of writable FLASH memory, SD card reader and Sim600 GSM EDGE modem. Device is handled by Linux 2.6.20 with BusyBox tools, there is JamVM – embedded Java Virtual Machine more or less compatible with Sun JVM 1.4.

Device was chosen to be a part or IT infrastructure monitoring. All alerts are sent to device via SMTP mail protocol and then delivered as a SMS.

Software used for assembling of application:

SMSGW with documentation is avaliable from systest.googlecode.com

To integrate SMSLib I had to port it from Java 1.5 to JamVM 1.4 (note that GNU Classpath doesn't support POSIX extensions to regular expressions), fix SLFJ startup checks and change usage of RXTX to direct way instead of reflection. RXTX used by me didn't have mappings for B115200 and B230400 and I had to look them up in termios.h (file is available in Linux kernel sources), found values should be used in port.setSerialPortParams().

czwartek, czerwiec 25, 2009

Workaround na wieszające się serwery Della

Wygląda na to, że serwery Della z 8-mioma rdzeniami Intel Xeon przegrzewają się pod Linuksem. Teoretycznie Xeony mają Thermal Circuit Control, który przy nadmiernym wzroście temperatury powinien spowalniać procesor, ale pod Linuksem nie widać jego działania, widać za to, że serwer wiesza się sprzętowo. Workaround to unikanie niepotrzebnych migracji procesów między rdzeniami, co przy ciągłym (wielodniowym) obciążeniu ~5% załatwia problem:
echo 1 > /sys/devices/system/cpu/sched_mc_power_savings.

piątek, czerwiec 19, 2009

Monitoring na sms-a

Kupujemy modem GSM, podłączamy go do linuksowego serwera, stawiamy na serwerze bramkę mail-sms, a potem już tylko:
HOSTNAME=`hostname`
USER=`whoami`
SMTP="10.10.1.25"

function sendmail {
(
sleep 3
echo "HELO $HOSTNAME"
sleep 1
echo "mail from: monitoring@email.com"
sleep 1
echo "rcpt to: smsgw@email.com"
sleep 1
echo "data"
sleep 1
echo "From: monitoring.$USER@email.com"
sleep 1
echo "To: smsgw@email.com"
sleep 1
echo "Subject: $1"
sleep 1
echo ""
sleep 1
echo "$2"
sleep 1
echo "."
sleep 1
echo "quit"
sleep 1
) | telnet $SMTP 25
}

sendmail "$1" "$2"

# ./sendsms "+48602201122" "Brak dzialajacego procesu A dla systemu B"

czwartek, czerwiec 18, 2009

Jakim cudem Java ME na komórkach może być szybka?

Procesory ARM miewają natywną obsługę bajtkodu Javy - Jazelle.

Automatyczne testowanie aplikacji webowych

"Przechodzimy" aplikację w Firefoksie wyposażonym w plugin "Live HTTP headers" i kopiujemy dane wysyłane formularzem. Dane te wkleimy potem do linii poleceń wgeta.



Przykładowy skrypt:
WP_URL="http://10.10.1.20:8080/app/AppServlet"
COOKIE="cookie.dat"
WGET_CMD="wget --timeout=15 --keep-session-cookies --save-cookies=$COOKIE --quiet $WP_URL -O -"
> $COOKIE

RUNNING=$(ps uax | grep -c nazwa_skryptu.sh)
[[ $RUNNING -gt 3 ]] && echo "Poprzednie wywolanie skryptu wisi" && exit 1

RES=$($WGET_CMD --post-data="user=jan.kowalski&password=lubieTpsa&action=login" | grep -c "Zalogowany: ")
echo "Test logowania. Wynik: $RES"
RES=$($WGET_CMD --load-cookies=$COOKIE --post-data="action=create-process&action_params=...&state=" | grep -c "Nowy proces")
echo "Zaladowanie procesu. Wynik: $RES"
RES=$($WGET_CMD --load-cookies=$COOKIE --post-data="action=next&action_params=..." | grep -c "Dane zapisano")
echo "Wynik procesu poprawny?: $RES"
RES=$($WGET_CMD --load-cookies=$COOKIE --post-data="action=save-and-close&action_params=..." | grep -c "Zakonczono proces")
echo "Zamkniecie procesu. Wynik: $RES"
RES=$($WGET_CMD --load-cookies=$COOKIE --post-data="action=logout" | grep -c "Wylogowano uzytkownika")
echo "Wylogowanie. Wynik: $RES"