diff --git a/docs/Getting Started/Alpine Linux/Root on ZFS/2-system-installation.rst b/docs/Getting Started/Alpine Linux/Root on ZFS/2-system-installation.rst index 87ec54d..4c6a4ea 100644 --- a/docs/Getting Started/Alpine Linux/Root on ZFS/2-system-installation.rst +++ b/docs/Getting Started/Alpine Linux/Root on ZFS/2-system-installation.rst @@ -40,23 +40,18 @@ System Installation #. Create boot pool:: - tee -a /root/grub2 <`__. diff --git a/docs/Getting Started/Alpine Linux/index.rst b/docs/Getting Started/Alpine Linux/index.rst index cd51b0b..86b4435 100644 --- a/docs/Getting Started/Alpine Linux/index.rst +++ b/docs/Getting Started/Alpine Linux/index.rst @@ -26,7 +26,7 @@ see below. Root on ZFS ----------- -ZFS can be used as root file system for Fedora. +ZFS can be used as root file system for Alpine Linux. An installation guide is available. Start from "Preparation". diff --git a/docs/Getting Started/Arch Linux/Root on ZFS/1-preparation.rst b/docs/Getting Started/Arch Linux/Root on ZFS/1-preparation.rst index 0f805f7..d0f2c14 100644 --- a/docs/Getting Started/Arch Linux/Root on ZFS/1-preparation.rst +++ b/docs/Getting Started/Arch Linux/Root on ZFS/1-preparation.rst @@ -76,7 +76,8 @@ Preparation * https://archzfs.com/archive_archzfs/ * https://archzfs.com/archzfs/x86_64/ - :: + Such as:: + curl -L https://archzfs.com/archive_archzfs/ \ | grep zfs-linux-[0-9] \ | grep -v src.tar \ @@ -87,15 +88,13 @@ Preparation #. Find compatible zfs-utils package: - Search ZFS version string (e.g. 2.1.5) in both pages above. + Search ZFS version string (e.g. 2.1.5) in both pages above:: - :: curl -L https://archzfs.com/archzfs/x86_64/ \ | grep zfs-utils-2.1.5 \ | grep -v src.tar # ...... - Result: https/.../archzfs/x86_64/zfs-utils-2.1.5-2-x86_64.pkg.tar.zst #. Download both then install:: diff --git a/docs/Getting Started/Arch Linux/Root on ZFS/2-system-installation.rst b/docs/Getting Started/Arch Linux/Root on ZFS/2-system-installation.rst index 84e5a36..3d12314 100644 --- a/docs/Getting Started/Arch Linux/Root on ZFS/2-system-installation.rst +++ b/docs/Getting Started/Arch Linux/Root on ZFS/2-system-installation.rst @@ -122,11 +122,11 @@ System Installation Create system datasets, let Archlinux declaratively manage mountpoints with ``mountpoint=legacy``:: - zfs create -o mountpoint=legacy rpool/archlinux/root - mount -t zfs rpool/archlinux/root /mnt/ + zfs create -o mountpoint=/ -o canmount=noauto rpool/archlinux/root + zfs mount rpool/archlinux/root zfs create -o mountpoint=legacy rpool/archlinux/home mkdir /mnt/home - mount -t zfs rpool/archlinux/home /mnt/home + mount -t zfs rpool/archlinux/home /mnt/home zfs create -o mountpoint=legacy rpool/archlinux/var zfs create -o mountpoint=legacy rpool/archlinux/var/lib zfs create -o mountpoint=legacy rpool/archlinux/var/log @@ -134,17 +134,10 @@ System Installation zfs create -o mountpoint=legacy bpool/archlinux/root mkdir /mnt/boot mount -t zfs bpool/archlinux/root /mnt/boot - -#. zfs-mkinitcpio requires root dataset to have a mountpoint - other than legacy:: - - umount -Rl /mnt - zfs set canmount=noauto rpool/archlinux/root - zfs set mountpoint=/ rpool/archlinux/root - mount -t zfs -o zfsutil rpool/archlinux/root /mnt - mount -t zfs rpool/archlinux/home /mnt/home - mount -t zfs bpool/archlinux/root /mnt/boot - + mkdir -p /mnt/var/log + mkdir -p /mnt/var/lib + mount -t zfs rpool/archlinux/var/lib /mnt/var/lib + mount -t zfs rpool/archlinux/var/log /mnt/var/log #. Format and mount ESP:: diff --git a/docs/Getting Started/Arch Linux/Root on ZFS/3-system-configuration.rst b/docs/Getting Started/Arch Linux/Root on ZFS/3-system-configuration.rst index e52ba34..64d780a 100644 --- a/docs/Getting Started/Arch Linux/Root on ZFS/3-system-configuration.rst +++ b/docs/Getting Started/Arch Linux/Root on ZFS/3-system-configuration.rst @@ -8,10 +8,6 @@ System Configuration #. Generate fstab:: - mkdir -p /mnt/var/log - mkdir -p /mnt/var/lib - mount -t zfs rpool/archlinux/var/lib /mnt/var/lib - mount -t zfs rpool/archlinux/var/log /mnt/var/log mkdir -p /mnt/etc/ genfstab -t PARTUUID /mnt | grep -v swap > /mnt/etc/fstab sed -i "s|vfat.*rw|vfat rw,x-systemd.idle-timeout=1min,x-systemd.automount,noauto,nofail|" /mnt/etc/fstab diff --git a/docs/Getting Started/Fedora/Root on ZFS/2-system-installation.rst b/docs/Getting Started/Fedora/Root on ZFS/2-system-installation.rst index 39d9b5a..b201cbc 100644 --- a/docs/Getting Started/Fedora/Root on ZFS/2-system-installation.rst +++ b/docs/Getting Started/Fedora/Root on ZFS/2-system-installation.rst @@ -122,11 +122,11 @@ System Installation Create system datasets, let Fedora declaratively manage mountpoints with ``mountpoint=legacy``:: - zfs create -o mountpoint=legacy rpool/fedora/root - mount -t zfs rpool/fedora/root /mnt/ + zfs create -o mountpoint=/ -o canmount=noauto rpool/fedora/root + zfs mount rpool/fedora/root zfs create -o mountpoint=legacy rpool/fedora/home mkdir /mnt/home - mount -t zfs rpool/fedora/home /mnt/home + mount -t zfs rpool/fedora/home /mnt/home zfs create -o mountpoint=legacy rpool/fedora/var zfs create -o mountpoint=legacy rpool/fedora/var/lib zfs create -o mountpoint=legacy rpool/fedora/var/log @@ -134,17 +134,10 @@ System Installation zfs create -o mountpoint=legacy bpool/fedora/root mkdir /mnt/boot mount -t zfs bpool/fedora/root /mnt/boot - -#. zfs-dracut requires root dataset to have a mountpoint - other than legacy:: - - umount -Rl /mnt - zfs set canmount=noauto rpool/fedora/root - zfs set mountpoint=/ rpool/fedora/root - mount -t zfs -o zfsutil rpool/fedora/root /mnt - mount -t zfs rpool/fedora/home /mnt/home - mount -t zfs bpool/fedora/root /mnt/boot - + mkdir -p /mnt/var/log + mkdir -p /mnt/var/lib + mount -t zfs rpool/fedora/var/lib /mnt/var/lib + mount -t zfs rpool/fedora/var/log /mnt/var/log #. Format and mount ESP:: diff --git a/docs/Getting Started/Fedora/Root on ZFS/3-system-configuration.rst b/docs/Getting Started/Fedora/Root on ZFS/3-system-configuration.rst index 8131d9a..017f5c6 100644 --- a/docs/Getting Started/Fedora/Root on ZFS/3-system-configuration.rst +++ b/docs/Getting Started/Fedora/Root on ZFS/3-system-configuration.rst @@ -9,10 +9,6 @@ System Configuration #. Generate fstab:: - mkdir -p /mnt/var/log - mkdir -p /mnt/var/lib - mount -t zfs rpool/fedora/var/lib /mnt/var/lib - mount -t zfs rpool/fedora/var/log /mnt/var/log mkdir -p /mnt/etc/ genfstab -t PARTUUID /mnt | grep -v swap > /mnt/etc/fstab sed -i "s|vfat.*rw|vfat rw,x-systemd.idle-timeout=1min,x-systemd.automount,noauto,nofail|" /mnt/etc/fstab @@ -35,7 +31,8 @@ System Configuration #. Configure dracut:: - echo 'add_dracutmodules+=" zfs "' > /mnt/etc/dracut.conf.d/zfs.conf + echo 'add_dracutmodules+=" zfs "' >> /mnt/etc/dracut.conf.d/zfs.conf + echo 'forced_drivers+=" zfs "' >> /mnt/etc/dracut.conf.d/zfs.conf if grep mpt3sas /proc/modules; then echo 'forced_drivers+=" mpt3sas "' >> /mnt/etc/dracut.conf.d/zfs.conf fi diff --git a/docs/Getting Started/NixOS/Root on ZFS/1-preparation.rst b/docs/Getting Started/NixOS/Root on ZFS/1-preparation.rst index 311d860..2873e0b 100644 --- a/docs/Getting Started/NixOS/Root on ZFS/1-preparation.rst +++ b/docs/Getting Started/NixOS/Root on ZFS/1-preparation.rst @@ -42,6 +42,9 @@ Preparation INST_PARTSIZE_SWAP=4 + It is recommeneded to set this value higher if your computer has + less than 8GB of memory, otherwise ZFS might fail to build. + Root pool size, use all remaining disk space if not set:: INST_PARTSIZE_RPOOL= diff --git a/docs/Getting Started/NixOS/Root on ZFS/3-system-configuration.rst b/docs/Getting Started/NixOS/Root on ZFS/3-system-configuration.rst index 7bbb28f..6acbd77 100644 --- a/docs/Getting Started/NixOS/Root on ZFS/3-system-configuration.rst +++ b/docs/Getting Started/NixOS/Root on ZFS/3-system-configuration.rst @@ -6,18 +6,25 @@ System Configuration .. contents:: Table of Contents :local: -#. Download system configuration from this repo:: +#. Enter ephemeral nix-shell with git support:: - mkdir -p /mnt/etc/nixos/ - curl -o /mnt/etc/nixos/configuration.nix -L \ - https://github.com/openzfs/openzfs-docs/raw/master/docs/Getting%20Started/NixOS/Root%20on%20ZFS/configuration.nix + mkdir -p /mnt/etc/ + echo DISK=$DISK > ~/disk + + nix-shell -p git + +#. Clone template flake configuration:: + + source ~/disk + git clone https://github.com/ne9z/dotfiles-flake.git /mnt/etc/nixos + git -C /mnt/etc/nixos checkout openzfs-guide #. Customize configuration to your hardware:: for i in $DISK; do sed -i \ - "s|PLACEHOLDER_FOR_DEV_NODE_PATH|\"${i%/*}/\"|" \ - /mnt/etc/nixos/configuration.nix + "s|/dev/disk/by-id/|${i%/*}/|" \ + /mnt/etc/nixos/hosts/exampleHost/default.nix break done @@ -25,11 +32,12 @@ System Configuration for i in $DISK; do diskNames="$diskNames \"${i##*/}\"" done - tee -a /mnt/etc/nixos/machine.nix <`__. - Apply your own hardware configuration in this file, + nmtui + +#. Optional: immutable root filesystem can be enabled by setting + ``my.boot.immutable`` option to ``true``. then execute:: nixos-rebuild boot @@ -161,9 +196,10 @@ replaced with the following procedure. Let the new disk resilver. Check status with ``zpool status``. -#. Update NixOS system configuration:: +#. Update NixOS system configuration and commit changes to git repo:: - sed -i "s|${BAD##*/}|${NEW##*/}|" /etc/nixos/machine.nix + sed -i "s|${BAD##*/}|${NEW##*/}|" /etc/nixos/hosts/exampleHost/default.nix + git -C /etc/nixos commit #. Apply the updated NixOS system configuration, reinstall bootloader, then reboot:: diff --git a/docs/Getting Started/NixOS/Root on ZFS/configuration-immutable.nix b/docs/Getting Started/NixOS/Root on ZFS/configuration-immutable.nix deleted file mode 100644 index 7117306..0000000 --- a/docs/Getting Started/NixOS/Root on ZFS/configuration-immutable.nix +++ /dev/null @@ -1,254 +0,0 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page -# and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, lib, pkgs, modulesPath, ... }: - -let - zfsRoot.partitionScheme = { - biosBoot = "-part5"; - efiBoot = "-part1"; - swap = "-part4"; - bootPool = "-part2"; - rootPool = "-part3"; - }; - zfsRoot.devNodes = PLACEHOLDER_FOR_DEV_NODE_PATH; # MUST have trailing slash! /dev/disk/by-id/ - zfsRoot.bootDevices = (import ./machine.nix).bootDevices; - zfsRoot.mirroredEfi = "/boot/efis/"; - -in { - # adjust according to your platform, such as - imports = [ - # (modulesPath + "/profiles/qemu-guest.nix") - # (modulesPath + "/profiles/all-hardware.nix") - (modulesPath + "/installer/scan/not-detected.nix") - ]; - systemd.services.zfs-mount.enable = false; - - # networking.hostName = "nixos"; # Define your hostname. - # Pick only one of the below networking options. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - # networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. - - # Set your time zone. - # time.timeZone = "Europe/Amsterdam"; - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Select internationalisation properties. - # i18n.defaultLocale = "en_US.UTF-8"; - # console = { - # font = "Lat2-Terminus16"; - # keyMap = "us"; - # useXkbConfig = true; # use xkbOptions in tty. - # }; - - # Configure keymap in X11 - # services.xserver.layout = "us"; - # services.xserver.xkbOptions = { - # "eurosign:e"; - # "caps:escape" # map caps to escape. - # }; - - # Enable CUPS to print documents. - # services.printing.enable = true; - - # Enable sound. - # sound.enable = true; - # hardware.pulseaudio.enable = true; - - # Enable touchpad support (enabled default in most desktopManager). - - # Define a user account. Don't forget to set a password with ‘passwd’. - # users.users.alice = { - # isNormalUser = true; - # extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. - # packages = with pkgs; [ - # firefox - # thunderbird - # ]; - # }; - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; - [ - # vim - ## Do not forget to add an editor to edit configuration.nix! - ## The Nano editor is also installed by default. - # wget - mg - ]; - - # Some programs need SUID wrappers, can be configured further or are - # started in user sessions. - # programs.mtr.enable = true; - # programs.gnupg.agent = { - # enable = true; - # enableSSHSupport = true; - # }; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - services.openssh.enable = false; - users.users.root = { - ##hash: mkpasswd -m SHA-512 -s - initialHashedPassword = PLACEHOLDER_FOR_ROOT_PWD_HASH; - openssh.authorizedKeys.keys = [ - ]; - }; - programs.git.enable = true; - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - # Copy the NixOS configuration file and link it from the resulting system - # (/run/current-system/configuration.nix). This is useful in case you - # accidentally delete configuration.nix. - system.copySystemConfiguration = true; - - # This value determines the NixOS release from which the default - # settings for stateful data, like file locations and database versions - # on your system were taken. It‘s perfectly fine and recommended to leave - # this value at the release version of the first install of this system. - # Before changing this value read the documentation for this option - # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). - system.stateVersion = "22.11"; # Did you read the comment? - - boot.initrd.availableKernelModules = [ - "ahci" - "xhci_pci" - "virtio_pci" - "virtio_blk" - "ehci_pci" - "nvme" - "uas" - "sd_mod" - "sr_mod" - "sdhci_pci" - ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" "kvm-amd" ]; - boot.extraModulePackages = [ ]; - - fileSystems = { - "/" = { - device = "rpool/nixos/empty"; - fsType = "zfs"; - options = [ "X-mount.mkdir" ]; - }; - - "/oldroot" = { - device = "rpool/nixos/root"; - fsType = "zfs"; - options = [ "X-mount.mkdir" ]; - neededForBoot = true; - }; - - "/nix" = { - device = "/oldroot/nix"; - fsType = "none"; - options = [ "bind" "X-mount.mkdir" ]; - }; - - "/etc/nixos" = { - device = "/oldroot/etc/nixos"; - fsType = "none"; - options = [ "bind" "X-mount.mkdir" ]; - }; - - "/home" = { - device = "rpool/nixos/home"; - fsType = "zfs"; - options = [ "X-mount.mkdir" ]; - }; - - "/var/lib" = { - device = "rpool/nixos/var/lib"; - fsType = "zfs"; - options = [ "X-mount.mkdir" ]; - }; - - "/var/log" = { - device = "rpool/nixos/var/log"; - fsType = "zfs"; - options = [ "X-mount.mkdir" ]; - }; - - "/boot" = { - device = "bpool/nixos/root"; - fsType = "zfs"; - options = [ "X-mount.mkdir" ]; - }; - } // (builtins.listToAttrs (map (diskName: { - name = zfsRoot.mirroredEfi + diskName + zfsRoot.partitionScheme.efiBoot; - value = { - device = zfsRoot.devNodes + diskName + zfsRoot.partitionScheme.efiBoot; - fsType = "vfat"; - options = [ - "x-systemd.idle-timeout=1min" - "x-systemd.automount" - "noauto" - "nofail" - ]; - }; - }) zfsRoot.bootDevices)); - - swapDevices = (map (diskName: { - device = zfsRoot.devNodes + diskName + zfsRoot.partitionScheme.swap; - discardPolicy = "both"; - randomEncryption = { - enable = true; - allowDiscards = true; - }; - }) zfsRoot.bootDevices); - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.networkmanager.enable = true; - # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = - lib.mkDefault config.hardware.enableRedistributableFirmware; - hardware.cpu.amd.updateMicrocode = - lib.mkDefault config.hardware.enableRedistributableFirmware; - - - boot.supportedFilesystems = [ "zfs" ]; - networking.hostId = "abcd1234"; - boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages; - boot.loader.efi.efiSysMountPoint = with builtins; - (zfsRoot.mirroredEfi + (head zfsRoot.bootDevices) + zfsRoot.partitionScheme.efiBoot); - boot.zfs.devNodes = zfsRoot.devNodes; - boot.loader.efi.canTouchEfiVariables = false; - boot.loader.generationsDir.copyKernels = true; - boot.loader.grub.efiInstallAsRemovable = true; - boot.loader.grub.enable = true; - boot.loader.grub.version = 2; - boot.loader.grub.copyKernels = true; - boot.loader.grub.efiSupport = true; - boot.loader.grub.zfsSupport = true; - boot.loader.grub.extraInstallCommands = with builtins; - (toString (map (diskName: - "cp -r " + config.boot.loader.efi.efiSysMountPoint + "/EFI" + " " - + zfsRoot.mirroredEfi + diskName + zfsRoot.partitionScheme.efiBoot + "\n") - (tail zfsRoot.bootDevices))); - boot.loader.grub.devices = - (map (diskName: zfsRoot.devNodes + diskName) zfsRoot.bootDevices); - boot.initrd.postDeviceCommands = '' - if ! grep -q zfs_no_rollback /proc/cmdline; then - zpool import -N rpool - zfs rollback -r rpool/nixos/empty@start - zpool export -a - fi - ''; -} - diff --git a/docs/Getting Started/NixOS/Root on ZFS/configuration.nix b/docs/Getting Started/NixOS/Root on ZFS/configuration.nix deleted file mode 100644 index 0f9f50e..0000000 --- a/docs/Getting Started/NixOS/Root on ZFS/configuration.nix +++ /dev/null @@ -1,227 +0,0 @@ -# Edit this configuration file to define what should be installed on -# your system. Help is available in the configuration.nix(5) man page -# and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, lib, pkgs, modulesPath, ... }: - -let - zfsRoot.partitionScheme = { - biosBoot = "-part5"; - efiBoot = "-part1"; - swap = "-part4"; - bootPool = "-part2"; - rootPool = "-part3"; - }; - zfsRoot.devNodes = PLACEHOLDER_FOR_DEV_NODE_PATH; # MUST have trailing slash! /dev/disk/by-id/ - zfsRoot.bootDevices = (import ./machine.nix).bootDevices; - zfsRoot.mirroredEfi = "/boot/efis/"; - -in { - # adjust according to your platform, such as - imports = [ - # (modulesPath + "/profiles/qemu-guest.nix") - # (modulesPath + "/profiles/all-hardware.nix") - (modulesPath + "/installer/scan/not-detected.nix") - ]; - systemd.services.zfs-mount.enable = false; - - # networking.hostName = "nixos"; # Define your hostname. - # Pick only one of the below networking options. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - # networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. - - # Set your time zone. - # time.timeZone = "Europe/Amsterdam"; - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Select internationalisation properties. - # i18n.defaultLocale = "en_US.UTF-8"; - # console = { - # font = "Lat2-Terminus16"; - # keyMap = "us"; - # useXkbConfig = true; # use xkbOptions in tty. - # }; - - # Configure keymap in X11 - # services.xserver.layout = "us"; - # services.xserver.xkbOptions = { - # "eurosign:e"; - # "caps:escape" # map caps to escape. - # }; - - # Enable CUPS to print documents. - # services.printing.enable = true; - - # Enable sound. - # sound.enable = true; - # hardware.pulseaudio.enable = true; - - # Enable touchpad support (enabled default in most desktopManager). - - # Define a user account. Don't forget to set a password with ‘passwd’. - # users.users.alice = { - # isNormalUser = true; - # extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. - # packages = with pkgs; [ - # firefox - # thunderbird - # ]; - # }; - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; - [ - # vim - ## Do not forget to add an editor to edit configuration.nix! - ## The Nano editor is also installed by default. - # wget - mg - ]; - - # Some programs need SUID wrappers, can be configured further or are - # started in user sessions. - # programs.mtr.enable = true; - # programs.gnupg.agent = { - # enable = true; - # enableSSHSupport = true; - # }; - - # List services that you want to enable: - - # Enable the OpenSSH daemon. - services.openssh.enable = false; - users.users.root = { - ##hash: mkpasswd -m SHA-512 -s - initialHashedPassword = PLACEHOLDER_FOR_ROOT_PWD_HASH; - openssh.authorizedKeys.keys = [ - ]; - }; - programs.git.enable = true; - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - # Copy the NixOS configuration file and link it from the resulting system - # (/run/current-system/configuration.nix). This is useful in case you - # accidentally delete configuration.nix. - system.copySystemConfiguration = true; - - # This value determines the NixOS release from which the default - # settings for stateful data, like file locations and database versions - # on your system were taken. It‘s perfectly fine and recommended to leave - # this value at the release version of the first install of this system. - # Before changing this value read the documentation for this option - # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). - system.stateVersion = "22.11"; # Did you read the comment? - - boot.initrd.availableKernelModules = [ - "ahci" - "xhci_pci" - "virtio_pci" - "virtio_blk" - "ehci_pci" - "nvme" - "uas" - "sd_mod" - "sr_mod" - "sdhci_pci" - ]; - boot.initrd.kernelModules = [ ]; - boot.kernelModules = [ "kvm-intel" "kvm-amd" ]; - boot.extraModulePackages = [ ]; - - fileSystems = { - "/" = { - device = "rpool/nixos/root"; - fsType = "zfs"; - options = [ "X-mount.mkdir" ]; - }; - - "/home" = { - device = "rpool/nixos/home"; - fsType = "zfs"; - options = [ "X-mount.mkdir" ]; - }; - - "/var/lib" = { - device = "rpool/nixos/var/lib"; - fsType = "zfs"; - options = [ "X-mount.mkdir" ]; - }; - - "/var/log" = { - device = "rpool/nixos/var/log"; - fsType = "zfs"; - options = [ "X-mount.mkdir" ]; - }; - - "/boot" = { - device = "bpool/nixos/root"; - fsType = "zfs"; - options = [ "X-mount.mkdir" ]; - }; - } // (builtins.listToAttrs (map (diskName: { - name = zfsRoot.mirroredEfi + diskName + zfsRoot.partitionScheme.efiBoot; - value = { - device = zfsRoot.devNodes + diskName + zfsRoot.partitionScheme.efiBoot; - fsType = "vfat"; - options = [ - "x-systemd.idle-timeout=1min" - "x-systemd.automount" - "noauto" - "nofail" - ]; - }; - }) zfsRoot.bootDevices)); - - swapDevices = (map (diskName: { - device = zfsRoot.devNodes + diskName + zfsRoot.partitionScheme.swap; - discardPolicy = "both"; - randomEncryption = { - enable = true; - allowDiscards = true; - }; - }) zfsRoot.bootDevices); - - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.networkmanager.enable = true; - # networking.interfaces.enp1s0.useDHCP = lib.mkDefault true; - - nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - hardware.cpu.intel.updateMicrocode = - lib.mkDefault config.hardware.enableRedistributableFirmware; - hardware.cpu.amd.updateMicrocode = - lib.mkDefault config.hardware.enableRedistributableFirmware; - - boot.supportedFilesystems = [ "zfs" ]; - networking.hostId = "abcd1234"; - boot.kernelPackages = config.boot.zfs.package.latestCompatibleLinuxPackages; - boot.loader.efi.efiSysMountPoint = with builtins; - (zfsRoot.mirroredEfi + (head zfsRoot.bootDevices) + zfsRoot.partitionScheme.efiBoot); - boot.zfs.devNodes = zfsRoot.devNodes; - boot.loader.efi.canTouchEfiVariables = false; - boot.loader.generationsDir.copyKernels = true; - boot.loader.grub.efiInstallAsRemovable = true; - boot.loader.grub.enable = true; - boot.loader.grub.version = 2; - boot.loader.grub.copyKernels = true; - boot.loader.grub.efiSupport = true; - boot.loader.grub.zfsSupport = true; - boot.loader.grub.extraInstallCommands = with builtins; - (toString (map (diskName: - "cp -r " + config.boot.loader.efi.efiSysMountPoint + "/EFI" + " " - + zfsRoot.mirroredEfi + diskName + zfsRoot.partitionScheme.efiBoot + "\n") - (tail zfsRoot.bootDevices))); - boot.loader.grub.devices = - (map (diskName: zfsRoot.devNodes + diskName) zfsRoot.bootDevices); -} - diff --git a/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/1-preparation.rst b/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/1-preparation.rst index 60499dd..59bb405 100644 --- a/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/1-preparation.rst +++ b/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/1-preparation.rst @@ -68,7 +68,7 @@ Preparation #. Install partition tool and arch-install-scripts:: dnf install -y epel-release - dnf install -y gdisk dosfstools arch-install-scripts + dnf install -y gdisk dosfstools cryptsetup dnf download arch-install-scripts rpm -i --nodeps arch-install-scripts*.rpm dnf remove -y epel-release diff --git a/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/2-system-installation.rst b/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/2-system-installation.rst index 1d3a281..1886177 100644 --- a/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/2-system-installation.rst +++ b/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/2-system-installation.rst @@ -122,11 +122,11 @@ System Installation Create system datasets, let Alma declaratively manage mountpoints with ``mountpoint=legacy``:: - zfs create -o mountpoint=legacy rpool/alma/root - mount -t zfs rpool/alma/root /mnt/ + zfs create -o mountpoint=/ -o canmount=noauto rpool/alma/root + zfs mount rpool/alma/root zfs create -o mountpoint=legacy rpool/alma/home mkdir /mnt/home - mount -t zfs -o zfsutil rpool/alma/home /mnt/home + mount -t zfs rpool/alma/home /mnt/home zfs create -o mountpoint=legacy rpool/alma/var zfs create -o mountpoint=legacy rpool/alma/var/lib zfs create -o mountpoint=legacy rpool/alma/var/log @@ -134,16 +134,10 @@ System Installation zfs create -o mountpoint=legacy bpool/alma/root mkdir /mnt/boot mount -t zfs bpool/alma/root /mnt/boot - -#. zfs-dracut requires root dataset to have a mountpoint - other than legacy:: - - umount -Rl /mnt - zfs set canmount=noauto rpool/alma/root - zfs set mountpoint=/ rpool/alma/root - mount -t zfs rpool/alma/root /mnt - mount -t zfs rpool/alma/home /mnt/home - mount -t zfs bpool/alma/root /mnt/boot + mkdir -p /mnt/var/log + mkdir -p /mnt/var/lib + mount -t zfs rpool/alma/var/lib /mnt/var/lib + mount -t zfs rpool/alma/var/log /mnt/var/log #. Format and mount ESP:: @@ -155,17 +149,3 @@ System Installation mkdir -p /mnt/boot/efi mount -t vfat $(echo $DISK | cut -f1 -d\ )-part1 /mnt/boot/efi - -#. Install packages:: - - dnf --installroot=/mnt --releasever=$(source /etc/os-release ; echo $VERSION_ID) -y install \ - @core grub2-efi-x64 grub2-pc-modules grub2-efi-x64-modules shim-x64 efibootmgr kernel - - dnf --installroot=/mnt --releasever=$(source /etc/os-release ; echo $VERSION_ID) -y install \ - https://zfsonlinux.org/epel/zfs-release-2-2$(rpm --eval "%{dist}").noarch.rpm - - dnf config-manager --installroot=/mnt --disable zfs - dnf config-manager --installroot=/mnt --enable zfs-kmod - - dnf --installroot=/mnt --releasever=$(source /etc/os-release ; echo $VERSION_ID) \ - -y install zfs zfs-dracut diff --git a/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/3-system-configuration.rst b/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/3-system-configuration.rst index 15bf1e6..c5411a8 100644 --- a/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/3-system-configuration.rst +++ b/docs/Getting Started/RHEL-based distro/RHEL-based distro Root on ZFS/3-system-configuration.rst @@ -8,33 +8,31 @@ System Configuration #. Generate fstab:: - mkdir -p /mnt/var/log - mkdir -p /mnt/var/lib - mount -t zfs rpool/alma/var/lib /mnt/var/lib - mount -t zfs rpool/alma/var/log /mnt/var/log mkdir -p /mnt/etc/ genfstab -t PARTUUID /mnt | grep -v swap > /mnt/etc/fstab sed -i "s|vfat.*rw|vfat rw,x-systemd.idle-timeout=1min,x-systemd.automount,noauto,nofail|" /mnt/etc/fstab #. Install basic system packages:: - dnf --installroot=/mnt \ - --releasever=$VERSION_ID -y install \ - @core grub2-efi-x64 \ - grub2-pc-modules grub2-efi-x64-modules \ - shim-x64 efibootmgr \ - kernel - dnf --installroot=/mnt \ - --releasever=$VERSION_ID -y install \ - https://zfsonlinux.org/epel/zfs-release-2-2$(rpm --eval "%{dist}").noarch.rpm - dnf config-manager --installroot=/mnt --disable zfs - dnf config-manager --installroot=/mnt --enable zfs-kmod - dnf --installroot=/mnt --releasever=$VERSION_ID \ - -y install zfs zfs-dracut + dnf --installroot=/mnt \ + --releasever=$VERSION_ID -y install \ + @core grub2-efi-x64 \ + grub2-pc-modules grub2-efi-x64-modules \ + shim-x64 efibootmgr \ + kernel-$(uname -r) + + dnf --installroot=/mnt \ + --releasever=$VERSION_ID -y install \ + https://zfsonlinux.org/epel/zfs-release-2-2$(rpm --eval "%{dist}").noarch.rpm + dnf config-manager --installroot=/mnt --disable zfs + dnf config-manager --installroot=/mnt --enable zfs-kmod + dnf --installroot=/mnt --releasever=$VERSION_ID \ + -y install zfs zfs-dracut #. Configure dracut:: - echo 'add_dracutmodules+=" zfs "' > /mnt/etc/dracut.conf.d/zfs.conf + echo 'add_dracutmodules+=" zfs "' >> /mnt/etc/dracut.conf.d/zfs.conf + echo 'forced_drivers+=" zfs "' >> /mnt/etc/dracut.conf.d/zfs.conf if grep mpt3sas /proc/modules; then echo 'forced_drivers+=" mpt3sas "' >> /mnt/etc/dracut.conf.d/zfs.conf fi