Co było jak mnie nie było – wersja oficjalna ;-)

W piątek Pojechałem do Ustronia na Jesień Linuksową. Z domu wyszedłem
o 13:10, ale z Gliwic wyjechałem o 14:10, bo najpierw stałem na stacji w
kolejce po gaz, a potem się głupio władowałem w korek na Portowej. Do Ustronia
dojechałem bez problemu (dziwne, bo wcześniej tam nie jeździłem, a wybrałem
sobie trasę drogami, których prawie na mapach nie widać). Niestety,
zapomniałem przed wyjazdem sprawdzić gdzie to właściwie mam dotrzeć. Myślałem,
że może jakoś na pamięć trafię, ale się nie udało. Zadzwoniłem do żony, która
robiła za komputerowy system nawigacji i przeczytała mi przez telefon mapę z
Internetu. Niewiele to dało, poza tym że poznałem nazwę ośrodka i ulicy.
Zrobiłem kółko po Ustroniu, aż w końcu zapytałem jakiś ludzi o ul. Wczasową i
ośrodek Wiecha. Nie wiedzieli, odesłali mnie na rynek do planu miasta. Na
planie centrum takiej ulicy nie było, ale na mapie okolicy też nazwy ulic były
podane. Więc udało mi się ośrodek zlokalizować, a potem nawet dojechać. To
dziwne, bo chyba nigdzie nie widziałem gorzej oznaczonych ulic. Zamiast
tabliczki przy każdym wjeździe, widocznej z każdej strony, to ulice miały
najwyżej jedną, zwykle niewidoczną i to tylko pryz niektórych skrzyżowaniach.
Dojeżdżając pod ośrodek wymęczyłem samochodzik na tamtejszych drogach (na
niektóre podjazdy dwójka okazywała się za wysokim biegiem, ale jakoś autko
sobie radziło).

Już w piątek było parę fajnych wykładów i pół nocy przegadane o
okołolinuksowych pierdołach. W sobotę też prelekcje. We wszystkich nie dało
rady uczestniczyć, mimo że część wypadła z agendy. Większość z tych, których
wysłuchałem podobała mi się. Wieczorem było ognisko, przy którym mieliśmy
dodatkową atrakcję na gapę. Jakaś konkurencyjna impreza w
ośrodku obok miała w programie pokaz sztucznych ogni. Imponujący. Takiego
łomotu to nawet na Sylwestra nigdy nie widziałem. Po ognisku (czy raczej w
trakcie, bo tam jeszcze się coś tliło i ktoś przy tym siedział) oczywiście
tradycyjne Karaoke, a więc stado wyjących pingwinów. Część tej atrakcji
mnie ominęła, bo odwoziłem dziewczynę smoka do centrum — ciekawe
przeżycie: jazda nocą i we mgle tymi krętymi stromymi ulicami. Po powrocie do
ośrodka miałem zamiar wysłać ten wpis (jego pierwotną wersję) na Joggera, ale
ten odmówił współpracy. Byłem zły.

W niedzielę o mało nie zaspaliśmy na śniadanie. Po śniadaniu wysłuchałem
dwóch wykładów i nie wytrzymałem — musiałem dać upust mojemu grzybowemu
maniactwu i przed obiadem poszedłem jeszcze na godzinkę do lasu. Las może nie
typowo grzybowy, bo głównie bukowo-świerkowy i do tego strasznie
krzywy, ale w jednym miejscu znalazłem kilka ładnych prawdziwków i
kozaków. I tak planowałem zajrzeć do lasu (ale już nizinnego) w drodze
powrotnej, ale skoro tam też był las…

Do domu zbierałem się zaraz po obiedzie. Odwiozłem smoka do centrum, i
wziąłem jednego pasażera do Gliwic. Po drodze zajrzeliśmy jeszcze do lasu pod
Żorami, ale wysypu grzybów nie stwierdziliśmy (jeden malutki podgrzybek), mimo
że samochodów pod lasem cała masa. No cóż, tamtego lasu nie znam, może grzyby
były, a ja po prostu nie wiedziałem gdzie szukać. Do domu (właściwie to do
teściów, gdzie żona rodzinka czekała) dotarłem około 16:30.

Linux naucza muzyki

Googlałem za oprogramowaniem które ułatwiłoby moje zabawy z gitarą. Dokładnie to chciałem znaleźć jakiś program do tabulatur, co umiałby zaimportować tabulatury ASCII i je potem zagrać jako MIDI. Na razie nic takiego nie znalazłem, ale znalazłem ten oto ciekawy artykulik. Mimo, że nie wspomina o tym, czego szukałem, to i tak zaraz zabieram się za ściąganie opisanego tam oprogramowania.

Zaginiona entropia i stary Python musi odejść

Wczoraj w firmie przeżyliśmy chwilę grozy. Zaczęło się niewinnie. Nie mogłem
commitnąć zmian w systemie zarządzania użytkownikami. svn commit
zawisał, strace pokazywało, że na dostępie do /dev/random. Nie
było to pilne, więc bardzo się tym nie przejąłem. Potem dzwonił gościu, że
poczty nie może odebrać. Chwila śledztwa wykazała, że zacina się na autoryzacji
DIGEST-MD5. Od razu skojarzyłem to z problemami z /dev/random.
Potem było już tylko gorzej — przy niedziałającym /dev/random posłuszeństwa
odmówił też PostgreSQL. A ja ciągle nie wiedziałem co się dzieje.
/proc/sys/kernel/random/entropy_avail pokazywało 0 i nie chciało
nawet drgnąć. Nie pomogło też wybicie procesów korzystających z /dev/random i
/dev/urandom. Wyglądało na to, że coś się zacieło. Ten serwer już długo działał,
a jeszcze nie było takich problemów.

Pomyślałem o sprzętowym generatorze liczb losowych — podobno niektóre płyty
takie coś mają. find /lib/modules -name "*rng*" pokazało dwa
moduły. Jeden (amd768_rng) miał nazwę podobną do chipsetu płyty.
Załadowałem i nawet działa — cat /dev/misc/amd768_rng pokazywało
krzaczki. Jednak aplikacje odwoływały się do /dev/random, a tam
dalej bez zmian. Spróbowałem ln -s /dev/misc/amd768_rng /dev/random
Permission denied, mv /dev/random /dev/random.orig — to
samo. Cholerny devfs – próbuje być mądrzejszy ode mnie! Zawsze lubiłem ideę
devfs — w /dev/ jest tylko to co mam w komputerze, a dysk o
konkretnym SCSI-id podłączony do konkretnego kontrolera ma zawsze tę samą nazwę,
a nie zależną od tego co jeszcze jest podłączone. Jednak implementacja jest
fatalne, a ten przypadek przeważył — devfs wyleciał z tego serwera. I tak
robiliśmy reboot, bo innych pomysłów nie było.

Po reboocie okazało się, że /dev/amd768_rng nie jest całkiem
zgodny z /dev/random — po podlinkowaniu niektóre aplikacje (w
szczególności SVN) zawisały przy próbie korzystania z tegoż. Jednak
/proc/sys/kernel/random/entropy_avail było już większe od zera,
więc problem chwilowo zniknął. Jednak nie na długo — entropy_avail
zaczęło się zmniejszać i znowu doszło do zera blokując wiele usług. Zamiany
/dev/random na /dev/urandom nie brałem pod uwagę – po
to używam SSL, SASL itp. żeby było bezpiecznie, a /dev/urandom bez
entropii generuje liczby bardzo pseudolosowe, a więc do kryptografii
niespecjalnie się nadające. Na szczęście kumpel znalazł winowajcę —
iptables -m random. Jedna taka regułka była w naszym firewallu i po
podłączeniu któregoś klienta najwyraźniej zabrakło na nią entropii. Po zamianie
tego na coś innego entropy_avail urosło do sensownej wartości i
wszystko zaczęło znowu działać. Ufff…

W PyXMPP i CJC obsługa MUC zaczyna działać. Można już wejść na takiego czata
i pogadać. Ale pierwszym felerem, który się rzuca w oczy, są niewłaściwe czasy
przy wiadomościach z historii pokoju. Jest tam czas aktualny, zamiast tego
podanego w <x xmlns="jabber:x:delay"/>. JEP-91 jest banalnie prosty,
więc postanowiłem go od razu zaimplementować. Oczywiste było, że przydałby się
typ opisujący czas, którego w Pythonie zawsze brakowało. Zwykle używałem
mx.Datetime, ale nie chciałem dla takiej dupereli do PyXMPP dodawać
kolejnej zależności. Więc użyłem modułu time, ale on jest do bani.
Można pobrać aktualny czas, przedstawić ją w postaci UTC, czy czasu lokalnego,
czy skonwertować tekst o znanym formacie na czas — ale tylko w czasie lokalnym.
Na zamianę czasu UTC w postaci tekstowej na czas lokalny nie znalazłem sposobu.
Poczytałem dokumentację — z niej wynikało że %Z w formacie
dla time.strptime czasem może działać — u mnie nie działa.
Pogooglałem i okazało się że moje wiadomości na temat braku typu dla czasu są
nieaktualne. W Pythonie 2.3 jest moduł datetime, który daje
wszystko co potrzebuję wraz z sensownym interfejsem. Dotychczas jednak PyXMPP
działało także na pythonie 2.2.x. Chyba przestanie — już dawno zastanawiałem się
nad porzuceniem wsparcia dla Pythona 2.2 — chociażby dlatego, że nie ma w nim
obsługi stringprep, czy IDN (oba standardy wymagane przez XMPP). Teraz PyXMPP
zawiera moją własną implementację stringprep dla Pythona 2.2 (wraz z wymaganą przez nią
normalizacją Unicode — to było sporo roboty), a IDN po prostu nie są obsługiwane gdy używany jest Python 2.2
(użycie znaku nie-ASCII w domenie JID powoduje bład). Ciekawe dla ilu
użytkowników takie podniesienie wymagań będzie dużym kłopotem. A może w ogóle
się tym nie przejmować? W końcu już teraz użytkownicy Debiana muszą kombinować,
żeby z PyXMPP skorzystać, bo standardowo mają historyczne wersje Pythona i
libxml2. Chyba jednak wywalę obsługę pythona 2.2 — kodowi wyjdzie to tylko na
dobre.

Praca, praca, praca…

We wtorek pojechałem do Dąbrowy Górniczej instalować serwerek linuksowy
(katalog udostępniony w sieci lokalnej plu s Neostrada) w pewnej firmie.
Serwerek przygotowałem już wcześniej, ale niezbyt dobrze i kupę czasu straciłem
na walce z tą Neostradą. Okazało się, że pakiet speedtouch w PLD zawiera
sterownik kernelowy, ale dokumentację do sterowników userspace – jednego z
drugim nie dało się pogodzić. Dopiero gdy podłączyłem modem do jakiegoś Windowsa
(błe) i wygooglałem właściwe HOWTO udało mi się to odpalić (na sterowniku
kernelowym). Przy okazji przekonałem się na własne oczy że hotplug jest do d….
Coś takiego jak hotplug jest potrzebne i byłoby to super gdyby działało jak
należy – podobnie do pcmcia-cs. Ale jak po podłączeniu modemu odpalało mój
skrypt do inicjalizacji tegoż kilka razy równolegle, to ja dziękuję.

Serwerek miał też robić backupy udostępnionego katalogu na ZIPa. Wymyśliłem
sobie, że będę tam robił też backup całego systemu i zrobię to tak, żeby się
wszystko odtwarzało prawie bezobsługowo. Pracowałem nad tym dzień wcześniej w
firmie. Nie udało mi się zabootować Linuksa z FATowej (dla przenośności danych z
backupu) partycji na tym ZIPie, więc zrobiłem bootowanie z dodatkowej dyskietki.
Wszystko ładnie działało, nie zdążyłem tylko do końca przetestować odtwarzania
danych. Na miejscu też nie przetestowałem, bo walczyłem z tą Neostradą. A w
końcu się okazało, że nic z takiego kompletnego backupu – poza kopią systemu na
tą dyskietkę ZIP nie wiele wchodzi, a w końcu backup danych jest ważniejszy.

W środe siedziałem normalnie w firmie. W czwartek wyjechałem tylko do jednego
klienta sieci osiedlowej w Zabrzu. Normalnie do klientów tych sieci nie jeżdżę,
ale ten był wyjątkowy – była to firma i ich sieć lokalna była odseparowana od
całej sieci osiedlowej routerkiem linuksowym, oczywiście postawionym przez nas.
Chodziło tylko o aktywowanie internetu w nowym komputerze (inna karta sieciowa),
ale że już za cholerę nie pamiętałem co właściwie było na tym routerku
(instalowany z 2 lata tem), ani jakie tam może być hasło roota, to musiałem tam
pojechać. Pojechałem, zrobiłem, wróciłem. W sumie warte odnotowania tylko
dlatego, że zwykle z biura nie ruszam się dalej niż na serwerownię. Tego samego
dnia dowiedziałem się jeszcze, że w piątek w Dąbrowie na tym serwerku muszę
zrobić jeszcze serwer drukarki dla Windowsów (podobno powinienem już dawno o tym
wiedzieć, bo byłem przy tym jak było to ustalane). Ostatnio robiłem coś takiego
parę lat temu, gdy jeszcze nie było CUPSa, a i samba miała nieco mniejszy
numerek. Wygooglałem jakieś HOWTO na ten temat i poczytałem sobie. Nie wyglądało
na banalną sprawę, ale oczywiście do zrobienia.

W piątek więc znowu do Dąbrowy. Nie z samego rana, więc zdążyłem przynajmniej
pocztę poczytać. Po drodze kumpel z którym jechałem musiał coś w Actionie
załatwić. Dobrze że wziąłem książkę, bo długo tam musiałem czekać. Gdy już
dojechaliśmy na miejsce zabrałem się za robotę i właściwie poszło to bez
problemu. I to nawet w trybie normalnego serwera drukowania, a nie tylko
spooler-only. Dobrze że drukarka była PostScriptowa. Skonfigurowałem klientowi
konta pocztowe na naszych serwerach, zrobiłem jakieś inne drobiazgi których już
nie pamiętam, ale jak zbieraliśmy się do wyjazdu to było już po 15:00 (pracę
normalnie kończę o 16:00). Po drodze jeszcze raz mieliśmy zajrzeć do Actiona, po
obudowę. Zabraliśmy obudowę, jedziemy dalej, gdy byliśmy pod rondem w Katowicach
dzwoni telefon, że jeszcze po coś do Action trzeba wstąpić. Sprowrotem, znowu
czekanie, znowu rondo, gdzie straszny korek… i w firmie byliśmy o 16:15. Nawet
nie tak źle, tyle że ja od rana nic nie jadłem, a do domu jeszcze 45 minut jazdy
tramwajem. Wróciłem głodny i straszliwie zmęczony (właściwie nie wiadomo
czym).

Dobrze że w domu czekał pyszny obiadek – musiałem tylko go sobie odgrzać. Po
obiadku się położyłem, ale nie długo było mi dane leżeć, bo szef dzwoni z firmy,
że jest problem z jedną siecią i mam posprawdzać czy to nic u nas. Sprawdzam
(resztkami sił) i nie wygląda żeby to był router, modemy czy coś innego za co
odpowiadam. Drugi admin też sprawdzał i doszedł do tych samych wniosków. Na 90%
coś w sieci lokalnej. Niestety trochę później znowu mnie telefon wyciąga z łóżka
– mam to zgłosić na Błękitną Linię. Nie sądzę, żeby to była dzierżawka, ale
cóż… szef każe, to się robi. Zgłosiłem, zjadłem kolację i poszedłem spać (dużo
wcześniej niż zwykle, bo około 21:00).

Wczoraj jeszcze dzwonił Tato, że w Katowicach jest jakiś festyn i może nas
zabrać. Umówiliśmy się, że jak będzie ładna pogoda to jedziemy, a dokładniej się
umówimy dzisiaj około 10:00. Gdy dzisiaj zadzwonił ustaliliśmy że jedziemy –
będzie po nas o 11:05. Jednak wcześniej zadzwonił szef, że trzeba coś z tą
niedziałającą siecią zrobić – przepiąć ją na radiolinię. Drugi admin, najpierw
nie odbiera telefonu, potem jest „nieosiągalny”. Muszę sam się tym zająć, a
nawet nie znam do końca aktualną konfigurację tej radiolinii – jej testowaniem
zajmował się raczej ten drugi admin. Skonfigurowałem router i switche, ale
okazało się, że ktoś musi pojechać do firmy i access pointa wpiąć do prądu i
odpowiedniego portu w switchu. Zanim to wszystko się udało załatwić, to było już
dawno po 11:05, a wycieczka nam przepadła, ech… :-(

Niech się święci 4 maja

Dzisiaj urodziny (drugie) Krysi. Więcej o tym pewnie żona. Ja tylko wspomnę, że byłem pod wrażeniem jak
jubilatka świeczki zdmuchnęła. Wszyscy byli zachwyceni, poza nią samą – ona
wolała jak się świeciły.

A oto co mnie się dzisiaj zdażyło: idąc na pocztę spotkałem dwóch robotników
z budowy, którzy chcieli 40gr, bo im brakowało na piwo. Jeden miał na koszulce
pingwina (raczej zupełnie nielinuksowego). Dałem im mówiąc, że to tylko z powodu
pingwina. Zdziwili się: A co pingwin ma z tym wspólnego. Pokazałem im
pingwiny na mojej koszulce (Pingwinaria 2003). Uznali że zrozumieli.

Na poczcie odebrałem dwie przesyłki – obie z Allegro. Jedna do żony –
spodenki dla małej. Druga do mnie – karta WLAN na PCMCIA: Compex iWavePort
WL11B+. Z Google nie wiele wynikało na temat jej działania w Linuksie, ale mimo
to zaryzykowałem i kupiłem ją na Allegro. Długo nie docierała, a ze sprzedawcą
prawie zupełnie nie było kontaktu, ale w końcu jest. Oczywiście jeszcze dzisiaj
musiałem sprawdzić co jest warta. Okazało się że rzeczywiście jest na chipsecie
Agere, jak wcześniej wygooglałem i że producent chipsetu udostępnia sterowniki
pod Linuksa z pełnymi źródłami na licencji BSD-like – a więc super – jednak
tylko dla kernela 2.4 (wolałbym dla 2.6). Ale jestem dobrej myśli – jak są
źródła, to na pewno jeszcze coś z tego będzie. Mogę poczekać. A właściwie nawet
muszę, bo do mojej drugiej karty – Compex WLU11, na USB – jeszcze sterowników w
ogóle nie ma.

Ostatnio znowu dużo czasu marnuję rżnąc w Crossfire. Jednak ogrywają mnie na
moim własnym serwerze. Mimo to
udało mi się znaleźć parę chwil dla moich projektów. Poprawiłem parę drobiazgów
w CJC i zabrałem się znowu za JJIGW. Może uda mi się zrobić
wydanie całej trójcy – tych dwóch wraz z biblioteką PyXMPP.

Pingwinaria – czyli tam i z powrotem

Wyjechałem w Czwartek rano. Na pociąg umówiłem się wcześniej z Lamagrą, on
nawet załatwił mi bilet. Pociąg odjechał punktualnie o 6:45. Za Katowicami
zaburczało mi w brzuchu i przypominałem sobie o wielkiej smakowitej bułce z
kurczakiem którą mi żona przygotowała… i którą zostawiłem w lodówce.
:-(. Przez chwilę nawet pomyślałem, czy się po tę bułkę nie wrócić,
jednak zrezygnowałem z tego pomysłu. W Krakowie byliśmy o 8:55 i okazało się że
PKS-y do Krynicy mamy o 9:40 i 10:50 (wcześniej myśleliśmy że o 10:40).
Postanowiliśmy pojechać tym wcześniejszym (mimo że tubylec Antymon
twierdził, że ten autobus nie istnieje). Wcześniej szukaliśmy miejsca gdzie
można by coś na szybko zjeść i się nie zatruć. Skończyło się na jakichś
drożdżówkach. Autobusem z nami jechała już całkiem sympatyczna gromadka
pingwinów.

W Krynicy koledzy postanowili że pójdziemy na piechotę i że ja, skoro już tam
byłem, będę prowadził. Do tego na skróty, a nie ulicą. Sam przyznałem, że
gdzieś tam jest czerwony szlak prowadzący pod sam hotel, ale nie
powiedziałem że wiem gdzie ten szlak jest. Gdy szlak znaleźliśmy (po wspięciu
się z plecakami na bardzo stromą górkę) okazało się że idzie on albo w dół
(z powrotem), albo w górę, ale w przeciwnym kierunku. Ja nie chciałem iść w dół,
a oni w górę, więc poszliśmy na przełaj. Oni wciąż myśleli że znam drogę, ja
taki pewny nie byłem. Jednak jakoś trafiliśmy. Potem się okazało że jeszcze
co najmniej jedna grupka dotarła do hotelu w podobny sposób.

Na miejscu organizatorzy już czekali. Kazali się zalogować i iść na
obiad. Obiad był niespodzianką – tym razem można się było nim najeść i nawet był
bar sałatkowy. Po obiedzie miał być wykład lcamtufa, który się nie stawił.
Organizatorzy byli wściekli (jego tłumaczenie: zaspałem), a portret
Michała trafił na tarczę do rzutów, która później została odpowiednio użyta.
Zamiast lcamtufa był wykład TeX dla blondynek sprzed dwóch lat. Potem
pan Barbaszewski opowiadał o swoich wdrożeniach Linuksa za parę milionów.

W piątek jakoś udało się wstać na śniadanie i zaliczyć pierwsze dwa wykłady
Laboratorium studenckie pod VMWare i LVM, EVMS i inne metody
zarządzania dyskami
. Greylistings, obiad i część zamieszania po
obiedzie (coś się w programie pozmieniało) sobie darowałem. Zamiast tego
poszedłem pod Jaworzynę pojeździć na nartach. Śniegu resztki, kawałek trzeba
było narty znieść bo na samej górze śniegu nie było wcale, ale na trasie dało
się jeździć. Miejscami ładny, chociaż sztuczny, śnieżek, miejscami więcej błota
niż czegokolwiek innego, a w cieniu lód. Mimo wszystko jeździło mi się wyjątkowo
dobrze. Po nartach zdążyłem jeszcze na koniec wykładu o strategii robienia
backupów i spotkanie z redakcją Linux Magazine. Potem kolacja i wykład Tristana
o projekcie Alrauna (pomysł użycia Linuksa w szkołach na Windowsowych
pracowniach od Ministerstwa). A na koniec oczywiście Karaoke. Kto nie był niech
żałuje – takich pingwinich ryków nigdzie indziej nie uświadczy. Mnie jakoś się
udało nie stracić po tym głosu (sobotnim prelegentom na szczęście też nie).

W sobotę po śniadaniu pierwszy wykład był o odpowiedzialności za szkodę
spowodowaną przez błędne działanie programu komputerowego
– o obowiązującym
prawie, prowadzony przez prawnika, ale bardzo interesujący (w końcu wszystkich
programistów to w jakiś sposób dotyczy). Wykładu o wxWindows nie było, zamiast
tego ktoś wyszedł prowadzić jakieś luźne rozmowy (teraz zadawajcie mi jakieś
pytania
). Nawet zaczął ciekawie opowiadać o bezpiecznej dystrybucji w
dystrybucji
, ale najwyraźniej nie dość ciekawie, bo poszedłem się gdzieś
szwendać. Spotkałem Tristana i Arghila, którzy wyciągnęli mnie na spacer na
Jaworzynę (adresowanie geograficzne w sieci nie wydało nam się warte
rezygnacji z kontaktu z naturą). Przynajmniej raz miałem okazję tam wejść a
kolejką gondolową zjechać (dotychczas jedynie wjeżdżałem kolejką). Po drodze
obejrzeliśmy sobie innych narciarzy i wodę chlustającą spod ich nart. Widać że
trochę ich tam na weekend przyjechało i nawet uruchomiono wyciąg talerzykowy,
który w piątek nie działał. Na górze wypiliśmy kolę/piwa i zjechaliśmy na dół
na obiad. Już ludzie spotkani po drodze twierdzili że obiad jest marny. No i
rzeczywiście – po zupie ogórkowej (dobra była, ale to tylko zupa) podano pierogi
z jabłkami. Ani ja ani paru kolegów nie uznaliśmy że to poważny obiad, więc po
obiedzie pojechaliśmy coś zjeść na miasto. Wróciliśmy pod koniec prezentacji
IBM-a, która wyglądała na to, że nic ciekawego nie straciliśmy. Potem był wykład
o projekcie rozproszonego środowiska zarządzania obiektami trwałymi Santa
Maria
oraz prezentacja Novella. Prezentacja zaczęła się filmem Lord
of the Net – Two Servers
– cała sala pękała ze śmiechu. Potem facet pokazywał jak
działa pakiet Red Carpet – taki poldek połączony z cronem i paroma skryptami i
opakowany w okienkowy interfejs. Oczywiście komercyjny. Na koniec był jeszcze
jeden film: Kernel.
Po kolacji były dyskusje
o tym jak powinna wyglądać rządowa Strategia dotycząca informatyzacji i
Wolnego Oprogramowania, a potem jeszcze było spotkanie RWO. W tym samym czasie
zaczynało się ognisko. Po spotkaniu RWO poszliśmy na ognisko, a po ognisku
jeszcze trochę dyskutowaliśmy (w nieco innym gronie) w czyimś pokoju. Jak zwykle
do swojego pokoju wróciłem jako ostatni z lokatorów (i tak dużo wcześniej niż
wielu innych kończyło zabawę).

W niedziele były jeszcze trzy wykłady – o sieciach bezprzewodowych
(interesujący mnie o tyle, że zastanawiam sie nad kupnem czegoś takiego), wykład
Antymona o Jabberze (spodziewałem się politycznego nudzenia, ale było
naprawdę ciekawie) oraz Jak skutecznie otworzyć swoje źródła (moje
projekty były najlepiej opisane w punktach czego nie robić
:-)).

Do domu zabrałem się z Tristanem. Jechał z nami też Bartek (do Krakowa) i
Gaber (do Katowic). Obyło się bez żadnych komplikacji czy innych ciekawostek,
więc ten akapit zostaje wyjątkowo krótki. :-)

Teraz z żoną oglądamy zdjęcia z
pingwinariów
… i mnie na żadnym nie ma. Żona zaczyna mieć jakieś głupie
podejrzenia. Więc może ktoś tutaj potwierdzi mój pobyt na Pingwinariach?
;-)

Czyżby libxml2 to był zły wybór?

Zaczynam wątpić w to że użycie libxml2 w PyXMPP to był naprawdę dobry
wybór. I to nie z tego powodu, że ta biblioteka, wraz z modułem pythonowym
jest dość trudno dostępna dla użytkownika końcowego. Chodzi raczej o podejście developerów
libxml2
. A może po prostu ja byłem głupi zakładając że interfejs SAX,
czyli strumieniowy, będzie mnie informował o zdarzeniach na bieżąco. Czyli że
np. informację o początku elementu dostaję zaraz po przeczytaniu całego taga
początkowego, a nie po rozpoczęciu kolejnego elementu. W każdym razie po
uaktualnieniu (zresztą podyktowanym względami bezpieczeństwa) libxml2 do
wersji 2.6.7 PyXMPP i wszystko co z niego korzysta (a więc CJC i JJIGW)
przestaje działać. I nie będzie działać, póki autorzy libxml2 nie cofną tego
feature’a, albo ja nie przygotuję obejścia (ręcznego wstępnego
parsowania strumienia XML przed przekazaniem go do parsera XML).

Routerek 3Coma nadal działa, ale zdążył nas zaskoczyć. Konfiguracja
firewalla, która miała zablokować dostęp po TCP i UDP do routera, zablokowała
cały ruch TCP i UDP przechodzący przez router. Okazało się że w ACLach w tym
routerze maski adresów IP mają odwrotne znaczenie niż gdzie indziej (chociaż
może w innych routerach jest tak samo) i adres z maską
255.255.255.255 oznacza dowolny adres, a jak chcę złapać
ten jeden konkretny, to muszę użyć maski 0.0.0.0. Dziwne,
ale teraz działa.

Postawiłem i wczoraj w końcu skonfigurowałem zgodnie z życzeniami
użytkowników serwerek Quake3 na firmowym serwerze games.bnet.pl. Gostki
przez dwa tygodnie za mną chodzili w tej sprawie. Podziwiam ich
cierpliwość. :-)

A’propos gier. Doszedłem to tego, czemu mi się komp przy OpenGL wywalał –
nie miałem modułu via-agp załadowanego, a obsługa DRI na Rage128
w trybie PCI najwyraźniej się sypie. A samo agpgart już nie
wystarcza. Obejrzałem sobie UFO: Alien
Invasion
– może z tego być niezła gierka.

Zrobiłem to

Wydałem jabber-gg-transport 2.0.8. Trzeba było wreszcie to zrobić, bo
2.0.7 wykrzaczało się że aż wstyd. W CVS już dawno leżały odpowiednie
poprawki (dziękuję wszystkim którzy je przygotowali albo pomogli mi je
przygotować), ale dopiero dzisiaj zrobiłem „release”. Oto
lista najważniejszych zmian:

  • Wyłączony import kontaktów z serwera GG. Po zmianie protokołu i tak
    nie działał, a powodował wykrzaczanie się całego transportu.
  • Poprawki pozwalające użyć transport z serwerem jabberd 2.0.
  • Poprawiony błąd powodujący zwis przy ponownej rejestracji w
    transporcie.
  • Poprawiony błąd powodujący wykrzaczanie się transportu po odebraniu
    <presence> z pustym <priority>.
  • Poprawiona rejestracja transportu w rosterze użytkownika – już nie
    powinien on się pojawiać w rosterze dwa razy.
  • Poprawiona funkcja licząca skrót SHA tak, aby działała poprawnie na
    architekturach 64-bitowych (w tym na moich Opteronach).
  • Oraz parę mniej istotnych poprawek.

A teraz z innej beczki. Zainstalowałem na serwerach pocztowych
amavisd+ClamAV. Działają ślicznie, ale otrzymywałem skargi że niektóre
wiadomości nie dochodzą. Okazało się, że chodziło o majle które zostały
odrzucone za 8-bitowe znaki w nagłówkach (zabronione przez RFC 2822).
Odrzucanie źle sformatowanych wiadomości ma duży sens, bo nigdy nie
wiadomo czy Outlook tak samo zinterpretuje jej zawartość jak antywirus
i po prostu wirus mógłby umknąć. Na takim bugtraqu są zgodne opinie że
„be liberal in what you receive” w przypadku poczty i antywirusów
powoduje tylko problemy. A więc nie mam zamiaru przyjmować wiadomości
łamiących podstawowe standardy (userom dałem wybór – mogą sobie to
wyłączyć).

W logach sprawdziłem co to za wiadomości są odrzucane. Ta wiadomość
o której było tyle krzyku to najwyraźniej z jakiegoś walniętego albo źle
skonfigurowanego Outlooka, z niezakodowanym
„Środkowoeuropejski” w polu „Date: ”. Ale takich
było wśród odrzuconych niewiele. Większość to majle słane automatem z
różnych serwisów WWW (w większości w PHP). Jakoś mnie to nie dziwi.
Zawsze uważałem że olewanie (a raczej ignorancja w tej dziedzinie)
standardów jest podobna do użytkowników PHP. Ale pewnie jestem
uprzedzony…

Na koniec jeden link:
Head over Heels
. Wkleiłem już go do komentarza na blogu Zgody, ale
uznałem że na głównej stronie też powinien się pojawić. Bardzo
sympatyczna gierka. Nie poświęcam wiele czasu na granie (mam go zawsze
mało, szkoda mi go na takie przyjemności), ale 19% udało już mi się
zrobić. :-)

Walentynki oraz postępy w projektach

Dzisiaj Walentynki. Cokolwiek już na joggerze na ten temat nie napisano, to
ja uważam że dobrze. Chociażby dlatego, że jest wielu takich jak ja, co nie
umieją wręczać kwiatów bez okazji, a przecież dziewczynom się to od czasu
do czasu należy. Ja kupiłem trzy duże róże żonie, trzy małe różyczki córeczce
(poza tym, że kochana, to jakby nie dostała to niezłą awanture byśmy tu mieli
:-)). Od żonki dostałem elektroniczną kartkę (z pingwinami,
a jakże) oraz melodyjkę na komórkę (może i głupie, ale miłe). Żabcia też
nie zawiodła i przysłała „sympatycznego” SMS-a, co Iwonkę bardzo
wkurzyło (coś wspominała o przyrządzaniu żabich udek).

W pracy udało się uruchomić ten nowy 64-bitowy (2*Opteron) serwer (między
innymi pod naszego Jabberka) i jest troszeczkę luzu. Mogłem więc troszkę czasu
(„domowego”) poświęcić na moje Jabberowe projekty. Transport GG
znów nie miał wiele szczęścia (mimo że muszę wreszcie zrobić
nowe wydanie), za to popracowałem nad PyXMPP i JJIGW (bramką do IRCa). W CJC
też coś zrobiłem, ale nie wiele. JJIGW jest coraz bardziej używalny i może
w ten weekend zrobię nowe wydania całej trójki. Tymczasem jak ktoś chce
potestować to może się pobawić bramką do IRCNetu zainstalowaną przy moim
serwerze: ircnet.jabber.bnet.pl. N.p. żeby wejść na kanał
#7thguard wystarczy swojemu klientowi Jabberowemu wejść do pokoju
#7thguard na serwerze konferencyjnym ircnet.jabber.bnet.pl.
Oczywiście bramka obsługuje (na razie częściowo) protokół MUC i trzeba mieć
odpowiednio nowoczesnego klienta, żeby się nią w pełni nacieszyć.

Niedługo będzie wypadało zrobić obsługę MUC w CJC, ale wcześniej
musiałbym zrobić do końca Disco, dodać obsługę formularzy itp. Mam nadzieję że
kiedyś mi się uda.

Wracając do pracy… Czytając Bugtraq natrafiłem na maila o tym jaki
szybki był, w porównaniu do komercyjnych antywirusów, ClamAV
w reakcji na atak MyDoom. Postanowiłem spróbować u siebie. Wcześniej
tego nie robiłem bojąc się że zajedzie to mój serwer. Zamiast tego używałem
własnego skryptu virusprotect, który tylko zmieniał niebezpieczne
rozszerzenia załączników. Podczas próby okazało się, że amavisd-ne
wraz z clamd obciążają serwer znacznie mniej niż mój prymitywny
skrypt, a przecież potrafią dużo więcej.

Miałem dylemat z konfiguracją powiadomień o znalezieniu wirusa
przez amavisd. Ostatnio chyba wszyscy się przekonywali że
powiadamianie „nadawcy” jest złe. Amavisd ma niby
możliwośc określenia które wirusy fałszują adresy, ale kto by pilnował
aktualności tej listy? Nie chciałem też, żeby poczta znikała na moim serwerze
bez śladu. Dlatego włączyłem powiadamianie niedoszłego odbiorcy wirusa. Takie
powiadomienie to i tak lepsze niż wirus. Może kiedyś wymyślę coś
lepszego.

Co zrobić z idiotami…

… którzy do wyszukiwania bibliotek przez skrypt configure używają
testów na istnienie pliku …./lib/lib$name.so?????

Wieszać, wystrzelać, potopić, podusić?

Przecież skrypt configure powinien sprawdzać czy linker potrafi znaleźć
odpowiednią bibliotekę, a nie czy jakiś plik jest na dysku. I chyba
nawet w dokumentacji autoconf jest to jasno powiedziane… A taki np.
PHP pełen jest takich kwiatków 😦 . I portowanie PLD na AMD64 to głównie poprawianie takich idiotyzmów.

Ale uparłem się i przeniosę swoją ulubioną dystrybucję na tę platformę. A co się będzie mój serwerek z dwoma Opteronami marnował… 🙂