#!/bin/sh if [ $# != 1 -a $# != 2 ] ; then echo 'Usage: qvm-create-default-dvm templatename|--default-template|--used-template [script-name|--default-script]' exit 1 fi export ROOT=/var/lib/qubes/dvmdata/savefile_root TEMPLATENAME=$1 if [ "$TEMPLATENAME" = --used-template ] ; then if [ -e $ROOT ] ; then TEMPLATENAME=$(readlink $ROOT | sed -e 's/.root.img//' -e 's/.*\///') else TEMPLATENAME=--default-template fi fi if [ "$TEMPLATENAME" = --default-template ] ; then TEMPLATENAME=$(qubes-prefs --get default-template) if [ "X"$TEMPLATENAME = "X" ] ; then echo No default template ? exit 1 fi fi if [ "X""$2" = "X""--default-script" ] ; then SCRIPTNAME="vm-default" else SCRIPTNAME=$2 fi if ! [ -d "/var/lib/qubes/vm-templates/$TEMPLATENAME" ] ; then echo /var/lib/qubes/vm-templates/$TEMPLATENAME is not a directory exit 1 fi DVMTMPL="$TEMPLATENAME"-dvm DVMTMPLDIR="/var/lib/qubes/appvms/$DVMTMPL" if ! [ -d "$DVMTMPLDIR" ] ; then # unfortunately, currently there are reliability issues with save of a domain # with multiple CPUs and/or more than 4000M RAM if ! qvm-create --force-root --vcpus=1 --internal -t "$TEMPLATENAME" -l gray "$DVMTMPL" ; then exit 1 ; fi MAXMEM=`qvm-prefs --force-root $DVMTMPL|grep ^maxmem|awk 'print $3'` if [ "$MAXMEM" -ge 4000 ]; then qvm-prefs --force-root -s $DVMTMPL maxmem 4000 fi fi if ! /usr/lib/qubes/qubes_prepare_saved_domain.sh \ "$DVMTMPL" "/var/lib/qubes/appvms/$DVMTMPL/dvm-savefile" $SCRIPTNAME ; then exit 1 fi DEFAULT=/var/lib/qubes/dvmdata/default_savefile DEFAULTCONF=/var/lib/qubes/dvmdata/default_dvm.conf CURRENT=/var/run/qubes/current_savefile CURRENTCONF=/var/run/qubes/current_dvm.conf SHMDIR=/dev/shm/qubes SHMCOPY=$SHMDIR/current_savefile rm -f $ROOT $DEFAULT $CURRENT $DEFAULTCONF $CURRENTCONF ln -s "/var/lib/qubes/appvms/$DVMTMPL/dvm-savefile" $DEFAULT ln -s "/var/lib/qubes/vm-templates/$TEMPLATENAME/root.img" $ROOT ln -s $DVMTMPLDIR/dvm.conf $DEFAULTCONF ln -s $DVMTMPLDIR/dvm.conf $CURRENTCONF if [ -f /var/lib/qubes/dvmdata/dont_use_shm ] ; then ln -s $DEFAULT $CURRENT else mkdir -m 770 $SHMDIR 2>/dev/null chgrp qubes $SHMDIR 2>/dev/null cp $DEFAULT $SHMCOPY || exit 1 chgrp qubes $SHMCOPY chmod 660 $SHMCOPY ln -s $SHMCOPY $CURRENT fi if [ $(whoami) = "root" ] ; then chgrp qubes "$DVMTMPLDIR" "$DVMTMPLDIR"/* chmod 660 "$DVMTMPLDIR"/* chmod 770 "$DVMTMPLDIR" fi