mouse/src

Blob: scripts/build-image.sh

Raw · Blame

#!/bin/sh
set -eu

script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
repo_dir=$(dirname "$script_dir")
cheesed_dir=${CHEESED_DIR:-"$repo_dir/../cheesed"}
build_dir=${MOUSE_BUILD_DIR:-"$repo_dir/build"}
target=${CHEESED_TARGET:-x86_64-unknown-linux-musl}

"$script_dir/fetch-sources.sh"
if [ "${MOUSE_SKIP_KERNEL:-0}" != 1 ]; then
    "$script_dir/build-kernel.sh"
fi
"$script_dir/build-static-base.sh"
base_root="$build_dir/static/rootfs"
cheesed_binary=$(CHEESED_TARGET="$target" "$cheesed_dir/scripts/build-static.sh")

staging=$(mktemp -d "${TMPDIR:-/tmp}/mouse-rootfs.XXXXXX")
trap 'rm -rf "$staging"' EXIT HUP INT TERM

install -d -m 0755 \
    "$staging/dev" \
    "$staging/etc" \
    "$staging/home" \
    "$staging/media" \
    "$staging/mnt" \
    "$staging/proc" \
    "$staging/root" \
    "$staging/run" \
    "$staging/sys" \
    "$staging/usr/bin" \
    "$staging/var"
chmod 0755 "$staging"
chmod 0700 "$staging/root"
install -d -m 1777 "$staging/tmp"

ln -s usr/bin "$staging/bin"
ln -s usr/bin "$staging/sbin"
ln -s bin "$staging/usr/sbin"

cp -R "$base_root/." "$staging/"
install -m 0755 "$cheesed_binary" "$staging/usr/bin/cheesed"

cp -R "$repo_dir/rootfs/." "$staging/"
ln -s mouse-release "$staging/etc/os-release"

"$script_dir/audit-static-base.sh" "$staging"

mkdir -p "$build_dir"
(
    cd "$staging"
    find . -print |
        LC_ALL=C sort |
        cpio -o --format newc -R 0:0 2>/dev/null |
        gzip -9
) >"$build_dir/mouse-initramfs.cpio.gz"
printf '%s\n' "built $build_dir/vmlinuz-virt"
printf '%s\n' "built $build_dir/mouse-initramfs.cpio.gz"