Microgram Ramdisk is a framework used to generate POSIX compatible ramdisks using TOML definitions and python functions
µgRD is designed to generate a custom initramfs environment to boot the system which built it.
Generated images are as static and secure as possible, only including components and features required to mount the root and switch to it.
µgRD itself is written in pure Python, and generates POSIX shell scripts to mount the rootfs and continue booting.
The final build environment is left in the specified build_dir, where it can be examined or repacked.
Unless validation is disabled, µgRD attempts to validate most configuration against the host system, raising exceptions or logging warnings warnings if the configuration is invalid.
The original goal of this project was to create an initramfs suitable for decrypting a LUKS root filesystem with a smartcard, with enough config validation to prevent the user from being left in a broken pre-boot environment.
/proc/mounts. root= and rootflags= can be used but are not requiredtry_nokeyroot_subvolsubvol_selector can be used to interactively select a subvolume at boot time/usr, /var, and /etc auto-mounting if the init system requires itvalidate mode--test or using the ugrd.base.test moduleugrd.crypto.smartcard module yubikey exampleugrd.crypto.gpg module gpg examplecryptsetup_retries and cryptsetup_autoretrytry_nokeymerge_usr = falseugrd commandugrd.fs.resumeµgRD is designed to be as portable as possible, but has only been tested on a limited number of systems.
µgRD was designed to work with Gentoo, but has been tested on:
µgRD was originally designed for bash, but should work for POSIX compatible shells including:
Some non-POSIX compatible shells may function, but bash, dash, and ksh are part of automated testing.
If userspace tools are not required to mount a the root filesystem, µgRD can be used with any filesystem supported by the kernel.
The following root filesystems have been tested:
The root mount can automatically be mounted under an overlay filesystem by using the
ugrd.fs.overlayfsmodule.
The following filesystems have limited support:
Additionally, the following filesystems have been tested for non-root mounts:
If the required kernel module is not built into the kernel, and the filesystem is not listed above, the kernel module may need to be included in kmod_init.
The example config has
kmod_autodetect_lsmodenabled which should automatically pull in the required modules, unless the active kernel differs from the build kernel.
µgRD was originally designed for modern amd64 systems but has been tested on:
Additional documentation can be found in the docs directory.