Pacman hooks creating unified kernel images for snapshots created by snap-pac.
Go to file
2022-10-01 22:08:39 +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 Allow separate kernel cmd for current system 2021-10-17 02:17:46 +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

This tool expects that you already set up snapper. It also expects that each snapshots linux and initramfs files (/boot/vmlinuz-linux and /boot/initramfs-linux.img) as well as a kernel command line file (/etc/snap-pac-uki/kernel-cmd) are available within each snapshot.

The fallback initramfs (/boot/initramfs-linux-fallback.img) and fallback command line file (/etc/snap-pac-uki/kernel-cmd-fallback) are only required on the current system.

Also the current command line file (/etc/snap-pac-uki/kernel-cmd-current) needs is only required on the current system.

EFI boot options are only created for each snapshot. If you want the UKIs created for the current system, you'll need to add boot entries yourself:

# 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 efibootmgr jq ripgrep sbsigntools sed snapper
    
  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