2.4 KiB
snap-pac-uki
Need help? Talk to me at #snap-pac-uki:tfld.dev.
What is this?
This is a collection of scripts, pacman hooks and and systemd units for creating
and managing unified kernel images (UKIs) based on snapper. It originally
expected to be executed as a pacman hook after snap-pac
, but this is no longer
required (though the name remains).
Installation
Prerequisites
While not depending on it directly, this tool expects that you already set up
snapper. It expects, that each snapshot contains its kernel
(/boot/vmlinuz-linux
) and initramfs (/boot/intitramfs-linux.img
), as well as
a kernel command line file (/etc/snap-pac-uki/kernel-cmd
).
For generating the current and fallback UKIs, the kernel and initramfs files of
the currently running system are used. For a kernel cmd, it uses
/etc/snap-pac-uki/kernel-cmd-current
and /etc/snap-pac-uki/kernel-cmd-fallback
.
If you want to boot a UKI directly, use the efibootmgr
command to create an
entry.
# template
efibootmgr -c \
-d <EFI DEVICE> \
-p <EFI PARTITION NUMBER> \
-l <EFI PATH> \
-L <LABEL>
# example
efibootmgr -c \
-d /dev/nvme0n1 \
-p 1 \
-l "\EFI\Linux\arch-linux.efi" \
-L "Arch Linux"
# example for fallback
efibootmgr -c \
-d /dev/nvme0n1 \
-p 1 \
-l "\EFI\Linux\arch-linux-fallback.efi" \
-L "Arch Linux (Fallback)"
Using the install script
-
You can install the dependencies of this program with the following command:
pacman -S fish ripgrep sbsigntools sed
-
Download the latest release from here and unpack it.
-
Then run the install script (you need to be in the same directory):
./install.fish
Usage
Creating snapshot UKIs
This creates a new UKI for all snapshots where none is found:
snap-pac-uki snapshots
Create current UKIs
This creates a new UKI for the current system (including a fallback variant):
snap-pac-uki current
Clean up UKIs
This removes all UKIs without corresponding snapshot (solely based on number):
snap-pac-uki clean
Enable periodic cleanups using systemd timer
systemctl enable --now snap-pac-uki-cleanup.timer
Uninstall
Simply run the following command in this directory:
./uninstall.fish