From e015b8cbe957a1913f178dc5e4ba166972f79320 Mon Sep 17 00:00:00 2001 From: Gordon GECOS Date: Wed, 22 Nov 2023 16:07:32 -0500 Subject: build system cleanup --- .gitignore | 2 ++ Makefile | 52 ++++++++++++++++++++++++------------------ build-deps.control | 1 + initramfs-tools/hooks/samizdat | 21 ++++++++--------- 4 files changed, 43 insertions(+), 33 deletions(-) diff --git a/.gitignore b/.gitignore index 4820162..a9ea15b 100644 --- a/.gitignore +++ b/.gitignore @@ -59,3 +59,5 @@ apt-get-update-stamp *.tmp samizdat-ficlonerange /rootfs/_filesystem/ +initrd-stamp +initrd-install-stamp diff --git a/Makefile b/Makefile index ce0e826..8cd7130 100644 --- a/Makefile +++ b/Makefile @@ -1,9 +1,11 @@ prefix?=/usr/local +bindir = $(prefix)/bin +initrd_bindir = $(prefix)/lib/samizdat/initrd/bin cc_files=wait_for_files samizdat-pinentry krng-add-entropy samizdat-ficlonerange cpp_files=dynmenu -compiled_programs=${cc_files} ${cpp_files} +compiled_programs = $(addprefix _build/, ${cc_files} ${cpp_files}) CC=gcc -std=gnu99 CFLAGS=-Os @@ -18,7 +20,7 @@ all: ${compiled_programs} ${SUBMODULES} install-stack: curl -sSL https://get.haskellstack.org/ | sh stack: - @which stack >/dev/null || make install-stack + @command -v stack >/dev/null || make install-stack build-deps: build-deps-stamp build-deps-stamp: build-deps.control @@ -26,25 +28,27 @@ build-deps-stamp: build-deps.control sudo ./src/mk-build-deps --root-cmd sudo build-deps.control --install --remove touch $@ -dynmenu: src/dynmenu.cpp | build-deps +_build/dynmenu: src/dynmenu.cpp | build-deps $(CXX) $(CFLAGS) $< -o $@ -lcurses -samizdat-pinentry: src/samizdat-pinentry.c | build-deps +_build/samizdat-pinentry: src/samizdat-pinentry.c | build-deps $(CC) $(CFLAGS) $< -o $@ -lcurses -krng-add-entropy: src/krng-add-entropy.c | build-deps +_build/krng-add-entropy: src/krng-add-entropy.c | build-deps $(CC) $(CFLAGS) $< -o $@ -wait_for_files: src/wait_for_files.c | build-deps +_build/wait_for_files: src/wait_for_files.c | build-deps $(CC) $(CFLAGS) $< -o $@ -%: src/%.c | build-deps +_build/%: src/%.c | build-deps $(CC) $(CFLAGS) $< -o $@ src_bin_programs = btrfs-functions.sh var.sh usb partvi -bin_programs=$(addprefix src/, $(src_bin_programs)) ${cc_files} ${btrfs_utils} +bin_programs=$(addprefix src/, $(src_bin_programs)) ${btrfs_utils} btrfs_utils=$(addprefix src/btrfs-utils/, btarfs with-btrfs-seed) -initrd_files:=$(wildcard src/initrd/*) dynmenu wait_for_files -initramfs_conf_files:=$(wildcard initramfs-tools/*) +initrd_files = $(addprefix src/initrd/,btrfs-create.sh common.sh firstboot.service grok-block \ +loop-layer.sh make-total-destroy mdadm-dup.sh menu-select patchroot.sh) + +initrd_files += $(addprefix _build/, dynmenu wait_for_files) isolinux_files:=$(wildcard isolinux/*) @@ -203,7 +207,7 @@ rootfs/seed.iso: $(rootfs) $(if $(VERITY),$(addprefix $(rootfs),.verity .verity. .PHONY: install install: - $(SUDO_MAKE) install-stamp + $(SUDO_MAKE) install-stamp initrd-install-stamp build-submodules-stamp: build-submodules touch $@ @@ -211,28 +215,32 @@ build-submodules-stamp: build-submodules install-submodules-stamp: install-submodules touch $@ -bindir = /usr/local/bin +initrd_deps = $(initrd_conf_files) $(initrd_files) + +initrd-stamp: initrd-install-stamp + sudo update-initramfs -u + touch $@ -install-bin-programs: ${bin_programs} - install -D -p -t ${instdir}${bindir} ${bin_programs} +initrd-install-stamp: $(initrd_deps) + install -D -t $(initrd_bindir) -- $(initrd_files) + install -D -t /etc/initramfs-tools/hooks -- initramfs-tools/hooks/samizdat + install -D -t /etc/initramfs-tools/scripts -- initramfs-tools/scripts/samizdat + touch $@ -CP=cp --preserve=timestamps -r +conf_files = conf/bookworm.list conf/eschew-unstable.pref conf/grub.default +initrd_conf_files = initramfs-tools/hooks/samizdat initramfs-tools/scripts/samizdat -defaults_conf_files = conf/grub.default -initramfs_conf_files = $(addprefix initramfs-tools/,hooks/samizdat scripts/samizdat) -install-stamp: install-bin-programs ${compiled_programs} +install-stamp: $(conf_files) ${bin_programs} + install -D -p -t ${instdir}${bindir} -- ${bin_programs} rm -f /etc/apt/apt.conf.d/default-release install -m644 -t /etc/apt/preferences.d -- conf/eschew-unstable.pref install -m644 -t /etc/apt/sources.list.d -- conf/bookworm.list install -m644 --backup=t -T -- conf/grub.default /etc/default/grub - install -t /etc/initramfs-tools/hooks -- initramfs-tools/hooks/samizdat - install -t /etc/initramfs-tools/scripts -- initramfs-tools/scripts/samizdat touch $@ .PHONY: update upgrade up upgrade-key initrd -initrd: install - sudo update-initramfs -u +initrd: initrd-stamp update: apt-get-update-stamp git pull --ff-only --recurse-submodules diff --git a/build-deps.control b/build-deps.control index dfd6046..f8b5672 100644 --- a/build-deps.control +++ b/build-deps.control @@ -6,6 +6,7 @@ Build-Depends: bridge-utils, dosfstools, eatmydata, equivs, + fdisk, kpartx, libbz2-dev, libdpkg-perl, diff --git a/initramfs-tools/hooks/samizdat b/initramfs-tools/hooks/samizdat index 1d4c1fe..fb424e6 100755 --- a/initramfs-tools/hooks/samizdat +++ b/initramfs-tools/hooks/samizdat @@ -1,21 +1,20 @@ #!/bin/sh [ "$1" = prereqs ] && { echo; exit; } - . /usr/share/initramfs-tools/hook-functions +OUR_BINPATH=/usr/local/lib/samizdat/initrd/bin + +# This insanity is necessary for initramfs-tools. +# TODO: File bug against initramfs-tools. +PATH=$OUR_BINPATH:$PATH + die() { printf 'Error: generating initramfs: %s\n' "$*" >&2; exit 1; } CopyExec() { copy_exec "$@" || die "failed to copy_exec $*"; } CopyExecE() { [ "$2" ] || die "cannot find binary to copy: $1"; shift; CopyExec "$@"; } -SAMIZDAT_INITRD_PATH=/usr/local/lib/samizdat-rhizome/initrd - -PATH=${SAMIZDAT_INITRD_PATH}:/usr/local/bin:$PATH - -repo_execs=$(echo "${SAMIZDAT_INITRD_PATH}"/*) - path_execs=' - mountpoint openvt rsync gpg2 pinentry-curses truncate dmsetup + mountpoint openvt rsync truncate dmsetup dmstats cryptsetup mkfs.btrfs btrfs fsck.hfsplus wait_for_files dynmenu parted fallocate strace btrfstune sfdisk ' @@ -23,15 +22,15 @@ path_execs=' graft_paths=" /bin/OpenVT=/bin/openvt /bin/LoSetup=/sbin/losetup - /patchroot/patchroot.sh=${SAMIZDAT_INITRD_PATH}/patchroot.sh + /patchroot/patchroot.sh=${OUR_BINPATH}/patchroot.sh " -absolute_path_copies='/lib/terminfo/l/linux /usr/bin/gpg-agent' +absolute_path_copies='/lib/terminfo/l/linux' modules='loop dm-snapshot dm-crypt btrfs hfs hfsplus' modules_dirs='kernel/drivers/net/ethernet kernel/fs/nls kernel/crypto' -for f in $repo_execs; do CopyExec "$f" /bin; done +for f in "${OUR_BINPATH}"/*; do CopyExec "$f" /bin; done for c in $path_execs; do s=$(which $c) CopyExecE "$c" "$s" /bin; -- cgit v1.2.3