Uživatelské nástroje

Nástroje pro tento web


navody:distribuce:guix

Toto je starší verze dokumentu!


GNU Guix System

GNU Guix System je distribuce, ve které se systém, služby a balíčky popisují deklarativně v jazyce Guile Scheme. Podobně jako NixOS vytváří při změnách nové generace systému, ke kterým se můžeš vrátit.

Jak funguje šablona

Šablona vpsFree obsahuje minimální Guix System s OpenSSH a dvěma soubory:

  • /etc/config/system.scm je tvoje hlavní konfigurace systému;
  • /etc/config/vpsadminos.scm zajišťuje běh Guixu v kontejneru vpsAdminOS.

system.scm načítá modul vpsadminos z druhého souboru. Toto propojení zachovej: definuje kontejnerový bootloader, souborové systémy a službu, která při startu spouští síťovou konfiguraci vytvořenou vpsAdminOS. Aktuální podobu obou souborů najdeš v adresáři šablony pro Guix v repozitáři vpsAdminOS.

Jádro spravuje vpsAdminOS, proto do konfigurace nepřidávej vlastní linuxový kernel ani běžný bootloader pro fyzický stroj.

Úprava konfigurace

Nejdřív uprav /etc/config/system.scm. Můžeš změnit například hostname, balíčky a seznam služeb. Strukturu %ct-services, %ct-file-systems a %ct-bootloader ponech z modulu vpsadminos.

Konfiguraci aktivuj jako root:

#!/usr/bin/env bash
set -eo pipefail
 
# Použij revizi Guixu, která sestavila aktivní systémovou generaci.
export GUIX_PROFILE=/run/current-system/profile
# shellcheck disable=SC1091
. "$GUIX_PROFILE/etc/profile"
hash guix
 
test -r /etc/config/system.scm
test -r /etc/config/vpsadminos.scm
test -r /run/current-system/channels.scm
guix time-machine -C /run/current-system/channels.scm -- \
  system reconfigure -L /etc/config /etc/config/system.scm

guix time-machine použije kanály zaznamenané v aktivní generaci, takže reconfigure nezávisí na pozdějších změnách historie kanálů. Přepínač -L /etc/config zpřístupní modul vpsadminos. Příkaz sestaví a rovnou aktivuje novou generaci. Před odhlášením ověř, že běží SSH a služby, které potřebuješ. Podrobnosti popisují manuály k guix time-machine a guix system.

Aktualizace Guixu

Ukázka výše vybere revizi Guixu a kanály, které sestavily právě aktivní systémovou generaci. Reconfigure proto nevyžaduje před každou změnou guix pull a opakované nasazení zůstává předvídatelné.

Když chceš Guix záměrně aktualizovat, nejdřív si pomocí guix describe zaznamenej současné kanály. Potom spusť guix pull, načti aktualizovaný profil podle pokynů příkazu a znovu proveď reconfigure. Před změnou si přečti novinky a počítej s tím, že sestavení může trvat déle a potřebovat více paměti a místa. Práci s kanály a připnutými revizemi vysvětluje manuál ke kanálům.

Síť a SSH

Síť nenastavuj pomocí static-networking-service-type. vpsAdminOS při každém startu vytvoří /ifcfg.add podle aktuálních adres a služba vpsadminos-networking jej spustí. Vlastní síťové služby přidávej až nad tuto vrstvu.

Výchozí šablona kvůli pohodlnému prvnímu přihlášení povoluje SSH pro root. Po zprovoznění klíčů můžeš přihlášení zpřísnit podle návodu SSH.

Nasazení pomocí guix deploy

Pokud spravuješ více Guix VPS, můžeš jejich konfigurace držet na jednom řídicím Guix systému a nasazovat je pomocí guix deploy. Následující úplná konfigurace je výchozí bod pro jednu VPS. Ty spravuješ jen deploy.scm; kontejnerové detaily se dál načítají z udržovaného modulu /etc/config/vpsadminos.scm.

Na řídicím systému potřebuješ SSH klíč /root/.ssh/id_ed25519 a jeho veřejnou část musíš před prvním nasazením přidat uživateli root na cílové VPS. Přihlášení klíčem nejdřív vyzkoušej. Na cílové VPS spusť cat /etc/ssh/ssh_host_ed25519_key.pub a otisk získaného klíče ověř podle návodu pro SSH. Do konfigurace patří celý řádek začínající ssh-ed25519, ne jen otisk.

Ulož tuto konfiguraci jako /etc/config/deploy.scm na řídicím systému a nahraď adresu a hostitelský klíč cílové VPS:

;; Načti udržovanou integraci kontejnerů vpsAdminOS.
(add-to-load-path "/etc/config")
(use-modules (vpsadminos)
             (gnu)
             (gnu machine)
             (gnu machine ssh)
             (gnu services base))
(use-package-modules nss ssh)
(use-service-modules ssh)
 
;; Tyto soubory se nacházejí na stroji, ze kterého spouštíš guix deploy.
(define %controller-signing-key
  (local-file "/etc/guix/signing-key.pub"))
(define %root-ssh-key
  (local-file "/root/.ssh/id_ed25519.pub"))
 
(define %system
  (operating-system
    (host-name "guix-target")
    (timezone "Etc/UTC")
    (locale "en_US.utf8")
    (firmware '())
    (initrd-modules '())
    (kernel %ct-dummy-kernel)
 
    (packages (cons* nss-certs
                     %base-packages))
 
    (essential-services
     (modify-services
         (operating-system-default-essential-services this-operating-system)
       (delete firmware-service-type)
       (delete (service-kind %linux-bare-metal-service))))
 
    (bootloader %ct-bootloader)
    (file-systems %ct-file-systems)
 
    (services
     (cons* (service openssh-service-type
                     (openssh-configuration
                      (openssh openssh-sans-x)
                      (permit-root-login 'prohibit-password)
                      (password-authentication? #f)
                      (authorized-keys
                       `(("root" ,%root-ssh-key)))))
            (simple-service 'controller-signing-key
                            guix-service-type
                            (guix-extension
                             (authorized-keys
                              (list %controller-signing-key))))
            %ct-services))))
 
(define %machine
  (machine
    (operating-system %system)
    (environment managed-host-environment-type)
    (configuration
     (machine-ssh-configuration
      ;; Nahraď adresu a hostitelský klíč údaji cílové VPS.
      (host-name "192.0.2.3")
      (system "x86_64-linux")
      (user "root")
      (identity "/root/.ssh/id_ed25519")
      (host-key "ssh-ed25519 REPLACE_WITH_TARGET_HOST_KEY")
      (authorize? #t)
      (allow-downgrades? #f)
      ;; vpsAdminOS poskytuje jádro a používá zástupný kořen /dev/null.
      ;; Guix proto nemůže provést kontroly souborového systému a initrd určené pro fyzický stroj.
      (safety-checks? #f)))))
 
(list %machine)

Nejdřív konfiguraci načti bez nasazení příkazem guix time-machine -C /run/current-system/channels.scm – deploy -L /etc/config /etc/config/deploy.scm –dry-run. Potom spusť stejný příkaz bez –dry-run. První nasazení automaticky autorizuje podpisový klíč řídicího systému na cíli a deklarace jej zachová i v nové generaci.

Konfigurace úmyslně povoluje pro root jen přihlášení klíčem a ověřuje hostitelský klíč cíle. Nastavení safety-checks? #f vypíná kontroly fyzických souborových systémů a modulů initrd, které v kontejneru nedávají smysl: vpsAdminOS poskytuje jádro a integrační modul používá pomocný kořenový systém /dev/null, který současný Guix neumí zkontrolovat. Ochrana před downgradem zůstává zapnutá. Pokud nasazení selže, oprav jeho příčinu místo povolení allow-downgrades?.

Generace a obnova

Generace zobrazíš příkazem guix system list-generations. Před odstraněním starých generací ověř, že je nový systém funkční. Příkazy pro návrat a práci s generacemi popisuje manuál Guixu.

Pokud nová konfigurace nenaběhne nebo ztratíš SSH, postupuj podle návodu pro vzdálenou konzoli. Obnovení starší generace Guixu popisuje návod ke start menu vpsAdminOS. Konfiguraci pak oprav a znovu spusť reconfigure.

navody/distribuce/guix.1786964963.txt.gz · Poslední úprava: autor: aither