GitHub backup

Od dłuższego czasu poruszany jest w różnych miejscach temat niezależności technologicznej od firm z… innych obszarów prawnych, że tak to ujmę. W szczególności chodzi o firmy spoza Europy. Jest też – nieco niezależny, choć w praktyce często zbieżny – temat uniezależnienia się do wielkich korporacji. Bo jakoś tak się złożyło, że wielkie korporacje nie są europejskie.

Przyznaję, że kibicuję obu tematom. I o ile nie czuję, że muszę koniecznie już teraz przenieść wszystkie zabawki do Europy, to… chcę mieć w razie czego taką możliwość. Pomału się rozglądam, wykonuję pewne drobne – póki co – ruchy. W szczególności jeśli z jakiegoś powodu rezygnuję z jakiejś usługi, to szukam alternatywy w Europie.

Tyle kontekstu, ale przecież miało być o backupie GitHub. Jak powszechnie wiadomo, jest to usługa Microsoftu, czyli podlegająca prawu USA. I w dodatku należąca do jednej z największych korporacji na świecie. Znaczy mogą zrobić z kodem co chcą, w tym… zniknąć go. Zamknąć dowolne konto. Usunąć dowolne repozytorium (i wszystkie jego forki). Bo tak.

Zapewne się to nie wydarzy, jeśli chodzi o moje repozytoria ale… Nie wiadomo. Bo już różne rzeczy były z GitHub usuwane. Więc ktoś kiedyś może wpaść na pomysł, że np. bruteforce PESELi to groźne narzędzie i trzeba repozytorium – albo i całe konto – usunąć. Wolę więc mieć możliwość przywrócenia swojego kodu z backupu. Backup serwerów i tak robię, wiele własnego kodu nie mam. Więc zrobienie kopii repozytoriów do katalogu, który jest objęty backupem wygląda jak proste, lekkie rozwiązanie.

Jeśli chodzi o ewentualne zastępstwo dla GitHuba, wybrałem popularną alternatywę w postaci europejskiego Codeberg.org[1]. Na którym i tak założyłem już wcześniej konto z uwagi na pewien pull request, który chciałem zrobić.

Repozytoriów trochę mam, są one publiczne, więc postanowiłem zautomatyzować robienie backupu, żeby nie musieć pamiętać o dodaniu każdego nowego repozytorium do skryptu robiącego backup. Po prostu robię backup wszystkich publicznych repozytoriów należących do danego użytkownika GitHub. Oczywista konsekwencja – i wada rozwiązania – jest taka, że jeśli zrobię fork jakiegoś większego projektu, to także on trafi do backupu. Jednak nie jest to częsta sytuacja, a nawet te większe projekty nie są aż tak duże, żeby mi to przeszkadzało.

Skrypt github-backup jest – jak widać – bardzo prosty. Wymaga zewnętrznego programu git i tylko jednej biblioteki – requests. Zasada działania skryptu github-backup jest prosta. Przechodzimy do katalogu ze skryptem. Podajemy usera jako parametr. W katalogu, w którym jest uruchamiany skrypt, najpierw tworzony jest katalog o takiej nazwie, jak nazwa użytkownika[2]. Następnie pobierana jest lista publicznych repozytoriów użytkownika. A w końcu dla każdego z nich tworzona jest kopia przy pomocy zewnętrznego polecenia git clone –mirror. I tyle. Tak utworzone kopie można przywrócić na innym serwerze przy pomocy git push –mirror. Przykład w readme.

Skrypt ma wady, których nie potrzebowałem poprawiać. Po pierwsze, robi mirror do bieżącej lokalizacji. Nie jest to problem przy planowanym użyciu, czyli z użyciem cron – po prostu wcześniej trzeba zmienić katalog. Po drugie, nie obsługuje prywatnych repozytoriów. Cóż, trochę nie miałem takiej potrzeby. Poza tym, o ile dodanie klucza, który ma do nich dostęp w trybie odczyt nie jest problemem, to nad listowaniem musiałbym się zastanowić[3]. Może kiedyś, bo jak wspomniałem, obecnie nie mam takiej potrzeby.

Plany rozwoju skryptu? Dodanie obsługi innych platform przydało by się najbardziej, bo żaden dostawca ani jurysdykcja nie dają gwarancji, że konto czy repozytorium nie zniknie. Przy czym pewnie w najbliższej przyszłości skończy się na Codeberg, bo tylko tego aktualnie używam i będę miał jak przetestować. Może jednak dodanie obsługi prywatnych repozytoriów?

W każdym razie jeśli rozwiązanie komuś się przyda, to zachęcam do używania. I oczywiście robienia backupów, w tym przypadku własnego kodu. Niezależnie od metody.

UPDATE: To naprawdę prosty skrypt i główną zaletą jest brak potrzeby jakiegokolwiek uwierzytelniania, jeśli ktoś potrzebuje więcej, to istnieje np. ghorg.

[1] Ogólnie jest to serwis godny rozważenia, choć community o wiele mniejsze.
[1] Uwaga, najpierw jest usuwana cała zawartość katalogu o takiej nazwie, jeśli istnieje!
[2] No dobra, sprawdziłem, wystarczy dodać obsługę PAT (personal access token) i stosownie skonfigurować ich uprawnienia.

Wrażenia z P.I.W.O. 2025

Zgodnie z informacjami ze strony, samo P.I.W.O. miało 7 lat przerwy. Dla mnie ta przerwa była dłuższa, bo jeśli wierzyć notkom, ostatnio byłem na tej imprezie trzynaście lat temu. I pewnie tak było, choć nie pamiętam czemu. Kolizja terminów jakaś? Zapewne tak.

Jednak w tym roku dotarłem. I od razu powiem, że nie żałuję. Trochę się pozmieniało w stosunku do tego, co zapamiętałem z poprzednich edycji, muszę przyznać. Jakby większa impreza się zrobiła. Przede wszystkim, były dwie równoległe ścieżki. Czyli z rozmachem, bo z tego co pamiętam kiedyś była tylko jedna ścieżka. Sporo przyjezdnych, nie tylko ludzie z Poznania – czyli znowu, większa impreza. Podobno było niemal dwustu uczestników i choć nie mam danych z poprzednich edycji, to też wydaje mi się, że więcej. Sale, choć duże i dwie, nie sprawiały wrażenia pustych.

Organizacyjnie dobrze, mimo zmiany miejscówki w ostatniej chwili. Dobra strona z agendą. Lekkie problemy ze sprzętem (raczej dotyczyły streamingu), trochę za bardzo dmuchająca klima w jednej sali[1], lekki poślizg na początku, ale – poza tym – OK. No właśnie, był streaming na żywo, więc jeśli ktoś nie mógł dotrzeć, to mógł oglądać. Kolejna zmiana – kiedyś tego nie było. Było też LAN party, ale zupełnie odpuściłem.

Wykłady o bardzo różnej tematyce. Nie miałem oczekiwań w stosunku do tematów i raczej chodziłem na te „dalsze” tematycznie, żeby posłuchać o czymś nowym. Trochę nowego softu i rozwiązań poznałem. Liczę, że będą nagrania, pewnie będę musiał nadrobić. Duże wrażenie zrobiły na mnie lightning talks – niesamowita dawka energii, duże zaangażowanie.

Z obserwacji wysokopoziomowych: mało było o systemach operacyjnych, więcej o sofcie. Rust zyskuje popularność. Tematy raczej zaawansowane/geekowe/niszowe.

Był quiz, tym razem aż 4 błędy na 30 pytań, więc bez nagrody.

Po jednym z wykładów ciekawa – choć IMHO niezbyt optymistyczna – rozmowa o tym, jak kiedyś zamknięte oprogramowanie, prawa autorskie, patenty, planowane postarzanie, a w końcu model subskrybcyjny na wszystko służą do zwiększania zysku korporacji, kosztem ograniczania praw ludzi. Pewnie temat na dłuższą notkę, która nigdy nie powstanie.

Fun i ciekawostki: pierwsze zdanie ze sceny to „przepraszam za Windowsa” i faktycznie jeden z komputerów na których były prezentacje działał pod kontrolą Windows. Tegoroczne P.I.W.O. można było od biedy pomylić ze zlotem użytkowników Mastodona – już w drodze widziałem, że na wydarzeniu meldują się kolejne osoby. Była więc okazja do dewirtualizacji, choć nie ze wszystkimi udało się zbić piątkę. Może za rok? Bo mam nadzieję, że będzie, super impreza.

[1] Początkowo myślałem, że niefortunnie siadłem, ale później słyszałem, że ktoś narzekał, że zimno w sali. Nie wiem czy organizatorzy mieli w ogóle wpływ na to.

Dostęp tymczasowy

Zaczęło się niewinnie, bo od obrazkowego komentarza. Kumpel DJ pochwalił się w firmie, że okazyjnie kupił mixer, więc jako komentarz poleciała od razu stosowna scena z filmu Nienawiść (La Heine):

DJ scene La Heine

Fanem francuskiego hip-hopu/rapu nie jestem, ale… jest trochę kawałków, które doceniam. Albo wręcz lubię. Przypomniało mi się, że całkiem niedawno odkryłem pewien godny uwagi kawałek i chciałem się nim podzielić.

Tylko był „drobny” problem – nie pamiętałem ani tytułu, ani wykonawcy. Co gorsza, zupełnie nie kojarzyłem, kiedy go ostatnio słyszałem na liście na Spotify. Więc się nie podzieliłem.

Jednak nie dawało mi to spokoju. Stwierdziłem, że może dodałem go jeszcze w Tidalu, a migracja playlisty ciągle czeka, podobnie jak wpis na ten temat, więc może jest tam? Zalogowałem się na Tidal i… zaczęło się przeglądanie.

Mam tam ponad pięćset utworów w jednym worku. Niby jest chronologiczna kolejność dodawania do listy, ale jakoś nie kojarzyłem, kiedy dokładnie dodałem ten utwór. W trakcie przeglądania zwróciłem uwagę na coś innego. Niektóre utwory były oznaczone innym kolorem. I nie dawały się odtworzyć. Początkowo sądziłem, że to jakiś problem techniczny, konieczność załadowania z wolniejszego storage albo covery, które w jakiś sposób łamią prawa autorskie, bo dotyczyło to raczej niszowych utworów.

Jednak nie. To samo dotyczyło oryginalnych utworów pewnych, zupełnie nie niszowych, wykonawców. I – z tego co zaobserwowałem – raczej właśnie całej twórczości artysty, a nie poszczególnych kawałków. Czyli w Tidal mamy dokładnie tę samą sytuację, co np. w Netflix: płacimy jedynie za możliwość korzystania z platformy w danym okresie czasu. Nie kupujemy dostępu do konkretnej treści. Nie mamy żadnej gwarancji, że za parę miesięcy będziemy mogli posłuchać naszych ulubionych utworów. Ani że nasze playlisty będą takie, jakimi je stworzyliśmy[1].

W przypadku filmów powiedzmy, że istnieją jakieś przesłanki techniczne, żeby ograniczać ilość contentu. Jednak muzyka jest znacznie mniejsza. Licząc na bogato 5MB na utwór, tysiąc kawałków to raptem 5 GB. Wrzucam to na telefon – o komputerze nie wspominając – i nawet nie zauważam zużycia miejsca…

Oczywiście nie chodzi o przyczyny techniczne. I nie powinienem być zaskoczony. Artysta zerwał umowę z platformą, więc utwory nie są dostępne, proste. Ale jestem zaskoczony, bo o ile filmy nie są „legalnie” dostępne wszędzie, w tym na największym pirackim portalu, to muzyka jak najbardziej dostępna jest. Czyli mamy paradoksalną sytuację, że płacąc nie dostaniemy dostępu do rzeczy, które są dostępne za darmo.

Czy coś w związku z tym zamierzam zrobić? Z płatnych platform nie zrezygnuję, bo jestem na doczepkę, z rodziną, a pod wieloma względami są wygodne. Ale zapewne zacznę zbierać muzykę offline. Przynajmniej to, co trafia do ulubionych na platformach streamingowych. Niekoniecznie na żywo, ale okresowa synchronizacja, raz na kwartał – czemu nie?

Na pewno motywuje mnie to też do uruchomienia – w końcu – self hosted storage. Pewnie jakiś Nextcloud. Zresztą, w przypadku muzyki mówimy o ilościach danych, które mieszczą się na darmowych dyskach webowych – zwykle dostępne jest 10-20GB za darmo.

Utwór, którego szukałem, ostatecznie znalazłem. Po prostu przypomniałem sobie tytuł na tyle, że wpisanie w wyszukiwarkę pozwoliło go znaleźć. Okazało się, że przeoczyłem go na liście w Tidalu, choć był chronologicznie dokładnie tam, gdzie się go spodziewałem.

La Rage – Keny Arkana

Cloud is fraud!

[1] Tzn. playlisty będą istniały w oryginalnej, tylko nie będzie można ich odtworzyć w pierwotnej formie, bo nie będzie „wsadu”.