Ameer Hamza a8be69ed46 Skip creating EFI boot entry on upgrades to avoid NVRAM exhaustion
The `efibootmgr -c` command always creates a new boot entry rather than
updating an existing one. Prior to commit c6ba53c, the GRUB installation
block only ran on fresh installs. That commit extended it to run on
upgrades when GRUB versions differ, which also caused `efibootmgr -c` to
run on upgrades, creating duplicate TrueNAS-X entries. While firmware
typically cleans up duplicate entries on reboot (as observed on TrueNAS
MINI hardware), EFI NVRAM has limited space and users with NVRAM already
full from other sources reported `No space left on device` error during
updates as creating a new entry fails before the next reboot can clean up.

The boot entry created during fresh installation remains valid across
upgrades since GRUB binaries are updated at the same path
(`/EFI/debian/grubx64.efi`). Only create the boot entry on fresh installs
where `old_root` is None.
2026-02-05 17:57:53 +05:00
2025-09-23 10:39:47 -04:00
2026-01-30 12:13:21 -05:00
2024-06-04 05:25:04 +05:00

Join Discord Join Forums File Issue

truenas-build

A build framework for TrueNAS SCALE.

Found an issue in the build for SCALE? Please report it on our Jira bugtracker.

Requirements

  • Supported version of Debian
  • Python 3.11 or later
  • 20GB of RAM
  • At least 15GB of free disk space

In addition to the host, you will want to pre-install the following packages:

  • build-essential
  • debootstrap
  • libjson-perl
  • git
  • python3-pip
  • python3-venv
  • squashfs-tools
  • rsync
  • unzip
  • libarchive-tools

% sudo apt install build-essential debootstrap git python3-pip python3-venv squashfs-tools unzip libjson-perl rsync libarchive-tools

Usage

The build system automatically manages a Python virtual environment to ensure build consistency. It detects changes in the git repository hash and automatically recreates the virtual environment when needed, ensuring that the build tools are always in sync with the current codebase.

After the pre-requistes are installed, simply run "make" (as root or sudo) to perform a complete build which performs the following steps:

make checkout

Pulls in the latest target source repos from online. Re-run to update to latest sources at any time.

make packages

Builds all the *.deb packages from the checked out source repos and stages them for further stages. Re-running it will perform an incremental build, only re-building packages which have changed sources in source/.

make update

Builds the stand-alone update file, used for online/offline updating or building ISO images.

make iso

Builds the ISO image for fresh installation.

make clean

Cleans up all the temporary files and returns to original state.

Overrides

It is possible using make and environment variables to override which source repos get checked out during "make checkout" phase.

TRUENAS_BRANCH_OVERRIDE - Can be used to override all source repos at once

_OVERRIDE - Can override specific repos, I.E. debootstrap_OVERRIDE="master"

Description
TrueNAS SCALE Build System
Readme GPL-3.0 8.2 MiB
Languages
Python 96.6%
Shell 1.9%
Makefile 1.1%
Perl 0.4%