Obsah

NixOS Impermanence

Tato stránka popisuje použití modulu NixOS Impermanence na vpsFree.cz. Podporujeme impermanence s kořenovým souborovým systémem v dočasném ZFS datasetu, který poskytuje naše platforma. Je nutné přesunout Nix store do subdatasetu, což lze automaticky provést použitím OS šablony pro impermanence nebo to nastavit manuálně.

Upozorňujeme, že při zapnutí impermanence bude kořenový souborový systém skutečně dočasný a jeho data se při každém startu VPS resetují. Tento dočasný dataset také není zálohován. Dávejte pozor, kde ukládáte svá data. Pokud nejsou na trvalém úložišti, budou ztracena.

Použití OS šablony

vpsAdmin obsahuje OS šablony, kde je modul impermanence předkonfigurován. Při vytváření nové VPS vyberte odpovídající šablonu (v názvu je uvedeno impermanence). Nový VPS bude mít /nix vyčleněný do subdatasetu. Root dataset bude připojen na /persistent a počáteční konfigurace impermanence bude nastavena, viz /etc/nixos/configuration.nix. Kopie modulu impermanence je uložena v /etc/nixos/impermanence, můžete ji aktualizovat na nejnovější verzi, např. naklonováním git repozitáře na stejné místo:

cd /etc/nixos
rm -rf impermanence
git clone https://github.com/nix-community/impermanence

Upozorňujeme, že přeinstalace VPS nebude účinná, protože přeinstalace změní pouze root dataset. Nix store se nepřesune, pokud je již v subdatasetu. Ze stejného důvodu nemůžete pomocí přeinstalace převést existující VPS na impermanence. OS šablona automaticky nakonfiguruje VPS pouze při jeho vytvoření. Viz manuální konfigurace pokud chcete zapnout impermanence na stávající VPS.

Manuální konfigurace

1. Vytvoření NixOS VPS

Vytvořte nový VPS a nechte ho spustit. Můžete také použít svůj stávající NixOS VPS.

2. Spuštění VPS v rescue módu

V detailu VPS použijte formulář Boot VPS from template (rescue mode). Nejlepší je vybrat jinou distribuci než NixOS, aby zde nebyl adresář /nix. Použijte např. Alpine nebo Debian.

3. Vytvoření VPS subdatasetu pro Nix store

V detailu VPS vytvořte subdataset nix, který bude připojen na /nix (proto jsme v předchozím kroku nechtěli bootovat do NixOS). Možná budete muset uvolnit nějaké místo na disku, abyste mohli vytvořit dataset, což lze provést zmenšením root datasetu.

4. Přesun Nix store do subdatasetu

Přihlaste se do VPS v rescue módu, buď přes SSH, nebo použijte vzdálenou konzoli. Root dataset je připojen na /mnt/vps a náš nový subdataset nix je připojen na /nix. Chceme přesunout Nix store z root datasetu do subdatasetu.

mv /mnt/vps/nix/* /nix/

5. Připojení root datasetu do /persistent

V režimu impermanence bude váš kořenový souborový systém dočasný a při každém startu vymazán. Naše trvalé úložiště připojíme do /persistent. Může to být root dataset, nebo můžete vytvořit další subdataset pro tento účel. Zde použijeme root dataset. V detailu VPS klikněte na odkaz Mount u prvního uvedeného datasetu (jeho název je ID VPS) a připojte ho do /persistent.

6. Restart VPS

Nyní restartujte VPS, čímž opustíte rescue mód.

7. Úprava konfigurace a přidání modulu impermanence

Naklonujte repozitář modulu impermanence do /etc/nixos. To vyžaduje git, pokud ho nemáte v systému, můžete použít např. nix-shell -p git.

cd /etc/nixos
git clone https://github.com/nix-community/impermanence.git

Upravte svou konfiguraci a přidejte modul impermanence:

/etc/nixos/configuration.nix
{ config, ... }:
{
  imports = [
    ./impermanence/nixos.nix
  ];
 
  environment.persistence."/persistent" = {
    hideMounts = true;
    directories = [
      "/etc/nixos"
      "/var/log"
      "/var/lib/nixos"
    ];
    files = [
      "/etc/machine-id"
    ];
  };
}

Upozorňujeme, že /persistent musí odpovídat mountpointu datasetu, ale můžete si zvolit libovolný název. Datasety budou připojeny prostřednictvím vpsAdminOS, takže není nutné konfigurovat položky fileSystems.

Až budete hotovi, nasaďte novou konfiguraci pro další restart:

nixos-rebuild boot

8. Zapnutí funkce impermanence

V detailu VPS ve formuláři Features zapněte funkci NixOS Impermanence. To nakonfiguruje VPS tak, aby byl spuštěna s čistým, dočasným datasetem. Jeho obsah bude při každém restartu ztracen a není zálohován. Zapnutí této funkce způsobí restart VPS do konfigurace, kterou jsme připravili v kroku 7.

Uvnitř VPS můžete zkontrolovat připojené souborové systémy:

root@nixos:/# df -hT | grep zfs
tank/ct/11327.impermanence-c5a8b7 zfs     10G  768K   10G   1% /
tank/ct/11327/nix                 zfs     20G  1.1G   19G   6% /nix
tank/ct/11327                     zfs    100G  7.7M  120G   1% /persistent

/ je založeno na dočasném datasetu, 11327 se používá pro /persistent a 11327/nix obsahuje Nix store.