Ź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.