This replaces the parallel gzip with the boring gzip from Go's standard lib. The main motivations for doing this are: 1) Reduce runtime memory requirements 2) shed some external dependencies There's obviously a trade-off with compression speed/time (as seen below), but I feel like it's a worthwhile trade-off. Note that there's likely very little impact to boot performance wrt extracting these archives, the compression levels are similar. Measured on a Shift 6mq, which is a very fast phone... ** compress/gzip: User time (seconds): 1.81 System time (seconds): 0.38 Percent of CPU this job got: 104% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:02.09 Maximum resident set size (kbytes): 62024 -rw-r--r-- 1 clayton clayton 6.1M Sep 20 17:20 initramfs -rw-r--r-- 1 clayton clayton 2.5M Sep 20 17:20 initramfs-extra ** pgzip: User time (seconds): 1.19 System time (seconds): 0.48 Percent of CPU this job got: 159% Elapsed (wall clock) time (h:mm:ss or m:ss): 0:01.05 Maximum resident set size (kbytes): 109952 -rw-r--r-- 1 clayton clayton 6.8M Sep 20 17:20 initramfs -rw-r--r-- 1 clayton clayton 2.8M Sep 20 17:20 initramfs-extra inspired by: https://gitlab.com/postmarketOS/pmaports/-/issues/1704
mkinitfs is a tool for generating an initramfs. It was originally designed
for postmarketOS, but a long term design goal is to be as distro-agnostic as
possible. It's capable of generating a split initramfs, in the style used by
postmarketOS, and supports running boot-deploy to install/finalize boot files
on a device.
Building
Building this project requires a Go compiler/toolchain and make:
$ make
To install locally:
$ make install
Installation prefix can be set in the generally accepted way with setting
PREFIX:
$ make PREFIX=/some/location
# make PREFIX=/some/location install
Other paths can be modified from the command line as well, see the top section of
the Makefile for more information.
Tests (functional and linting) can be executed by using the test make target:
$ make test
Usage
The tool can be run with no options:
# mkinitfs
Configuration is done through a series of flat text files that list directories
and files, and by placing scripts in specific directories. See man 1 mkinitfs
for more information.