Synchronizacja historii rozmów Pidgina pomiędzy różnymi komputerami
2009-05-12Pidgin jest moim ulubionym komunikatorem, jest prosty, funkcjonalny, stabilny i dostępny na windowsa i linuksa. Próbowalem już wielu programów (głównie pod windows) począwszy od standardowego klienta GG, który kiedyś był marnej jakości, poprzez Tlena, Kontakt, Pidgina na Windows, aż na Pidginie na Linuksa skończywszy. Jedyną bolączką był fakt, że nie miałem dostępu do historii rozmów prowadzonych w domu, z komputera w pracy i odwrotnie. Rozwiązanie tego problemu jest prostsze, niż myślałem 🙂
Pierwsza moja myśl, to rsync, ale po kilkunastu próbach, z używaniem secret-file i innymi technikami, pozwalającymi na wysyłanie logów Pidgina na serwer, tak aby rsync nie pytał o hasło, odpuściłem temat. Potem natrafiłem na http://www.im-history.com, działało to z różnym skutkiem, klient webowy miał bugi w layoucie, objawiające się w linuksowym Firefoxie które trzeba było ręcznie łatać własnym arkuszem stylów, aby np zobaczyć listę kontaktów 🙂
Wrodzona dociekliwość skierowała mnie jeszcze raz na rsync. Rozwiązaniem jest logowanie się przez ssh za pomocą klucza. Po wygenerowaniu kluczy i dodaniu odpowiednich, wystarczy posiadać ten skrypt:
#!/bin/bash # pidsync.sh # Synchronize a Pidgin history (logs) # # Author : Wojciech Sznapka <[email protected]> # Date: 05/05/2009 USR=wowo DST=wowo@adres_twojego_servera.pl:pidgin/logs/ SRC=/home/$USR/.purple/logs/ KEY=/home/$USR/.ssh/wowo SWI="-tavzh --progress" echo `date` echo "* Sync from a hard disk to the server *" echo `rsync $SWI -e "ssh -i $KEY" $SRC $DST $1` echo "* Sync from a the server to a hard disk *" echo `rsync $SWI -e "ssh -i $KEY" $DST $SRC $1` echo '---------------------'
Następnie ustawiamy w crontabie, aby skrypt był wywoływany cyklicznie (w moim przypadku co 5 minut):
*/5 * * * * /home/wowo/pidsync.sh >> /var/log/pidsync.log 2>&1
Nasze logi rozmów od teraz będą składować się w centralnym miejscu, do którego możemy podłączyć się z dowolnego komputera z zainstalowanym Linuksem i zsynchronizować swoją historię rozmów. W moim przypadku schemat działania wygląda następująco:
Nie ma przeszkód, żeby dołożyć tu jeszcze kolejne maszyny, np laptopa czy komputer na uczelni, na których chcemy mieć bieżącą historię wszystkich naszych rozmów.
A teraz krótkie objaśnienie działania powyższego skryptu. Mamy jedno centralne miejsce, w którym składowane są pliki z historią, w tym wypadku, jest to mój serwer, na którym między innymi leży ta strona :-). Potrzebujemy dodostęp przez ssh oraz dodania do .ssh/authorized_keys naszego publicznego klucza. Skrypt pidsync.sh (źródło powyżej), uruchomiony na komputerach z Pidginem z crona, najpierw wysyła swoje logi rozmów na serwer, a następnie pobiera z serwera, te których nie ma u siebie. Wywołanie rsynca dwukrotnie jest konieczne, ponieważ rsync synchronizuje pliki tylko jednostronnie. Całość wraz z dodatkowymi komentarzami jest wypluwana na standardowe wyjście, po to, żeby można je było ładnie skierować do loga (w moim przypadku /var/log/pidsync.log) lub /dev/null 🙂 Przełączniki rsynca użyte tutaj, służą do zachowania czasu modyfikacji (-t), korzystania z trybu archive (-a), zwiększenia liczby komunikatów wyrzucanych z rsynca (-v), kompresji plików w locie (-z) oraz prezentowania rozmiarów w wersji czytelniejszej dla człowieka (-h). Używam także opcji –progress, dzięki której widzimy postęp wysyłki.
Powyższy skrypt należy zmodyfikować do własnych potrzeb, jest on tylko wzorem.
Ciekawi mnie, czy ktoś inny rozwiązał ten problem po swojemu. Zapraszam do dyskusji 🙂