2025-07-04 17:23:34 -04:00
2025-07-04 17:23:34 -04:00
2025-07-04 17:23:34 -04:00
2025-07-04 20:59:53 +00:00
2025-07-04 17:23:34 -04:00
2025-07-04 17:23:34 -04:00
2025-07-04 17:23:34 -04:00
2025-07-04 17:23:34 -04:00
2025-07-04 17:23:34 -04:00

ZFSBootMenu Root Install

Intro

Well howdy!

Welcome to the ZFSBootMenu Root Install script!

This here script is designed to install (currently) either Debian or Fedora with OpenZFS as the root filesystem, and utilize ZFSBootMenu for actually getting the system up and running (as opposed to i.e. GRUB2 or systemd-bootd)

Some of the benefits of this setup include:

  • Having a reliable copy-on-write (CoW) filesystem
  • Being able to easily create and rollback to snapshots from either the OS or ZFSBootMenu
  • Easy backups by sending/receiving snapshots to local or remote locations, including being able to do a "raw send", where the data being sent is the raw encrypted data without the decryption key, useful for backing up to third-party backup services
  • Having multiple version of an OS installed on the system via different root datasets (i.e. stable and testing versions, old and new versions, etc.)

Getting Started

! THESE SCRIPTS ARE TO BE RUN ON THE LIVE MEDIUM OF THE OS YOU INTEND ON INSTALLING AND AS THE ROOT USER !

To use this script, you run the menu.sh script, and use its, well, menu to go step by step through installing the OS you wish to have on your PC

The steps are as follows, and will be expanded on throughout this document:

  • List
  • Configure
  • Partition
  • Install
  • Post Install
  • Finalize
  • WiFi Setup

List

This lists all currently connected storage devices and network interfaces of the system

This is handy to know what devices and interfaces were picked up by the OS and the script, and to make sure that everything is "hunky-dory"

Storage devices are listed seperately for both /dev/ (i.e. sda, sdb), and for /dev/disk/by-id/ (i.e. ata-WD_Blue)

The latter method (/dev/disk/by-id/) is STRONGLY recommended when selecting the installation disk during configuration, and the former method (/dev/) should only be used in an environment where the latter method is unavailable (i.e. in a virtual machine)

Configure

When run, this will guide you through creating a configuration file (system.conf) that is used throughout the script for various tasks

This includes:

  • Disk type (SSD or HDD)
  • Disk to install to
  • Hostname of the machine
  • Username of your new user account
  • Whether to configure SWAP or not (SWAP will be equal to RAM x2)
  • Whether to use encryption or not (ZFS native encryption is used)

Partition

The disk selected during configuration will be completely wiped and partitioned, and formatted with the ZFS filesystem

Debian or Fedora will be installed via their respective means for this setup (debootstrap for Debian, and an rsync for Fedora)

If encryption was configured on, you will enter a password for your new zpool during this step

The partition layout is as such:

  • A 512MiB partition for EFI
  • A RAMx2 partition for SWAP (if configured)
  • A partition for ZFS (remaining space)

Multiple ZFS datatets are setup from this script, including (but not limited to):

  • A dataset for the root filesystem (such as to allow multiple OSes)
  • A dataset for your home directory
  • A datatset for your config directory
  • Seperate datasets for /srv, /tmp, /usr, /var, etc.

After this script has mostly concluded, you will be chrooted into the new installation to continue

Once the chroot has been exited, everything will be unmounted and the zpool exported

Afterwards, you will be notified to reboot the machine

Install

This is where you finish installing the system

After being chrooted by the partition script, you'll run the menu script again from /ZFSBootMenu Root Install/menu.sh and begin this step

This is where the needed packages are installed, the system gets configured, and ZFSBootMenu is downloaded and EFI entries made

Exactly what needs doing depends on what OS is being installed (Debian or Fedora)

After completion, the post install script should be automatically ran

Post Install

This is where the datasets for the individual user are created, as well as the user themselves

When installing Debian, this part will also have you select the desktop environment you wish to install (if any), and setup an APT hook to a script that takes a snapshot before any packages are installed, removed, or upgraded, to allow for easy rollback in the event of a botched package operation

Finalize

This part ensures that timedatectl is set properly, as well as locks the root account, and sets up Flathub in user mode for installation of software packaged as Flatpaks

WiFi Setup

This part is mostly obsolete

This script allows for the configuration of a WiFi network from the terminal, in the event that a wired connection is unavailable

Description
Set of scripts for installing Linux with ZFS as the root filesystem, and ZFSBootMenu as the boot loader
Readme AGPL-3.0 134 KiB
Languages
Shell 100%