Własna kopia kanału Guix
Postanowiłem przejąć kontrolę nad wersją repozytorium Guix, aby proces aktualizacji systemów Guix był maksymalnie skuteczny. Moim zmartwieniem jest stałe ryzyko, że pomiędzy czasem zbudowania zamienników na stacji roboczej i czasem wydania polecenia aktualizacji na innym systemie może nastąpić istotna zmiana wymagająca kolejnej przebudowy na stacji roboczej.
Źródłem tego problemu jest brak systemu dyskretnych wersji w źródłowym repozytorium Guix. Na potrzeby mojego systemu aktualizacji systemów potrzebna jest taka dyskretna synchronizacja wersji.
Moim rozwiązaniem jest serwowanie własnej kopii repozytorium Guix. Wystarczy nie aktualizować tej kopii repozytorium w czasie aktualizacji systemów, aby zagwarantować synchronizację wersji.
Analogicznie, powinieniem przygotować podobne kopie repozytoriów pozostałych zewnętrznych kanałów na których polegam. Dzięki temu będę w stanie uniknąć wszystkich problemów związanych z nieprawidłową synchronizacją wersji.
Kopie repozytoriów
Kanały Guix są oparte o repozytoria Git. Domyślnie systemy Guix wykorzystują oryginalne repozytoria. Jeśli te systemy nie konfigurują docelowej wersji tych repozytoriów, dochodzi do wspomnianych na początku problemów desynchronizacji wersji. Lepszym rozwiązaniem jest wykorzystanie własnych kopii tych repozytoriów.
Konfiguracja wersji repozytoriów jest teoretycznym rozwiązaniem. W praktyce nie sprawdza się ze wględu na konieczność codziennej zmiany wersji i podwójnej rekonfiguracji systemów.
ZROBIONE Serwowanie własnych kopii repozytoriów pozwala na ręczne sterowanie ich wersją. Wystarczy raz ściągnąć nowszą wersję oryginalnego repozytorium do własnej kopii i nie ruszać tego stanu do momentu kolejnej aktualizacji systemu. Dzięki temu wszystkie uaktualniane systemy wykorzystują tę samą wersję repozytoriów i w konsekwencji te same zamienniki.
Konfiguracja systemów
Do osiągnięcia zamierzonego celu nie wystarczy tylko skopiować repozytoriów — należy je wykorzystać.
ZROBIONE Kolejnym koniecznym krokiem jest więc wymiana skonfigurowanych łączy do kanałów w definicjach konfiguracji systemów na własne.
Doprecyzowanie kontroli wersji repozytoriów
Na tym etapie można już zaprzestać dalszej pracy. Istota problemu jest rozwiązana.
DO ZROBIENIA Jednym usprawnieniem jest wypracowanie algorytmu wyboru konkretnej zmiany w repozytoriach. W praktyce ma niewielkie znaczenie, ale doprecyzowanie szczegółów może okazać się przydatne w nieprzewidzianych sytuacjach.
Automatyzacja procesu uaktualnienia
Cały proces aktualizacji, zarówno po stronie repozytoriów, jak i systemów Guix można zautomatyzować i zintegrować tak, aby wszystkie czynności można było wykonać jednym programem.
DO ZROBIENIA Przy implementacji takiego programu obok wprowadzania globalnych zmian ważne jest też lokalne testowanie zmian, aby upewnić się, że nowe wersje repozytoriów dają kod który daje się zbudować bez błędów.