core: add offline mode to qvm-create, qvm-prefs
This is required to create VMs in process of building Live system, where libvirt isn't running. Additionally there is no udev in the build environment, so needs to manually create /dev/loop*p* based on sysfs info.
This commit is contained in:
parent
8f862cdf69
commit
90393c33f2
@ -848,6 +848,8 @@ class QubesVm(object):
|
||||
return True
|
||||
|
||||
def is_running(self):
|
||||
if vmm.offline_mode:
|
||||
return False
|
||||
try:
|
||||
if self.libvirt_domain.isActive():
|
||||
return True
|
||||
@ -1192,7 +1194,10 @@ class QubesVm(object):
|
||||
shutil.copy(self.label.icon_path, self.icon_path)
|
||||
|
||||
# Make sure that we have UUID allocated
|
||||
self._update_libvirt_domain()
|
||||
if not vmm.offline_mode:
|
||||
self._update_libvirt_domain()
|
||||
else:
|
||||
self.uuid = uuid.uuid4()
|
||||
|
||||
# fire hooks
|
||||
for hook in self.hooks_create_on_disk:
|
||||
|
@ -58,6 +58,8 @@ class QubesProxyVm(QubesNetVm):
|
||||
def _set_netvm(self, new_netvm):
|
||||
old_netvm = self.netvm
|
||||
super(QubesProxyVm, self)._set_netvm(new_netvm)
|
||||
if vmm.offline_mode:
|
||||
return
|
||||
if self.netvm is not None:
|
||||
self.netvm.add_external_ip_permission(self.get_xid())
|
||||
self.write_netvm_domid_entry()
|
||||
|
@ -29,6 +29,18 @@ EOF
|
||||
|
||||
loopdev=`losetup -f --show --partscan "$FILENAME"`
|
||||
udevadm settle
|
||||
created=
|
||||
if [ ! -e ${loopdev}p1 ]; then
|
||||
# device wasn't created automatically, probably udev isn't running;
|
||||
# create devs manually
|
||||
for partdev in /sys/block/$(basename ${loopdev})/loop*p*; do
|
||||
mknod /dev/$(basename ${partdev}) b $(cat ${partdev}/dev | tr : ' ')
|
||||
done
|
||||
created=yes
|
||||
fi
|
||||
mkswap -f ${loopdev}p1 > /dev/null
|
||||
if [ "$created" = "yes" ]; then
|
||||
rm -f ${loopdev}p*
|
||||
fi
|
||||
losetup -d ${loopdev} || :
|
||||
chown --reference `dirname "$FILENAME"` "$FILENAME"
|
||||
|
@ -28,6 +28,8 @@ from optparse import OptionParser
|
||||
import subprocess
|
||||
import os
|
||||
import sys
|
||||
from qubes.qubes import vmm
|
||||
|
||||
|
||||
def handle_vm(vms, label, new_value = None):
|
||||
functions = { # label: [ getter, setter ],
|
||||
@ -116,6 +118,8 @@ def main():
|
||||
else:
|
||||
options.do_set = True
|
||||
|
||||
vmm.offline_mode = True
|
||||
|
||||
if options.do_set:
|
||||
qvm_collection = QubesVmCollection()
|
||||
qvm_collection.lock_db_for_writing()
|
||||
|
@ -29,6 +29,8 @@ import subprocess
|
||||
import re
|
||||
import os
|
||||
import sys
|
||||
from qubes.qubes import vmm
|
||||
|
||||
|
||||
def main():
|
||||
usage = "usage: %prog [options] <vm-name>"
|
||||
@ -55,6 +57,9 @@ def main():
|
||||
help="Initial memory size (in MB)")
|
||||
parser.add_option ("-c", "--vcpus", dest="vcpus", default=None,
|
||||
help="VCPUs count")
|
||||
parser.add_option ("--offline-mode", dest="offline_mode",
|
||||
action="store_true", default=False,
|
||||
help="Offline mode")
|
||||
parser.add_option ("-i", "--internal", action="store_true", dest="internal", default=False,
|
||||
help="Create VM for internal use only (hidden in qubes-manager, no appmenus)")
|
||||
parser.add_option ("--force-root", action="store_true", dest="force_root", default=False,
|
||||
@ -118,6 +123,9 @@ def main():
|
||||
print >> sys.stderr, "File specified as root.img does not exists"
|
||||
exit (1)
|
||||
|
||||
if options.offline_mode:
|
||||
vmm.offline_mode = True
|
||||
|
||||
qvm_collection = QubesVmCollection()
|
||||
qvm_collection.lock_db_for_writing()
|
||||
qvm_collection.load()
|
||||
|
@ -30,6 +30,8 @@ import subprocess
|
||||
import os
|
||||
import sys
|
||||
import re
|
||||
from qubes.qubes import vmm
|
||||
|
||||
|
||||
def do_list(vm):
|
||||
label_width = 19
|
||||
@ -541,6 +543,9 @@ def main():
|
||||
parser.add_option("--force-root", action="store_true", dest="force_root",
|
||||
default=False,
|
||||
help="Force to run, even with root privileges")
|
||||
parser.add_option ("--offline-mode", dest="offline_mode",
|
||||
action="store_true", default=False,
|
||||
help="Offline mode")
|
||||
|
||||
(options, args) = parser.parse_args ()
|
||||
if (len (args) < 1):
|
||||
@ -560,6 +565,9 @@ def main():
|
||||
"the same time!"
|
||||
exit(1)
|
||||
|
||||
if options.offline_mode:
|
||||
vmm.offline_mode = True
|
||||
|
||||
if options.do_set:
|
||||
qvm_collection = QubesVmCollection()
|
||||
qvm_collection.lock_db_for_writing()
|
||||
|
Loading…
Reference in New Issue
Block a user