76 lines
1.9 KiB
Nix
76 lines
1.9 KiB
Nix
{
|
|
pkgs,
|
|
stdenv,
|
|
fetchurl,
|
|
}:
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "mrescue-alpine";
|
|
version = "3.23.3";
|
|
|
|
src = fetchurl {
|
|
urls = [
|
|
"https://dl-cdn.alpinelinux.org/alpine/v3.23/releases/x86_64/alpine-netboot-${version}-x86_64.tar.gz"
|
|
"https://dl.jakstys.lt/boot/alpine-netboot-${version}-x86_64.tar.gz"
|
|
];
|
|
hash = "sha256-U/tUZvdhLU/2Fr3g9jfwuM0mfX5SrtxwUiD0h+Qx8VA=";
|
|
};
|
|
|
|
nativeBuildInputs = with pkgs; [
|
|
gzip
|
|
cpio
|
|
squashfsTools
|
|
findutils
|
|
zstd
|
|
];
|
|
|
|
sourceRoot = ".";
|
|
|
|
unpackPhase = ''
|
|
runHook preUnpack
|
|
mkdir alpine-boot
|
|
tar -xzf $src -C alpine-boot --strip-components=1
|
|
runHook postUnpack
|
|
'';
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
mkdir -p work/initramfs-extracted
|
|
cd work
|
|
|
|
gzip -dc < ../alpine-boot/initramfs-virt | \
|
|
cpio -idm --quiet -D initramfs-extracted
|
|
|
|
unsquashfs -f -d modloop-extracted ../alpine-boot/modloop-virt >/dev/null
|
|
|
|
mkdir -p initramfs-extracted/lib/modules
|
|
cp -r modloop-extracted/modules/* initramfs-extracted/lib/modules/
|
|
|
|
# Initialize apk database
|
|
mkdir -p initramfs-extracted/lib/apk/db
|
|
mkdir -p initramfs-extracted/etc/apk
|
|
touch initramfs-extracted/lib/apk/db/installed
|
|
touch initramfs-extracted/etc/apk/world
|
|
echo "https://dl-cdn.alpinelinux.org/alpine/latest-stable/main" > initramfs-extracted/etc/apk/repositories
|
|
echo "https://dl-cdn.alpinelinux.org/alpine/latest-stable/community" >> initramfs-extracted/etc/apk/repositories
|
|
|
|
cd initramfs-extracted
|
|
find * .[^.*] -print0 | sort -z | \
|
|
cpio --quiet -o -H newc -R +0:+0 --reproducible --null | \
|
|
zstd -19 -T8 > ../initramfs-combined.zst
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out
|
|
install -Dm644 ../../alpine-boot/vmlinuz-virt $out/kernel
|
|
install -Dm644 ../initramfs-combined.zst $out/initrd
|
|
|
|
runHook postInstall
|
|
'';
|
|
}
|