linux-qubasis

linux oasis port as a qubes template

git clone https://9o.is/git/linux-qubasis.git

commit d3f6d3fbb6f0c3cab22fc94137a5e8b33386d2e9
parent de6c62cb0d278a099122b821ba7f229650a6527c
Author: Jul <jul@9o.is>
Date:   Tue,  9 Sep 2025 17:58:21 +0800

generate raw image file for templates

Diffstat:
Aninja/fspec-img.sh | 29+++++++++++++++++++++++++++++
Mninja/functions.sh | 15+++++++++++++--
Mninja/rules.ninja | 7++++---
Mtpl/example/gen.sh | 2++
4 files changed, 48 insertions(+), 5 deletions(-)

diff --git a/ninja/fspec-img.sh b/ninja/fspec-img.sh @@ -0,0 +1,29 @@ +set -eu + +hostdir=out/host + +fspec=$1 +img_file=$2 +img_size=${3%M} +mnt=${img_file%/*}/mnt + +trap cleanup EXIT + +cleanup() { + sudo umount $mnt + sudo losetup --detach $loop + rmdir $mnt + fsck.ext4 -vf $img_file +} + +rm -rf $img_file $mnt +mkdir $mnt + +dd if=/dev/zero of=$img_file bs=1M count=$img_size >/dev/null 2>&1 +mke2fs -t ext4 $img_file >/dev/null 2>&1 + +loop=$(losetup --find) +sudo losetup $loop $img_file +sudo mount $loop $mnt + +$hostdir/fspec-tar <$fspec | sudo $hostdir/pax -r -s ",^[^/]*,$mnt," diff --git a/ninja/functions.sh b/ninja/functions.sh @@ -196,6 +196,10 @@ headers_exist() { return 1 } +build_img() { + _ninja_img_size="$1" +} + ## ## Internal ninja functions and variables ## @@ -265,6 +269,7 @@ _ninja_initglobals() { _ninja_buffer_build= _ninja_buffer_fspec= _ninja_buffer_fspec_files= + _ninja_img_size= } _ninja_setv_init() { @@ -566,8 +571,14 @@ _ninja_flush_build() { fi ;; tpl) - build fspec-tar $outdir/rootfs.tar.zst '|' $hostdir/fspec-tar $hostdir/zstd '||' $outdir/_fspec/ALL - build phony $tgtdir/build $outdir/rootfs.tar.zst + if [ "$_ninja_img_size" ]; then + build fspec-img $outdir/root.img '|' $basedir/ninja/fspec-img.sh $hostdir/fspec-tar $hostdir/pax '||' $outdir/_fspec/ALL + bind img_size $_ninja_img_size + build phony $tgtdir/build $outdir/root.img + else + build touch $outdir/_fetch/build + build phony $tgtdir/build $outdir/_fetch/build + fi ;; esac } diff --git a/ninja/rules.ninja b/ninja/rules.ninja @@ -57,9 +57,10 @@ rule fspec command = sh $basedir/ninja/fspec.sh $out $path $type $mode $in $target >/dev/null description = FSPEC $out -rule fspec-tar - command = $hostdir/fspec-tar <$outdir/_fspec/ALL | $hostdir/zstd >$out - description = FSPEC-TAR $out +rule fspec-img + command = sh $basedir/ninja/fspec-img.sh $outdir/_fspec/ALL $out $img_size + description = FSPEC-IMG $out + pool = console rule yacc command = $hostdir/yacc $yaccflags $in >/dev/null diff --git a/tpl/example/gen.sh b/tpl/example/gen.sh @@ -1,3 +1,5 @@ +build_img 10M + dir /dev dir /tmp dir /bin