linux-qubasis

linux oasis port as a qubes template

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

commit 65b9c2174f15d297fea55c39a4209fbf5c883c72
parent 6891f6ccd3d955d1f50238ae953421113d22e49f
Author: Jul <jul@9o.is>
Date:   Thu, 20 Nov 2025 03:33:21 -0500

import qvm volume with fspec tar

Diffstat:
Mqubes/example/gen.sh | 2++
Mqubes/genfn.sh | 15++++++++++++++-
Mqubes/rules.sh | 4++++
Aqubes/volume_import.sh | 41+++++++++++++++++++++++++++++++++++++++++
4 files changed, 61 insertions(+), 1 deletion(-)

diff --git a/qubes/example/gen.sh b/qubes/example/gen.sh @@ -7,6 +7,8 @@ qvm_prefs audiovm example-app qvm_prefs memory 200 qvm_prefs maxmem 2000 +volume_import root 50M + pkgexclude $libdir/.* pkgexclude $includedir/.* diff --git a/qubes/genfn.sh b/qubes/genfn.sh @@ -22,7 +22,6 @@ fini_qvm() { if [ "$FSPECS" ]; then fspec_hash root.fspec $FSPECS - fspec_tar root.tar.gz $outdir/root.fspec phony build $outdir/root.fspec else touch nofspecs @@ -172,3 +171,17 @@ qvm_tags() { INSTALL="$INSTALL $_outs" } + +volume_import() { + _volume=$1 + _size=$(( ${2%M} * 1048576 )) + _out=$outdir/qvm-volume-import-$_volume + + fspec_tar root.tar.gz $outdir/root.fspec + build volume_import $_out $outdir/root.tar.gz \ + '|' $dir/create $hostdir/pax $qubesdir/volume_import.sh + bind volume $_volume + bind size $_size + + INSTALL="$INSTALL $_out" +} diff --git a/qubes/rules.sh b/qubes/rules.sh @@ -42,3 +42,7 @@ bind description 'QVM SERVICE $qvm $args' rule qvm_tags 'qvm-tags $qvm add $tags && touch $out' bind description 'QVM TAGS $qvm $tags' + +rule volume_import 'sh $qubesdir/volume_import.sh $qvm $volume $size $in && touch $out' +bind description 'VOLUME IMPORT $qvm:$volume' +bind pool console diff --git a/qubes/volume_import.sh b/qubes/volume_import.sh @@ -0,0 +1,41 @@ +set -eu +hostdir=out/host + +qvm=$1 +volume=$2 +size=$3 +in=$4 + +tmpdir=$(mktemp -d) +mnt=$tmpdir/mnt +img=$tmpdir/$volume.img +loop= + +trap cleanup EXIT + +cleanup() { + set +e + sudo umount $mnt 2>/dev/null + rm -rf $tmpdir + + if [ $loop ]; then + sudo losetup -d $loop 2>/dev/null + fi +} + +count=$(( $size / (128 * 1024) )) +dd if=/dev/zero of=$img bs=128k count=$count >/dev/null 2>&1 +mke2fs -t ext4 $img >/dev/null 2>&1 + +loop=$(losetup --find) +sudo losetup $loop $img +mkdir -p $mnt +sudo mount $loop $mnt + +gzip --stdout -d $in | sudo $hostdir/pax -r -p e -s ",^[^/]*,$mnt," + +sudo umount $mnt +sudo losetup -d $loop +fsck.ext4 -vf $img + +qvm-volume import --size "$(stat -c%s $img)" $qvm:$volume $img