Przestawienie systemów Guix na własne kopie kanałów
ŹRÓDŁO Ustaliłem, że dla własnego pożytku potrzebuję zainstalować na moim serwerze publiczne kopie repozytoriów kanałów Guix używanych na moich systemach.
ŹRÓDŁO Przygotowałem już te publiczne kopie repozytoriów na serwerze Gitolite. Są one osiągalne przez protokoły SSH oraz HTTPS.
ŹRÓDŁO
Domyślnie guix pull
pobiera i instaluje Guix z kanonicznego repozytorium GNU Guix.
Zachowanie tego polecenia można zmienić dostarczając zbiór kanałów do pobrania.
Kanał jest obiektem wskazującym URL i gałąź repozytorium Git do instalacji.
ŹRÓDŁO
Istnieją dwa miejsca na deklarację listy kanałów w konfiguracji usługi guix-daemon
.
Ani podręcznik Guix, ani ręczne eksperymenty nie wystarczają aby ustalić jakie są między nimi różnice i cele.
W obu z nich będę deklarować tę samą listę kanałów.
DO ZROBIENIA
Pisząc ten wpis uświadomiłem sobie, że można wykorzystać protokół SSH do zabezpieczenia zawartości kanału deployment
.
Dodanie guix-for-channels
do konfiguracji systemów
Dowiedziałem się o istnieniu procedury guix-for-channels
dla pola guix
w guix-configuration
dopiero w trakcie przygotowywania tego wpisu dziennika.
Zanim wprowadzę zmiany dotyczące publicznych kopii repozytoriów, modernizuję moją dotychczasową konfigurację, aby wypełniała oba pola (channels
i guix
) tą samą, dotychczasową listą kanałów.
(define (guix configuration)
(gnu:services:base:guix-configuration
(inherit configuration)
(guix (gnu:packages:package-management:guix-for-channels sovereign:channels:default-channels))
(authorized-keys sovereign:channels:default-authorized-guix-keys)
(substitute-urls sovereign:channels:default-substitute-urls)
(channels sovereign:channels:default-channels)
(discover? #t)
(extra-options (list "--cores=1"
"--gc-keep-derivations=yes"
"--gc-keep-outputs=yes"))))
Sytuacja zewnętrzna wymusiła na mnie przypięcie wersji kanałów.
Pomijając problemy sytuacyjne, które opóźniły to sprawdzenie o cały dzień, sama implementacja tej konfiguracji jest prawidłowa.
Przestawienie adresów kanałów na prywatne kopie
Podmiana adresów jest operacją trywialną.
(define-public default-guix-channel
(guix:channels:channel
(inherit guix:channels:%default-guix-channel)
(url "https://git.marekpasnikowski.pl/git/guix.git")))
(define-public guix-rust-past-crates
(let
( (l-fingerprint (guix:channels:openpgp-fingerprint "F4C2D1DF3FDEEA63D1D30776ACC66D09CA528292")))
(guix:channels:channel
(name 'guix-rust-past-crates)
(url "https://git.marekpasnikowski.pl/git/guix-rust-past-crates.git")
(branch "trunk")
(introduction (guix:channels:make-channel-introduction "1db24ca92c28255b28076792b93d533eabb3dc6a"
l-fingerprint)))))
(define-public nonguix-channel
(let
( (l-fingerprint (guix:channels:openpgp-fingerprint "2A39 3FFF 68F4 EF7A 3D29 12AF 6F51 20A0 22FB B2D5")))
(guix:channels:channel
(name 'nonguix)
(url "https://git.marekpasnikowski.pl/git/nonguix.git")
(introduction (guix:channels:make-channel-introduction "897c1a470da759236cc11798f4e0a5f7d4d59fbc"
l-fingerprint)))))
Przy okazji pamiętam aby odpiąć wersje kanałów, oraz aby zapewnić te same wersje repozytoriów w moich kopiach. Celem nie jest aktualizacja oprogramawania, a jedynie wygenerowanie nowej listy kanałów w konfiguracjach moich systemów.
DO ZROBIENIA
Implementacja tej zmiany jest prawidłowa.
Zauważyłem natomiast, że kanał guix
podlega ponownej indeksacji i uwierzytelnianiu po użyciu guix pull
poprzedzonego przez testowe guix system reconfigure
.
Sugeruje to, że kanały z pola channels
są powielone w strukturze utworzonej przez pole guix
.
Ja nie mam na to wpływu, więc na razie pogodzę się z tym podwojeniem ilości danych.
W przyszłości powinienem zainteresować się, jak zoptymalizować list kanałów.
Zgodnie z przewidywaniami, nie musiałem instalować żadnej nowej wersji programów, co znaczy że wersje kanałów zgadzają się ze stanem początkowym.