From 7f09dcf88667482be02d75708ee73d02b4489ba5 Mon Sep 17 00:00:00 2001 From: Alex Denes Date: Sat, 21 Oct 2023 11:44:56 +0000 Subject: [PATCH] Use LVM, allow networking and more misc --- make-root.sh | 190 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 123 insertions(+), 67 deletions(-) diff --git a/make-root.sh b/make-root.sh index 0af066a..ed1b29c 100755 --- a/make-root.sh +++ b/make-root.sh @@ -10,28 +10,22 @@ errormsg () { # Check deps depcheck() { - if ! which "$1" >/dev/null 2>&1; then - errormsg "Missing dependency $1, exiting." - fi + for x in $@; do + if ! which "$x" >/dev/null 2>&1; then + errormsg "Missing dependency $x, exiting." + fi + done } -depcheck "fallocate" -depcheck "sfdisk" -depcheck "mkfs.vfat" -depcheck "mkfs.ext4" -depcheck "mkfs.btrfs" -depcheck "mktemp" -depcheck "mount" -depcheck "mkdir" -depcheck "cat" -depcheck "install" -depcheck "apk" -depcheck "bwrap" +splitargs() { + echo "$1" | sed 's/ /\n/g' +} # BWRAP "chrooting" wrapped() { bwrap \ - --unshare-net \ + --new-session \ + --die-with-parent \ --unshare-pid \ --unshare-uts \ --unshare-ipc \ @@ -44,11 +38,44 @@ wrapped() { -- $@ } -image="${1:-nnd-rootfs}" -arch="${2:-x86_64}" +depcheck "fallocate" \ + "sfdisk" \ + "mkfs.vfat" \ + "mkfs.ext4" \ + "pvcreate" \ + "vgcreate" \ + "lvcreate" \ + "vgchange" \ + "mkfs.btrfs" \ + "mktemp" \ + "mount" \ + "mkdir" \ + "cat" \ + "install" \ + "apk" \ + "bwrap" + +custom=false + +while getopts ':a:i:b:t:s:p:c' opt; do + case $opt in + (a) arch="$OPTARG";; + (b) svcs="$svcs $OPTARG";; + (c) custom=true;; + (i) image="$OPTARG";; + (p) pkgs="$pkgs $OPTARG";; + (s) size="$OPTARG";; + (t) ttys="$ttys $OPTARG";; + esac +done + +: "${image:=nnd-rootfs}" +: "${arch:=x86_64}" +: "${svcs:=bundle.core bundle.net}" +: "${size:=1G}" # Set up file as loopback -fallocate -v -l 1G "$image" +fallocate -v -l "$size" "$image" if ! [ -r "$image" ]; then errormsg "Something went wrong while preallocating sparse image" fi @@ -68,14 +95,22 @@ EOT # Format partitions mkfs.vfat -n nnd-efi "${loopback}p1" mkfs.ext4 -L nnd-boot "${loopback}p2" -mkfs.btrfs -L nnd-root "${loopback}p3" + +VGN="nnd" +LVN="rootlv" +pvcreate "${loopback}p3" +vgcreate "$VGN" "${loopback}p3" +lvcreate "$VGN" -n "$LVN" -l '100%FREE' +vgchange -a y "$VGN" + +mkfs.btrfs -L nnd-root "/dev/$VGN/$LVN" # Set up chroot tmpdir="$(mktemp -d "nnd-image.XXXXXXXXXX")" if [ -z "$tmpdir" ]; then errormsg "Something went wrong during working directory preparation, bailing out" fi -mount -v -t btrfs "${loopback}p3" "$tmpdir" +mount -v -t btrfs "/dev/$VGN/$LVN" "$tmpdir" mkdir -p "$tmpdir/boot" mount -v -t ext4 "${loopback}p2" "$tmpdir/boot" @@ -96,7 +131,7 @@ https://dl-cdn.alpinelinux.org/alpine/latest-stable/community EOF ) "$tmpdir"/etc/apk/repositories -# Set up basic rootfs +# Set up bootstrap rootfs apk add \ -v \ --initdb \ @@ -104,59 +139,20 @@ apk add \ --root "$tmpdir" \ --repositories-file "$tmpdir/etc/apk/repositories" \ --arch "$arch" \ - nnd \ lfsbase \ + busybox \ nnd-signkey \ alpine-keys \ - linux-full \ - nnd-s6-linux-init-default \ - nnd-s6-services \ - busybox \ - grub-efi \ - iproute2 \ - bcnm@edge \ - mdevd \ - mdev-conf \ - utmps \ - findmnt \ - dosfstools \ - e2fsprogs \ - btrfs-progs + apk-tools -echo 'NOTE: It is expected that grub would fail to generate a config at this stage, "failed to get canonical path" errors are safe to ignore' >&2 - -# Set up default resolv.conf (in case no DNS server is configured via DHCP or otherwise) -## TODO: Maybe distribute this via packages? -install -Dm644 <( -cat <