Fedora 42→43, more eventful than usual


I've found time for dist-upgrade of my home server, finally. As usual, there was one thing needing manual intervention: PostgreSQL update. But this time it was more complicated.

Between Fedora 42 and 43, PostgreSQL jumped from v16 to v18. And postgresql-setup --upgrade handles adjacent versions upgrades only. Fortunately, Fedora ships other version-suffixed packages for this database.

It is possible (and needed!) to use postgresql-server17 and postgresql17-upgrade packages as an intermediate step in the upgrade. Commands are documented in bz#2411778#c1. It should be included in F43 Common Bugs list, but it isn't. (And the list itself was moved from Wiki into Discourse…)

Note to self: the upgrade always fails with my customised postgresql.conf. Remember to plant the default config for the duration of postgresql upgrade.

026/100 of #100DaysToOffload

MinIO się skończyło


Domowa implementacja API S3, MinIO, znienacka zakończyła rozwój. Produkt jest rozwijany dalej jedynie komercyjnie. Znaki były wcześniej, dwa miesiące temu zaprzestali publikacji obrazów.

Szkoda.

Ale uczciwie mówiąc, mam domowy deploy od kilku lat, ale tego API w końcu nigdzie nie użyłem. Najbardziej przydatny był webowy panel MinIO, podpięty pod domowe SSO. Główną funkcjonalnością było dla mnie uploadowanie plików z sieci gdzie np. GMail jest zablokowany.

Z jednej strony, jeśli będę potrzebował cebulowe (czyli darmowe) S3, to do 10GB / miliona operacji IO można użyć free tier R2. Z drugiej, głupio nie mieć self-hosted wersji, więc zastanawiam się nad Garage.

Mam też S3 API udostępnione przez domowy klasterek CEPH, ale ten częściej nie działa, niż działa (bo jest na deweloperskich wersjach Fedora Rawhide).

Przy okazji pozdrawiam osoby koleżeńskie z jednej z poprzednich prac, które podjęły decyzji o wbudowywaniu MinIO w produkty dostarczane klientom. 🫂

025/100 of #100DaysToOffload

Suszarka skończyła. Teraz Twoja kolej.


Nie pisałem jeszcze jak zintegrowałem suszarkę do ubrań z domową automatyką. Najważniejsze była informacja, że zgonsusznia (ang. deathstill) skończyła pracę, bo jej pikania nie słychać zza zamkniętych drzwi. Informację przekazuje nam Aleksa.

Odpytywanie

Suszarka marki Candy ma jakąś tam aplikację, ale jak to zwykle bywa do niczego się ta appka nie nadaje. API nie jest opisane. Komunikacja z urządzeniem jest niby szyfrowania. Niby, bo odpowiedź jest xorowana z kluczem. Jednocześnie odpowiedź jest JSONem, pierwsze znaki to zawsze {", dalej też łatwo zgadnąć.

Jest więc narzędzie CandySimplyFi-tool, które klucz odkrywa.

Napisałem kawałek kodu eksportujący stan suszarki do domowego brokera MQTT.

Mów do mnie

Jednym z konsumentów informacji o suszarce z MQTT jest mały serwis z jednym zadaniem: jak suszarka skończy, to niech Aleksa da odgłos paszczą. I powtarza co kwadranso, o ile suszarka nie została wyłączona.

Do tego polecam świetną usługę VoiceMonkey. Po wstępnym skonfigurowaniu, wystarczy jedno RESTowe żądanie aby Echo przemówiło. Mam kilka predefiniowanych zdań informujących o zakończeniu cyklu. Zawsze też można poprosić lokalnego LLMa o wygenerowanie jakichś krótkich, sarkastycznych komunikatów.

Ile jeszcze?

Nasza suszarka ma tendencję do kończenia cyklu wcześniej, niż wynika z pokazanego na początku czasu Nie doczytałem, czy ma czujnik wilgotności, a może ilości odprowadzonej wody? Niemniej finał pracy bywa niespodzianką, więc głosowa informacja o końcu cyklu jest tym bardziej wskazana.

/dżogstaff/2025.11.30-suszarka.dash.webp

Posiadanie informacji o stanie suszarki w systemie pozwala na robienie dashboardzików i innych powiamień – np. o konieczności wyczyszczenia filtra lub wylania wody. Tu się przydaje Prometheus lub coś podobnego i push-gateway.

024/100 of #100DaysToOffload

Warsztaty rowerowe


Dzisiaj z rana pojechałem kilka wiosek dalej, na warsztaty rowerowe organizowane przez Mechanika Rowerowa. Po latach^Wdekadach zaniedbywania poprzedniego roweru, do obecnego postanowiłem podejść poważniej.

Warto było. Posłuchałem specjalistów, zrobiłem kilka stron notatek. Co najważniejsze, w komfortowych warunkach i pod nadzorem przećwiczyłem demontaż i zakładanie koła, dętki, opony, rozkuwania i spinanie łańcucha oraz niektóre regulacje. A że byłem ze swoim rowerem, to poznałem też lokalizację schowanych śrub i obecność stabilizatora łańcucha w przerzutce.

Po drodze, jadąc szerokimi ulicami przez przemysłowe Kokoszki stwierdziłem, że przydałyby się tam pasy dla rowerów. Odpowiedni wniosek jeszcze dzisiaj napiszę i prześlę do miasta.

Gdy już wracałem, czekała mnie jeszcze niespodzianka, bo moja pierwsza Żona wsiadła na swój rower (sama!) i wyjechała mi na spotkanie. Jeszcze będą z niej ludzie :)

022/100 of #100DaysToOffload

9. Sesja Rady Dzielnicy Jasień


Zwołałem sesję Rady Dzielnicy Jasień na przyszły tydzień.

Głównie musimy skończyć budżet dzielnicy na przyszły rok. W planie jest również dyskusja i może stanowisko odnośnie współpracy Rady z Urzędem Miasta w Gdańsku.

Bo nie jest dobrze. Niedawno Rada Dzielnicy Oliwa ogłosiła, że szuka sposobu na samorozwiązanie. Rozumiem ten poziom frustracji, mam w planie notkę na temat olewania jednostek pomocniczych przez urząd miejski.

021/100 of #100DaysToOffload

Backups with btrbk


Storage setup of my home server is btrfs raid1 over two, dm-crypt'ed 16TB HDDs cached with bcache on NVMe. It works fine, however for PostgreSQL database and my homedir I prefer full NVMe speed.

Therefore I've put those two directories on (dm-crypt'ed) btrfs subvolumes directly on NVMe. Thanks to DUP profile there's a protection against bitrot. But it's still a single device which may just die. Regardless of full backups, I was doing daily rsync into main drives, but there's faster and more capable way.

Enter btrbk, which operates on btrfs subvolumes. It uses btrfs' native send capability to copy the subvolume between filesystems effectively.

Additionally, it's very easy to keep some number of historic subvolume snapshots. They utilize copy-on-write, minimizing space usage. This let me recover files quickly or compare filesystem's state over last few days.

The config it bit tricky, that's why I'm posting this. My full backup config below, divided in three sections for explanations.

timestamp_format        long
snapshot_preserve       14d
snapshot_preserve_min   2d      # defaults to 'all'

The source definition. preserve option combination is needed to have daily snapshots kept for last two weeks and have older snapshots removed.

target_preserve         7d
target_preserve_min     latest  # defaults to 'all'

What to do with subvolumes copies at the target directory. Above combination of options keeps last seven days of snapshots copies.

send_compressed_data    yes

volume /run/btrbk-work
        target /home/poligon/backs/btrbk_snaps

        subvolume home_zdzichu

        subvolume var_lib_pgsql

Job definition. /run/btrbk-work is a directory where I temporarily mount NVMe drive root volume with subvolumes beneath. /home/poligon/backs/btrbk_snaps is the directory on my main (raid1) pool where subvolume copies are stored. And the last two lines are specific subvolumes to copy.

That works for me. btrbk is run by cron.daily/ from a short script ensuring everything is mounted where it should be.

020/100 of #100DaysToOffload

No to pohulane


Na fali postów naprawczo–remontowych… po przejechaniu trochę ponad 6 200km w 2,5 roku, oddałem moją hulajnogę do serwisu. Zaciski hamulcowe trzeba wymienić i coś zaczęło się dziać z baterią.

Nie zawsze ładuje się do pełna, przestaje losowo w trakcie. Poniżej dwa wykresy: górny to obecne zachowanie. Dolny to prawidłowe ładowanie:

/dżogstaff/2025.10.24-ładowanko.png

W serwisie rozebrali baterię, stwierdzili brak uszkodzeń mechanicznych i sprawdzili wszystkie sekcje. Diagnoza: akumulator ma 60% oryginalnej pojemności, jest już na wykończeniu. Szkoda, bo dbałem o higienę. Nigdy nie rozładowałem go do zera, ani też nie trzymałem naładowanego na 100%. To niestety kwestia budżetowości części.

Dostałem trzy opcje:

  • zbalansowanie ogniw i złożenie wszystkiego; jeszcze z jeden sezon da się pojeździć

  • nowy akumulator od producenta, koszt 2 850zł

  • zupełnie nowa, ale taka sama hulajnoga, bo akurat mają taki model w kartonie, za jakieś 3,5k zł

Przy tych kosztach postanowiłem dojeździć Joyora do końca, a jak przyjdzie czas – rozejrzeć się za czymś z wyższej półki. Absolutnie sprawdził się finansowo i czasowo jako główny środek transportu w mieście.

Ostatnie 2 tygodnie, gdy hulajnoga była w warsztacie, do biura jeździłem na rowerze. I jest spoko, może będę to robił częściej. Drogę „tam” mam bardzo z górki, większość trasy nawet nie muszę pedałować:

/dżogstaff/2025.10.24-pedałowanko.jpg

A w biurze są prysznice. Może zabiera to 10 minut dodatkowych minut, ale dużo więcej oszczędzam nie robiąc samochodem korków.

019/100 of #100DaysToOffload

Halo, czy mnie słychać?


Zaczynając pracę w obecnej firmie, na startup gift poprosiłem o słuchawki Sony WF-1000XM4 – douszne. Raczej rzadko ich używam. Do porządnego wyciszenia mam duże WF-1000, a do jazdy na jednośladzie i hikingów lepiej sprawiają się kostne Shokzy.

Niemniej małe słuchawki mają zaletę bycia małymi, więc czasem biorę je do plecaka. I tu negatywnie zaskoczyły mnie w zeszłym miesiącu. Bateria zaczęła niknąć w oczach niczym wody jeziora Karaczaj. Niecała godzina i kaput.

Otóż nie jest to niezwykłe. Któraś z wersji firmware wypuszczona przez Sony miała błąd skutkujący zbyt wysoką temperaturą pracy akumulatorków. Efektem jest trwałe uszkodzenie i obniżenie pojemności.

Gwarancja? Owszem, ale moim słuchawkom dwa lata już minęły.

Opcja druga, naprawa. Można samemu spróbować. Akumulatorki Z55H kosztują kilkadziesiąt złotych sztuka, a wymiana wymaga rozklejania i manipulacji drobnymi elementami.

Może to też zlecić komuś. Koszt usługi z materiałami to około 250 zł. Trochę dużo, ale to tylko ¼–⅓ ceny nowych słuchawek.

I tu wchodzi Sony, całe na… jasnoszaro. Mają pogwarancyjny program serwisowy. Obowiązuje tylko w trzecim roku posiadania (czyli rok po upłynięciu gwarancji). Za 160 zł autoryzowany serwis wymienia elementy douszne na nowe. Całe, nie rozklejają i nie wymieniają tylko akumulatorków. Etui pozostaje to samo.

Zadzwoniłem do Sontronic, wypełniłem formularz, wysłałem paczkę Paczkomatem. Tydzień później wyjąłem z maszyny nowe słuchawki, które mam nadzieję będą działać bez problemu przez lata.

018/100 of #100DaysToOffload <https://100daystooffload.com/>

Jaki matrix?


Znowu mam wrażenie, że muszę wykonać pewną ilość pracy, żeby zostać w tym samym miejscu.

Tym razem matriksowy homeserver Dendrite. Jakiś czas temu został przejęty przez Element, co miało zapewnić jego dalszy rozwój. W zamian jednak umarł i mam wrażenie, że dalszy rozwój protokołu powoduje coraz gorsze działanie Dendrite. Np. podobno winą homeservera są niedziałające ustawienia powiadomień we Fractal.

No więc trzeba się zmigrować na coś działającego. Pewnie na Conduwuit, pardon, teraz to Tuwunel. Przy okazji doktoryzacja z przenoszenia kont i subskrypcji kanałów… już mi się nie chce.

017/100 of #100DaysToOffload

Szeptany obwiniacz


Model Whisper okazał się zaskakująco użyteczny. Mam nagrania z kilku lat zebrań pewnego kolektywu. Protokoły z tych zebrań często pomijały niektóre sprawy. A przesłuchiwanie godzinnych nagrań w celu znalezienia jakiegoś zdania… po prostu nie wydarza się.

I tu wchodzii cały na biało wspomniany model. Kilka linijek w Pythonie przemieliło te nagrania na wyszukiwalny tekst, ze znacznikami czasowymi. I nawet ładnie ogarnia kwestie finansowe.

00:58:47,960 --> 00:58:53,960 Tak, tylko czy 3 razy więcej z 300 zł, czy z 3000 zł, to też jest różnica.

Teraz z łatwością można komuś wypomnieć co deklarował lata temu i puścić odpowiedni fragment nagrania.

016/100 of #100DaysToOffload

Tunezja objazdowo 7: koniec


Jesteśmy zadowoleni. Przewodnik wygadany i zorganizowany, grupa też się nie rozłaziła, całkiem fajni ludzie.

Przeraża ilość śmieci wszędzie, nawet na pustyni na każdym metrze wala się plastik.

Dinarów nie wolno wywozić z Turcji, nam zostało prawie 200. Kantor na lotnisku chciał jakieś kwitki i potwierdzenia wymiany których nie mieliśmy. Po głębokim patrzeniu w oczy znalazł pasujące w swoich śmieciach i dostaliśmy euro.

Przez tydzień przejechane 2100km autobusem, 200km samochodami 4x4, zużyłem 8,13GiB danych komórkowych.

015/100 of #100DaysToOffload

Tunezja objazdowo 6: rzymskie miasta


Wyjazd 6.30.

Trzy osoby zrezygnowały, zostały w hotelu. Zbytnio zmęczone czy przepimprezowane?

Jedno rzymskie musi miasto Dougga.

Drugie rzymskie miasto Thuburbo Maius.

Niesamowite, otwierają oczy jak rozległe było imperium rzymskie. To stąd większość mozaik oglądanych na początku wycieczki.

8k kroków, 5,7km.

014/100 of #100DaysToOffload

Tunezja objazdowo 5: gladiator-style


Śniadanie o 5.00.

Amfiteatr El-Jemm w stylu rzymskim, największy w Afryce, nieźle zachowany, chociaż po zwiedzeniu Koloseum odbieram go trochę jak remix.

Muzeum mozaik spoko.

Monastyr: Mauzoleum prezydenta Habib Burgiba, twierdza.

Stare Miasto w Sousse: typowa uliczka handlowa, skąd tu tyle ludzi :(

18,8k kroków, 13,3km.

013/100 of #100DaysToOffload

Tunezja objazdowo 4: Djerba


Muzeum etnograficzne de Guellala bardzo fajne. Takie rzeczy lubimy na wyjazdach.

Obrzezanie jako okazja na dostania kasy na PlayStation, ciekawe podejście, ale jakoś trzeba sobie radzić z traumą.

Synagoga Al-Gharbia bardzo eklektyczna, kolory lokalne, układ klasyczny.

Rynek: jak zwykle najgorsze co ludzie ludziom mogą zrobić.

Morze ciepłe, plaża cicha, dało się odpocząć.

12,7k kroków, 8,3km.

012/100 of #100DaysToOffload

Tunezja objazdowo 3: więcej offroad


Tym razem śniadanie o 5.00. Karaluch w pokoju znacząco większy niż w pierwszym hotelu: 3-4 cm.

W czasie przejażdżki dorażką dostałem lejce. Kierowało się łatwiej niż barką na Mekongu, koń sam wiedział dokąd jechać.

Oaza z daktylami w porządku.

Słone jeziora: niesamowite puste przestrzenie, wydmy i kopczyki solne. Wow.

Quady na pustyni, ciarki przechodzą, gdy cywilizacja znika za wydmami i wokół tylko piasek.

Wiejskie gospodarstwa na pustyni – efekt raczej smutny, jak tu jest biedne!

Dom wujostwa Luka Skywalkera – w filmie jest tak bardzo tłem, że gdyby nie fotosy kadrów na ścianach, trudno by było skojarzyć. A oglądaliśmy początek Nowej Nadziei tydzień temu.

Droga Rommla z super górskimi widokami, podziwiane znad szklanki gorącej miętowej herbaty z migdałami i miodem.

Na koniec basen w kolejnym hotelu, ponownie super po całym dniu upałów.

5.8k kroków, 8.9km.

011/100 of #100DaysToOffload

Tunezja objazdowo 2: offroad


Znowu śniadanie o 5.30 i wyjazd godzinę później.

Kairouan najstarsze stare miasto, meczet robi wrażenie, koty pozują z grupami turystów. Siedem pielgrzymek do tego miasta liczy się jak jedna do Mekki.

Lokalne mauzoleum ładne, w środku elektroniczny czasomierz modlitewny identyczny jak w naszym gdańskim meczecie.

Zbiorniki Aghlabides ładne od strony inżynieryjnej.

Potem samochodami 4x4 do oazy (kręcili tu Angielskiego Pacjenta), i przełajem trasą Paryż-Dakar, obók góra wielbłąda, do Mos Espa. Atrakcja turystyczna zajebana straganami, ciężko znaleźć źródło mocy.

Po takim dniu wieczór w basenie (na środku pustyni) dwa plus dobry.

9,8k kroków, 6km.

010/100 of #100DaysToOffload

Tunezja objazdowo 1: Tunis


Stare miasto w stolicy nawet spoko. Klimatyczne uliczki i mnóstwo kotów!

Muzeum Bardo – mozaiki i super koronkowo-gipsowe sufity.

Kartagina: niewiele zostało: łaźnie, cmentarz meh, portów nie ma, ale wzgórze z ekstra widokiem.

Sidi Bou Said (“Tunis Santorini”) nawet ładne. Jedyna jak dotąd ulica ze śmietnikami, bo tak to syf wszędzie.

Na pytanie po ile pączek, dziwnie brzmiąca odpowiedź. One and half. Spodziewałem się one fifty, ale połówka tunezyjskiego dinara to nie pięćdziesiąt, a pińcet jednostek milimonetarnych.

14.3k kroków, 9.4 km.

009/100 of #100DaysToOffload

Tunezja objazdowo 0: wylot


Wyjazdy co do zasady organizujemy sami, ale w tym roku natłok spraw nie zostawił na to czasu. Postanowiliśmy spróbować czegoś nowego i do Tunezji wybraliśmy się na wycieczkę objazdową z biurem podróży.

Spakować się, wykupić ubezpieczenie, eSIM, wziąć euro i pojechać autobusem na lotnisko… i to już? Żadnych parkingów, rezerwacji, biletów wstępu, wynajmu auta, szukania parkingów czy ustalania marszruty. Dziwnie.

Na miejscu czekając na bagaże kupno SIM do drugiego telefonu. Przepłacone 2x (15EUR za 27GiB na miesiąc), ale za to wygodnie.

Potem niestety czekanie w autokarze przed lotniskiem, bo ktoś się zgubił. W hotelu po północy, a o 5.30 śniadanie i wyjazd.

Pierwsza obserwacja: do rzeczy dobrych przyzwyczajamy się szybko. Do Tunezji nie dotarły jeszcze przytwierdzone do butelek zakrętki. Trzeba być czujnym, dwa razy prawie taką luźną zakrętkę zgubiliśmy.

008/100 of #100DaysToOffload

Spacer gospodarczy vol. 2


Po raz kolejny uczestniczyłem w spacerze po dzielnicy z p. Prezydent Gdańska i sztabem urzędników.

Małe deja vu. Dróg o których dyskutowaliśmy przed 3 laty dalej nie ma, przejścia przez potok też, chociaż mieszkańcy w międzyczasie zrobili kładkę z poręczami. Cośtam miał zrobić deweloper, ale się nie wyrobił, więc przedłuży mu się termin. A może by nie przedłużać, tylko egzekwować zapisy umowy? Zbyt radykalne.

Może dlatego na zdjęciach wyglądam jakbym chciał tym urzędnikom strzelić z bańki.

007/100 of #100DaysToOffload