Bagaż bez opieki

W związku z sytuacją na świecie mamy stopnie alarmowe, apele o czujność i ogólne wzmożenie. A jak to wygląda w praktyce? Miałem okazję się przekonać.

Z okazji jazdy pociągami[1] byłem na dworcu. Miasto wojewódzkie, tyle powiem. Na peronach pustawo. No i zobaczyłem torbę, płócienną, wypchaną, ewidentnie bezpańską. Przypomniały mi się komunikaty, które czasem słyszę na dworcach, żeby powiadomić gdy widzimy bagaż bez opieki. Wiadomo, że raczej po prostu ktoś zapomniał, ale wzmożenie. Zresztą, nie mi o tym decydować, od tego są służby i mają procedury, prawda? Mam dłuższą chwilę czasu do przyjazdu mojego pociągu.

No dobrze, powiadomić, ale kogo? Rozglądam się, ale nikogo sensownego (czyt.: osoby w uniformie) w pobliżu nie ma. Myśl pierwsza: pójdę do informacji/kasy. Co prawda kawałek jest, no ale tam będą wiedzieli co i jak. Zatem idę i tak sobie myślę, że jeśli dojdę, powiadomię, a w międzyczasie ktoś wróci i zabierze torbę, to będzie problem. I jak znam życie, wtedy będzie to mój problem. Daleko nie zaszedłem, więc wracam i robię na wszelki wypadek zdjęcia, że sytuacja miała miejsce.

Bagaż bez opieki czyli sprawca zamieszania. Źródło: fot własna.

Skoro już mam w garści telefon, to wpadam na genialny pomysł, by sprawdzić w sieci, co robić. Pierwsze sensowne źródło to jakaś strona tvp.pl. Piszą, żeby powiadomić ochronę dworca, a jeśli nie ma ochrony, to 112. No dobrze, na pewno gdzieś jest numer do ochrony, prawda? Wracam na peron, wypatrując numerów. Jeśli jest, to albo 112, albo namiary na przewoźników.

I wtedy dostrzegam słupki alarmowe z napisem SOS. Ostrzeżenie, że naciśnięcie guzika załącza monitoring audiowizualny. Profesjonalny wygląd – dwa przyciski, oznaczenie dla niewidomych. Wciskam przycisk. Budka zaczyna dyktować cyfry po angielsku[2], całkiem sporo. I tyle. Nic więcej się nie dzieje. Sprawdzam drugi guzik – bez zmian. Wyciągam telefon i dzwonię jeszcze raz, nagrywając. I jeszcze raz…

Budek na peronie jest kilka, więc uznaję, że ta jest zepsuta i idę do kolejnej. Od razu nagrywam, w sumie już bardziej dla sportu. Tym razem nie słychać cyfr po wciśnięciu guzików. Nie ma też reakcji. Idę do trzeciej budki.

Sytuacja analogiczna jak w drugiej, ja jestem na końcu peronu. Pora na 112. Dzwonię, przedstawiam się, opisuję sytuację. Robi się zabawnie – dysponentka wypytuje czy jest pociąg na peronie, bo to trzeba zgłosić komuś z kolei. Konduktorowi albo maszyniście (sic!). Bo oni będą mieli kontakt[3]. I że to duże miasto, duży dworzec, więc na pewno jakiś pociąg jest. No jest, ale na sąsiednim peronie.

Macie tę wizję, gdy czekacie na pociąg na peronie, z bagażami, i słyszycie, żeby pójść na sąsiedni i poszukać kogoś z obsługi? Normalnie pewnie zasugerowałbym dysponentce zajęcie się pracą, ale nie miałem wiele bagaży i miałem czas, więc stwierdziłem, że warto zobaczyć jak się sytuacja rozwinie.

W drodze na sąsiedni peron podszedłem do kolejnej – czwartej – budki SOS. Wcisnąłem przycisk i praktycznie od razu „ochrona, słucham?”. Zacząłem tłumaczyć, niezbyt składnie, bo już zapomniałem co ja właściwie chcę zgłosić, że torba, i gdzie. Praktycznie od razu usłyszałem „dobra, widzę”. Załatwione w jakieś 15 sekund, jak już ktoś odebrał.

Chwilę później z głośników popłynął znajomy komunikat, żeby zgłaszać pozostawiony bagaż i przydługi numer telefonu, gdzie to robić. Na pewno wszyscy go zapamiętujemy albo skrzętnie zapisujemy…

Sprawdziłem daty zdjęć i filmów. Udokumentowana całość, od pierwszego zdjęcia, do ostatniego filmu zajęła dobry kwadrans. Czyli pewnie bardziej 20 minut.

I tyle w kwestii czujności i wzmożenia. Zastanawiam się jeszcze tylko, ile kosztują te budki SOS.

[1] Niektórzy się nie nauczą. Pierwszy opóźniony o ponad 40 minut (trasa ok. 2h), w dodatku się zepsuł. Szczęśliwie zepsuł się na stacji więc nie było tak wspaniałych przesiadek jak wtedy i szczęśliwie był pociąg jadący w tym samym kierunku, więc dołożyliśmy może 5 minut opóźnienia. Na pocieszenie – woda i wafelek.
[2] Zapewne wybierany numer.
[3] Rozumiem, że dysponenci na 112 stosownych kontaktów, do obsługi węzła kolejowego w mieście wojewódzkim, nie mają.

Streamripper

Dawno, dawno temu, nagrywało się utwory z radia – albo całe audycje – na kasety. Ponieważ zacząłem słuchać nieco więcej radia przez sieć, zacząłem się zastanawiać, jak to wygląda teraz. Bo przecież jest sporo ułatwień, choćby to, że strumień odtwarzany przy pomocy mplayer wyświetla informacje o odtwarzanym utworze.

To, że mplayer, ffmpeg czy vlc potrafią zapisać[1] strumień na dysk, wiedziałem. Już zabierałem się za zrobienie rozwiązania, które zapisze i audio, i informacje co było odtwarzane, gdy wpadłem na pomysł, by sprawdzić, czy przypadkiem nie ma jakiegoś gotowca w pakietach. Nie wiem jakiej frazy użyłem w wyszukiwaniu apt, ale trafiłem na streamripper z krótkim opisem download online streams into audio files.

Pobawiłem się chwilę i program mi się spodobał. Narzędzie jest bardzo proste[2], konsolowe. Ma swoje lata, ale działa i ma kilka przydatnych opcji. Przede wszystkim potrafi zapisywać strumień do pliku. Ale poza tym, potrafi zapisać tylko określoną ilość czasu lub megabajtów, zrobić reconnect. Czyli możemy sobie nagrać audycję, a przy problemach z siecią stracimy tylko fragment.

Potrafi też rozpoznać informacje o wykonawcy i tytule i wykorzystać je do nazwania zapisanego pliku. Niestety, nie ma co liczyć na zrobienie sobie w ten sposób biblioteki pojedynczych utworów w przyzwoitej jakości. Zwykle znaczniki z informacjami o utworze są przesunięte o kilka sekund. A to oznacza, że w utworach będzie brakowało początku lub końca, za to będzie nadmiar z innego kawałka. No chyba, że są nadawane z przerwami, wtedy może się udać. Możliwe też, że to zależy od stacji.

Jeśli jednak chcemy nagrać całą audycję, działa bardzo fajnie. Jeśli ktoś myśli o nagrywaniu radia internetowego, to polecam wypróbowanie streamrippera.

[1] Potrafią o wiele więcej – zmienić rozmiar video, audio, nadawać strumień do sieci. Kiedyś działałem z tym trochę więcej, ale to dawne dzieje.
[2] Tzn. opcji trochę jest, ale w porównaniu z ffmpeg czy mplayerem – niewiele.

Idź na socjal

Idź na socjal – tak właśnie można przetłumaczyć GoToSocial, czyli nazwę serwera ActivityPub napisanego w Golangu. Czyli serwera, by zaistnieć w Fediverse. Bo Mastodon może i jest popularny, ale nie jest jedyny.

GoToSocial był moim wyborem do zabawy z Fediverse już dawno temu, jednak wymagania nieco odstraszały. Głównie te związane z VPSem i jego parametrami. Co prawda niby powinno działać na mniej niż 1 GB RAM i kilkanaście GB dysku, ale jakoś nie miałem gdzie tego wcisnąć na istniejących maszynkach. Zwłaszcza, że chodzi wyłącznie o zabawę.

Jak wspominałem we wpisie o Sesji Linuksowej, wygrałem talon na VPS mikr.us. I niedawno go zrealizowałem na potrzeby innego projektu. Zasobów jest tam dużo za dużo, więc idealny moment, by pobawić się GoToSocial. Tym bardziej, że VPS na mikr.us nie pozwala na uruchomienie kontenerów LXC. W każdym razie mi się nie udało, a konsultacja na Discordzie potwierdziła, że się nie da. Za to działa docker.

Nie jestem fanem dockera. Zdarza mi się go używać, ale raczej nie jest pierwszym wyborem. Jednak i Uptime Kuma, i GoToSocial dają obrazy i sensowną – na pierwszy rzut oka – dokumentację. Postanowiłem spróbować.

Z dokumentacji GoToSocial dowiedziałem się, że potrzebuję otwartego portu 443 oraz osobnej domeny dla instancji. Ogólnie wymagania są nieco dziwne. Po pierwsze, nie można wykorzystać dowolnego portu. Na mikrusie to problem, bo o ile możemy sobie przekierować kilka portów, to są to inne porty niż 443. Po drugie, domena jest trwale przywiązana do instancji (a w zasadzie kluczy), co oznacza, że nie można zmienić oprogramowania serwera na tej samej domenie.

Wziąłem zatem darmową (sub)domenę, którą wykorzystam tylko do tego jednego celu i tylko do testu. Mikrus daje normalny dostęp po IPv6, bez konieczności przekierowywania portów, a większe serwery działają w dual stack, wiec stwierdziłem, że instancja będzie dostępna wyłącznie po IPv6.

Ostateczny setup na który się zdecydowałem to: GoToSocial w dockerze (tylko IPv4), nginx na froncie, robiący za reverse proxy, nasłuchujący na porcie 443 i adresie IPv6. TLS od Let’s Encrypt z wykorzystaniem certbota, terminowany na nginx. Dla domeny ustawiłem wyłącznie rekord AAAA. Czemu tak? Bo tak jest najwygodniej i standardowo. Mógłbym pominąć nginx, ale straciłbym wszystkie dodatkowe możliwości typu bezproblemowy rate limit. I musiałbym włączyć IPv6 w dockerze.

Uruchomienie nie było bezproblemowe. Już sama konfiguracja i start dockera sprawiły trudności. Przyczyną były oczywiście uprawnienia do katalogów. Niby jest to pokazane w logach, ale zachowanie jest nieco dziwne, zwł. w kwestii tworzenia nieistniejących katalogów. Jednak w końcu docker ruszył.

Dla odmiany z nginx poszło łatwo. Przykładowy konfig zadziałał niemal od kopa, drobnego dostosowania wymagała jedynie obsługa http2 w starszej wersji nginx. Uroki Ubuntu 24.04 LTS. Gdy już wszystkie znaki na niebie i ziemi wskazywały, że powinno działać, przyszła pora na dodanie użytkownika.

Tu nastąpiło moje lekkie zdziwienie, bo GoToSocial nie oferuje żadnego panelu, jedynie API. Użytkowników zakłada się z wiersza poleceń. Nieco dziwny wybór i raczej nie przysporzy popularności rozwiązaniu, w każdym razie nie poza grupą geeków. Kolejną konsekwencją jest konieczność połączenia się jakimś klientem, bo nie ma interfejsu WWW.

Czyli kolejny problem, bo okazało się, że nie mam dostępu do IPv6 z domu. Ani korzystając z internetu w domu od ISP, ani na telefonie, po wyłączeniu WiFi. To ostatnie mnie zdziwiło, byłem przekonany, że GSM to głównie IPv6. Na szczęście jest Pinafore, czyli klient dostępny w przeglądarce. Do tego tunel SSH do VPSa z IPv6[1], rozwiązywanie nazw DNS po socks proxy i… mogłem zobaczyć swoje konto i napisać coś.

Niektórym to może wystarczyć, jednak idea jest nieco inna. Powinna być możliwa interakcja z innymi instancjami. Wyszukałem jakieś konto w Pinafore, wybrałem follow, powtórzyłem dla kilku innych i… żadnego efektu. Informacja o oczekiwaniu na zatwierdzenie. Tylko te konta nie wymagały zatwierdzania. Sprawdziłem na swoim podstawowym koncie, na którym dla odmiany wymagam zatwierdzenia obserwacji. Ten sam efekt – pokazywało, że czeka na zgodę, ale nie dostałem zapytania o zgodę. No i nie mogłem z podstawowego konta wyszukać konta na testowej instancji. Czyli coś nie działa.

Diagnostyka tego zajęła sporo czasu, usłyszałem, że z IPv6-only bywają problemy, dostałem niepocieszające opisy problemów z GoToSocial i forwardowaniem portów przy NAT i w zasadzie już miałem stwierdzić, że gdzieś zrobiłem błąd, gdy skutecznie zaobserwowałem konto na instancji, która miała tylko adres IPv4 i korzystała z GoToSocial. Natomiast konta na serwerach Mastodon pozostawały niedostępne. Także na tych, które miały tylko IPv4.

Ostatecznie znalazłem instancję Mastodona, posiadającą zarówno adres IPv4 jak i IPv6, gdzie mogłem normalnie obserwować konta[2]. Dostrzegłem też w gąszczu logów błędy 503 przy próbach interakcji z innymi instancjami (subskrybcji). Czyli jakiś problem z kompatybilnością softów GoToSocial i Mastodon, nie u mnie z konfiguracją.

Jak już było wiadomo czego szukać, to ustaliłem, że z Mastodon v4.8.0-alpha.1 działa (dual stack), za to nie działa z v4.8.0-nightly.2026-08-27 (też dual stack) ani v4.7.0 (wyłącznie IPv4). Z kronikarskiego obowiązku, używana przeze mnie wersja to 0.22.1+git-fdff42b.

Co dalej? Pewnie nic. Może jeszcze coś mi przyjdzie do głowy, zasobów na VPS nie potrzebuję, więc zabawek nie zbieram. Przy okazji obserwacja: wymagania podawane przez dokumentację GoToSocial wyglądają na zawyżone, ale może to być kwestia obliczania pod ilość userów i interakcji zewnętrznych. Do samego postawienia opisanego setupu wystarczy spokojnie 0,5 GB RAM, na Ubuntu.

Natomiast w kwestii rozważań o selfhostingu, własnej instancji itp. – wygląda, że rozwiązanie nie robi i ciężko stwierdzić dokładnie, dlaczego. Kolejna lekcja to konieczność posiadania adresu IPv4, co skreśla mikrusa. Może być ciężko podłączyć się do instancji bez takiego adresu. Teoretycznie rozwiązaniem mógłby być Cloudflare, ale na takie eksperymenty zupełnie mi odeszła ochota, skoro nie działa zasadnicza część.

UPDATE: Trochę mi to nie dawało spokoju, więc sprawdziłem większą ilość serwerów. Nie wszystko działa, ale coś tam działa. Problem jest chyba tylko z serwerami Mastodon, ale niestety są to duże instancje, co przekreśla sens rozwiązania. Posty z nich widzę, profile widzę, ale nie mogę obserwować kont.

Nieco rozrywki/stan oprogramowania. Mój GoToSocial obecnie przedstawia się home to 0 users who have written 2 posts; peered with 29 other instances. Off by one?
Przy 11 obserwowanych.

[1] Zupełnym przypadkiem tego samego, na którym działa serwer GoToSocial, ale to bez znaczenia.
[2] Popularne Dziesiony. Szacun dla administratorów.