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 }