Migracja

Wynoszę się z firmy, w której stoi mój dotychczasowy serwer Jabbera. Chcąc
się od niej całkiem uniezależnić zmuszony byłem zmienić i JIDa. Od kilku dni więc
szykowałem swój nowy serwerek, a od wczoraj zacząłem uzupełniać CJC o funkcje ułatwiające migrację.

Nowe ficzery to polecenia:

/export_roster
Eksportuje roster do pliku XML.
/import_roster
Importuje roster z pliku XML – dodaje do rostera wpisy z pliku,
których w rosterze jeszcze nie było i wysyła prośby o subskrypcję dla wpisów
które w pliku mają subskrypcję to lub both.
/multi_message
Wysyła wiadomość jednocześnie do wielu użytkowników z rostera,
wybranych filtrem podobnym do tego używanego przez /list

Dzisiaj wypróbowałem nowe funkcje w warunkach bojowych. Wyeksportowałem
roster na starym koncie, wysłałem wiadomość o zmianie JIDa do wszystkich
kontaktów z subskrypcją from lub both i zaimportowałem roster na
nowym koncie. W ciągu pierwszej minuty od tej operacji dostałem około 50 próśb
o autoryzację – nigdy wcześniej nie widziałem tylu otwartych
zakładek w CJC %-).

W samą migrację nie chciałem mieszać transportów i botów, więc wcześniej
zrobiłem z tym porządki – wywaliłem transport ICQ, przeniosłem ręcznie
te kilka kontaktów na GG, zmieniłem JIDa w Joggerze. Tylko jeden bot się
odezwał na to moje /multi_message, ale chyba nic nie
narozrabiałem. W ogóle cała ta migracja przeszła coś naspodziewanie gładko…
zobaczymy co będzie dalej.

Jak jeszcze będzie mi się chciało, to zrobię sobie jeszcze małego bocika,
który będzie zalogowany na stare konto i będzie mi forwardował wiadomości na
nowe. Jak nie, to będę co jakiś czas logował się ręcznie i patrzył co się tam
dzieje. Dorobienie obsługi wielu kont do CJC, to byłoby stanowczo za dużo
roboty.

Reklamy

Dzięki ci, Google :-)

Hal Rottenberg rzucił na listę jdev linka do
odkrycia ralphma.
Oczywiście zaraz sprawdziłem u siebie:

[18:12] jajcus@gmail.com accepted your presence subscription request
[18:12] jajcus@gmail.com/CJC () is online:
[18:12] jajcus@gmail.com/CJC () is online:
[18:12] You have accepted presence subscription request from jajcus@gmail.com

No to Google się włączył na dobre do naszej wielkiej Jabberowej sieci
:-). No i kto nam teraz podskoczy ;-)

Wiem, że to właściwie niewiele znaczy, bo ten GTalk wcale taki popularny
nie jest… ale to jednak największy gracz który się włączył do federacji
serwerów XMPP i wiadomo, że będzie walczył o przyłączenie innych operatorów
IM. No i wielu wątpiło w to, że Google otworzy S2S, a jednak otworzyli i to
w miarę szybko.

Upgrade

Wczoraj ejabberd zaczął mi
szaleć. Nic z serwera nie przychodziło, to co się pisało szło efektywnie do
/dev/null, a nowe połączenia były odrzucane. Po restarcie zaczęło
działać, ale po godzinie znowu się zepsuło, tak samo.

Na serwerze miałem zainstalowanego dość starego Erlanga
(R9C-2) jak i samego ejabberd (0.7.5). Skoro działało, to po
co zmieniać. Jednak, gdy zaczęły się problemy, to aż głupio byłoby szukać
supportu do takich wykopalisk. Postanowiłem więc zrobić upgrade, ale bałem się.
Skok o kilka wersji przecież nie może przejść bezboleśnie.

Wczoraj wieczorem przygotowałem paczki PLD z najnowszym
Erlangiem i ejabberd. Poszło gładko, tylko
jeden mały patch był potrzebny. Ostatnim razem gdy próbowałem było gorzej,
w szczególności wychodziły jakieś problemy na AMD64. Dzisiaj postanowiłem te
nowe paczki zainstalować na serwerze. Przy okazji postanowiłem wypróbować
opcję --repackage RPMa, żeby mieć do czego wrócić, jak coś
pójdzie nie tak.

[root@serwus RPMS]# /etc/rc.d/init.d/ejabberd stop
Stopping ejabberd service..........................................[ DONE ]
[root@serwus RPMS]# rpm --repackage -Uvh erlang-R10B_7-0.1.amd64.rpm ejabberd-0.9.8-1.amd64.rpm
Preparing...                ########################################### [100%]
Repackaging...
   1:erlang                 ########################################### [ 50%]
   2:ejabberd               ########################################### [100%]
Upgrading...
   1:erlang                 ########################################### [ 50%]
   2:ejabberd               warning: /etc/jabber/ejabberd.cfg created as /etc/jabber/ejabberd.cfg.rpmnew
########################################### [100%]
Updating component authentication secret in ejabberd config file...
Generating erl authentication cookie...
Run "/etc/rc.d/init.d/ejabberd start" to start ejabberd server.
[root@serwus RPMS]# /etc/rc.d/init.d/ejabberd start
Starting ejabberd service..........................................[ DONE ]

Niemożliwe. To nie mogło być takie proste. A jednak, wygląda na to, że działa. Hmmm…

Google Talk

[08:04] Resolving 'talk.google.com'...
[08:04] Connecting to 216.239.37.125:5222...
[08:04] Connected to 216.239.37.125:5222.
[08:04] Doing TLS handshake with gmail.com.
[08:04] Encrypted connection to gmail.com established using cipher EDH-RSA-DES-CBC3-SHA.
[08:04] Binding to resource CJC...
[08:04] Authorized as jajcus@gmail.com/CJCE5DFD7C2.
[08:04] Got roster
[08:06] Peer certificate saved to: /home/users/jacek/.cjc/known_certs/talk.google.com.der

Wczoraj wieczorem jeszcze nie wpuszczał, a nawet hackowałem CJC myśląc, że
to różnice w implementacji protokołu. Ale widać jak mieli dzisiaj odpalić, to
odpalili dzisiaj. Połączyło się bez żadnego hackowania. Niestety, komunikacja
z innymi serwerami nie działa. Mam nadzieję, że to przejściowe.

W każdym razie Jabberowy serwer Google działa i to najwyraźniej w miarę
zgodnie z XMPP 1.0 (StartTLS, SASL).

Wreszcie jest nowy transport GG

Od jakiegoś czasu do źródeł transportu GG włączona jest biblioteka libgadu
(na dostępnych pakietach z libgadu nie można polegać). W libgadu ostatnio
znaleziono poważne błędy, więc trzeba było ją uaktualnić. Przy tej okazji
zajrzałem do kodu transportu GG… i wreszcie się porządnie za niego zabrałem,
co w rezultacie dało dzisiejsze
wydanie wersji 2.2.0
.

Od wersji 2.1.0 zmieniło się wiele. Większość jeszcze w lutym. Najważniejsze
zmiany to:

  • Wspomniane już włączenie libgadu do źródeł transportu.
  • Ignorowanie wybranych numerków.
  • Ustawianie osobnych statusów dla GG, można też ustawić specjalny status
    używany podczas niedostępności i niewidzialności.
  • Wywalenie całkiem zmiany haseł. Stary kod i tak nie działał z nowym
    protokołem (wymagającym czytania kodów z obrazków), a nowy protokół byłby
    dość niepraktyczny w implementacji.
  • Kupa różnych poprawek.
  • I chyba najważniejsze: obsługa subskrypcji obecności per-kontakt. Teraz
    powinny działać listy prywatności, ustawianie online/offline dla konkretnych użytkowników,
    jednokierunkowe subskrypcje (ja go widzę, a on mnie nie) itp.

Z ostatnim punktem związana jest pewna niedogodność: po upgrade’zie
użytkownicy będą musieli potwierdzić autoryzację dla każdego swojego
kontaktu z GG. To może być bardzo dużo klikania. Użytkownicy niektórych
serwerów mają już to za sobą, więc dobrze wiedzą o co chodzi.

Z poprawek wspomnieć mogę np. rezygnację z używania
GIOChannel
do czegoś, do czego się zupełnie nie nadają (śledzenie aktywności na sockecie obsługiwanym
przez coś innego niż GLib), czy wywalenie zupełnie niepotrzebnego (a pełnego
błędów) buforowania danych zapisywanych do strumienia XMPP. Ta druga zmiana
podobno spowodowała znacznie zmniejszenie obciążenia w dużych (tysiące zarejestrowanych użytkowników)
instalacjach transportu. A to buforowanie miało niby być optymalizacją… Poza
tym usunąłem ileś memleaków i innych błędów wykrytych przez Valgrinda.

Wersja
z wczorajszego wieczora już podobno całkiem stabilnie działała, a ja mam
nadzieję, że dzisiaj nie tylko poprawiłem kilka kolejnych błędów, ale i nie
wprowadziłem żadnych nowych. Jednak, jak znam życie, to pewnie za chwilę
dostanę parę bugreportów dotyczących jakiś nowych (a może i starych)
i strasznie głupich błędów. Jeśli tak, to postaram się szybko wydać poprawioną
wersję, jeśli nie, to pewnie kolejne wydanie będzie za jakiś rok albo i później.

Afrykański jellonek?

Odezwał się do mnie ktoś o JIDzie 2782630xxxx@mxit.co.za/clockspeed
(xxxx to też cyfry):

[Sat Jun 25 11:48:34 2005] <2782630xxxx> Hi
[Sat Jun 25 11:48:42 2005] <2782630xxxx> Hi
[Sat Jun 25 11:50:34 2005] <jajcus> Hello
[Sat Jun 25 11:50:41 2005] <jajcus> strange JID...
[Sat Jun 25 11:55:17 2005] <2782630xxxx> My name is Tommie.
[Sat Jun 25 11:55:39 2005] <jajcus> And how can I hel you, Tommie?
[Sat Jun 25 12:22:00 2005] <2782630xxxx> What PC-game do you like most?
[Sat Jun 25 14:35:40 2005] <jajcus> Crossfire?
[Sat Jun 25 14:37:25 2005] <2782630xxxx> My is Half-Life2.

Czyżby nasze WP Kontakt i Hapi zyskiwały konkurencję w Afryce? ;-)
W każdym razie ten afrykański komunikator wymaga jeszcze dopracowania —
z każdą wiadomością wysyła inne <thread/>, przez co u mnie otwiera się
za każdym razem nowe okienko (podobną przypadłość miał/ma zdaje się
Neos), a do tego nawet na /version nie odpowiada, więc nie wiem
co to.