linux-qubasis

linux oasis port as a qubes template

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

genfn.sh

(3191B)


      1 BUILDS=
      2 INSTALL=
      3 
      4 qvm() {
      5 	BUILDS="$BUILDS $dir/$1/build"
      6 	INSTALL="$INSTALL $dir/$1/install"
      7 	subgen $1 init_qvm fini_qvm
      8 }
      9 
     10 init_qvm() {
     11 	FSPECS=
     12 	INSTALL=
     13 	PKGEXCLUDE=
     14 
     15 	var qvm $1
     16 }
     17 
     18 fini_qvm() {
     19 	pkg_root
     20 
     21 	if [ "$FSPECS" ]; then
     22 		fspec_root root.fspec $FSPECS
     23 		fspec_tar root.tar.gz $outdir/root.fspec
     24 		phony build $outdir/root.tar.gz
     25 	else
     26 		touch nofspecs
     27 		phony build $outdir/nofspecs
     28 	fi
     29 
     30 	if [ "$INSTALL" ] && [ $1 = dom0 ]; then
     31 		phony install $INSTALL
     32 	elif [ "$INSTALL" ]; then
     33 		phony install $INSTALL '||' ./qubes/dom0/install
     34 	else
     35 		touch noinstall
     36 		phony install $outdir/noinstall
     37 	fi
     38 }
     39 
     40 pkg() {
     41 	_in=./pkg/$1/files
     42 	_out=$outdir/fspec/$1.fspec
     43 
     44 	GEN_FILES="$GEN_FILES $_in"
     45 
     46 	if [ ! -e $_in ]; then
     47 		return
     48 	fi
     49 
     50 	fspec $_out $_in "| $(get_file_deps $_in)"
     51 	FSPECS="$FSPECS $_out"
     52 }
     53 
     54 pkg_root() {
     55 	if [ -e $DIR/files ]; then
     56 		fspec fspec/root.fspec $dir/files "| $(get_file_deps $DIR/files)"
     57 		FSPECS="$FSPECS $outdir/fspec/root.fspec"
     58 	fi
     59 }
     60 
     61 pkgexclude() {
     62 	for _v in "$@"; do
     63 		PKGEXCLUDE="$PKGEXCLUDE|$_v"
     64 	done
     65 	var pkgexclude \"$PKGEXCLUDE\"
     66 }
     67 
     68 get_file_deps() {
     69 	awk -v pkgexclude="$PKGEXCLUDE" -v dir="$DIR" "
     70 		BEGIN {
     71 			gsub(/\\//, \"\\\\/\", pkgexclude);
     72 			gsub(/\\$/, \"\\\\$\", pkgexclude);
     73 		}
     74 
     75 		/^reg / {
     76 			pattern = \"^(\" pkgexclude \")$\"
     77 			if (pkgexclude != \"\" && \$3 ~ pattern) { next }
     78 			source = \$4
     79 			gsub(/\\\$dir/, dir, source);
     80 			print source
     81 		}
     82 	" $1 | xargs
     83 }
     84 
     85 qubes_policy() {
     86 	_file=${1##*/}
     87 	_out=$outdir/$_file
     88 	_name=${_file%.*}
     89 
     90 	build qubes_policy $_out $1
     91 	bind policy $_name
     92 
     93 	INSTALL="$INSTALL $_out"
     94 }
     95 
     96 qubes_prefs() {
     97 	_out=$outdir/qubes-pref-$1
     98 	build qubes_prefs $_out
     99 	bind args $*
    100 
    101 	INSTALL="$INSTALL $_out"
    102 }
    103 
    104 qvm_create() {
    105 	_out=$outdir/created
    106 	_args=
    107 	_deps=
    108 
    109 	while [ $# -gt 0 ]; do
    110 		case $1 in
    111 		--template) _deps=./qubes/$2/create
    112 		esac
    113 		_args="$_args $1"
    114 		shift
    115 	done
    116 
    117 	build qvm_create $_out '||' $_deps
    118 	bind args $_args
    119 
    120 	phony create $_out
    121 	INSTALL="$INSTALL $_out"
    122 }
    123 
    124 qvm_prefs() {
    125 	_prop=$1
    126 	_value=$2
    127 	_deps=
    128 	_out=$outdir/qvm-pref-$_prop
    129 
    130 	# if [ $_value == "${_value#--}" ]; then
    131 	case $_prop in
    132 	netvm)
    133 		_deps=./qubes/$_value/provides_network
    134 		;;
    135 	provides_network)
    136 		phony provides_network $_out
    137 		;;
    138 	audiovm|default_dispvm|guivm|management_dispvm)
    139 		_deps=./qubes/$_value/create
    140 		;;
    141 	esac
    142 
    143 	build qvm_prefs $_out '|' $dir/create '||' $_deps
    144 	bind args $_prop $_value
    145 
    146 	INSTALL="$INSTALL $_out"
    147 }
    148 
    149 qvm_features() {
    150 	_prop=$1
    151 	shift
    152 	_value="$*"
    153 	_out=$outdir/qvm-feature-$_prop
    154 
    155 	build qvm_features $_out '|' $dir/create
    156 	bind prop $_prop
    157 	bind value $_value
    158 
    159 	INSTALL="$INSTALL $_out"
    160 }
    161 
    162 qvm_service() {
    163 	_prop=$1
    164 	_out=$outdir/qvm-service-$_prop
    165 
    166 	build qvm_service $_out '|' $dir/create
    167 	bind args $*
    168 
    169 	INSTALL="$INSTALL $_out"
    170 }
    171 
    172 qvm_tags() {
    173 	_outs=
    174 	for _v in $*; do
    175 		_outs="$_outs $outdir/qvm-tag-$_v"
    176 	done
    177 
    178 	build qvm_tags "$_outs" '|' $dir/create
    179 	bind tags $*
    180 
    181 	INSTALL="$INSTALL $_outs"
    182 }
    183 
    184 volume_import() {
    185 	_volume=$1
    186 	_size=$(( ${2%M} * 1048576 ))
    187 	_out=$outdir/qvm-volume-import-$_volume
    188 
    189 	build volume_import $_out $outdir/root.tar.gz \
    190 		'|' $dir/create $hostdir/pax $qubesdir/volume_import.sh
    191 	bind volume $_volume
    192 	bind size $_size
    193 
    194 	INSTALL="$INSTALL $_out"
    195 }