Merge branch 'master' of git.qubes-os.org:/var/lib/qubes/git/marmarek/core into spring-merge
This commit is contained in:
commit
5978f7a724
@ -20,6 +20,17 @@
|
|||||||
|
|
||||||
NETVM=$(qvm-get-default-netvm)
|
NETVM=$(qvm-get-default-netvm)
|
||||||
|
|
||||||
|
get_running_netvms() {
|
||||||
|
# Actually get running VMs with PCI devices attached
|
||||||
|
RUNNING_VMS=`xm list --state=Running | tail -n +3 | cut -f 1 -d " "`
|
||||||
|
RUNNING_NETVMS=""
|
||||||
|
for VM in $RUNNING_VMS; do
|
||||||
|
if [ -n "`xm pci-list $VM`" ]; then
|
||||||
|
echo "$VM"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
{
|
{
|
||||||
if [ x$NETVM = x ] ; then
|
if [ x$NETVM = x ] ; then
|
||||||
@ -59,8 +70,10 @@ stop()
|
|||||||
echo -n $"Stopping Qubes networking in Dom0:"
|
echo -n $"Stopping Qubes networking in Dom0:"
|
||||||
else
|
else
|
||||||
|
|
||||||
echo -n $"Stopping default NetVM:"
|
echo -n $"Stopping NetVMs:"
|
||||||
qvm-run -q --shutdown --wait $NETVM
|
for VM in `get_running_netvms`; do
|
||||||
|
qvm-run -q --shutdown --wait $VM
|
||||||
|
done
|
||||||
|
|
||||||
fi
|
fi
|
||||||
rm -f /var/lock/subsys/qubes_netvm
|
rm -f /var/lock/subsys/qubes_netvm
|
||||||
|
39
dom0/pm-utils/01qubes-suspend-netvm
Executable file
39
dom0/pm-utils/01qubes-suspend-netvm
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. "${PM_FUNCTIONS}"
|
||||||
|
|
||||||
|
get_running_netvms() {
|
||||||
|
# Actually get running VMs with PCI devices attached
|
||||||
|
RUNNING_VMS=`xm list --state=Running | tail -n +3 | cut -f 1 -d " "`
|
||||||
|
RUNNING_NETVMS=""
|
||||||
|
for VM in $RUNNING_VMS; do
|
||||||
|
if [ -n "`xm pci-list $VM`" ]; then
|
||||||
|
echo "$VM"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend_net()
|
||||||
|
{
|
||||||
|
for VM in `get_running_netvms`; do
|
||||||
|
qvm-run -u root --pass_io $VM "service NetworkManager stop"
|
||||||
|
done
|
||||||
|
# Ignore exit status from netvm...
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
resume_net()
|
||||||
|
{
|
||||||
|
for VM in `get_running_netvms`; do
|
||||||
|
qvm-run -u root --pass_io $VM "service NetworkManager start"
|
||||||
|
done
|
||||||
|
# Ignore exit status from netvm...
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
resume) resume_net ;;
|
||||||
|
suspend) suspend_net ;;
|
||||||
|
*) exit 0 ;;
|
||||||
|
esac
|
@ -1,48 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
. "${PM_FUNCTIONS}"
|
|
||||||
|
|
||||||
get_domain_pci_devs()
|
|
||||||
{
|
|
||||||
VM=$1
|
|
||||||
TMPFILE=$(mktemp -p /var/run/qubes/)
|
|
||||||
xm pci-list $VM > $TMPFILE
|
|
||||||
if grep -i -q vslt $TMPFILE ; then
|
|
||||||
slt=valid_identifier
|
|
||||||
else
|
|
||||||
slt=""
|
|
||||||
fi
|
|
||||||
cat $TMPFILE | grep -v domain | sed 's/0x//g'| \
|
|
||||||
while read $slt a b c d; do echo $a:$b:$c.$d ; done > /var/run/qubes/$VM.pcidevs
|
|
||||||
rm -f $TMPFILE
|
|
||||||
}
|
|
||||||
|
|
||||||
detach_pcis()
|
|
||||||
{
|
|
||||||
NETVM=$(qvm-get-default-netvm)
|
|
||||||
if [ "X"$NETVM = "X""dom0" -o "X"$NETVM = "X" -o "X"$NETVM = "X""none"] ; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
get_domain_pci_devs $NETVM
|
|
||||||
for dev in $(cat /var/run/qubes/$NETVM.pcidevs) ; do
|
|
||||||
xm pci-detach $NETVM $dev
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
attach_pcis()
|
|
||||||
{
|
|
||||||
NETVM=$(qvm-get-default-netvm)
|
|
||||||
if [ "X"$NETVM = "X""dom0" -o "X"$NETVM = "X" -o "X"$NETVM = "X""none"] ; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
for dev in $(cat /var/run/qubes/$NETVM.pcidevs) ; do
|
|
||||||
xm pci-attach $NETVM $dev
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
resume) attach_pcis ;;
|
|
||||||
suspend) detach_pcis ;;
|
|
||||||
*) exit 0 ;;
|
|
||||||
esac
|
|
@ -1773,6 +1773,25 @@ class QubesVmCollection(dict):
|
|||||||
if (vm.is_appvm() and vm.template_vm.qid == template_qid)])
|
if (vm.is_appvm() and vm.template_vm.qid == template_qid)])
|
||||||
return vms
|
return vms
|
||||||
|
|
||||||
|
def get_vms_connected_to(self, netvm_qid):
|
||||||
|
new_vms = [ netvm_qid ]
|
||||||
|
dependend_vms_qid = []
|
||||||
|
|
||||||
|
# Dependency resolving only makes sense on NetVM (or derivative)
|
||||||
|
if not self[netvm_qid].is_netvm():
|
||||||
|
return set([])
|
||||||
|
|
||||||
|
while len(new_vms) > 0:
|
||||||
|
cur_vm = new_vms.pop()
|
||||||
|
for vm in self.values():
|
||||||
|
if vm.netvm_vm and vm.netvm_vm.qid == cur_vm and vm.qid not in dependend_vms_qid:
|
||||||
|
dependend_vms_qid.append(vm.qid)
|
||||||
|
if vm.is_netvm():
|
||||||
|
new_vms.append(vm.qid)
|
||||||
|
|
||||||
|
vms = [vm for vm in self.values() if vm.qid in dependend_vms_qid]
|
||||||
|
return vms
|
||||||
|
|
||||||
def verify_new_vm(self, new_vm):
|
def verify_new_vm(self, new_vm):
|
||||||
|
|
||||||
# Verify that qid is unique
|
# Verify that qid is unique
|
||||||
|
@ -98,8 +98,8 @@ def main():
|
|||||||
# resize loop device
|
# resize loop device
|
||||||
retcode = subprocess.check_call(["losetup", "--set-capacity", loop_dev])
|
retcode = subprocess.check_call(["losetup", "--set-capacity", loop_dev])
|
||||||
|
|
||||||
retcode = subprocess.check_call([qvm_run_path, "-uroot", vmname,
|
retcode = subprocess.check_call([qvm_run_path, "-uroot", "--pass_io", vmname,
|
||||||
"resize2fs /dev/xvdb" ])
|
"while [ \"`blockdev --getsize64 /dev/xvdb`\" -lt {0} ]; do sleep 0.2; done; resize2fs /dev/xvdb".format(size_bytes) ])
|
||||||
else:
|
else:
|
||||||
retcode = subprocess.check_call(["resize2fs", "-f", vm.private_img])
|
retcode = subprocess.check_call(["resize2fs", "-f", vm.private_img])
|
||||||
|
|
||||||
|
@ -220,6 +220,11 @@ def main():
|
|||||||
exit(1)
|
exit(1)
|
||||||
vms_list.append(vm)
|
vms_list.append(vm)
|
||||||
|
|
||||||
|
# If stopping NetVM - stop connected VMs too
|
||||||
|
if options.shutdown and vm.is_netvm():
|
||||||
|
vms_list += [vm for vm in qvm_collection.get_vms_connected_to(vm.qid) if vm.is_running()]
|
||||||
|
vms_list.reverse()
|
||||||
|
|
||||||
if takes_cmd_argument:
|
if takes_cmd_argument:
|
||||||
cmd = "{user}:{cmd}".format(user=options.user, cmd=cmdstr)
|
cmd = "{user}:{cmd}".format(user=options.user, cmd=cmdstr)
|
||||||
else:
|
else:
|
||||||
|
@ -126,7 +126,7 @@ cp ../common/iptables $RPM_BUILD_ROOT/etc/sysconfig
|
|||||||
|
|
||||||
mkdir -p $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d
|
mkdir -p $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d
|
||||||
cp pm-utils/01qubes-sync-vms-clock $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/
|
cp pm-utils/01qubes-sync-vms-clock $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/
|
||||||
cp pm-utils/01qubes-swap-pci-devs $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/
|
cp pm-utils/01qubes-suspend-netvm $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/
|
||||||
cp pm-utils/02qubes-pause-vms $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/
|
cp pm-utils/02qubes-pause-vms $RPM_BUILD_ROOT/usr/lib64/pm-utils/sleep.d/
|
||||||
|
|
||||||
mkdir -p $RPM_BUILD_ROOT/var/log/qubes
|
mkdir -p $RPM_BUILD_ROOT/var/log/qubes
|
||||||
@ -306,7 +306,7 @@ fi
|
|||||||
/etc/NetworkManager/dispatcher.d/qubes_nmhook
|
/etc/NetworkManager/dispatcher.d/qubes_nmhook
|
||||||
/etc/sysconfig/iptables
|
/etc/sysconfig/iptables
|
||||||
/usr/lib64/pm-utils/sleep.d/01qubes-sync-vms-clock
|
/usr/lib64/pm-utils/sleep.d/01qubes-sync-vms-clock
|
||||||
/usr/lib64/pm-utils/sleep.d/01qubes-swap-pci-devs
|
/usr/lib64/pm-utils/sleep.d/01qubes-suspend-netvm
|
||||||
/usr/lib64/pm-utils/sleep.d/02qubes-pause-vms
|
/usr/lib64/pm-utils/sleep.d/02qubes-pause-vms
|
||||||
/usr/bin/xenstore-watch
|
/usr/bin/xenstore-watch
|
||||||
/usr/lib/qubes/qubes_restore
|
/usr/lib/qubes/qubes_restore
|
||||||
|
@ -79,6 +79,9 @@ fi
|
|||||||
chkconfig --add qubes_core_netvm || echo "WARNING: Cannot add service qubes_core!"
|
chkconfig --add qubes_core_netvm || echo "WARNING: Cannot add service qubes_core!"
|
||||||
chkconfig qubes_core_netvm on || echo "WARNING: Cannot enable service qubes_core!"
|
chkconfig qubes_core_netvm on || echo "WARNING: Cannot enable service qubes_core!"
|
||||||
|
|
||||||
|
# Remove ip_forward setting from sysctl, so NM will not reset it
|
||||||
|
sed 's/^net.ipv4.ip_forward.*/#\0/' -i /etc/sysctl.conf
|
||||||
|
|
||||||
%preun
|
%preun
|
||||||
if [ "$1" = 0 ] ; then
|
if [ "$1" = 0 ] ; then
|
||||||
# no more packages left
|
# no more packages left
|
||||||
|
Loading…
Reference in New Issue
Block a user