Mastodon backup

Kolejna w stosunkowo krótkim czasie, ale dość długa awaria jednego z liczniejszych serwerów Mastodon w Polsce, pol.social, dała okazję do bliższego przyjrzenia się możliwościom backupu. Okazało się, że ludzie się przenoszą na inne serwery i… nie jest to takie proste, szczególnie, gdy dotychczasowy serwer nie działa.

W normalnych warunkach migracja na Mastodonie polega na wskazaniu nowego miejsca, gdzie ma znaleźć się konto. Przenoszeni są m.in. obserwowani, obserwujący, ale treści (tooty, czyli dopowiednik postów) zostają na starym serwerze. Nie ma możliwości przeniesienia treści na nowy serwer, przynajmniej oficjalnej. Zresztą byłoby to trudne, bo wszystkie istniejące odnośniki do niej, wątki, i tak przestaną działać. Kwestia niezbyt szczęśliwego projektu protokołu.

Istnieje nieoficjalne rozwiązanie slurp, które zostało zaprojektowane do działania z GoToSocial. Jeden serwerów ActivityPub, raczej pomyślany o małych, samodzielnie utrzymywanych instancjach. Polega na umieszczeniu starych tootów na serwerze z oryginalnymi datami. Wątki i odnośniki nadal przestają działać, jeśli serwer na którym były umieszczane zostanie wyłączony. Jednak można mieć przynajmniej swoje wpisy w formie „ciągłej”, razem z nowymi, które będą już pełnoprawne. Nie jest to rozwiązanie idealne, ale lepsze, niż nic.

Mastodon pozwala na wykonanie pełnej kopii, eksportu danych, raz na siedem dni:

You can request an archive of your posts and uploaded media. The exported data will be in the ActivityPub format, readable by any compliant software. You can request an archive every 7 days.

Niezależnie od tego, można – czy może bardziej: trzeba – pobierać formacie CSV dodatkowe ustawienia swojego profilu, np. obserwowanych, banowanych, bookmarki czy blokowane domeny. Trzeba, bo tych danych nie ma w tworzonym archiwum. A szkoda.

Zrobiłem prosty skrypt, który – nie wymagając logowania w przypadku publicznej widoczności – wyświetla obserwowanych. Wg mnie to najważniejsza, najtrudniej odtwarzalna informacja, poza samą treścią. Można go użyć np. w trakcie robienia backupu danych, jako jednego z elementów wykonywanych przez skrypty do backupu.

Włączyłem tworzenie archiwum i… po 20 minutach nadal wyświetlał informację, że tworzy archiwum. Przynajmniej tak pokazywała strona, bo po odświeżeniu strony jednak pojawił się gotowy do pobrania plik. Zapewne był już wcześniej, tylko błąd w Mastodon powoduje, że nie ma informacji o zakończeniu tworzenia.

Sam plik zawiera kilka plików JSON oraz drzewo katalogów z grafikami. W samych grafikach trudno się zorientować – tytuły plików i struktura katalogów nie są w formacie czytelnym dla człowieka.

Fun fact: archiwum pobrałem głównie po to, żeby łatwo móc przeszukiwać treść swoich postów. Wyszukiwarka na Mastodonie jest i niby działa, ale jednak wygodniej mi korzystać z grep w wierszu poleceń.

abcc3.py

Wieki po projekciku, który robiłem w ramach projektu DSP2017, po którym chyba już nic w sieci nie zostało, doznałem natchnienia. Stwierdziłem, że teraz jest łatwo, można popytać LLMa, więc może łatwiej będzie znaleźć bibliotekę do ping pod Pythonem. Ostatnio opornie to szło…

Nie zawiodłem się, podał od ręki, wraz z kodem. Oczywiście przerobiłem, by bardziej pasowało. Przy okazji przy testowaniu (w zasadzie: testach uruchamiania) wynikło trochę błędów, które poprawiłem.

Po co to zrobiłem? Nie wiem. Chyba dla porządku. Drażnił mnie ten Python 2 w wymaganiach. A wyrzucić szkoda było. Chociaż raczej nikt nie używa. Choć IIRC ktoś się przymierzał, ale nie chciał poświęcić czasu, tylko „zrób mi”. Oczywiście za darmo. Trochę nie miałem czasu, weny i… to tak nie działa.

Warto po latach przypomnieć czym jest abcc? Na dzień dzisiejszy to rzeźbiarstwo figurowe – program do wybierania najlepszego łącza z kilku dostępny z wykorzystaniem zadanych wag, na podstawie strat i opóźnień. W sumie kiedyś, w czasach routerów na Linuksie miało to sens. Chociaż nic nie stoi na przeszkodzie by i dziś podpiąć dowolny skrypt i sterować np. przy pomocy SNMP routerem operatorskim. Istniało komercyjne rozwiązanie, które mniej więcej robiło to samo. Oczywiście z ładnym inferfejsem i opakowaniem.

Albo można użyć na jakimś OpenWrt do balansowania łącza czy też raczej wyboru lepszej ścieżki do danej sieci. Bez BGP, na podstawie wyżej wspomnianych metryk. Przy LTE itp. może być użyteczne.

Raspberry Pi niemal read only

W końcu padła kolejna karta microSD. Tym razem jakaś chińszczyzna, kupiona wieki temu na Aliexpress. Działała długo. Nie pamiętam od kiedy, ale chyba parę lat. Znaczy się, problemy miała wcześniej, ale nie miałem czasu się tym zająć i jakoś działało. Chodzi oczywiście o Raspberry Pi robiące za router GSM.

O tym, że nie jest z nią dobrze wiedziałem. Przy instalacji nowych pakietów miała narowy i leciały jakieś błędy. Za pierwszym razem ograniczyłem zapisy na kartę – wyłączyłem bieda statystyki w postaci logowania ilości przesłanych danych. Mogłem wyłączyć więcej logów oraz swap, ale nie wpadłem na to. Zresztą, działało.

A teraz pewnego dnia zniknął internet, akurat gdy pracowałem. Oczywiście udostępniłem sobie net z komórki, ale zrobiłem szybką diagnostykę. W logach czysto, w dmesg czysto, uptime 240 dni. Reboot i… nadal nie działało. Za to chwilę po reboocie przy zwykłym działaniu pojawiły się błędy odczytu. Uznałem, że wina karty.

Chyba niesłusznie i była to po prostu awaria a2mobile, bo po przełożeniu modemu do innego komputera netu także nie było.

Tu mała dygresja odnośnie operatorów. Zmigrowałem z Aero2 na a2mobile i tak to sobie działa. Przy okazji – można odzyskać kaucję za kartę, którą pobierało Aero2. Nie trzeba odsyłać karty, nie trzeba podawać numeru ani wypełniać druku – wystarczy napisać email, tak jak to opisano na Pepper. W mniej niż tydzień pieniądze z depozytu miałem na koncie.

Tak w ogóle to widzę, że w Aero2 mają nowe pakiety i może niepotrzebnie rezygnowałem. Bo teraz w Aero2 dają 10 GB za 10 zł bez limitu prędkości. Z kolei obecne a2mobile nadal daje za 12,9 zł 5 GB bez limitu prędkości, kolejne 5 GB z limitem 3 Mbps (modem 3G, więc nie robi to dramatycznej różnicy i spokojnie da się działać), kolejne 5 z limitem 1 Mbps (no tu jest wolno już), a potem 512 kbps. W praktyce pewnie zwykle mieściłbym się w 10 GB, a lepiej dopłacić 10 zł za kolejny pakiet przy tych rzadkich okazjach, kiedy potrzeba będzie więcej transferu. Hmm…

No ale skoro karta ewidentnie pada, to pora na wymianę. Czasu mało, więc zamawiać nie będę, szybka wizyta w sklepie, kupiłem jakiś dziwny wynalazek 32GB za 20 zł. Karta microSD z napisem full HD na opakowaniu. Przy okazji zauważyłem, że bardzo stary Raspbian się tam ostał – jeszcze oparty na bullseye. Zastanawiałem się przez chwilę, czy nie instalować nowego Raspbiana (oparty na bookworm), ale o ile backup obrazu karty miałem, o tyle plików nie. Oczywiście mogłem podmontować i zgrać pliki, ale stwierdziłem, że więcej będzie roboty z szukaniem ich wszystkich, niż z aktualizacją Raspbiana.

No i w sumie miałem rację – aktualizacja była bezproblemowa. Przy okazji wyłączyłem logi, wyłączyłem swap, zrobiłem lekki tuning pamięci, ustawiając minimalną możliwą dla karty graficznej (16 MB zamiast domyślnych 64 MB). No i zobaczymy, ile podziała teraz. Oczywiście mam świeży backup, znowu w postaci obrazu karty.

Przy okazji, trafiłem na ciekawy opis, jak zrobić w Raspberry Pi kartę w trybie read only przy pomocy overlayFS. Spróbowałem i… niestety nie działa, choć raspi-config twierdzi, że przełączył. Nie tylko u mnie, widziałem podobne opisy na forach – na 64bit niby działa, na 32bit – nie. A moje RPi to 1B, więc nie mogę 64bit użyć. Na dokładniejszy debug nie starczyło już czasu, może następnym razem się uda…