Skip to main content

Thunderbird - problemy z kalendarzem. Kopie bezpieczeństwa dla wpisów kalendarza.

Jako programu pocztowego używam Thunderbirda. Na nim zainstalowany mam dodatek do zarządzania kalendarzem - Lightning. Nie spełnia on jeszcze wszystkich moich oczekiwań i czasem jest jeszcze nieco narowisty, ale po pewnym czasie używania już sobie nie wyobrażam Thunderbirda bez niego. Jedna z przydatnych w pracy funkcji to możliwość automatycznego dodawania spotkań w kalendarzu na podstawie otrzymanych w mailu outlookowych zaproszeń. Czasem jednak Lightning sprawia problemy.

Gdy niedawno przewrócił mi się Thunderbird (nie pamiętam już czemu) nie chciał się już więcej uruchamiać. Okazało się, że z opcją: -safe-mode startuje bez problemu. Wyłączyłem więc wszystkie dodatki i włączając je po kolei doszedłem do tego, że problem jest właśnie z Lithningiem. NIe miałem już więcej czasu na dalsze śledztwo, musiałem przez kilka dni pracować bez kalendarza (ufff...).

Martwiąc się, że straciłem wszystkie wpisy, znalazłem w końcu trochę czasu by zacząć dalej drążyć temat. W sieci wygrzebałem informację, że dane kalendarza trzymane są w sqlite'owym pliku o nazwie storage.sdb w katalogu profilu użytkownika (mniej więcej w $HOME/.thunderbird/XXXXXXXX.default - gdzie XXXXXXXX to losowo wygenerowany przy zakładaniu profilu ciąg znaków a default to nazwa tego profilu). Podejrzewałem, że przy padaniu Thunderbirda uszkodzony został właśnie ten plik. Na początek zdecydowałem się, że jednak upewnię się jeszcze, czy nie są popsute jakieś preferencje samego Ligthninga. Włączyłem go więc w menu Dodatki, przeniosłem tylko plik storage.sdb w jakieś bezpieczne miejsce i zrestartowałem Thunderbirda. Wystartował. Na miejscu starej bazy z wpisami kalendarza pojawiła się nowa pusta. Kierując się w sumie nie wiem czym (instynktem?), podmieniłem nową bazę z powrotem na starą i zrestartowałem Thunderbirda ponownie. Bardzo dziwne, ale... zadziałało. Od razu wysypały się przypomnienia o wszystkich zdarzeniach z ostatnich kilku dni.

W tym przypadku, nic się z moimi wpisami na szczęście nie stało, ale postanowiłem się jakoś zabezpieczyć przed podobnymi niespodziankami w przyszłości. Thunderbird i Firefox, umożliwiają wykonanie dowolnych skryptów podczas uruchamiania lub zamykania aplikacji. Postanowiłem wykorzystać ten mechanizm do robienia kopii bezpieczeństwa pliku storage.sdb. W katalogu instalacyjnym Thunderbirda, oraz w katalogu profili danego użytkownika ($HOME/.thunderbird/) znajduje się podkatalog o nazwie init.d. Wystarczy wrzucić do któregoś z nich skrypty o nazwie zgodnej ze schematem SNNnazwa lub KNNnazwa. Skrytpy zaczynające się od litery S będa uruchamiane podczas startowania aplikacji a te zaczynające się od K przy jej zamykaniu. Zamiast NN należy wstawić cyfry, które decydować będą o kolejności uruchamiania skryptów. Poniżej skrypt, który kopiuje i pakuje plik storage.sdb podczas startowania Thunderbirda.

# zapamietanie aktualnego czasu dla oznaczenia archiwum
TIMENOW=`date +'_%Y%m%d_%H%M'`
 
#sprawdzenie czy istnieje zmienna MOZ_PIS_USER_DIR (zgodnie z zaleceniami mozilli)
if [ "DWSQXA${MOZ_PIS_USER_DIR}" != "DWSQXA" ]; then
	# znalezienie wszystkich plikow z danym Lightninga
	for filename in `find "${HOME}/${MOZ_PIS_USER_DIR}/" -name storage.sdb` ; do
		# dla kazdego pliku tworzymy nazwe dla jego archiwum na 
		# podstawie katalogu profilu i aktualnej daty
		sed_command=s/`echo "${HOME}/${MOZ_PIS_USER_DIR}/" | sed -e 's/\//_/g'`//
		new_filename="`echo ${filename} | sed -e 's/\//_/g' | sed -e $sed_command`${TIMENOW}"
		# kopiujemy baze danych Lightninga i kompresujemy ja
		cp $filename "${HOME}/wazne/kalendarze/${new_filename}"
		bzip2 "${HOME}/wazne/kalendarze/${new_filename}"
	done
fi