linux-qubasis

linux oasis port as a qubes template

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

commit de19fd10e5fc0dbc7259ec7e29a8dc43d1120586
parent deb66336620b4239347a2b8ae2e3fc13c9f7670d
Author: Jul <jul@9o.is>
Date:   Mon, 29 Sep 2025 18:59:57 +0800

half-baked failed attempt to run xen/qrexec in template

Diffstat:
M.gitmodules | 14++++++++++++++
Mgen.sh | 4++++
Apkg/qubes-core-qrexec/gen.sh | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apkg/qubes-core-qrexec/repo | 1+
Apkg/qubes-core-vchan-xen/gen.sh | 26++++++++++++++++++++++++++
Apkg/qubes-core-vchan-xen/repo | 1+
Apkg/xen/config.h | 169+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apkg/xen/gen.sh | 438+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apkg/xen/include/xen/foreign/x86_32.h | 217+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apkg/xen/include/xen/foreign/x86_64.h | 238+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Apkg/xen/repo | 1+
Apkg/xen/xldevd.c | 43+++++++++++++++++++++++++++++++++++++++++++
Apkg/yajl/gen.sh | 48++++++++++++++++++++++++++++++++++++++++++++++++
Apkg/yajl/repo | 1+
Apkg/yajl/version.awk | 6++++++
Mtpl/example/etc/perp/.boot/rc.perp | 1+
Atpl/example/etc/perp/qubes-qrexec-agent/rc.main | 17+++++++++++++++++
Atpl/example/etc/perp/qubes-qrexec-fork-server/rc.main | 16++++++++++++++++
Atpl/example/etc/perp/xendriverdomain/rc.main | 24++++++++++++++++++++++++
Mtpl/example/gen.sh | 21+++++++++++++++++++--
20 files changed, 1343 insertions(+), 2 deletions(-)

diff --git a/.gitmodules b/.gitmodules @@ -94,3 +94,17 @@ path = pkg/bestline/repo url = https://github.com/jart/bestline ignore = all +[submodule "xen"] + path = pkg/xen/repo + url = git://xenbits.xen.org/xen.git + ignore = all +[submodule "qubes-core-vchan-xen"] + path = pkg/qubes-core-vchan-xen/repo + url = https://github.com/QubesOS/qubes-core-vchan-xen + ignore = all +[submodule "qubes-core-qrexec"] + path = pkg/qubes-core-qrexec/repo + url = https://github.com/QubesOS/qubes-core-qrexec +[submodule "yajl"] + path = pkg/yajl/repo + url = https://github.com/lloyd/yajl diff --git a/gen.sh b/gen.sh @@ -32,12 +32,16 @@ subgen pkg/oksh subgen pkg/pax subgen pkg/perp subgen pkg/probe +# subgen pkg/qubes-core-qrexec +# subgen pkg/qubes-core-vchan-xen subgen pkg/rc subgen pkg/sbase subgen pkg/sinit subgen pkg/ubase subgen pkg/util-linux +# subgen pkg/xen subgen pkg/xz-embedded +# subgen pkg/yajl subgen pkg/zlib subgen pkg/zstd diff --git a/pkg/qubes-core-qrexec/gen.sh b/pkg/qubes-core-qrexec/gen.sh @@ -0,0 +1,59 @@ +fetch git + +cflags " + -std=gnu11 + -D _GNU_SOURCE + -D _POSIX_C_SOURCE=200809L + -U HAVE_PAM + -I $srcdir/libqrexec + -I $pkgdir/qubes-core-vchan-xen/include + -Wno-variadic-macros + -Wno-incompatible-pointer-types + -Wno-pedantic + -Wno-implicit-function-declaration + -Wno-int-conversion + -Wno-cpp +" + +dep qubes-core-vchan-xen/headers + +lib libqrexec-utils.a " + libqrexec/buffer.c + libqrexec/exec.c + libqrexec/ioall.c + libqrexec/log.c + libqrexec/open_logger.c + libqrexec/process_io.c + libqrexec/remote.c + libqrexec/replace.c + libqrexec/toml.c + libqrexec/txrx-vchan.c + libqrexec/unix-server.c + libqrexec/vchan_timeout.c + libqrexec/write-stdin.c +" + +exe qrexec-agent " + agent/qrexec-agent.c + agent/qrexec-agent-data.c + $outdir/libqrexec-utils.a.d + $pkgdir/qubes-core-vchan-xen/libvchanxen.a.d +" + +exe qrexec-fork-server " + agent/qrexec-fork-server.c + agent/qrexec-agent-data.c + $outdir/libqrexec-utils.a.d + $pkgdir/qubes-core-vchan-xen/libvchanxen.a.d +" + +exe qrexec-client-vm " + agent/qrexec-client-vm.c + agent/qrexec-agent-data.c + $outdir/libqrexec-utils.a.d + $pkgdir/qubes-core-vchan-xen/libvchanxen.a.d +" + +bin qrexec-agent +bin qrexec-fork-server +bin qrexec-client-vm diff --git a/pkg/qubes-core-qrexec/repo b/pkg/qubes-core-qrexec/repo @@ -0,0 +1 @@ +Subproject commit 66d41d3d3cabef2e391f3943f314ca63ae9b3f5f diff --git a/pkg/qubes-core-vchan-xen/gen.sh b/pkg/qubes-core-vchan-xen/gen.sh @@ -0,0 +1,26 @@ +fetch git + +cflags " + -DHAVE_XC_DOMAIN_GETINFO_SINGLE + -I $pkgdir/xen/include + -Wno-pedantic + -Wno-implicit-function-declaration +" + +headers vchan/libvchan.h +dep xen/headers + +lib libvchanxen.a " + vchan/init.c + vchan/io.c + $pkgdir/xen/libxenctrl.a + $pkgdir/xen/libxenvchan.a + $pkgdir/xen/libxenstore.a + $pkgdir/xen/libxengnttab.a + $pkgdir/xen/libxentoollog.a + $pkgdir/xen/libxenevtchn.a + $pkgdir/xen/libxencall.a + $pkgdir/xen/libxentoolcore.a + $pkgdir/xen/libxenforeignmemory.a + $pkgdir/xen/libxendevicemodel.a +" diff --git a/pkg/qubes-core-vchan-xen/repo b/pkg/qubes-core-vchan-xen/repo @@ -0,0 +1 @@ +Subproject commit ff48831740a4019309cb5ea19856c9ef9631d502 diff --git a/pkg/xen/config.h b/pkg/xen/config.h @@ -0,0 +1,169 @@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Enabling support partial device tree in libxl */ +/* #undef ENABLE_PARTIAL_DEVICE_TREE */ + +/* Define to 1 if you have the declaration of `fdt_first_subnode', and to 0 if + you don't. */ +/* #undef HAVE_DECL_FDT_FIRST_SUBNODE */ + +/* Define to 1 if you have the declaration of `fdt_next_subnode', and to 0 if + you don't. */ +/* #undef HAVE_DECL_FDT_NEXT_SUBNODE */ + +/* Define to 1 if you have the declaration of `fdt_property_u32', and to 0 if + you don't. */ +/* #undef HAVE_DECL_FDT_PROPERTY_U32 */ + +/* Define to 1 if you have the `fdt_first_subnode' function. */ +/* #undef HAVE_FDT_FIRST_SUBNODE */ + +/* Define to 1 if you have the `fdt_next_subnode' function. */ +/* #undef HAVE_FDT_NEXT_SUBNODE */ + +/* Define to 1 if you have the <inttypes.h> header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if you have the `fdt' library (-lfdt). */ +/* #undef HAVE_LIBFDT */ + +/* Define to 1 if you have the `lzma' library (-llzma). */ +/* #undef HAVE_LIBLZMA */ + +/* Define to 1 if you have the `yajl' library (-lyajl). */ +#define HAVE_LIBYAJL 1 + +/* Define to 1 if you have the `z' library (-lz). */ +#define HAVE_LIBZ 1 + +/* Define to 1 if you have the `pipe2' function. */ +#define HAVE_PIPE2 1 + +/* pygrub enabled */ +/* #undef HAVE_PYGRUB */ + +/* ROMBIOS enabled */ +/* #undef HAVE_ROMBIOS */ + +/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the <stdio.h> header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the <strings.h> header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#define HAVE_STRING_H 1 + +/* Systemd available and enabled */ +/* #undef HAVE_SYSTEMD */ + +/* Define to 1 if you have the <sys/eventfd.h> header file. */ +#define HAVE_SYS_EVENTFD_H 1 + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the <sys/types.h> header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if you have the <utmp.h> header file. */ +#define HAVE_UTMP_H 1 + +/* Define to 1 if you have the <valgrind/memcheck.h> header file. */ +/* #undef HAVE_VALGRIND_MEMCHECK_H */ + +/* Define to 1 if you have the <yajl/yajl_version.h> header file. */ +#define HAVE_YAJL_YAJL_VERSION_H 1 + +/* Define curses header to use */ +#define INCLUDE_CURSES_H <ncurses.h> + +/* Header path for INCLUDE_ENDIAN_H */ +#define INCLUDE_ENDIAN_H <endian.h> + +/* Define extfs header to use */ +/* #undef INCLUDE_EXTFS_H */ + +/* IPXE path */ +/* #undef IPXE_PATH */ + +/* Xen's libexec path */ +#define LIBEXEC_BIN "/usr/local/lib/xen/bin" + +/* OVMF path */ +/* #undef OVMF_PATH */ + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "xen-devel@lists.xen.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "Xen Hypervisor Tools" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "Xen Hypervisor Tools 4.19" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "xen" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "https://www.xen.org/" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "4.19" + +/* Qemu Xen path */ +#define QEMU_XEN_PATH "/usr/local/lib/xen/bin/qemu-system-i386" + +/* SeaBIOS path */ +/* #undef SEABIOS_PATH */ + +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ +#define STDC_HEADERS 1 + +/* QMP proxy path */ +#define STUBDOM_QMP_PROXY_PATH "/usr/local/bin/vchan-socket-proxy" + +/* Xen's firmware dir */ +#define XENFIRMWAREDIR "/usr/local/lib/xen/boot" + +/* Xen's config dir */ +#define XEN_CONFIG_DIR "/etc/xen" + +/* Xen's dump directory */ +#define XEN_DUMP_DIR "/var/lib/xen/dump" + +/* Xen's lib dir */ +#define XEN_LIB_DIR "/var/lib/xen" + +/* Xen's lock dir */ +#define XEN_LOCK_DIR "/var/lock" + +/* Xen's log dir */ +#define XEN_LOG_DIR "/var/log/xen" + +/* Xen's runstate path */ +#define XEN_RUN_DIR "/var/run/xen" + +/* Xenstore's runstate path */ +#define XEN_RUN_STORED "/var/run/xenstored" + +/* Xen's script dir */ +#define XEN_SCRIPT_DIR "/etc/xen/scripts" + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define for large files, on AIX-style hosts. */ +/* #undef _LARGE_FILES */ diff --git a/pkg/xen/gen.sh b/pkg/xen/gen.sh @@ -0,0 +1,438 @@ +# missing: +# - scripts to generate headers (needs python, perl, iasl) +# - need to better organize the headers +# - allow custom cflags per lib +# - separate x86 files +# - xldevd and xl devd trigger a fatal error: +# - libxl: critical: pkg/xen/repo/tools/libs/light/libxl_event.c:694:watchfd_callback: DISASTER in event loop: cannot check/read watches: Bad file descriptor +# - Assertion failed: !libxl__watch_slot_contents(gc, i) (pkg/xen/repo/tools/libs/light/libxl.c: libxl_ctx_free: 158) +# - last error happens atexit cleanup +# - same error occurs in a fedora template, so I assume something is wrong with the statically-linked binary or versioning problem + +fetch git + +case $TARGET_ARCH in + x86_64) xen_arch=x86;; + *) error "Unsupported arch $TARGET_ARCH";; +esac + +cflags " + -std=gnu99 + -D __XEN_TOOLS__ + -D HAVE_YAJL_YAJL_VERSION_H + -D LIBACPI_STDUTILS="'\"../libs/light/libxl_x86_acpi.h\"'" + -D _LARGEFILE_SOURCE + -D _LARGEFILE64_SOURCE + -include $srcdir/tools/config.h + -I $outdir/include + -I $srcdir/include + -I $srcdir/xen/include + -I $srcdir/tools/include + -I $srcdir/tools/libs/light + -I $pkgdir/util-linux/include + -I $pkgdir/yajl/include + -I $pkgdir/zlib/include + -Wno-pedantic + -Wno-sign-compare + -Wno-unused-parameter + -Wno-implicit-function-declaration + -Wno-return-type + -Wno-unused-but-set-variable + -Wno-implicit-fallthrough + -Wno-cast-function-type + -Wno-format-zero-length + -Wno-old-style-declaration + -Wno-missing-field-initializers +" + +dep " + $tgtdir/headers + yajl/headers +" + +xen_custom_headers() { + for x in $*; do + in=$dir/include/$x + out=$outdir/include/$x + build copy $out $in + headers $out + done +} + +xen_sys_headers() { + for x in $*; do + in=$srcdir/tools/include/xen-sys/Linux/$x + out=$outdir/include/xen/sys/$x + build copy $out $in + headers $out + done +} + +xen_tools_headers() { + for x in $*; do + in=$srcdir/tools/include/$x + out=$outdir/include/$x + build copy $out $in + headers $out + done +} + +xen_headers() { + for x in $*; do + in=$srcdir/xen/include/public/$x + out=$outdir/include/xen/$x + build copy $out $in + sync $in + headers $out + done +} + +xen_tools_headers " + _libxl_types_json.h + libxenvchan.h + libxl.h + libxl_event.h + libxl_utils.h + libxl_json.h + libxl_uuid.h + xenctrl.h + xenctrl_compat.h + xenevtchn.h + xengnttab.h + xenstore.h + xenstore_lib.h + xentoollog.h + xentoolcore.h + xentoolcore_internal.h + xen_list.h + xencall.h + xenforeignmemory.h + xendevicemodel.h + xenguest.h + xenhypfs.h + xen-tools/common-macros.h + xen-tools/xenstore-common.h + xen-xsm/flask/flask.h +" + +headers " + tools/libacpi/libacpi.h + tools/libs/ctrl/xc_private.h + tools/libs/ctrl/xc_bitops.h +" + +xen_sys_headers " + evtchn.h + gntalloc.h + gntdev.h + privcmd.h +" + +xen_custom_headers " + xen/foreign/x86_32.h + xen/foreign/x86_64.h +" + +xen_headers " + arch-$xen_arch/hvm/save.h + arch-$xen_arch/xen-mca.h + arch-$xen_arch/xen-x86_64.h + arch-$xen_arch/xen.h + arch-$xen_arch/cpuid.h + domctl.h + errno.h + elfnote.h + event_channel.h + grant_table.h + hypfs.h + hvm/dm_op.h + hvm/hvm_op.h + hvm/params.h + hvm/save.h + hvm/ioreq.h + hvm/hvm_info_table.h + hvm/hvm_xs_strings.h + hvm/e820.h + io/libxenvchan.h + io/xs_wire.h + io/xenbus.h + io/sndif.h + io/kbdif.h + io/ring.h + io/displif.h + io/usbif.h + kexec.h + memory.h + physdev.h + platform.h + sched.h + sysctl.h + trace.h + version.h + features.h + xen-compat.h + xen.h + xsm/flask_op.h +" + +lib libxentoolcore.a " + tools/libs/toolcore/handlereg.c +" + +lib libxentoollog.a " + tools/libs/toollog/xtl_core.c + tools/libs/toollog/xtl_logger_stdio.c +" + +lib libxenevtchn.a " + tools/libs/evtchn/core.c + tools/libs/evtchn/linux.c +" + +lib libxengnttab.a " + tools/libs/gnttab/gnttab_core.c + tools/libs/gnttab/gntshr_core.c + tools/libs/gnttab/linux.c +" + +lib libxencall.a " + tools/libs/call/core.c + tools/libs/call/buffer.c + tools/libs/call/linux.c +" + +lib libxenforeignmemory.a " + tools/libs/foreignmemory/core.c + tools/libs/foreignmemory/linux.c +" + +lib libxendevicemodel.a " + tools/libs/devicemodel/core.c + tools/libs/devicemodel/common.c +" + +lib libxenctrl.a " + tools/libs/ctrl/xc_altp2m.c + tools/libs/ctrl/xc_arinc653.c + tools/libs/ctrl/xc_cpu_hotplug.c + tools/libs/ctrl/xc_cpupool.c + tools/libs/ctrl/xc_csched.c + tools/libs/ctrl/xc_csched2.c + tools/libs/ctrl/xc_devicemodel_compat.c + tools/libs/ctrl/xc_domain.c + tools/libs/ctrl/xc_evtchn.c + tools/libs/ctrl/xc_evtchn_compat.c + tools/libs/ctrl/xc_flask.c + tools/libs/ctrl/xc_foreign_memory.c + tools/libs/ctrl/xc_gnttab.c + tools/libs/ctrl/xc_gnttab_compat.c + tools/libs/ctrl/xc_hcall_buf.c + tools/libs/ctrl/xc_kexec.c + tools/libs/ctrl/xc_linux.c + tools/libs/ctrl/xc_mem_access.c + tools/libs/ctrl/xc_mem_paging.c + tools/libs/ctrl/xc_memshr.c + tools/libs/ctrl/xc_misc.c + tools/libs/ctrl/xc_monitor.c + tools/libs/ctrl/xc_pagetab.c + tools/libs/ctrl/xc_physdev.c + tools/libs/ctrl/xc_pm.c + tools/libs/ctrl/xc_private.c + tools/libs/ctrl/xc_psr.c + tools/libs/ctrl/xc_resource.c + tools/libs/ctrl/xc_rt.c + tools/libs/ctrl/xc_tbuf.c + tools/libs/ctrl/xc_vm_event.c + tools/libs/ctrl/xc_vmtrace.c +" + +lib libxenguest.a " + xen/common/libelf/libelf-dominfo.c + xen/common/libelf/libelf-loader.c + xen/common/libelf/libelf-tools.c + xen/lib/x86/cpuid.c + xen/lib/x86/msr.c + xen/lib/x86/policy.c + tools/libs/guest/xg_core.c + tools/libs/guest/xg_core_x86.c + tools/libs/guest/xg_cpuid_x86.c + tools/libs/guest/xg_dom_binloader.c + tools/libs/guest/xg_dom_boot.c + tools/libs/guest/xg_dom_bzimageloader.c + tools/libs/guest/xg_dom_compat_linux.c + tools/libs/guest/xg_dom_core.c + tools/libs/guest/xg_dom_decompress_lz4.c + tools/libs/guest/xg_dom_elfloader.c + tools/libs/guest/xg_dom_hvmloader.c + tools/libs/guest/xg_dom_x86.c + tools/libs/guest/xg_domain.c + tools/libs/guest/xg_offline_page.c + tools/libs/guest/xg_private.c + tools/libs/guest/xg_resume.c + tools/libs/guest/xg_sr_common.c + tools/libs/guest/xg_sr_common_x86.c + tools/libs/guest/xg_sr_common_x86_pv.c + tools/libs/guest/xg_sr_restore.c + tools/libs/guest/xg_sr_restore_x86_hvm.c + tools/libs/guest/xg_sr_restore_x86_pv.c + tools/libs/guest/xg_sr_save.c + tools/libs/guest/xg_sr_save_x86_hvm.c + tools/libs/guest/xg_sr_save_x86_pv.c + tools/libs/guest/xg_suspend.c +" + +lib libxenstore.a " + tools/libs/store/xs.c +" + +lib libxenvchan.a " + tools/libs/vchan/init.c + tools/libs/vchan/io.c +" + +lib libxenhypfs.a " + tools/libs/hypfs/core.c +" + +lib libxenlight.a " + tools/libs/light/_libxl_save_msgs_callout.c + tools/libs/light/_libxl_types.c + tools/libs/light/_libxl_types_internal.c + tools/libs/light/dsdt_pvh.c + tools/libs/light/flexarray.c + tools/libs/light/libxl.c + tools/libs/light/libxl_9pfs.c + tools/libs/light/libxl_aoutils.c + tools/libs/light/libxl_bootloader.c + tools/libs/light/libxl_checkpoint_device.c + tools/libs/light/libxl_console.c + tools/libs/light/libxl_convert_callout.c + tools/libs/light/libxl_cpuid.c + tools/libs/light/libxl_cpupool.c + tools/libs/light/libxl_create.c + tools/libs/light/libxl_device.c + tools/libs/light/libxl_disk.c + tools/libs/light/libxl_dm.c + tools/libs/light/libxl_dom.c + tools/libs/light/libxl_dom_save.c + tools/libs/light/libxl_dom_suspend.c + tools/libs/light/libxl_domain.c + tools/libs/light/libxl_event.c + tools/libs/light/libxl_exec.c + tools/libs/light/libxl_flask.c + tools/libs/light/libxl_fork.c + tools/libs/light/libxl_genid.c + tools/libs/light/libxl_internal.c + tools/libs/light/libxl_json.c + tools/libs/light/libxl_linux.c + tools/libs/light/libxl_mem.c + tools/libs/light/libxl_nic.c + tools/libs/light/libxl_no_colo.c + tools/libs/light/libxl_nonetbuffer.c + tools/libs/light/libxl_numa.c + tools/libs/light/libxl_paths.c + tools/libs/light/libxl_pci.c + tools/libs/light/libxl_psr.c + tools/libs/light/libxl_pvcalls.c + tools/libs/light/libxl_qmp.c + tools/libs/light/libxl_remus.c + tools/libs/light/libxl_remus_disk_drbd.c + tools/libs/light/libxl_save_callout.c + tools/libs/light/libxl_sched.c + tools/libs/light/libxl_setresuid.c + tools/libs/light/libxl_stream_read.c + tools/libs/light/libxl_stream_write.c + tools/libs/light/libxl_tmem.c + tools/libs/light/libxl_usb.c + tools/libs/light/libxl_utils.c + tools/libs/light/libxl_uuid.c + tools/libs/light/libxl_vdispl.c + tools/libs/light/libxl_virtio.c + tools/libs/light/libxl_vkb.c + tools/libs/light/libxl_vnuma.c + tools/libs/light/libxl_vsnd.c + tools/libs/light/libxl_vtpm.c + tools/libs/light/libxl_x86.c + tools/libs/light/libxl_x86_acpi.c + tools/libs/light/libxl_xshelp.c + tools/libs/light/osdeps.c + tools/libacpi/build.c + tools/libacpi/static_tables.c +" + +exe xldevd " + $dir/xldevd.c + $outdir/libxenlight.a + $outdir/libxenguest.a + $outdir/libxenctrl.a + $outdir/libxenhypfs.a + $outdir/libxenstore.a + $outdir/libxendevicemodel.a + $outdir/libxenforeignmemory.a + $outdir/libxengnttab.a + $outdir/libxenevtchn.a + $outdir/libxencall.a + $outdir/libxentoollog.a + $outdir/libxentoolcore.a + $pkgdir/util-linux/libuuid.a.d + $pkgdir/zlib/libz.a + $pkgdir/yajl/yajl.a +" + +lib libxlutil.a " + tools/libs/util/libxlu_cfg_y.c + tools/libs/util/libxlu_cfg_l.c + tools/libs/util/libxlu_cfg.c + tools/libs/util/libxlu_disk_l.c + tools/libs/util/libxlu_disk.c + tools/libs/util/libxlu_vif.c + tools/libs/util/libxlu_pci.c +" + +exe xl " + tools/xl/xl.c + tools/xl/xl_cmdtable.c + tools/xl/xl_sxp.c + tools/xl/xl_utils.c + tools/xl/xl_psr.c + tools/xl/xl_parse.c + tools/xl/xl_cpupool.c + tools/xl/xl_flask.c + tools/xl/xl_vtpm.c + tools/xl/xl_block.c + tools/xl/xl_nic.c + tools/xl/xl_usb.c + tools/xl/xl_sched.c + tools/xl/xl_pci.c + tools/xl/xl_vcpu.c + tools/xl/xl_cdrom.c + tools/xl/xl_mem.c + tools/xl/xl_info.c + tools/xl/xl_console.c + tools/xl/xl_misc.c + tools/xl/xl_vmcontrol.c + tools/xl/xl_saverestore.c + tools/xl/xl_migrate.c + tools/xl/xl_vdispl.c + tools/xl/xl_vsnd.c + tools/xl/xl_vkb.c + $outdir/libxlutil.a + $outdir/libxenlight.a + $outdir/libxenguest.a + $outdir/libxenctrl.a + $outdir/libxenhypfs.a + $outdir/libxenstore.a + $outdir/libxendevicemodel.a + $outdir/libxenforeignmemory.a + $outdir/libxengnttab.a + $outdir/libxenevtchn.a + $outdir/libxencall.a + $outdir/libxentoollog.a + $outdir/libxentoolcore.a + $pkgdir/util-linux/libuuid.a.d + $pkgdir/zlib/libz.a + $pkgdir/yajl/yajl.a +" + +bin xl +bin xldevd diff --git a/pkg/xen/include/xen/foreign/x86_32.h b/pkg/xen/include/xen/foreign/x86_32.h @@ -0,0 +1,217 @@ +/* SPDX-License-Identifier: MIT */ +/* + * public xen defines and struct for x86_32 + * generated from xen/arch-x86/xen-x86_32.h xen/arch-x86/xen.h xen/xen.h by mkheader.py -- DO NOT EDIT + */ + +#ifndef __FOREIGN_X86_32_H_TMP__ +#define __FOREIGN_X86_32_H_TMP__ 1 + + +#define __DECL_REG_LO8(which) uint32_t e ## which ## x +#define __DECL_REG_LO16(name) uint32_t e ## name +#define __i386___X86_32 1 +#pragma pack(4) + +#define FLAT_RING1_CS_X86_32 0xe019 /* GDT index 259 */ +#define FLAT_RING1_DS_X86_32 0xe021 /* GDT index 260 */ +#define FLAT_RING1_SS_X86_32 0xe021 /* GDT index 260 */ +#define FLAT_KERNEL_CS_X86_32 FLAT_RING1_CS_X86_32 +#define FLAT_KERNEL_DS_X86_32 FLAT_RING1_DS_X86_32 +#define FLAT_KERNEL_SS_X86_32 FLAT_RING1_SS_X86_32 +#define xen_pfn_to_cr3_x86_32(pfn) (((unsigned)(pfn) << 12) | ((unsigned)(pfn) >> 20)) +#define xen_cr3_to_pfn_x86_32(cr3) (((unsigned)(cr3) >> 12) | ((unsigned)(cr3) << 20)) +#define XEN_HAVE_PV_GUEST_ENTRY_X86_32 1 +#define XEN_LEGACY_MAX_VCPUS_X86_32 32 +#define _VGCF_i387_valid_X86_32 0 +#define VGCF_i387_valid_X86_32 (1<<_VGCF_i387_valid_X86_32) +#define _VGCF_in_kernel_X86_32 2 +#define VGCF_in_kernel_X86_32 (1<<_VGCF_in_kernel_X86_32) +#define _VGCF_failsafe_disables_events_X86_32 3 +#define VGCF_failsafe_disables_events_X86_32 (1<<_VGCF_failsafe_disables_events_X86_32) +#define _VGCF_syscall_disables_events_X86_32 4 +#define VGCF_syscall_disables_events_X86_32 (1<<_VGCF_syscall_disables_events_X86_32) +#define _VGCF_online_X86_32 5 +#define VGCF_online_X86_32 (1<<_VGCF_online_X86_32) +#define MAX_GUEST_CMDLINE_X86_32 1024 + +#define x86_32_has_no_vcpu_cr_regs 1 + +#define x86_32_has_no_vcpu_ar_regs 1 + +struct start_info_x86_32 { + char magic[32]; + uint32_t nr_pages; + uint32_t shared_info; + uint32_t flags; + uint32_t store_mfn; + uint32_t store_evtchn; + union { + struct { + uint32_t mfn; + uint32_t evtchn; + } domU; + struct { + uint32_t info_off; + uint32_t info_size; + } dom0; + } console; + uint32_t pt_base; + uint32_t nr_pt_frames; + uint32_t mfn_list; + uint32_t mod_start; + uint32_t mod_len; + int8_t cmd_line[MAX_GUEST_CMDLINE_X86_32]; + uint32_t first_p2m_pfn; + uint32_t nr_p2m_frames; +}; +typedef struct start_info_x86_32 start_info_x86_32_t; + +struct trap_info_x86_32 { + uint8_t vector; + uint8_t flags; + uint16_t cs; + uint32_t address; +}; +typedef struct trap_info_x86_32 trap_info_x86_32_t; + +struct cpu_user_regs_x86_32 { + __DECL_REG_LO8(b); + __DECL_REG_LO8(c); + __DECL_REG_LO8(d); + __DECL_REG_LO16(si); + __DECL_REG_LO16(di); + __DECL_REG_LO16(bp); + __DECL_REG_LO8(a); + uint16_t error_code; + uint16_t entry_vector; + __DECL_REG_LO16(ip); + uint16_t cs; + uint8_t saved_upcall_mask; + uint8_t _pad0; + __DECL_REG_LO16(flags); + __DECL_REG_LO16(sp); + uint16_t ss, _pad1; + uint16_t es, _pad2; + uint16_t ds, _pad3; + uint16_t fs, _pad4; + uint16_t gs, _pad5; +}; +typedef struct cpu_user_regs_x86_32 cpu_user_regs_x86_32_t; + +#define x86_32_has_no_vcpu_guest_core_regs 1 + +struct vcpu_guest_context_x86_32 { + struct { char x[512]; } fpu_ctxt; + uint32_t flags; +#ifdef __XEN__ + struct guest_user_regs user_regs; +#else + struct cpu_user_regs_x86_32 user_regs; +#endif + struct trap_info_x86_32 trap_ctxt[256]; + uint32_t ldt_base, ldt_ents; + uint32_t gdt_frames[16], gdt_ents; + uint32_t kernel_ss, kernel_sp; + uint32_t ctrlreg[8]; + uint32_t debugreg[8]; +#ifdef __i386___X86_32 + uint32_t event_callback_cs; + uint32_t event_callback_eip; + uint32_t failsafe_callback_cs; + uint32_t failsafe_callback_eip; +#else + uint32_t event_callback_eip; + uint32_t failsafe_callback_eip; +#ifdef __XEN__ + union { + uint32_t syscall_callback_eip; + struct { + unsigned int event_callback_cs; + unsigned int failsafe_callback_cs; + }; + }; +#else + uint32_t syscall_callback_eip; +#endif +#endif + uint32_t vm_assist; +#ifdef __x86_64___X86_32 + uint64_t fs_base; + uint64_t gs_base_kernel; + uint64_t gs_base_user; +#endif +}; +typedef struct vcpu_guest_context_x86_32 vcpu_guest_context_x86_32_t; + +struct arch_vcpu_info_x86_32 { + uint32_t cr2; + uint32_t pad[5]; +}; +typedef struct arch_vcpu_info_x86_32 arch_vcpu_info_x86_32_t; + +struct vcpu_time_info_x86_32 { + uint32_t version; + uint32_t pad0; + uint64_t tsc_timestamp; + uint64_t system_time; + uint32_t tsc_to_system_mul; + int8_t tsc_shift; +#if __XEN_INTERFACE_VERSION__ > 0x040600 + uint8_t flags; + uint8_t pad1[2]; +#else + int8_t pad1[3]; +#endif +}; +typedef struct vcpu_time_info_x86_32 vcpu_time_info_x86_32_t; + +struct vcpu_info_x86_32 { + uint8_t evtchn_upcall_pending; +#ifdef XEN_HAVE_PV_UPCALL_MASK + uint8_t evtchn_upcall_mask; +#else + uint8_t pad0; +#endif + uint32_t evtchn_pending_sel; + struct arch_vcpu_info_x86_32 arch; + vcpu_time_info_x86_32_t time; +}; +typedef struct vcpu_info_x86_32 vcpu_info_x86_32_t; + +struct arch_shared_info_x86_32 { + uint32_t max_pfn; + uint32_t pfn_to_mfn_frame_list_list; + uint32_t nmi_reason; + uint32_t p2m_cr3; + uint32_t p2m_vaddr; + uint32_t p2m_generation; +#ifdef __i386___X86_32 + uint32_t wc_sec_hi; +#endif +}; +typedef struct arch_shared_info_x86_32 arch_shared_info_x86_32_t; + +struct shared_info_x86_32 { + struct vcpu_info_x86_32 vcpu_info[XEN_LEGACY_MAX_VCPUS_X86_32]; + uint32_t evtchn_pending[sizeof(uint32_t) * 8]; + uint32_t evtchn_mask[sizeof(uint32_t) * 8]; + uint32_t wc_version; + uint32_t wc_sec; + uint32_t wc_nsec; +#if !defined(__i386___X86_32) + uint32_t wc_sec_hi; +# define xen_wc_sec_hi wc_sec_hi +#elif !defined(__XEN__) && !defined(__XEN_TOOLS__) +# define xen_wc_sec_hi arch.wc_sec_hi +#endif + struct arch_shared_info_x86_32 arch; +}; +typedef struct shared_info_x86_32 shared_info_x86_32_t; + + +#undef __DECL_REG_LO8 +#undef __DECL_REG_LO16 +#pragma pack() + +#endif /* __FOREIGN_X86_32_H_TMP__ */ diff --git a/pkg/xen/include/xen/foreign/x86_64.h b/pkg/xen/include/xen/foreign/x86_64.h @@ -0,0 +1,238 @@ +/* SPDX-License-Identifier: MIT */ +/* + * public xen defines and struct for x86_64 + * generated from xen/arch-x86/xen-x86_64.h xen/arch-x86/xen.h xen/xen.h by mkheader.py -- DO NOT EDIT + */ + +#ifndef __FOREIGN_X86_64_H_TMP__ +#define __FOREIGN_X86_64_H_TMP__ 1 + + +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) +# define __DECL_REG(name) union { uint64_t r ## name, e ## name; } +# define __align8__ __attribute__((aligned (8))) +#else +# define __DECL_REG(name) uint64_t r ## name +# define __align8__ FIXME +#endif +#define __DECL_REG_LOHI(name) __DECL_REG(name ## x) +#define __DECL_REG_LO8 __DECL_REG +#define __DECL_REG_LO16 __DECL_REG +#define __DECL_REG_HI __DECL_REG +#define __x86_64___X86_64 1 + +#define FLAT_RING3_CS64_X86_64 0xe033 /* GDT index 262 */ +#define FLAT_RING3_DS64_X86_64 0x0000 /* NULL selector */ +#define FLAT_RING3_SS64_X86_64 0xe02b /* GDT index 261 */ +#define FLAT_KERNEL_DS64_X86_64 FLAT_RING3_DS64_X86_64 +#define FLAT_KERNEL_DS_X86_64 FLAT_KERNEL_DS64_X86_64 +#define FLAT_KERNEL_CS64_X86_64 FLAT_RING3_CS64_X86_64 +#define FLAT_KERNEL_CS_X86_64 FLAT_KERNEL_CS64_X86_64 +#define FLAT_KERNEL_SS64_X86_64 FLAT_RING3_SS64_X86_64 +#define FLAT_KERNEL_SS_X86_64 FLAT_KERNEL_SS64_X86_64 +#define xen_pfn_to_cr3_x86_64(pfn) ((uint64_t)(pfn) << 12) +#define xen_cr3_to_pfn_x86_64(cr3) ((uint64_t)(cr3) >> 12) +#define XEN_HAVE_PV_GUEST_ENTRY_X86_64 1 +#define XEN_LEGACY_MAX_VCPUS_X86_64 32 +#define _VGCF_i387_valid_X86_64 0 +#define VGCF_i387_valid_X86_64 (1<<_VGCF_i387_valid_X86_64) +#define _VGCF_in_kernel_X86_64 2 +#define VGCF_in_kernel_X86_64 (1<<_VGCF_in_kernel_X86_64) +#define _VGCF_failsafe_disables_events_X86_64 3 +#define VGCF_failsafe_disables_events_X86_64 (1<<_VGCF_failsafe_disables_events_X86_64) +#define _VGCF_syscall_disables_events_X86_64 4 +#define VGCF_syscall_disables_events_X86_64 (1<<_VGCF_syscall_disables_events_X86_64) +#define _VGCF_online_X86_64 5 +#define VGCF_online_X86_64 (1<<_VGCF_online_X86_64) +#define MAX_GUEST_CMDLINE_X86_64 1024 + +#define x86_64_has_no_vcpu_cr_regs 1 + +#define x86_64_has_no_vcpu_ar_regs 1 + +struct start_info_x86_64 { + char magic[32]; + __align8__ uint64_t nr_pages; + __align8__ uint64_t shared_info; + uint32_t flags; + __align8__ uint64_t store_mfn; + uint32_t store_evtchn; + union { + struct { + __align8__ uint64_t mfn; + uint32_t evtchn; + } domU; + struct { + uint32_t info_off; + uint32_t info_size; + } dom0; + } console; + __align8__ uint64_t pt_base; + __align8__ uint64_t nr_pt_frames; + __align8__ uint64_t mfn_list; + __align8__ uint64_t mod_start; + __align8__ uint64_t mod_len; + int8_t cmd_line[MAX_GUEST_CMDLINE_X86_64]; + __align8__ uint64_t first_p2m_pfn; + __align8__ uint64_t nr_p2m_frames; +}; +typedef struct start_info_x86_64 start_info_x86_64_t; + +struct trap_info_x86_64 { + uint8_t vector; + uint8_t flags; + uint16_t cs; + __align8__ uint64_t address; +}; +typedef struct trap_info_x86_64 trap_info_x86_64_t; + +struct cpu_user_regs_x86_64 { + __DECL_REG_HI(15); + __DECL_REG_HI(14); + __DECL_REG_HI(13); + __DECL_REG_HI(12); + __DECL_REG_LO8(bp); + __DECL_REG_LOHI(b); + __DECL_REG_HI(11); + __DECL_REG_HI(10); + __DECL_REG_HI(9); + __DECL_REG_HI(8); + __DECL_REG_LOHI(a); + __DECL_REG_LOHI(c); + __DECL_REG_LOHI(d); + __DECL_REG_LO8(si); + __DECL_REG_LO8(di); + uint32_t error_code; + uint32_t entry_vector; + __DECL_REG_LO16(ip); + uint16_t cs, _pad0[1]; + uint8_t saved_upcall_mask; + uint8_t _pad1[3]; + __DECL_REG_LO16(flags); + __DECL_REG_LO8(sp); + uint16_t ss, _pad2[3]; + uint16_t es, _pad3[3]; + uint16_t ds, _pad4[3]; + uint16_t fs, _pad5[3]; + uint16_t gs, _pad6[3]; +}; +typedef struct cpu_user_regs_x86_64 cpu_user_regs_x86_64_t; + +#define x86_64_has_no_vcpu_guest_core_regs 1 + +struct vcpu_guest_context_x86_64 { + struct { char x[512]; } fpu_ctxt; + __align8__ uint64_t flags; +#ifdef __XEN__ + struct guest_user_regs user_regs; +#else + struct cpu_user_regs_x86_64 user_regs; +#endif + struct trap_info_x86_64 trap_ctxt[256]; + __align8__ uint64_t ldt_base, ldt_ents; + __align8__ uint64_t gdt_frames[16], gdt_ents; + __align8__ uint64_t kernel_ss, kernel_sp; + __align8__ uint64_t ctrlreg[8]; + __align8__ uint64_t debugreg[8]; +#ifdef __i386___X86_64 + __align8__ uint64_t event_callback_cs; + __align8__ uint64_t event_callback_eip; + __align8__ uint64_t failsafe_callback_cs; + __align8__ uint64_t failsafe_callback_eip; +#else + __align8__ uint64_t event_callback_eip; + __align8__ uint64_t failsafe_callback_eip; +#ifdef __XEN__ + union { + __align8__ uint64_t syscall_callback_eip; + struct { + unsigned int event_callback_cs; + unsigned int failsafe_callback_cs; + }; + }; +#else + __align8__ uint64_t syscall_callback_eip; +#endif +#endif + __align8__ uint64_t vm_assist; +#ifdef __x86_64___X86_64 + uint64_t fs_base; + uint64_t gs_base_kernel; + uint64_t gs_base_user; +#endif +}; +typedef struct vcpu_guest_context_x86_64 vcpu_guest_context_x86_64_t; + +struct arch_vcpu_info_x86_64 { + __align8__ uint64_t cr2; + __align8__ uint64_t pad; +}; +typedef struct arch_vcpu_info_x86_64 arch_vcpu_info_x86_64_t; + +struct vcpu_time_info_x86_64 { + uint32_t version; + uint32_t pad0; + uint64_t tsc_timestamp; + uint64_t system_time; + uint32_t tsc_to_system_mul; + int8_t tsc_shift; +#if __XEN_INTERFACE_VERSION__ > 0x040600 + uint8_t flags; + uint8_t pad1[2]; +#else + int8_t pad1[3]; +#endif +}; +typedef struct vcpu_time_info_x86_64 vcpu_time_info_x86_64_t; + +struct vcpu_info_x86_64 { + uint8_t evtchn_upcall_pending; +#ifdef XEN_HAVE_PV_UPCALL_MASK + uint8_t evtchn_upcall_mask; +#else + uint8_t pad0; +#endif + __align8__ uint64_t evtchn_pending_sel; + struct arch_vcpu_info_x86_64 arch; + vcpu_time_info_x86_64_t time; +}; +typedef struct vcpu_info_x86_64 vcpu_info_x86_64_t; + +struct arch_shared_info_x86_64 { + __align8__ uint64_t max_pfn; + __align8__ uint64_t pfn_to_mfn_frame_list_list; + __align8__ uint64_t nmi_reason; + __align8__ uint64_t p2m_cr3; + __align8__ uint64_t p2m_vaddr; + __align8__ uint64_t p2m_generation; +#ifdef __i386___X86_64 + uint32_t wc_sec_hi; +#endif +}; +typedef struct arch_shared_info_x86_64 arch_shared_info_x86_64_t; + +struct shared_info_x86_64 { + struct vcpu_info_x86_64 vcpu_info[XEN_LEGACY_MAX_VCPUS_X86_64]; + __align8__ uint64_t evtchn_pending[sizeof(uint64_t) * 8]; + __align8__ uint64_t evtchn_mask[sizeof(uint64_t) * 8]; + uint32_t wc_version; + uint32_t wc_sec; + uint32_t wc_nsec; +#if !defined(__i386___X86_64) + uint32_t wc_sec_hi; +# define xen_wc_sec_hi wc_sec_hi +#elif !defined(__XEN__) && !defined(__XEN_TOOLS__) +# define xen_wc_sec_hi arch.wc_sec_hi +#endif + struct arch_shared_info_x86_64 arch; +}; +typedef struct shared_info_x86_64 shared_info_x86_64_t; + + +#undef __DECL_REG +#undef __DECL_REG_LOHI +#undef __DECL_REG_LO8 +#undef __DECL_REG_LO16 +#undef __DECL_REG_HI + +#endif /* __FOREIGN_X86_64_H_TMP__ */ diff --git a/pkg/xen/repo b/pkg/xen/repo @@ -0,0 +1 @@ +Subproject commit 077419f04a3125c58dcf9724c954f98d1e927392 diff --git a/pkg/xen/xldevd.c b/pkg/xen/xldevd.c @@ -0,0 +1,43 @@ +#include <stdlib.h> +#include <xentoollog.h> + +typedef struct libxl__ctx libxl_ctx; +#define LIBXL_VERSION 0 +#define minmsglevel_default XTL_PROGRESS + +libxl_ctx *ctx; +xentoollog_logger_stdiostream *logger; +xentoollog_level minmsglevel = minmsglevel_default; + +void xl_ctx_alloc(void) +{ + if (libxl_ctx_alloc(&ctx, LIBXL_VERSION, 0, (xentoollog_logger*)logger)) { + fprintf(stderr, "cannot init xl context\n"); + exit(1); + } +} + +static void xl_ctx_free(void) +{ + if (ctx) { + libxl_ctx_free(ctx); + ctx = NULL; + } + if (logger) { + xtl_logger_destroy((xentoollog_logger*)logger); + logger = NULL; + } +} + +int main(int argc, char **argv) +{ + unsigned int xtl_flags = 0; + + logger = xtl_createlogger_stdiostream(stderr, minmsglevel, xtl_flags); + if (!logger) exit(EXIT_FAILURE); + + xl_ctx_alloc(); + atexit(xl_ctx_free); + + return libxl_device_events_handler(ctx, 0) ? EXIT_FAILURE : EXIT_SUCCESS; +} diff --git a/pkg/yajl/gen.sh b/pkg/yajl/gen.sh @@ -0,0 +1,48 @@ +fetch git + +YAJL_MAJOR=2 +YAJL_MINOR=1 +YAJL_MICRO=1 + +cflags " + -std=c99 + -I $srcdir/src + -I $outdir/include + -Wno-implicit-fallthrough +" + +dep $tgtdir/headers + +yajl_headers() { + for v in $*; do + in=$srcdir/src/api/$v + out=$outdir/include/yajl/$v + build copy $out $in + sync $in + headers $out + done +} + +yajl_headers " + yajl_common.h + yajl_gen.h + yajl_parse.h + yajl_tree.h +" + +build awk $outdir/include/yajl/yajl_version.h $srcdir/src/api/yajl_version.h.cmake '|' $dir/version.awk +bind expr "-f $dir/version.awk -v major=$YAJL_MAJOR -v minor=$YAJL_MINOR -v micro=$YAJL_MICRO" +sync $srcdir/src/api/yajl_version.h.cmake +headers $outdir/include/yajl/yajl_version.h + +lib yajl.a " + src/yajl.c + src/yajl_alloc.c + src/yajl_buf.c + src/yajl_encode.c + src/yajl_gen.c + src/yajl_lex.c + src/yajl_parser.c + src/yajl_tree.c + src/yajl_version.c +" diff --git a/pkg/yajl/repo b/pkg/yajl/repo @@ -0,0 +1 @@ +Subproject commit 5e3a7856e643b4d6410ddc3f84bc2f38174f2872 diff --git a/pkg/yajl/version.awk b/pkg/yajl/version.awk @@ -0,0 +1,6 @@ +{ + gsub(/\$\{YAJL_MAJOR\}/, major); + gsub(/\$\{YAJL_MINOR\}/, minor); + gsub(/\$\{YAJL_MICRO\}/, micro); + print; +} diff --git a/tpl/example/etc/perp/.boot/rc.perp b/tpl/example/etc/perp/.boot/rc.perp @@ -1,2 +1,3 @@ #!/bin/rc +mkdir -p /run/perp exec perpd $PERP_BASE diff --git a/tpl/example/etc/perp/qubes-qrexec-agent/rc.main b/tpl/example/etc/perp/qubes-qrexec-agent/rc.main @@ -0,0 +1,17 @@ +#!/bin/rc +if(! ~ $1 start) exit + +fn waitfor { + while (! perpok -u 1 $1) { + sleep 0.1 + } +} + +mkdir -p /run/qubes +mkdir -p /var/run/qubes +mkdir -p /etc/qubes-rpc +echo "*** waiting for xendriverdomain" +waitfor xendriverdomain + +echo "*** starting qrexec-agent" +exec qrexec-agent diff --git a/tpl/example/etc/perp/qubes-qrexec-fork-server/rc.main b/tpl/example/etc/perp/qubes-qrexec-fork-server/rc.main @@ -0,0 +1,16 @@ +#!/bin/rc +if(! ~ $1 start) exit + +fn waitfor { + while (! perpok -u 1 $1) { + sleep 0.1 + } +} + +echo "*** waiting for qubes-qrexec-agent" +waitfor qubes-qrexec-agent + +USER=user + +echo "*** starting qrexec-fork-server" +exec runuid user qrexec-fork-server diff --git a/tpl/example/etc/perp/xendriverdomain/rc.main b/tpl/example/etc/perp/xendriverdomain/rc.main @@ -0,0 +1,24 @@ +#!/bin/rc +if(! ~ $1 start) exit + +fn waitfor { + while (! test -e $1) { + sleep 0.1 + } +} + +echo "*** loading kernel modules" +insmod /lib/modules/6.12.37-1.qubes.fc37.x86_64/kernel/drivers/xen/xen-privcmd.ko +insmod /lib/modules/6.12.37-1.qubes.fc37.x86_64/kernel/drivers/xen/xen-gntalloc.ko +insmod /lib/modules/6.12.37-1.qubes.fc37.x86_64/kernel/drivers/xen/xen-gntdev.ko +insmod /lib/modules/6.12.37-1.qubes.fc37.x86_64/kernel/drivers/xen/xen-evtchn.ko + +echo "*** waiting for kernel modules" +waitfor /dev/xen/xenbus +waitfor /dev/xen/privcmd +waitfor /dev/xen/gntalloc +waitfor /dev/xen/gntdev +waitfor /dev/xen/evtchn + +echo "*** staring xl devd" +exec xl devd diff --git a/tpl/example/gen.sh b/tpl/example/gen.sh @@ -28,19 +28,36 @@ etc rc.shutdown 0755 etc passwd etc group etc shadow 0000 -etc perp/.boot/rc.perp 0755 + etc perp/.default/rc.log 0755 + +etc perp/.boot/rc.perp 0755 +sym ../.default/rc.log /etc/perp/.boot/rc.log + etc perp/.getty/rc.main 0755 dir /etc/perp/getty@hvc0 1755 -sym ../.default/rc.log /etc/perp/.boot/rc.log sym ../.getty/rc.main /etc/perp/getty@hvc0/rc.main +dir /etc/perp/xendriverdomain 0755 +etc perp/xendriverdomain/rc.main 0755 +sym ../.default/rc.log /etc/perp/xendriverdomain/rc.log + +dir /etc/perp/qubes-qrexec-agent 0755 +etc perp/qubes-qrexec-agent/rc.main 0755 +sym ../.default/rc.log /etc/perp/qubes-qrexec-agent/rc.log + +dir /etc/perp/qubes-qrexec-fork-server 0755 +etc perp/qubes-qrexec-fork-server/rc.main 0755 +sym ../.default/rc.log /etc/perp/qubes-qrexec-fork-server/rc.log + pkg oksh pkg perp pkg rc pkg sbase pkg sinit pkg ubase +pkg qubes-core-qrexec +pkg xen pkg mandoc " /bin/mandoc