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.

Co by tu…

Ostatni tydzień upłynął pod znakiem Crossfire.
Pisałem już że to niebezpieczny pożeracz czasu? No to piszę.
Czas na grę został zabrany na niekorzyść telewizji oraz snu.
Czasami wyglądało to tak, jakbym się z żoną prześcigał kto później
w nocy wymięknie. Żona wygrywała, ale to pewnie dlatego, że ona nie musi
o 6:20 wstawać do roboty.

W weekend w Gliwicach była Grająca Starówka – kilka różnych
koncertów w małych uliczkach w okolicach Rynku. Wybraliśmy się tam
z Krysią i w sobotę i w niedzielę. W sobotę wracaliśmy wcześniej –
odprowadziłem dziewczyny kawałek w kierunku domu, a sam poszedłem na
GNU/Browarek (w moim przypadku GNU/Kola). W niedzielę, też długo
nie siedzieliśmy, bo Krysia zaczęła marudzić. Powodem złego humorku był
chyba balonik, który jej mama kupiła. Krysia ostatnio zwykle dostawała
baloniki napełnione powietrzem, a teraz dostała latający. Niestety nie
doceniła. Szczególnie nie podobało jej się, że balonik został do niej
przywiązany. Za którąś zmianą miejsca zaczepienia stwierdziła Bim
bam! Bim bam!
(po polsku: kur.., kur…!) i wydawało się,
że się z sytuacją pogodziła. Jednak nie do końca i trzeba było wracać.
Dopiero w połowie drogi do domu przypomniała sobie, że Gra! i że
chciałaby jednak jeszcze posłuchać, ale było już za późno.

Mimo wszystko udało mi się znaleźć też odrobinkę czasu na moje
programiki. Przepisałem od nowa obsługę rostera w PyXMPP. Zmieniłem przy
tym API (a najlepsze, że nawet je udokumentowałem), ale stare było
niewygodne, a poza tym stary kod był wolny i zupełnie niezgodny ze
standardem jeśli chodzi o traktowanie znaków Unicode (zupełnie olewał
profile stringprep). Nowy kod w CJC niczego nie popsuł, a nawet naprawił
parę błędów.

Miałem też problemy z JJIGW, które od czasu do czasu zżerało 100% CPU na
serwerze. Postanowiłem to zbadać Pythonowym profilerem. Okazało się to
niełatwe. Profiler sam z siebie olewa wątki poza głównym. Dokumentacja
i Google nie wiele mówią na ten temat, ale jakoś udało mi się odpalić
tego profilera także dla innych wątków z zapisywaniem statystyk do
innego pliku dla każdego wątku. Znowu się potwierdziło że wątki
w Pythonie są mocno niedopracowane.

Wczoraj natomiast zacząłem implementować klienta MUC w PyXMPP. Jak
dobrze pójdzie, to niedługo będzie można używać CJC wraz z JJIGW
oraz innymi implementacjami MUC i będę mógł porzucić tkabbera.

Wreszcie jakiś release, a nawet trzy

Dość tego ukrywania moich wypociń przed światem. Szczególnie że ostatnie wydanie PyXMPP
(0.3) nie działało z ostatnimi wydaniami libxml2 (>=2.6.7). Nawet w PLD Ac był taki
niedziałający zestaw. Wczoraj siadłem do kompa i wydałem kolejne wersje wszystkich moich
aktywnych Jabberowych projektów: PyXMPP
0.4
, CJC 0.4 i JJIGW 0.1. Wszystkim im jeszcze wiele
brakuje, ale używać się dają. CJC ma już nawet paru swoich wiernych użytkowników, a po
wczorajszym wydaniu już pojawił się nowy bugreport.

Dzisiaj dostałem polecenie służbowe od szefa: zainstalować
TeamSpeak na naszym serwerze gier.
Szkoda że to zamknięte binarki, ale w końcu i tak większość gierek które tam mamy
to też zamknięty soft, nawet bardziej. Serwerek zainstalowałem i zacząłem się zastanawiać
nad kupnem słuchawek z mikrofonem do zabawy z tym w domu. Ale szef nas zaskoczył i przywiózł
5 kompletów takich (niestety nie za darmo). W firmie już testowaliśmy i fajnie jest. Może
sobie kupię takie słuchaweczki, a może nie.

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.

Holandia?

Dostałem dzisiaj ciekawego majla:

Hello,

Is there already someone busy with translation your jabber-gg-transport into
dutch? If not, I will translate it. This will take a week, a month,… but it
will not take longer than 2 months normally. 🙂

Włączając mechanizmy gettext do kodu transportu GG nie sądziłem że będą
potrzebne do czegoś więcej niż język polski. Ale jak ktoś chce robić
holenderskie tłumaczenie… niech robi :-)

Prawie skończyłem implementację vCard w PyXMPP. Działa już wczytywanie
Jabberowego vcard-temp i standardowego formatu MIME directory
(RFC2426/RFC2425) oraz zapisywanie tego drugiego. Trzeba jeszcze przetestować
kompatybilność z innymi implementacjami RFC2426 (jakieś address-booki) oraz
dodać tworzenie XMLowej wizytówki. Wtedy będzie można implementować
/whois w CJC i w JJIGW.

W domu zacząłem co-nieco sprzątać. Jeśli w weekend (gdy przyjeżdża żona) ma
być czysto, to muszę zacząć już teraz ;-).

Działający parser i kompilowany szablon

Wczoraj udało mi się doprowadzić nowy parser strumienia w PyXMPP do działania.
Nie piszę skończyć, bo zasługuje jeszcze na wiele, głównie kosmetycznych, poprawek.
W każdym razie już CJC z libxml2 2.6.7 dzała, a to najważniejsze.

W pracy dokończyłem analizę tego nieszczęsnego machine check exception
i wyszło mi na to, że błąd został zgłoszony przez north bridge i dotyczy
kontroli ECC w pamięci. Czyli albo pamięć walnięta, albo płyta główna. Będzie trzeba
to sprawdzić i felerny sprzęt wymienić.

Potem na jogu
Marcoosa
przeczytałem o XFN i postanowiłem
użyć tego cuda u siebie. Ale że wymagałoby to poprawienia linków w dwóch plikach
(index.html i comments.html), to postanowiłem najpierw coś z
tym utrudnieniem zrobić. Więc resztę czasu w pracy, pomiędzy telefonami
klientów, spędziłem na tworzenie szablonów do szablonu i systemu kompilacji tego
do formy strawnej przez Joggera. Udało mi się – z kawałków będących well-formed
XML składane jest (XInclude, zaimplementowane w xmllint) szablony dla strony
głównej i z komentarzami. Po drodze jest wszystko walidowane – w tym celu
stworzyłem DTD do szablonów dla XHTML 1.0. Pliki źródłowe się nie walidują, bo
musiałbym zrobić jeszcze DTD uzwględniające XInclude, a docelowy nie waliduje
się, bo ma deklarację DTD dla XHTML, nie uwzględniającą tagów Joggera, poza
deklaracją waliduje się względem tego mojego Joggerowego DTD.

Dla odmiany style CSS tworzone są przy pomocy preprocesora M4. Zrezygnowałem
z używania @import do składania szablonów w przeglądarkach
czytelników, zamiast tego na Joggerze leżą już kompletne, posklejane pliki
stylów. Dzięki temu walidator przestał głupieć, a i strona ma szansę szybciej
się załadować (aby wyświetlić stronę w pełni teraz wystarczy załadować 3 pliki
zamiast 7).

Wszystko razem spięte jest przy pomocy plików Makefile dla
GNU Make Oznaczeń XFN jeszcze nie dodałem. Nie starczyło czasu…
:-)

Obiadek (schabowy z frytkami i surówką) zjadłem Pod Pierożkiem, tak
jak pisałem. I smakował mi bardziej, niż wczorajszy w Sphinksie. Do tego był
tańszy, ale odrobinę mniej.

A teraz zabiorę się za zamalowywanie pamiątek po krysinych obiadkach. Ciekawe
czy po tym ta ściana nie będzie wyglądać jeszcze gorzej…

Jakoś sobie radzę

Wczorajszym obiadkiem się nawet nie otrułem. Co ciekawsze nawet mi smakował,
a przecież tylko wrzuciłem na patelnię co mi w ręce wpadło: boczek, kiełbasę,
cebulę, czosnek, marchewkę, makaron i ser.

Wieczorem zabrałem się za nowy parser strumienia dla PyXMPP, bo z
libxml2-2.6.7 dotychczasowy nie działa i podobno to jest ficzer a nie bug.
Mam już gotowy analizator leksykalny – automat Mealy’ego na 35 stanach, który
bez problemu wyłuskuje konkretne tagi oraz dane pomiędzy nimi ze strumienia XML,
nie głupiejąc nawet na sekcjach CDATA, czy niewyeskejpowanych
> w wartościach atrybutów. Nie obsługuje DTD, ale to i
tak w strumieniach XMPP jest zabronione. Obsługuje za to (tzn. umie ignorować)
PI i komentarze, mimo że też nie musi. Najlepsze jest to, że automat zadziałał
poprawnie (na ile go przetestowałem) za pierwszym razem gdy go uruchomiłem i
udało mi się go jakimiś danymi nakarmić. Teraz jeszcze muszę dokończyć
wyłuskiwanie początku/końca strumienia i pełnych zwrotek oraz przekazywania tego
do parsowania przez libxml2 (mój preparser nawet nie do końca sprawdza
czy otrzymany XML jest well-formed).

Pracę zacząłem on restartowania serwera na Opteronach który zrobił Ooopsa.
Niektóre kernele na nim odpalane od razu wywalały się z machine check
exception
, więc wiem że coś jest skopane. Dzisiaj nawet próbowałem dojść do
tego co dokładnie i zacząłem analizować kody które mi któryś z tych kerneli
wyrzucił. Ale zanim się mniej-więcej w tym połapałem i znalazłem odpowiednie
tabelki w specyfikacji, to minęła 16-ta i czas było wracać do domu.

Po drodze do domu poszedłem na obiad do Sphinksa. Pierwszy raz zresztą.
Jedzenie może nie rewelacyjne, ale dobre, dużo i w miarę tanie. Zresztą w moim
przypadku to już sukces, że byłem w stanie to zjeść bez kombinowania.
Wielokrotnie już zamawiałem jedzenie, którego potem nie byłem w stanie zjeść i
zostawiałem nieruszone. Tym razem dla pewności nawet wypytałem najpierw kelnera
czy ta Shoarma na pewno nie ma żadnych pomidorów i czy przypadkiem nie jest
przyprawiona na słodko. Nic z tych rzeczy, więc zamówiłem. I rzeczywiście na
talerzu było wszystko jadalne – frytki, mięsko i normalna (bez
majonezu/śmietany/pomidorów/buraczków) surówka. Podali też trzy różne sosy w
miseczkach, ale tego nie musiałem ruszać (dwa spróbowałem na końcu frytki, ale
ten ostry był z pomidorami i wcale nie taki ostry, a czosnkowy chyba na
śmietanie – nic dla mnie). Jeszcze kiedyś się tam wybiorę, może z żonką.
A jutro Bar pod Pierożkiem :-) .

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.

Dawno mnie tu nie było…

Miałem tyle różnej roboty, że nawet nie miałem kiedy na Joggera pisać.
Robota to: prace nad systemem zarządzania użytkownikami w firmie (tu jest
jeszcze masa rzeczy do zrobienia :(), portowanie PLD na AMD64
(na szczęście to nie tylko ja robię, ale właściwie cały team PLD – jednak
w lutym firmowy serwer z dwoma opteronami musi ruszyć „w produkcji”), inne
rzeczy „firmowe”, prace nad CJC i PyXMPP, poprawki w transporcie GG (do tego
jakoś szczególnie nie mogę się zabrać) itp. itd. Ale dobrze by też było
przynajmniej wieczory i część weekendów rodzince poświęcić…

No cóż. Roboty kupa, a ja jeszcze sobie kolejną znajdują (przyjemniej jest
zająć się czymś nowym niż kontynuować to co już się nudzi..). W sobotę
w PyXMPP dodałem obsługę komponentów jabberd, a w niedzilę w oparciu o to –
bramkę do IRCa. I ta bramka działa – przynajmniej podstawowa funkcjonalność,
bo wciąż bardzo wiele brakuje (i tym samym moja lista TODO znowu się
wydłuża).

Wczoraj przy okazji pisania tej bramki nieźle się zdenerwowałem… Już
zaczynało działać – docierały do mnie teksty z kanału #pld. Robota szła
nieźle… i okazało się że w firmie router brzegowy leży. Robotę musiałem
przerwać i jechać do Zabrza rebootować maszynę. Wrrr… Stracony czas
nadrobiłem wieczorem – nad JJIGW (tak się moje najnowsze dzieło nazywa)
siedziałem do północy.

Ktoś se robi jaja, ja se robie jaja…

To zacznę od siebie – w zeszłym tygodniu zainstalowałem sobie
jabberd-2.0b1 na jabber.bnet.pl. Fajny nowy serwerek Jabbera,
obsługujący XMPP w tym autentykację SASL, szyfrowanie StartTLS,
privacy-lists. W ogóle super… tylko że beta. Więc się sypał na okrągło
trochę błędów znalazłem, część poprawiłem, wszystkie zgłosiłem na
JabberStudio (poprawione wraz z patchami). Teraz działa już nieco
lepiej, ale do stabilności jabberd-1.4.x (który swoją drogą był niezłym
i przestarzałym bublem) wciąż mu daleko. :-(. Podziwiam
cierpliwość swoich userów :-).

tkabber-0.9.5beta miał błąd w obsłudze SASL, więc go musiałem sobie
poprawić (zgłosiłem oczywiście też alekseyowi), mając już serwer
obsługujący StartTLS dodałem też tego obsługę do PyXMPP i CJC (trzeba
jeszcze dokończyć weryfikację certyfikatu i obsługę błędów).

Tydzień temu kupiłem (na koszt firmy) kartę muzyczną do mojej stacji
roboczej w pracy. Nie miałem głośniczków, więc do testów pożyczyłem
słuchawki od kumpla – karta działała. Dzisiaj wreszcie skombinowałem
głośniczki. Próbuję coś zagrać… i cisza. :-( Kombinowałem
ze sterownikami – nic, podłączyłem te same słuchawki co poprzednio
– nic, zmieniłem slot PCI – nic. W końcu sprawdziłem jeszcze na
komputerze kolegi (z Windows) – też cisza. To fajnie się tym dźwiękiem
pobawiłem… Na szczęście kumpel miał dzisiaj przy sobie inną kartę
– podobno zepsutą, która „charczy”. Ale zawsze lepsze „charczenie” niż
PC-speaker.

Od piątku mamy problemy z łączami międzynarodowymi. Podobno to przez
atak DDOS na operatora który daje nam łącza – nie mogli się doprosić
o przyblokowanie tego u operatora który daje im łącza międzynarodowe.
Dzisiaj pingi wróciły do normy, nam wszystko działa pięknie, ale klienci
dzwonią że u nich nie. Okazało się, że z naszego routera łączność
w świat jest, ale już od klientów nie. Później okazało się, że gdzieś
w Świecie walnięty jest routing na 1/8 naszej przestrzeni adresowej
– akurat ten zakres adresów który przydzielony jest klientom sieci
osiedlowych… Albo jakiś admin machnął się przy konfiguracji routerka,
albo jakiś chakier bawi się czyimś routerkiem. W każdym razie na szybkie
rozwiązanie problemu podobno nawet nie mam co liczyć :-( .
Ale jak to przetłumaczyć klientom???? :-(