diff --git a/dom0/aux-tools/prepare_volatile_img.sh b/dom0/aux-tools/prepare_volatile_img.sh new file mode 100755 index 00000000..ab716d6d --- /dev/null +++ b/dom0/aux-tools/prepare_volatile_img.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +if [ "`id -u`" != "0" ]; then + exec sudo $0 $* +fi + +set -e + +FILENAME=$1 +ROOT_SIZE=$2 +SWAP_SIZE=$[ 1024 ] + +if [ -z "$ROOT_SIZE" -o -z "$FILENAME" ]; then + echo "Usage: $0 " + exit 1 +fi + +if [ -e "$FILENAME" ]; then + echo "$FILENAME already exists, not overriding" + exit 1 +fi + +TOTAL_SIZE=$[ $ROOT_SIZE + $SWAP_SIZE + 512 ] +truncate -s ${TOTAL_SIZE}M "$FILENAME" +sfdisk --no-reread -u M "$FILENAME" > /dev/null 2> /dev/null < /dev/null +kpartx -s -d ${loopdev} +losetup -d ${loopdev} || : +chown --reference `dirname "$FILENAME"` "$FILENAME" diff --git a/dom0/qvm-core/qubes.py b/dom0/qvm-core/qubes.py index 89294449..03cd601e 100755 --- a/dom0/qvm-core/qubes.py +++ b/dom0/qvm-core/qubes.py @@ -106,6 +106,7 @@ dom0_vm = None qubes_appmenu_create_cmd = "/usr/lib/qubes/create_apps_for_appvm.sh" qubes_appmenu_remove_cmd = "/usr/lib/qubes/remove_appvm_appmenus.sh" qubes_pciback_cmd = '/usr/lib/qubes/unbind_pci_device.sh' +prepare_volatile_img_cmd = '/usr/lib/qubes/prepare_volatile_img.sh' yum_proxy_ip = '10.137.255.254' yum_proxy_port = '8082' @@ -1238,6 +1239,15 @@ class QubesVm(object): # Only makes sense on template based VM if source_template is None: + # For StandaloneVM create it only if not already exists (eg after backup-restore) + if not os.path.exists(self.volatile_img): + if verbose: + print >> sys.stderr, "--> Creating volatile image: {0}...".format (self.volatile_img) + f_root = open (self.root_img, "r") + f_root.seek(0, os.SEEK_END) + root_size = f_root.tell() + f_root.close() + subprocess.check_call([prepare_volatile_img_cmd, self.volatile_img, str(root_size / 1024 / 1024)]) return if verbose: @@ -1400,7 +1410,7 @@ class QubesVm(object): notify_function ("info", "Starting the '{0}' VM...".format(self.name)) elif verbose: print >> sys.stderr, "Starting the VM '{0}'...".format(self.name) - xid = self.start(verbose=verbose, notify_function=notify_function) + xid = self.start(verbose=verbose, start_guid = gui, notify_function=notify_function) except (IOError, OSError, QubesException) as err: raise QubesException("Error while starting the '{0}' VM: {1}".format(self.name, err)) diff --git a/dom0/qvm-core/qubesutils.py b/dom0/qvm-core/qubesutils.py index 660348c7..2fb63aa9 100644 --- a/dom0/qvm-core/qubesutils.py +++ b/dom0/qvm-core/qubesutils.py @@ -1364,5 +1364,8 @@ def backup_restore_do(backup_dir, restore_info, host_collection = None, print_ca retcode = subprocess.call (["cp", "-nrp", backup_dom0_home_dir + '/' + f, home_file]) if retcode != 0: error_callback("*** Error while copying file {0} to {1}".format(backup_dom0_home_dir + '/' + f, home_file)) + retcode = subprocess.call(['sudo', 'chown', '-R', local_user, home_dir]) + if retcode != 0: + error_callback("*** Error while setting home directory owner") # vim:sw=4:et: diff --git a/dom0/qvm-tools/qubes-dom0-update b/dom0/qvm-tools/qubes-dom0-update index ae46a78d..ff1d39e0 100755 --- a/dom0/qvm-tools/qubes-dom0-update +++ b/dom0/qvm-tools/qubes-dom0-update @@ -26,6 +26,7 @@ YUM_OPTS= GUI= CHECK_ONLY= ALL_OPTS=$* +QVMRUN_OPTS= # Filter out some yum options and collect packages list while [ $# -gt 0 ]; do case "$1" in @@ -60,6 +61,10 @@ if [ "$GUI" == "1" -a -n "$PKGS" ]; then exit 1 fi +if [ "$GUI" != "1" ]; then + QVMRUN_OPTS=--nogui +fi + # Do not start VM automaticaly when running from cron (only checking for updates) if [ "$CHECK_ONLY" == "1" ] && ! xl domid $UPDATEVM > /dev/null 2>&1; then echo "ERROR: UpdateVM not running, not starting it in non-interactive mode" >&2 @@ -73,11 +78,11 @@ qvm-sync-clock echo "Checking for dom0 updates" >&2 # Start VM if not running already -qvm-run -a $UPDATEVM true || exit 1 +qvm-run $QVMRUN_OPTS -a $UPDATEVM true || exit 1 /usr/lib/qubes/qrexec_client -d "$UPDATEVM" -l 'tar c /var/lib/rpm /etc/yum.repos.d /etc/yum.conf 2>/dev/null' 'user:tar x -C /var/lib/qubes/dom0-updates' 2> /dev/null -qvm-run --pass-io $UPDATEVM "/usr/lib/qubes/qubes_download_dom0_updates.sh --doit --nogui $ALL_OPTS" +qvm-run $QVMRUN_OPTS --pass-io $UPDATEVM "/usr/lib/qubes/qubes_download_dom0_updates.sh --doit --nogui $ALL_OPTS" RETCODE=$? if [ "$CHECK_ONLY" == "1" ]; then exit $RETCODE diff --git a/rpm_spec/core-dom0.spec b/rpm_spec/core-dom0.spec index 94be4404..873e9ec9 100644 --- a/rpm_spec/core-dom0.spec +++ b/rpm_spec/core-dom0.spec @@ -145,6 +145,7 @@ cp aux-tools/remove_appvm_appmenus.sh $RPM_BUILD_ROOT/usr/lib/qubes cp aux-tools/cleanup_dispvms $RPM_BUILD_ROOT/usr/lib/qubes cp aux-tools/startup-dvm.sh $RPM_BUILD_ROOT/usr/lib/qubes cp aux-tools/startup-misc.sh $RPM_BUILD_ROOT/usr/lib/qubes +cp aux-tools/prepare_volatile_img.sh $RPM_BUILD_ROOT/usr/lib/qubes cp qmemman/server.py $RPM_BUILD_ROOT/usr/lib/qubes/qmemman_daemon.py cp ../misc/meminfo-writer $RPM_BUILD_ROOT/usr/lib/qubes/ cp ../qrexec/qrexec_daemon $RPM_BUILD_ROOT/usr/lib/qubes/ @@ -440,6 +441,7 @@ fi /usr/lib/qubes/fix_dir_perms.sh /usr/lib/qubes/startup-dvm.sh /usr/lib/qubes/startup-misc.sh +/usr/lib/qubes/prepare_volatile_img.sh %attr(4750,root,qubes) /usr/lib/qubes/qfile-dom0-unpacker %if %{use_systemd} %{_unitdir}/qubes-block-cleaner.service