Remove more core2 code
This commit is contained in:
parent
8e581108b7
commit
d527e01136
12
.coveragerc
12
.coveragerc
@ -1,12 +0,0 @@
|
|||||||
[report]
|
|
||||||
exclude_lines =
|
|
||||||
pragma: no cover
|
|
||||||
^\s*def __repr__
|
|
||||||
^\s*(el)?if os\.name ==
|
|
||||||
^\s*raise (RuntimeError|NotImplementedError)
|
|
||||||
^\s*except ImportError
|
|
||||||
[paths]
|
|
||||||
source =
|
|
||||||
qubes
|
|
||||||
/usr/lib/python2.7/site-packages/qubes
|
|
||||||
/usr/lib64/python2.7/site-packages/qubes
|
|
@ -30,7 +30,6 @@ import os.path
|
|||||||
|
|
||||||
qubes_base_dir = "/var/lib/qubes"
|
qubes_base_dir = "/var/lib/qubes"
|
||||||
system_path = {
|
system_path = {
|
||||||
'qubes_guid_path': '/usr/bin/qubes-guid',
|
|
||||||
'qrexec_daemon_path': '/usr/sbin/qrexec-daemon',
|
'qrexec_daemon_path': '/usr/sbin/qrexec-daemon',
|
||||||
'qrexec_client_path': '/usr/bin/qrexec-client',
|
'qrexec_client_path': '/usr/bin/qrexec-client',
|
||||||
'qrexec_rpc_multiplexer': '/usr/lib/qubes/qubes-rpc-multiplexer',
|
'qrexec_rpc_multiplexer': '/usr/lib/qubes/qubes-rpc-multiplexer',
|
||||||
@ -39,29 +38,12 @@ system_path = {
|
|||||||
# Relative to qubes_base_dir
|
# Relative to qubes_base_dir
|
||||||
'qubes_appvms_dir': 'appvms',
|
'qubes_appvms_dir': 'appvms',
|
||||||
'qubes_templates_dir': 'vm-templates',
|
'qubes_templates_dir': 'vm-templates',
|
||||||
'qubes_servicevms_dir': 'servicevms',
|
|
||||||
'qubes_store_filename': 'qubes.xml',
|
'qubes_store_filename': 'qubes.xml',
|
||||||
'qubes_kernels_base_dir': 'vm-kernels',
|
'qubes_kernels_base_dir': 'vm-kernels',
|
||||||
|
|
||||||
# qubes_icon_dir is obsolete
|
# qubes_icon_dir is obsolete
|
||||||
# use QIcon.fromTheme() where applicable
|
# use QIcon.fromTheme() where applicable
|
||||||
'qubes_icon_dir': '/usr/share/icons/hicolor/128x128/devices',
|
'qubes_icon_dir': '/usr/share/icons/hicolor/128x128/devices',
|
||||||
|
|
||||||
'qrexec_policy_dir': '/etc/qubes-rpc/policy',
|
|
||||||
|
|
||||||
'config_template_pv': '/usr/share/qubes/vm-template.xml',
|
|
||||||
}
|
|
||||||
|
|
||||||
vm_files = {
|
|
||||||
'root_img': 'root.img',
|
|
||||||
'rootcow_img': 'root-cow.img',
|
|
||||||
'volatile_img': 'volatile.img',
|
|
||||||
'clean_volatile_img': 'clean-volatile.img.tar',
|
|
||||||
'private_img': 'private.img',
|
|
||||||
'kernels_subdir': 'kernels',
|
|
||||||
'firewall_conf': 'firewall.xml',
|
|
||||||
'whitelisted_appmenus': 'whitelisted-appmenus.list',
|
|
||||||
'updates_stat_file': 'updates.stat',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defaults = {
|
defaults = {
|
||||||
@ -73,8 +55,6 @@ defaults = {
|
|||||||
'kernelopts_common': ('root=/dev/mapper/dmroot ro nomodeset console=hvc0 '
|
'kernelopts_common': ('root=/dev/mapper/dmroot ro nomodeset console=hvc0 '
|
||||||
'rd_NO_PLYMOUTH rd.plymouth.enable=0 plymouth.enable=0 '),
|
'rd_NO_PLYMOUTH rd.plymouth.enable=0 plymouth.enable=0 '),
|
||||||
|
|
||||||
'dom0_update_check_interval': 6*3600,
|
|
||||||
|
|
||||||
'private_img_size': 2*1024*1024*1024,
|
'private_img_size': 2*1024*1024*1024,
|
||||||
'root_img_size': 10*1024*1024*1024,
|
'root_img_size': 10*1024*1024*1024,
|
||||||
|
|
||||||
@ -89,16 +69,6 @@ defaults = {
|
|||||||
'name': 'linux-kernel'
|
'name': 'linux-kernel'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
# how long (in sec) to wait for VMs to shutdown,
|
|
||||||
# before killing them (when used qvm-run with --wait option),
|
|
||||||
'shutdown_counter_max': 60,
|
|
||||||
|
|
||||||
'vm_default_netmask': "255.255.255.0",
|
|
||||||
|
|
||||||
'appvm_label': 'red',
|
|
||||||
'template_label': 'black',
|
|
||||||
'servicevm_label': 'red',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
max_qid = 254
|
max_qid = 254
|
||||||
|
@ -878,7 +878,6 @@ class SystemTestCase(QubesTestCase):
|
|||||||
def _remove_vm_disk(vmname):
|
def _remove_vm_disk(vmname):
|
||||||
for dirspec in (
|
for dirspec in (
|
||||||
'qubes_appvms_dir',
|
'qubes_appvms_dir',
|
||||||
'qubes_servicevms_dir',
|
|
||||||
'qubes_templates_dir'):
|
'qubes_templates_dir'):
|
||||||
dirpath = os.path.join(qubes.config.qubes_base_dir,
|
dirpath = os.path.join(qubes.config.qubes_base_dir,
|
||||||
qubes.config.system_path[dirspec], vmname)
|
qubes.config.system_path[dirspec], vmname)
|
||||||
@ -1018,7 +1017,6 @@ class SystemTestCase(QubesTestCase):
|
|||||||
vmnames = set()
|
vmnames = set()
|
||||||
for dirspec in (
|
for dirspec in (
|
||||||
'qubes_appvms_dir',
|
'qubes_appvms_dir',
|
||||||
'qubes_servicevms_dir',
|
|
||||||
'qubes_templates_dir'):
|
'qubes_templates_dir'):
|
||||||
dirpath = os.path.join(qubes.config.qubes_base_dir,
|
dirpath = os.path.join(qubes.config.qubes_base_dir,
|
||||||
qubes.config.system_path[dirspec])
|
qubes.config.system_path[dirspec])
|
||||||
@ -1432,7 +1430,6 @@ def load_tests(loader, tests, pattern): # pylint: disable=unused-argument
|
|||||||
'qubes.tests.integ.salt',
|
'qubes.tests.integ.salt',
|
||||||
'qubes.tests.integ.backup',
|
'qubes.tests.integ.backup',
|
||||||
'qubes.tests.integ.backupcompatibility',
|
'qubes.tests.integ.backupcompatibility',
|
||||||
# 'qubes.tests.regressions',
|
|
||||||
|
|
||||||
# external modules
|
# external modules
|
||||||
'qubes.tests.extra',
|
'qubes.tests.extra',
|
||||||
|
@ -300,13 +300,3 @@ class AdminVM(qubes.vm.BaseVM):
|
|||||||
args[0], *stdouterr)
|
args[0], *stdouterr)
|
||||||
|
|
||||||
return stdouterr
|
return stdouterr
|
||||||
|
|
||||||
# def __init__(self, **kwargs):
|
|
||||||
# super(QubesAdminVm, self).__init__(qid=0, name="dom0",
|
|
||||||
# dir_path=None,
|
|
||||||
# private_img = None,
|
|
||||||
# template = None,
|
|
||||||
# maxmem = 0,
|
|
||||||
# vcpus = 0,
|
|
||||||
# label = defaults["template_label"],
|
|
||||||
# **kwargs)
|
|
||||||
|
@ -29,7 +29,6 @@ import shutil
|
|||||||
import string
|
import string
|
||||||
import subprocess
|
import subprocess
|
||||||
import uuid
|
import uuid
|
||||||
import warnings
|
|
||||||
|
|
||||||
import libvirt # pylint: disable=import-error
|
import libvirt # pylint: disable=import-error
|
||||||
import lxml
|
import lxml
|
||||||
@ -1161,7 +1160,7 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
|
|||||||
except Exception as exc: # pylint: disable=bare-except
|
except Exception as exc: # pylint: disable=bare-except
|
||||||
self.log.error('Start failed: %s', str(exc))
|
self.log.error('Start failed: %s', str(exc))
|
||||||
# This avoids losing the exception if an exception is
|
# This avoids losing the exception if an exception is
|
||||||
# raised in self.force_shutdown(), because the vm is not
|
# raised in self._kill_locked(), because the vm is not
|
||||||
# running or paused
|
# running or paused
|
||||||
try:
|
try:
|
||||||
yield from self._kill_locked()
|
yield from self._kill_locked()
|
||||||
@ -1293,13 +1292,6 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
|
|||||||
# make sure all shutdown tasks are completed
|
# make sure all shutdown tasks are completed
|
||||||
yield from self._ensure_shutdown_handled()
|
yield from self._ensure_shutdown_handled()
|
||||||
|
|
||||||
def force_shutdown(self, *args, **kwargs):
|
|
||||||
"""Deprecated alias for :py:meth:`kill`"""
|
|
||||||
warnings.warn(
|
|
||||||
'Call to deprecated function force_shutdown(), use kill() instead',
|
|
||||||
DeprecationWarning, stacklevel=2)
|
|
||||||
return self.kill(*args, **kwargs)
|
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def suspend(self):
|
def suspend(self):
|
||||||
"""Suspend (pause) domain.
|
"""Suspend (pause) domain.
|
||||||
@ -1802,8 +1794,8 @@ class QubesVM(qubes.vm.mix.net.NetVMMixin, qubes.vm.BaseVM):
|
|||||||
Halting -> Transient [style="invis"];
|
Halting -> Transient [style="invis"];
|
||||||
|
|
||||||
Running -> Halted
|
Running -> Halted
|
||||||
[label="force_shutdown()"
|
[label="kill()"
|
||||||
URL="#qubes.vm.qubesvm.QubesVM.force_shutdown"
|
URL="#qubes.vm.qubesvm.QubesVM.kill"
|
||||||
constraint=false];
|
constraint=false];
|
||||||
|
|
||||||
Running -> Crashed [constraint=false];
|
Running -> Crashed [constraint=false];
|
||||||
|
@ -21,8 +21,6 @@
|
|||||||
|
|
||||||
''' This module contains the TemplateVM implementation '''
|
''' This module contains the TemplateVM implementation '''
|
||||||
|
|
||||||
import warnings
|
|
||||||
|
|
||||||
import qubes
|
import qubes
|
||||||
import qubes.config
|
import qubes.config
|
||||||
import qubes.vm.qubesvm
|
import qubes.vm.qubesvm
|
||||||
@ -36,13 +34,6 @@ class TemplateVM(QubesVM):
|
|||||||
|
|
||||||
dir_path_prefix = qubes.config.system_path['qubes_templates_dir']
|
dir_path_prefix = qubes.config.system_path['qubes_templates_dir']
|
||||||
|
|
||||||
@property
|
|
||||||
def rootcow_img(self):
|
|
||||||
'''COW image'''
|
|
||||||
warnings.warn("rootcow_img is deprecated, use "
|
|
||||||
"volumes['root'].path_origin", DeprecationWarning)
|
|
||||||
return self.volumes['root'].path_cow
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def appvms(self):
|
def appvms(self):
|
||||||
''' Returns a generator containing all domains based on the current
|
''' Returns a generator containing all domains based on the current
|
||||||
|
@ -1,123 +0,0 @@
|
|||||||
#!/usr/bin/python2
|
|
||||||
# -*- encoding: utf8 -*-
|
|
||||||
#
|
|
||||||
# The Qubes OS Project, http://www.qubes-os.org
|
|
||||||
#
|
|
||||||
# Copyright (C) 2010 Joanna Rutkowska <joanna@invisiblethingslab.com>
|
|
||||||
#
|
|
||||||
# This library is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
|
||||||
# License as published by the Free Software Foundation; either
|
|
||||||
# version 2.1 of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This library is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
# Lesser General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Lesser General Public
|
|
||||||
# License along with this library; if not, see <https://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
|
|
||||||
from qubes.qubes import QubesVmCollection
|
|
||||||
from qubes.qubes import QubesHost
|
|
||||||
from qubes.qubes import QubesException
|
|
||||||
from optparse import OptionParser
|
|
||||||
import sys
|
|
||||||
|
|
||||||
def main():
|
|
||||||
usage = "usage: %prog [options]"
|
|
||||||
parser = OptionParser (usage)
|
|
||||||
|
|
||||||
parser.add_option("--list", dest="list_top",
|
|
||||||
action="store_true", default=False,
|
|
||||||
help="n m : One line summary of top n vms with more than m cpu_time %")
|
|
||||||
|
|
||||||
(options, args) = parser.parse_args ()
|
|
||||||
|
|
||||||
qvm_collection = QubesVmCollection()
|
|
||||||
qvm_collection.lock_db_for_reading()
|
|
||||||
qvm_collection.load()
|
|
||||||
qvm_collection.unlock_db()
|
|
||||||
|
|
||||||
fields_to_display = ["name", "cpu", "mem"]
|
|
||||||
|
|
||||||
cpu_usages = None
|
|
||||||
qhost = QubesHost()
|
|
||||||
(measure_time, cpu_usages) = qhost.measure_cpu_usage(qvm_collection)
|
|
||||||
|
|
||||||
vms_list = [vm for vm in qvm_collection.values() if vm.is_running()]
|
|
||||||
vms_list = sorted(vms_list, key= lambda vm: 1-cpu_usages[vm.get_xid()]['cpu_usage'])
|
|
||||||
|
|
||||||
no_vms = len (vms_list)
|
|
||||||
vms_to_display = vms_list
|
|
||||||
|
|
||||||
if options.list_top:
|
|
||||||
any_shown = False
|
|
||||||
ndisp = 3
|
|
||||||
cputh = 0
|
|
||||||
if len(args) > 0:
|
|
||||||
ndisp = int(args[0])
|
|
||||||
if len(args) > 1:
|
|
||||||
cputh = int(args[1])
|
|
||||||
|
|
||||||
for vm in vms_to_display[:ndisp]:
|
|
||||||
cpu = cpu_usages[vm.get_xid()]['cpu_usage']
|
|
||||||
if cpu > cputh:
|
|
||||||
any_shown = True
|
|
||||||
sys.stdout.write("%d %s, " % (cpu, vm.name))
|
|
||||||
|
|
||||||
if any_shown:
|
|
||||||
sys.stdout.write(" ... | ")
|
|
||||||
|
|
||||||
totalMem = 0
|
|
||||||
dom0mem = 0
|
|
||||||
for vm in vms_to_display:
|
|
||||||
if not vm.name == "dom0":
|
|
||||||
totalMem += vm.get_mem()
|
|
||||||
else:
|
|
||||||
dom0mem = vm.get_mem()
|
|
||||||
totalMem /= 1024.0 * 1024.0
|
|
||||||
dom0mem /= 1024.0 * 1024.0
|
|
||||||
sys.stdout.write("%.1f G + %.1f G" % (totalMem, dom0mem))
|
|
||||||
return
|
|
||||||
|
|
||||||
max_width = { 'name': 0, 'cpu': 0, 'mem': 0 }
|
|
||||||
data_to_display = []
|
|
||||||
for vm in vms_to_display:
|
|
||||||
data_row = {}
|
|
||||||
data_row['name'] = vm.name
|
|
||||||
max_width['name'] = max(max_width['name'], len(data_row['name']))
|
|
||||||
data_row['cpu'] = "%.1f" % (cpu_usages[vm.get_xid()]['cpu_usage'])
|
|
||||||
max_width['cpu'] = max(max_width['cpu'], len(data_row['cpu']))
|
|
||||||
data_row['mem'] = "%d" % (vm.get_mem() / (1024.0))
|
|
||||||
max_width['mem'] = max(max_width['mem'], len(data_row['mem']))
|
|
||||||
data_to_display.append(data_row)
|
|
||||||
|
|
||||||
# Display the header
|
|
||||||
s = ""
|
|
||||||
for f in fields_to_display:
|
|
||||||
fmt="{{0:-^{0}}}-+".format(max_width[f] + 1)
|
|
||||||
s += fmt.format('-')
|
|
||||||
print s
|
|
||||||
s = ""
|
|
||||||
for f in fields_to_display:
|
|
||||||
fmt="{{0:>{0}}} |".format(max_width[f] + 1)
|
|
||||||
s += fmt.format(f)
|
|
||||||
print s
|
|
||||||
s = ""
|
|
||||||
for f in fields_to_display:
|
|
||||||
fmt="{{0:-^{0}}}-+".format(max_width[f] + 1)
|
|
||||||
s += fmt.format('-')
|
|
||||||
print s
|
|
||||||
|
|
||||||
# ... and the actual data
|
|
||||||
for row in data_to_display:
|
|
||||||
s = ""
|
|
||||||
for f in fields_to_display:
|
|
||||||
fmt="{{0:>{0}}} |".format(max_width[f] + 1)
|
|
||||||
s += fmt.format(row[f])
|
|
||||||
print s
|
|
||||||
|
|
||||||
main()
|
|
@ -1,79 +0,0 @@
|
|||||||
#!/usr/bin/python2 -O
|
|
||||||
# coding=utf-8
|
|
||||||
|
|
||||||
#
|
|
||||||
# The Qubes OS Project, https://www.qubes-os.org/
|
|
||||||
#
|
|
||||||
# Copyright (C) 2014-2015
|
|
||||||
# Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
|
|
||||||
# Copyright (C) 2015 Wojtek Porczyk <woju@invisiblethingslab.com>
|
|
||||||
#
|
|
||||||
# This library is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU Lesser General Public
|
|
||||||
# License as published by the Free Software Foundation; either
|
|
||||||
# version 2.1 of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This library is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
# Lesser General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Lesser General Public
|
|
||||||
# License along with this library; if not, see <https://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
import multiprocessing
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
import unittest
|
|
||||||
|
|
||||||
import qubes.qubes
|
|
||||||
import qubes.tests
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
|
|
||||||
class TC_00_Regressions(qubes.tests.SystemTestsMixin, qubes.tests.QubesTestCase):
|
|
||||||
# Bug: #906
|
|
||||||
def test_000_bug_906_db_locking(self):
|
|
||||||
def create_vm(vmname):
|
|
||||||
qc = qubes.qubes.QubesVmCollection()
|
|
||||||
qc.lock_db_for_writing()
|
|
||||||
qc.load()
|
|
||||||
time.sleep(1)
|
|
||||||
qc.add_new_vm('QubesAppVm',
|
|
||||||
name=vmname, template=qc.get_default_template())
|
|
||||||
qc.save()
|
|
||||||
qc.unlock_db()
|
|
||||||
|
|
||||||
vmname1, vmname2 = map(self.make_vm_name, ('test1', 'test2'))
|
|
||||||
t = multiprocessing.Process(target=create_vm, args=(vmname1,))
|
|
||||||
t.start()
|
|
||||||
create_vm(vmname2)
|
|
||||||
t.join()
|
|
||||||
|
|
||||||
qc = qubes.qubes.QubesVmCollection()
|
|
||||||
qc.lock_db_for_reading()
|
|
||||||
qc.load()
|
|
||||||
qc.unlock_db()
|
|
||||||
|
|
||||||
self.assertIsNotNone(qc.get_vm_by_name(vmname1))
|
|
||||||
self.assertIsNotNone(qc.get_vm_by_name(vmname2))
|
|
||||||
|
|
||||||
def test_bug_1389_dispvm_qubesdb_crash(self):
|
|
||||||
"""
|
|
||||||
Sometimes QubesDB instance in DispVM crashes at startup.
|
|
||||||
Unfortunately we don't have reliable way to reproduce it, so try twice
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
self.qc.unlock_db()
|
|
||||||
for try_no in xrange(2):
|
|
||||||
p = subprocess.Popen(['/usr/lib/qubes/qfile-daemon-dvm',
|
|
||||||
'qubes.VMShell', 'dom0', 'DEFAULT'],
|
|
||||||
stdin=subprocess.PIPE,
|
|
||||||
stdout=subprocess.PIPE,
|
|
||||||
stderr=open(os.devnull, 'w'))
|
|
||||||
p.stdin.write("qubesdb-read /name || echo ERROR\n")
|
|
||||||
dispvm_name = p.stdout.readline()
|
|
||||||
p.stdin.close()
|
|
||||||
self.assertTrue(dispvm_name.startswith("disp"),
|
|
||||||
"Try {} failed".format(try_no))
|
|
Loading…
Reference in New Issue
Block a user