linux-qubasis
linux oasis port as a qubes template
git clone https://9o.is/git/linux-qubasis.git
commit c185f1c77c0d4d1e38296a4f874c47dc06ac8b17 parent dc2643760d489610b09b396530335b78b4d4e740 Author: Jul <jul@9o.is> Date: Mon, 17 Nov 2025 06:17:07 -0500 qubes fspec support with static pkg files Diffstat:
| M | gen.sh | | | 5 | +++++ |
| M | pkg/gen.sh | | | 5 | ----- |
| A | pkg/netbsd-curses/files | | | 14 | ++++++++++++++ |
| M | pkg/netbsd-curses/gen.sh | | | 3 | +++ |
| A | qubes/example/gen.sh | | | 6 | ++++++ |
| A | qubes/fspec.awk | | | 66 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | qubes/gen.sh | | | 40 | ++++++++++++++++++++++++++++++++++++++++ |
| A | qubes/genfn.sh | | | 61 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
8 files changed, 195 insertions(+), 5 deletions(-)
diff --git a/gen.sh b/gen.sh @@ -6,11 +6,16 @@ var ninja_required_version 1.8 var builddir out var dir . var outdir $builddir +var hostdir $outdir/host rule gen './gen.sh $dir' bind description 'GEN $dir' bind generator 1 subgen pkg +subgen qubes phony build.ninja $dir/ninja +phony build qubes/build + +default build diff --git a/pkg/gen.sh b/pkg/gen.sh @@ -9,9 +9,7 @@ var ld $TARGET_ARCH-linux-musl-ld var objcopy $TARGET_ARCH-linux-musl-objcopy var cflags -Os -fPIE -pipe -Wall -Werror -Wextra -pedantic var ldflags -s -static-pie - var pkgdir $outdir -var hostdir $outdir/host rule cc '$cc -MD -MF $out.d $cflags -c -o $out $in' bind description 'CC $out' @@ -49,9 +47,6 @@ bind description 'CAT $out' rule sed 'sed $expr $in >$out' bind description 'SED $out' -rule touch 'touch $out' -bind description 'TOUCH $out' - rule fetch_git 'git submodule update --init --filter=blob:none $srcdir 1>/dev/null && git -C $srcdir checkout $ref 1>/dev/null 2>&1 && touch $out' bind description 'FETCH GIT $dir $ref' bind generator 1 diff --git a/pkg/netbsd-curses/files b/pkg/netbsd-curses/files @@ -0,0 +1,14 @@ +reg 0644 terminfo.cdb $datadir/misc +reg 0644 libcurses.a $libdir +reg 0644 libterminfo.a $libdir +reg 0755 infocmp $bindir +reg 0755 tabs $bindir +reg 0755 tic $bindir +reg 0755 tput $bindir +reg 0755 tset $bindir +sym tset $bindir/reset +reg 0644 infocmp.1.gz $mandir/man1 +reg 0644 tabs.1.gz $mandir/man1 +reg 0644 tic.1.gz $mandir/man1 +reg 0644 tput.1.gz $mandir/man1 +reg 0644 tset.1.gz $mandir/man1 diff --git a/pkg/netbsd-curses/gen.sh b/pkg/netbsd-curses/gen.sh @@ -43,6 +43,9 @@ tic $outdir/compiled_terms.c share/terminfo/terminfo bind ticflags -Sx bind terms dumb +tic terminfo.cdb share/terminfo/terminfo +bind ticflags -x + nbperf $outdir/hash.c lib/libterminfo/genhash lib/libterminfo/term.h nbperf $outdir/termcap_hash.c lib/libterminfo/genthash lib/libterminfo/termcap_map.c diff --git a/qubes/example/gen.sh b/qubes/example/gen.sh @@ -0,0 +1,6 @@ +var prefix /usr + +pkgexclude $libdir/.* +pkgexclude $includedir/.* + +pkg netbsd-curses diff --git a/qubes/fspec.awk b/qubes/fspec.awk @@ -0,0 +1,66 @@ +BEGIN { + gsub(/\//, "\\/", pkgexclude); +} + +function eval_path(path) { + gsub(/\$bindir/, bindir, path); + gsub(/\$datadir/, datadir, path); + gsub(/\$mandir/, mandir, path); + gsub(/\$sysconfdir/, sysconfdir, path); + gsub(/\$libdir/, libdir, path); + gsub(/\$libexecdir/, libexecdir, path); + gsub(/\$includedir/, includedir, path); + gsub(/\$statedir/, statedir, path); + + return path; +} + +function exclude(path) { + pattern = "^(" pkgexclude ")$" + return pkgexclude != "" && path ~ pattern +} + +$1 == "reg" { + filename = $3; + path = eval_path($4 "/" filename); + + if (exclude(path)) { + next + } + + print prefix path; + print "type=" $1; + print "mode=" $2; + print "source=" pkgpath "/" filename; + print ""; + print ""; +} + +$1 == "sym" { + path = eval_path($3); + + if (exclude(path)) { + next + } + + print prefix path; + print "type=" $1; + print "mode=0777"; + print "target=" $2; + print ""; + print ""; +} + +$1 == "dir" { + path = eval_path($3); + + if (exclude(path)) { + next + } + + print prefix path; + print "type=" $1; + print "mode=" $2; + print ""; + print ""; +} diff --git a/qubes/gen.sh b/qubes/gen.sh @@ -0,0 +1,40 @@ +import genfn.sh + +var prefix +var bindir /bin +var libdir /lib +var libexecdir /libexec +var datadir /share +var mandir /share/man +var sysconfdir /etc +var includedir /include +var statedir /var + +var qubesdir $dir + +rule touch 'touch $out' +bind description 'TOUCH $out' + +rule fspec_hash '$hostdir/fspec-hash <$in >$out' +bind description 'FSPEC HASH $out' + +rule fspec_tar '$hostdir/fspec-tar <$in | gzip -c -9 >$out' +bind description 'FSPEC TAR $out' + +rule fspec 'awk -f $qubesdir/fspec.awk $fspecdirs $fspecvars $in >$out 2>/dev/null' +bind description 'FSPEC $out' +bind fspecdirs " + -v prefix=$prefix + -v bindir=$bindir + -v datadir=$datadir + -v mandir=$mandir + -v sysconfdir=$sysconfdir + -v libdir=$libdir + -v libexecdir=$libexecdir + -v includedir=$includedir + -v statedir=$statedir +" + +qvm example + +phony build $BUILDS diff --git a/qubes/genfn.sh b/qubes/genfn.sh @@ -0,0 +1,61 @@ +BUILDS= + +qvm() { + BUILDS="$BUILDS $dir/$1/build" + subgen $1 init_qvm fini_qvm +} + +init_qvm() { + FSPECS= + PKGEXCLUDE= + + var qvm $1 +} + +fini_qvm() { + if [ -e $DIR/files ]; then + fspec fspec/root.fspec $dir/files + fi + + if [ "$FSPECS" ]; then + fspec_hash root.fspec $FSPECS + fspec_tar root.tar.gz $outdir/root.fspec + else + touch root.tar.gz + fi + + phony build $outdir/root.tar.gz +} + +pkg() { + _in=./pkg/$1/files + _out=$outdir/fspec/$1.fspec + + _deps="$(awk -v pkgexclude="${PKGEXCLUDE-}" " + BEGIN { + gsub(/\\//, \"\\\\/\", pkgexclude); + gsub(/\\$/, \"\\\\$\", pkgexclude); + } + + /^reg / { + path = \$4 \"/\" \$3; + pattern = \"^(\" pkgexclude \")$\" + if (pkgexclude != \"\" && path ~ pattern) { next } + print \"\$pkgpath/\" \$3 + } + " $_in 2>/dev/null | xargs)" + + fspec $_out $_in '|' $_deps + bind pkgpath out/pkg/$1 + bind fspecvars -v pkgpath=out/pkg/$1 -v pkgexclude=\'${pkgexclude-}\' + + FSPECS="$FSPECS $_out" + GEN_FILES="$GEN_FILES $_in" +} + +pkgexclude() { + for _v in "$@"; do + PKGEXCLUDE="$PKGEXCLUDE|$_v" + done + var pkgexclude \"$PKGEXCLUDE\" +}