Pacman hooks creating unified kernel images for snapshots created by snap-pac.
Go to file
2022-10-01 22:15:59 +02:00
pacman fix pacman hook error 2021-10-17 15:34:27 +02:00
src simplify program 2022-10-01 22:08:39 +02:00
systemd feat: add cleaning facilities 2021-02-12 02:05:34 +01:00
install.fish feat: stop deleting or overwriting config file 2021-06-18 20:02:03 +02:00
LICENSE chore: 📄 Add LICENSE 2021-02-13 19:18:43 +01:00
README.md update readme 2022-10-01 22:15:59 +02:00
uninstall.fish feat: stop deleting or overwriting config file 2021-06-18 20:02:03 +02:00

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

  1. You can install the dependencies of this program with the following command:

    pacman -S fish ripgrep sbsigntools sed
    
  2. Download the latest release from here and unpack it.

  3. 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