Merge branch 'hvm' of 10.141.1.101:/var/lib/qubes/git/marmarek/core into hvm
This commit is contained in:
		
						commit
						1cba083205
					
				
							
								
								
									
										12
									
								
								dom0/aux-tools/cpufreq-xen.modules
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								dom0/aux-tools/cpufreq-xen.modules
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,12 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | if modinfo cpufreq-xen > /dev/null 2>&1; then | ||||||
|  |     modprobe acpi-cpufreq || exit 1 | ||||||
|  |     modprobe cpufreq-xen | ||||||
|  | 
 | ||||||
|  |     for f in /sys/devices/system/cpu/cpu[0-9]*/cpufreq/scaling_governor; do | ||||||
|  |         echo xen > $f | ||||||
|  |     done | ||||||
|  | 
 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
| @ -31,3 +31,6 @@ vcpus = {vcpus} | |||||||
| on_poweroff = 'destroy' | on_poweroff = 'destroy' | ||||||
| on_reboot   = 'destroy' | on_reboot   = 'destroy' | ||||||
| on_crash    = 'destroy' | on_crash    = 'destroy' | ||||||
|  | 
 | ||||||
|  | # Use of DNS2 as DHCP server IP makes DNS2 not accessible, but DNS1 still should work | ||||||
|  | device_model_args = [ '-net', 'lwip,client_ip={ip},server_ip={dns2},dns={dns1},gw={gateway},netmask={netmask}' ] | ||||||
|  | |||||||
| @ -201,7 +201,7 @@ class QubesVm(object): | |||||||
|     def __init__(self, qid, name, |     def __init__(self, qid, name, | ||||||
|                  dir_path, conf_file = None, |                  dir_path, conf_file = None, | ||||||
|                  uses_default_netvm = True, |                  uses_default_netvm = True, | ||||||
|                  netvm_vm = None, |                  netvm = None, | ||||||
|                  installed_by_rpm = False, |                  installed_by_rpm = False, | ||||||
|                  updateable = False, |                  updateable = False, | ||||||
|                  label = None, |                  label = None, | ||||||
| @ -232,9 +232,9 @@ class QubesVm(object): | |||||||
|         self.conf_file = self.absolute_path(conf_file, name + ".conf") |         self.conf_file = self.absolute_path(conf_file, name + ".conf") | ||||||
| 
 | 
 | ||||||
|         self.uses_default_netvm = uses_default_netvm |         self.uses_default_netvm = uses_default_netvm | ||||||
|         self.netvm_vm = netvm_vm |         self.netvm = netvm | ||||||
|         if netvm_vm is not None: |         if netvm is not None: | ||||||
|             netvm_vm.connected_vms[qid] = self |             netvm.connected_vms[qid] = self | ||||||
| 
 | 
 | ||||||
|         self._mac = mac |         self._mac = mac | ||||||
| 
 | 
 | ||||||
| @ -366,29 +366,29 @@ class QubesVm(object): | |||||||
| 
 | 
 | ||||||
|     @property |     @property | ||||||
|     def ip(self): |     def ip(self): | ||||||
|         if self.netvm_vm is not None: |         if self.netvm is not None: | ||||||
|             return self.netvm_vm.get_ip_for_vm(self.qid) |             return self.netvm.get_ip_for_vm(self.qid) | ||||||
|         else: |         else: | ||||||
|             return None |             return None | ||||||
| 
 | 
 | ||||||
|     @property |     @property | ||||||
|     def netmask(self): |     def netmask(self): | ||||||
|         if self.netvm_vm is not None: |         if self.netvm is not None: | ||||||
|             return self.netvm_vm.netmask |             return self.netvm.netmask | ||||||
|         else: |         else: | ||||||
|             return None |             return None | ||||||
| 
 | 
 | ||||||
|     @property |     @property | ||||||
|     def gateway(self): |     def gateway(self): | ||||||
|         if self.netvm_vm is not None: |         if self.netvm is not None: | ||||||
|             return self.netvm_vm.gateway |             return self.netvm.gateway | ||||||
|         else: |         else: | ||||||
|             return None |             return None | ||||||
| 
 | 
 | ||||||
|     @property |     @property | ||||||
|     def secondary_dns(self): |     def secondary_dns(self): | ||||||
|         if self.netvm_vm is not None: |         if self.netvm is not None: | ||||||
|             return self.netvm_vm.secondary_dns |             return self.netvm.secondary_dns | ||||||
|         else: |         else: | ||||||
|             return None |             return None | ||||||
| 
 | 
 | ||||||
| @ -396,7 +396,7 @@ class QubesVm(object): | |||||||
|     def vif(self): |     def vif(self): | ||||||
|         if self.xid < 0: |         if self.xid < 0: | ||||||
|             return None |             return None | ||||||
|         if self.netvm_vm is None: |         if self.netvm is None: | ||||||
|             return None |             return None | ||||||
|         return "vif{0}.+".format(self.xid) |         return "vif{0}.+".format(self.xid) | ||||||
| 
 | 
 | ||||||
| @ -418,7 +418,7 @@ class QubesVm(object): | |||||||
|         if self.is_netvm(): |         if self.is_netvm(): | ||||||
|             return True |             return True | ||||||
| 
 | 
 | ||||||
|         if self.netvm_vm is not None: |         if self.netvm is not None: | ||||||
|             return True |             return True | ||||||
|         else: |         else: | ||||||
|             return False |             return False | ||||||
| @ -436,11 +436,11 @@ class QubesVm(object): | |||||||
|         raise QubesException ("Change 'updateable' flag is not supported. Please use qvm-create.") |         raise QubesException ("Change 'updateable' flag is not supported. Please use qvm-create.") | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     def set_netvm_vm(self, netvm_vm): |     def set_netvm(self, netvm): | ||||||
|         if self.netvm_vm is not None: |         if self.netvm is not None: | ||||||
|             self.netvm_vm.connected_vms.pop(self.qid) |             self.netvm.connected_vms.pop(self.qid) | ||||||
| 
 | 
 | ||||||
|         if netvm_vm is None: |         if netvm is None: | ||||||
|             # Set also firewall to block all traffic as discussed in #370 |             # Set also firewall to block all traffic as discussed in #370 | ||||||
|             if os.path.exists(self.firewall_conf): |             if os.path.exists(self.firewall_conf): | ||||||
|                 shutil.copy(self.firewall_conf, "%s/backup/%s-firewall-%s.xml" |                 shutil.copy(self.firewall_conf, "%s/backup/%s-firewall-%s.xml" | ||||||
| @ -448,9 +448,9 @@ class QubesVm(object): | |||||||
|             self.write_firewall_conf({'allow': False, 'allowDns': False, |             self.write_firewall_conf({'allow': False, 'allowDns': False, | ||||||
|                     'allowIcmp': False, 'rules': []}) |                     'allowIcmp': False, 'rules': []}) | ||||||
|         else: |         else: | ||||||
|             netvm_vm.connected_vms[self.qid]=self |             netvm.connected_vms[self.qid]=self | ||||||
| 
 | 
 | ||||||
|         self.netvm_vm = netvm_vm |         self.netvm = netvm | ||||||
| 
 | 
 | ||||||
|     def pre_rename(self, new_name): |     def pre_rename(self, new_name): | ||||||
|         pass |         pass | ||||||
| @ -780,15 +780,15 @@ class QubesVm(object): | |||||||
|                     "{0}/qubes_netvm_network".format(domain_path), |                     "{0}/qubes_netvm_network".format(domain_path), | ||||||
|                     self.network) |                     self.network) | ||||||
| 
 | 
 | ||||||
|         if self.netvm_vm is not None: |         if self.netvm is not None: | ||||||
|             xs.write('', "{0}/qubes_ip".format(domain_path), self.ip) |             xs.write('', "{0}/qubes_ip".format(domain_path), self.ip) | ||||||
|             xs.write('', "{0}/qubes_netmask".format(domain_path), |             xs.write('', "{0}/qubes_netmask".format(domain_path), | ||||||
|                     self.netvm_vm.netmask) |                     self.netvm.netmask) | ||||||
|             xs.write('', "{0}/qubes_gateway".format(domain_path), |             xs.write('', "{0}/qubes_gateway".format(domain_path), | ||||||
|                     self.netvm_vm.gateway) |                     self.netvm.gateway) | ||||||
|             xs.write('', |             xs.write('', | ||||||
|                     "{0}/qubes_secondary_dns".format(domain_path), |                     "{0}/qubes_secondary_dns".format(domain_path), | ||||||
|                     self.netvm_vm.secondary_dns) |                     self.netvm.secondary_dns) | ||||||
| 
 | 
 | ||||||
|         tzname = self.get_timezone() |         tzname = self.get_timezone() | ||||||
|         if tzname: |         if tzname: | ||||||
| @ -829,10 +829,16 @@ class QubesVm(object): | |||||||
|         args['mem'] = str(self.memory) |         args['mem'] = str(self.memory) | ||||||
|         args['maxmem'] = str(self.maxmem) |         args['maxmem'] = str(self.maxmem) | ||||||
|         args['vcpus'] = str(self.vcpus) |         args['vcpus'] = str(self.vcpus) | ||||||
|         if self.netvm_vm is not None: |         args['ip'] = self.ip | ||||||
|  |         args['mac'] = self.mac | ||||||
|  |         args['gateway'] = self.gateway | ||||||
|  |         args['dns1'] = self.gateway | ||||||
|  |         args['dns2'] = self.secondary_dns | ||||||
|  |         args['netmask'] = self.netmask | ||||||
|  |         if self.netvm is not None: | ||||||
|             args['netdev'] = "'mac={mac},script=/etc/xen/scripts/vif-route-qubes,ip={ip}".format(ip=self.ip, mac=self.mac) |             args['netdev'] = "'mac={mac},script=/etc/xen/scripts/vif-route-qubes,ip={ip}".format(ip=self.ip, mac=self.mac) | ||||||
|             if self.netvm_vm.qid != 0: |             if self.netvm.qid != 0: | ||||||
|                 args['netdev'] += ",backend={0}".format(self.netvm_vm.name) |                 args['netdev'] += ",backend={0}".format(self.netvm.name) | ||||||
|             args['netdev'] += "'" |             args['netdev'] += "'" | ||||||
|         else: |         else: | ||||||
|             args['netdev'] = '' |             args['netdev'] = '' | ||||||
| @ -950,7 +956,7 @@ class QubesVm(object): | |||||||
|             print >> sys.stderr, "Ooops, there was a problem creating appmenus for {0} VM!".format (self.name) |             print >> sys.stderr, "Ooops, there was a problem creating appmenus for {0} VM!".format (self.name) | ||||||
| 
 | 
 | ||||||
|     def get_clone_attrs(self): |     def get_clone_attrs(self): | ||||||
|         return ['kernel', 'uses_default_kernel', 'netvm_vm', 'uses_default_netvm', \ |         return ['kernel', 'uses_default_kernel', 'netvm', 'uses_default_netvm', \ | ||||||
|             'memory', 'maxmem', 'kernelopts', 'uses_default_kernelopts', 'services', 'vcpus', \ |             'memory', 'maxmem', 'kernelopts', 'uses_default_kernelopts', 'services', 'vcpus', \ | ||||||
|             '_mac'] |             '_mac'] | ||||||
| 
 | 
 | ||||||
| @ -1238,7 +1244,7 @@ class QubesVm(object): | |||||||
|             raise QubesException ("VM not running!") |             raise QubesException ("VM not running!") | ||||||
| 
 | 
 | ||||||
|         if netvm is None: |         if netvm is None: | ||||||
|             netvm = self.netvm_vm |             netvm = self.netvm | ||||||
| 
 | 
 | ||||||
|         if netvm is None: |         if netvm is None: | ||||||
|             raise QubesException ("NetVM not set!") |             raise QubesException ("NetVM not set!") | ||||||
| @ -1305,12 +1311,12 @@ class QubesVm(object): | |||||||
|         if self.get_power_state() != "Halted": |         if self.get_power_state() != "Halted": | ||||||
|             raise QubesException ("VM is already running!") |             raise QubesException ("VM is already running!") | ||||||
| 
 | 
 | ||||||
|         if self.netvm_vm is not None: |         if self.netvm is not None: | ||||||
|             if self.netvm_vm.qid != 0: |             if self.netvm.qid != 0: | ||||||
|                 if not self.netvm_vm.is_running(): |                 if not self.netvm.is_running(): | ||||||
|                     if verbose: |                     if verbose: | ||||||
|                         print >> sys.stderr, "--> Starting NetVM {0}...".format(self.netvm_vm.name) |                         print >> sys.stderr, "--> Starting NetVM {0}...".format(self.netvm.name) | ||||||
|                     self.netvm_vm.start() |                     self.netvm.start() | ||||||
| 
 | 
 | ||||||
|         self.reset_volatile_storage(verbose=verbose) |         self.reset_volatile_storage(verbose=verbose) | ||||||
|         if verbose: |         if verbose: | ||||||
| @ -1427,7 +1433,7 @@ class QubesVm(object): | |||||||
|                 attrs[prop] = str(self.__getattribute__(prop)) |                 attrs[prop] = str(self.__getattribute__(prop)) | ||||||
|         if self._mac is not None: |         if self._mac is not None: | ||||||
|             attrs["mac"] = str(self._mac) |             attrs["mac"] = str(self._mac) | ||||||
|         attrs["netvm_qid"] = str(self.netvm_vm.qid) if self.netvm_vm is not None else "none" |         attrs["netvm_qid"] = str(self.netvm.qid) if self.netvm is not None else "none" | ||||||
|         attrs["template_qid"] = str(self.template_vm.qid) if self.template_vm and not self.is_updateable() else "none" |         attrs["template_qid"] = str(self.template_vm.qid) if self.template_vm and not self.is_updateable() else "none" | ||||||
|         attrs["label"] = self.label.name |         attrs["label"] = self.label.name | ||||||
|         return attrs |         return attrs | ||||||
| @ -1812,14 +1818,14 @@ class QubesProxyVm(QubesNetVm): | |||||||
|         if dry_run: |         if dry_run: | ||||||
|             return |             return | ||||||
|         retcode = super(QubesProxyVm, self).start(debug_console=debug_console, verbose=verbose, preparing_dvm=preparing_dvm) |         retcode = super(QubesProxyVm, self).start(debug_console=debug_console, verbose=verbose, preparing_dvm=preparing_dvm) | ||||||
|         self.netvm_vm.add_external_ip_permission(self.get_xid()) |         self.netvm.add_external_ip_permission(self.get_xid()) | ||||||
|         self.write_netvm_domid_entry() |         self.write_netvm_domid_entry() | ||||||
|         return retcode |         return retcode | ||||||
| 
 | 
 | ||||||
|     def force_shutdown(self): |     def force_shutdown(self): | ||||||
|         if dry_run: |         if dry_run: | ||||||
|             return |             return | ||||||
|         self.netvm_vm.remove_external_ip_permission(self.get_xid()) |         self.netvm.remove_external_ip_permission(self.get_xid()) | ||||||
|         super(QubesProxyVm, self).force_shutdown() |         super(QubesProxyVm, self).force_shutdown() | ||||||
| 
 | 
 | ||||||
|     def create_xenstore_entries(self, xid = None): |     def create_xenstore_entries(self, xid = None): | ||||||
| @ -1841,7 +1847,7 @@ class QubesProxyVm(QubesNetVm): | |||||||
|             xid = self.get_xid() |             xid = self.get_xid() | ||||||
| 
 | 
 | ||||||
|         xs.write('', "/local/domain/{0}/qubes_netvm_domid".format(xid), |         xs.write('', "/local/domain/{0}/qubes_netvm_domid".format(xid), | ||||||
|                 "{0}".format(self.netvm_vm.get_xid())) |                 "{0}".format(self.netvm.get_xid())) | ||||||
| 
 | 
 | ||||||
|     def write_iptables_xenstore_entry(self): |     def write_iptables_xenstore_entry(self): | ||||||
|         xs.rm('', "/local/domain/{0}/qubes_iptables_domainrules".format(self.get_xid())) |         xs.rm('', "/local/domain/{0}/qubes_iptables_domainrules".format(self.get_xid())) | ||||||
| @ -1910,9 +1916,9 @@ class QubesProxyVm(QubesNetVm): | |||||||
|                 iptables += " -j {0}\n".format(rules_action) |                 iptables += " -j {0}\n".format(rules_action) | ||||||
| 
 | 
 | ||||||
|             if conf["allowDns"]: |             if conf["allowDns"]: | ||||||
|                 # PREROUTING does DNAT to NetVM DNSes, so we need self.netvm_vm. properties |                 # PREROUTING does DNAT to NetVM DNSes, so we need self.netvm. properties | ||||||
|                 iptables += "-A FORWARD -i {0} -p udp -d {1} --dport 53 -j ACCEPT\n".format(vif,self.netvm_vm.gateway) |                 iptables += "-A FORWARD -i {0} -p udp -d {1} --dport 53 -j ACCEPT\n".format(vif,self.netvm.gateway) | ||||||
|                 iptables += "-A FORWARD -i {0} -p udp -d {1} --dport 53 -j ACCEPT\n".format(vif,self.netvm_vm.secondary_dns) |                 iptables += "-A FORWARD -i {0} -p udp -d {1} --dport 53 -j ACCEPT\n".format(vif,self.netvm.secondary_dns) | ||||||
|             if conf["allowIcmp"]: |             if conf["allowIcmp"]: | ||||||
|                 iptables += "-A FORWARD -i {0} -p icmp -j ACCEPT\n".format(vif) |                 iptables += "-A FORWARD -i {0} -p icmp -j ACCEPT\n".format(vif) | ||||||
| 
 | 
 | ||||||
| @ -1928,7 +1934,7 @@ class QubesProxyVm(QubesNetVm): | |||||||
| 
 | 
 | ||||||
|     def get_xml_attrs(self): |     def get_xml_attrs(self): | ||||||
|         attrs = super(QubesProxyVm, self).get_xml_attrs() |         attrs = super(QubesProxyVm, self).get_xml_attrs() | ||||||
|         attrs["netvm_qid"] = str(self.netvm_vm.qid) if self.netvm_vm is not None else "none" |         attrs["netvm_qid"] = str(self.netvm.qid) if self.netvm is not None else "none" | ||||||
|         return attrs |         return attrs | ||||||
| 
 | 
 | ||||||
| class QubesDom0NetVm(QubesNetVm): | class QubesDom0NetVm(QubesNetVm): | ||||||
| @ -2010,8 +2016,8 @@ class QubesDisposableVm(QubesVm): | |||||||
| 
 | 
 | ||||||
|     @property |     @property | ||||||
|     def ip(self): |     def ip(self): | ||||||
|         if self.netvm_vm is not None: |         if self.netvm is not None: | ||||||
|             return self.netvm_vm.get_ip_for_dispvm(self.dispid) |             return self.netvm.get_ip_for_dispvm(self.dispid) | ||||||
|         else: |         else: | ||||||
|             return None |             return None | ||||||
| 
 | 
 | ||||||
| @ -2204,7 +2210,7 @@ class QubesHVm(QubesVm): | |||||||
|     def vif(self): |     def vif(self): | ||||||
|         if self.xid < 0: |         if self.xid < 0: | ||||||
|             return None |             return None | ||||||
|         if self.netvm_vm is None: |         if self.netvm is None: | ||||||
|             return None |             return None | ||||||
|         return "vif{0}.+".format(self.stubdom_xid) |         return "vif{0}.+".format(self.stubdom_xid) | ||||||
| 
 | 
 | ||||||
| @ -2280,7 +2286,7 @@ class QubesVmCollection(dict): | |||||||
|         vm = QubesAppVm (qid=qid, name=name, template_vm=template_vm, |         vm = QubesAppVm (qid=qid, name=name, template_vm=template_vm, | ||||||
|                          dir_path=dir_path, conf_file=conf_file, |                          dir_path=dir_path, conf_file=conf_file, | ||||||
|                          private_img=private_img, |                          private_img=private_img, | ||||||
|                          netvm_vm = self.get_default_netvm_vm(), |                          netvm = self.get_default_netvm(), | ||||||
|                          kernel = self.get_default_kernel(), |                          kernel = self.get_default_kernel(), | ||||||
|                          uses_default_kernel = True, |                          uses_default_kernel = True, | ||||||
|                          updateable=updateable, |                          updateable=updateable, | ||||||
| @ -2295,7 +2301,7 @@ class QubesVmCollection(dict): | |||||||
| 
 | 
 | ||||||
|         qid = self.get_new_unused_qid() |         qid = self.get_new_unused_qid() | ||||||
|         vm = QubesHVm (qid=qid, name=name, |         vm = QubesHVm (qid=qid, name=name, | ||||||
|                          netvm_vm = self.get_default_netvm_vm(), |                          netvm = self.get_default_netvm(), | ||||||
|                          kernel = self.get_default_kernel(), |                          kernel = self.get_default_kernel(), | ||||||
|                          uses_default_kernel = True, |                          uses_default_kernel = True, | ||||||
|                          label=label) |                          label=label) | ||||||
| @ -2310,7 +2316,7 @@ class QubesVmCollection(dict): | |||||||
| 
 | 
 | ||||||
|         qid = self.get_new_unused_qid() |         qid = self.get_new_unused_qid() | ||||||
|         vm = QubesDisposableVm (qid=qid, name=name, template_vm=template_vm, |         vm = QubesDisposableVm (qid=qid, name=name, template_vm=template_vm, | ||||||
|                          netvm_vm = self.get_default_netvm_vm(), |                          netvm = self.get_default_netvm(), | ||||||
|                          label=label, dispid=dispid) |                          label=label, dispid=dispid) | ||||||
| 
 | 
 | ||||||
|         if not self.verify_new_vm (vm): |         if not self.verify_new_vm (vm): | ||||||
| @ -2328,7 +2334,7 @@ class QubesVmCollection(dict): | |||||||
|                               dir_path=dir_path, conf_file=conf_file, |                               dir_path=dir_path, conf_file=conf_file, | ||||||
|                               root_img=root_img, private_img=private_img, |                               root_img=root_img, private_img=private_img, | ||||||
|                               installed_by_rpm=installed_by_rpm, |                               installed_by_rpm=installed_by_rpm, | ||||||
|                               netvm_vm = self.get_default_netvm_vm(), |                               netvm = self.get_default_netvm(), | ||||||
|                               kernel = self.get_default_kernel(), |                               kernel = self.get_default_kernel(), | ||||||
|                               uses_default_kernel = True) |                               uses_default_kernel = True) | ||||||
| 
 | 
 | ||||||
| @ -2370,7 +2376,7 @@ class QubesVmCollection(dict): | |||||||
|         self[vm.qid]=vm |         self[vm.qid]=vm | ||||||
| 
 | 
 | ||||||
|         if self.default_fw_netvm_qid is None: |         if self.default_fw_netvm_qid is None: | ||||||
|             self.set_default_fw_netvm_vm(vm) |             self.set_default_fw_netvm(vm) | ||||||
| 
 | 
 | ||||||
|         # by default ClockVM is the first NetVM |         # by default ClockVM is the first NetVM | ||||||
|         if self.clockvm_qid is None: |         if self.clockvm_qid is None: | ||||||
| @ -2392,14 +2398,14 @@ class QubesVmCollection(dict): | |||||||
|                               updateable=updateable, |                               updateable=updateable, | ||||||
|                               kernel = self.get_default_kernel(), |                               kernel = self.get_default_kernel(), | ||||||
|                               uses_default_kernel = True, |                               uses_default_kernel = True, | ||||||
|                               netvm_vm = self.get_default_fw_netvm_vm()) |                               netvm = self.get_default_fw_netvm()) | ||||||
| 
 | 
 | ||||||
|         if not self.verify_new_vm (vm): |         if not self.verify_new_vm (vm): | ||||||
|             assert False, "Wrong VM description!" |             assert False, "Wrong VM description!" | ||||||
|         self[vm.qid]=vm |         self[vm.qid]=vm | ||||||
| 
 | 
 | ||||||
|         if self.default_netvm_qid is None: |         if self.default_netvm_qid is None: | ||||||
|             self.set_default_netvm_vm(vm) |             self.set_default_netvm(vm) | ||||||
| 
 | 
 | ||||||
|         if self.updatevm_qid is None: |         if self.updatevm_qid is None: | ||||||
|             self.set_updatevm_vm(vm) |             self.set_updatevm_vm(vm) | ||||||
| @ -2416,11 +2422,11 @@ class QubesVmCollection(dict): | |||||||
|         else: |         else: | ||||||
|             return self[self.default_template_qid] |             return self[self.default_template_qid] | ||||||
| 
 | 
 | ||||||
|     def set_default_netvm_vm(self, vm): |     def set_default_netvm(self, vm): | ||||||
|         assert vm.is_netvm(), "VM {0} does not provide network!".format(vm.name) |         assert vm.is_netvm(), "VM {0} does not provide network!".format(vm.name) | ||||||
|         self.default_netvm_qid = vm.qid |         self.default_netvm_qid = vm.qid | ||||||
| 
 | 
 | ||||||
|     def get_default_netvm_vm(self): |     def get_default_netvm(self): | ||||||
|         if self.default_netvm_qid is None: |         if self.default_netvm_qid is None: | ||||||
|             return None |             return None | ||||||
|         else: |         else: | ||||||
| @ -2433,11 +2439,11 @@ class QubesVmCollection(dict): | |||||||
|     def get_default_kernel(self): |     def get_default_kernel(self): | ||||||
|         return self.default_kernel |         return self.default_kernel | ||||||
| 
 | 
 | ||||||
|     def set_default_fw_netvm_vm(self, vm): |     def set_default_fw_netvm(self, vm): | ||||||
|         assert vm.is_netvm(), "VM {0} does not provide network!".format(vm.name) |         assert vm.is_netvm(), "VM {0} does not provide network!".format(vm.name) | ||||||
|         self.default_fw_netvm_qid = vm.qid |         self.default_fw_netvm_qid = vm.qid | ||||||
| 
 | 
 | ||||||
|     def get_default_fw_netvm_vm(self): |     def get_default_fw_netvm(self): | ||||||
|         if self.default_fw_netvm_qid is None: |         if self.default_fw_netvm_qid is None: | ||||||
|             return None |             return None | ||||||
|         else: |         else: | ||||||
| @ -2676,22 +2682,22 @@ class QubesVmCollection(dict): | |||||||
|         else: |         else: | ||||||
|             vm.uses_default_netvm = True if kwargs["uses_default_netvm"] == "True" else False |             vm.uses_default_netvm = True if kwargs["uses_default_netvm"] == "True" else False | ||||||
|         if vm.uses_default_netvm is True: |         if vm.uses_default_netvm is True: | ||||||
|             netvm_vm = self.get_default_netvm_vm() |             netvm = self.get_default_netvm() | ||||||
|             kwargs.pop("netvm_qid") |             kwargs.pop("netvm_qid") | ||||||
|         else: |         else: | ||||||
|             if kwargs["netvm_qid"] == "none" or kwargs["netvm_qid"] is None: |             if kwargs["netvm_qid"] == "none" or kwargs["netvm_qid"] is None: | ||||||
|                 netvm_vm = None |                 netvm = None | ||||||
|                 kwargs.pop("netvm_qid") |                 kwargs.pop("netvm_qid") | ||||||
|             else: |             else: | ||||||
|                 netvm_qid = int(kwargs.pop("netvm_qid")) |                 netvm_qid = int(kwargs.pop("netvm_qid")) | ||||||
|                 if netvm_qid not in self: |                 if netvm_qid not in self: | ||||||
|                     netvm_vm = None |                     netvm = None | ||||||
|                 else: |                 else: | ||||||
|                     netvm_vm = self[netvm_qid] |                     netvm = self[netvm_qid] | ||||||
| 
 | 
 | ||||||
|         vm.netvm_vm = netvm_vm |         vm.netvm = netvm | ||||||
|         if netvm_vm: |         if netvm: | ||||||
|             netvm_vm.connected_vms[vm.qid] = vm |             netvm.connected_vms[vm.qid] = vm | ||||||
| 
 | 
 | ||||||
|     def load(self): |     def load(self): | ||||||
|         self.clear() |         self.clear() | ||||||
| @ -2867,7 +2873,7 @@ class QubesVmCollection(dict): | |||||||
|                 else: |                 else: | ||||||
|                     kwargs["template_vm"] = template_vm |                     kwargs["template_vm"] = template_vm | ||||||
| 
 | 
 | ||||||
|                 kwargs["netvm_vm"] = self.get_default_netvm_vm() |                 kwargs["netvm"] = self.get_default_netvm() | ||||||
| 
 | 
 | ||||||
|                 if kwargs["label"] is not None: |                 if kwargs["label"] is not None: | ||||||
|                     if kwargs["label"] not in QubesVmLabels: |                     if kwargs["label"] not in QubesVmLabels: | ||||||
| @ -2890,8 +2896,8 @@ class QubesVmCollection(dict): | |||||||
|             if self.default_netvm_qid is not None: |             if self.default_netvm_qid is not None: | ||||||
|                 clockvm = self[self.default_netvm_qid] |                 clockvm = self[self.default_netvm_qid] | ||||||
|                 # Find root of netvm chain |                 # Find root of netvm chain | ||||||
|                 while clockvm.netvm_vm is not None: |                 while clockvm.netvm is not None: | ||||||
|                     clockvm = clockvm.netvm_vm |                     clockvm = clockvm.netvm | ||||||
| 
 | 
 | ||||||
|                 self.clockvm_qid = clockvm.qid |                 self.clockvm_qid = clockvm.qid | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -635,21 +635,21 @@ def backup_restore_prepare(backup_dir, options = {}, host_collection = None): | |||||||
|                             vms_to_restore[vm.name]['missing-template'] = True |                             vms_to_restore[vm.name]['missing-template'] = True | ||||||
|                             vms_to_restore[vm.name]['good-to-go'] = False |                             vms_to_restore[vm.name]['good-to-go'] = False | ||||||
| 
 | 
 | ||||||
|             if vm.netvm_vm is None: |             if vm.netvm is None: | ||||||
|                 vms_to_restore[vm.name]['netvm'] = None |                 vms_to_restore[vm.name]['netvm'] = None | ||||||
|             else: |             else: | ||||||
|                 netvm_name = vm.netvm_vm.name |                 netvm_name = vm.netvm.name | ||||||
|                 vms_to_restore[vm.name]['netvm'] = netvm_name |                 vms_to_restore[vm.name]['netvm'] = netvm_name | ||||||
|                 netvm_vm_on_host = host_collection.get_vm_by_name (netvm_name) |                 netvm_on_host = host_collection.get_vm_by_name (netvm_name) | ||||||
| 
 | 
 | ||||||
|                 # No netvm on the host? |                 # No netvm on the host? | ||||||
|                 if not ((netvm_vm_on_host is not None) and netvm_vm_on_host.is_netvm()): |                 if not ((netvm_on_host is not None) and netvm_on_host.is_netvm()): | ||||||
| 
 | 
 | ||||||
|                     # Maybe the (custom) netvm is in the backup? |                     # Maybe the (custom) netvm is in the backup? | ||||||
|                     netvm_vm_on_backup = backup_collection.get_vm_by_name (netvm_name) |                     netvm_on_backup = backup_collection.get_vm_by_name (netvm_name) | ||||||
|                     if not ((netvm_vm_on_backup is not None) and netvm_vm_on_backup.is_netvm): |                     if not ((netvm_on_backup is not None) and netvm_on_backup.is_netvm): | ||||||
|                         if options['use-default-netvm']: |                         if options['use-default-netvm']: | ||||||
|                             vms_to_restore[vm.name]['netvm'] = host_collection.get_default_netvm_vm().name |                             vms_to_restore[vm.name]['netvm'] = host_collection.get_default_netvm().name | ||||||
|                             vm.uses_default_netvm = True |                             vm.uses_default_netvm = True | ||||||
|                         elif options['use-none-netvm']: |                         elif options['use-none-netvm']: | ||||||
|                             vms_to_restore[vm.name]['netvm'] = None |                             vms_to_restore[vm.name]['netvm'] = None | ||||||
| @ -701,7 +701,7 @@ def backup_restore_print_summary(restore_info, print_callback = print_stdout): | |||||||
| 
 | 
 | ||||||
|         "netvm": {"func": "'n/a' if vm.is_netvm() else\ |         "netvm": {"func": "'n/a' if vm.is_netvm() else\ | ||||||
|                   ('*' if vm.uses_default_netvm else '') +\ |                   ('*' if vm.uses_default_netvm else '') +\ | ||||||
|                     vm_info['netvm'] if vm.netvm_vm is not None else '-'"}, |                     vm_info['netvm'] if vm.netvm is not None else '-'"}, | ||||||
| 
 | 
 | ||||||
|         "label" : {"func" : "vm.label.name"}, |         "label" : {"func" : "vm.label.name"}, | ||||||
|     } |     } | ||||||
| @ -876,7 +876,7 @@ def backup_restore_do(backup_dir, restore_info, host_collection = None, print_ca | |||||||
| 
 | 
 | ||||||
|         if not vm.uses_default_netvm: |         if not vm.uses_default_netvm: | ||||||
|             uses_default_netvm = False |             uses_default_netvm = False | ||||||
|             netvm_vm = host_collection.get_vm_by_name (vm_info['netvm']) if vm_info['netvm'] is not None else None |             netvm = host_collection.get_vm_by_name (vm_info['netvm']) if vm_info['netvm'] is not None else None | ||||||
|         else: |         else: | ||||||
|             uses_default_netvm = True |             uses_default_netvm = True | ||||||
| 
 | 
 | ||||||
| @ -907,7 +907,7 @@ def backup_restore_do(backup_dir, restore_info, host_collection = None, print_ca | |||||||
| 
 | 
 | ||||||
|         if vm.is_proxyvm() and not uses_default_netvm: |         if vm.is_proxyvm() and not uses_default_netvm: | ||||||
|             new_vm.uses_default_netvm = False |             new_vm.uses_default_netvm = False | ||||||
|             new_vm.netvm_vm = netvm_vm |             new_vm.netvm = netvm | ||||||
| 
 | 
 | ||||||
|         try: |         try: | ||||||
|             new_vm.verify_files() |             new_vm.verify_files() | ||||||
| @ -941,7 +941,7 @@ def backup_restore_do(backup_dir, restore_info, host_collection = None, print_ca | |||||||
| 
 | 
 | ||||||
|         if not vm.uses_default_netvm: |         if not vm.uses_default_netvm: | ||||||
|             uses_default_netvm = False |             uses_default_netvm = False | ||||||
|             netvm_vm = host_collection.get_vm_by_name (vm_info['netvm']) if vm_info['netvm'] is not None else None |             netvm = host_collection.get_vm_by_name (vm_info['netvm']) if vm_info['netvm'] is not None else None | ||||||
|         else: |         else: | ||||||
|             uses_default_netvm = True |             uses_default_netvm = True | ||||||
| 
 | 
 | ||||||
| @ -964,7 +964,7 @@ def backup_restore_do(backup_dir, restore_info, host_collection = None, print_ca | |||||||
| 
 | 
 | ||||||
|         if not uses_default_netvm: |         if not uses_default_netvm: | ||||||
|             new_vm.uses_default_netvm = False |             new_vm.uses_default_netvm = False | ||||||
|             new_vm.netvm_vm = netvm_vm |             new_vm.netvm = netvm | ||||||
| 
 | 
 | ||||||
|         try: |         try: | ||||||
|             new_vm.create_appmenus(verbose=True) |             new_vm.create_appmenus(verbose=True) | ||||||
|  | |||||||
| @ -33,9 +33,9 @@ def get_netvm(): | |||||||
|     qvm_collection.lock_db_for_reading() |     qvm_collection.lock_db_for_reading() | ||||||
|     qvm_collection.load() |     qvm_collection.load() | ||||||
|     qvm_collection.unlock_db() |     qvm_collection.unlock_db() | ||||||
|     netvm = qvm_collection.get_default_netvm_vm() |     netvm = qvm_collection.get_default_netvm() | ||||||
|     while netvm.netvm_vm is not None: |     while netvm.netvm is not None: | ||||||
|         netvm = netvm.netvm_vm |         netvm = netvm.netvm | ||||||
|     if netvm is None or netvm.name == 'dom0': |     if netvm is None or netvm.name == 'dom0': | ||||||
|         print >> sys.stderr, 'There seems to be no dedicated default netvm, aborting.' |         print >> sys.stderr, 'There seems to be no dedicated default netvm, aborting.' | ||||||
|         sys.exit(1) |         sys.exit(1) | ||||||
|  | |||||||
| @ -30,8 +30,8 @@ import sys | |||||||
| 
 | 
 | ||||||
| def handle_vm(vms, label, new_value = None): | def handle_vm(vms, label, new_value = None): | ||||||
|     functions = { # label: [ getter, setter ], |     functions = { # label: [ getter, setter ], | ||||||
|         'default-netvm': [ 'get_default_netvm_vm', 'set_default_netvm_vm' ], |         'default-netvm': [ 'get_default_netvm', 'set_default_netvm' ], | ||||||
|         'default-fw-netvm': [ 'get_default_fw_netvm_vm', 'set_default_fw_netvm_vm' ], |         'default-fw-netvm': [ 'get_default_fw_netvm', 'set_default_fw_netvm' ], | ||||||
|         'default-template': [ 'get_default_template_vm', 'set_default_template_vm' ], |         'default-template': [ 'get_default_template_vm', 'set_default_template_vm' ], | ||||||
|         'clockvm': [ 'get_clockvm_vm', 'set_clockvm_vm' ], |         'clockvm': [ 'get_clockvm_vm', 'set_clockvm_vm' ], | ||||||
|         'updatevm': [ 'get_updatevm_vm', 'set_updatevm_vm' ], |         'updatevm': [ 'get_updatevm_vm', 'set_updatevm_vm' ], | ||||||
|  | |||||||
| @ -52,8 +52,8 @@ fields = { | |||||||
| 
 | 
 | ||||||
|     "netvm": {"func": "'n/a' if vm.is_netvm() and not vm.is_proxyvm() else\ |     "netvm": {"func": "'n/a' if vm.is_netvm() and not vm.is_proxyvm() else\ | ||||||
|               ('*' if vm.uses_default_netvm else '') +\ |               ('*' if vm.uses_default_netvm else '') +\ | ||||||
|               qvm_collection[vm.netvm_vm.qid].name\ |               qvm_collection[vm.netvm.qid].name\ | ||||||
|                      if vm.netvm_vm is not None else '-'"}, |                      if vm.netvm is not None else '-'"}, | ||||||
| 
 | 
 | ||||||
|     "ip" : {"func": "vm.ip"}, |     "ip" : {"func": "vm.ip"}, | ||||||
|     "netmask" : {"func": "vm.netmask"}, |     "netmask" : {"func": "vm.netmask"}, | ||||||
|  | |||||||
| @ -39,8 +39,8 @@ def do_list(vm): | |||||||
|     print fmt.format ("type", vm.type) |     print fmt.format ("type", vm.type) | ||||||
|     if vm.template_vm is not None: |     if vm.template_vm is not None: | ||||||
|         print fmt.format ("template", vm.template_vm.name) |         print fmt.format ("template", vm.template_vm.name) | ||||||
|     if vm.netvm_vm is not None: |     if vm.netvm is not None: | ||||||
|         print fmt.format ("netvm", vm.netvm_vm.name) |         print fmt.format ("netvm", vm.netvm.name) | ||||||
|     print fmt.format ("updateable?", vm.is_updateable()) |     print fmt.format ("updateable?", vm.is_updateable()) | ||||||
|     print fmt.format ("installed by RPM?", vm.installed_by_rpm) |     print fmt.format ("installed by RPM?", vm.installed_by_rpm) | ||||||
|     print fmt.format ("dir", vm.dir_path) |     print fmt.format ("dir", vm.dir_path) | ||||||
| @ -143,30 +143,30 @@ def set_netvm(vms, vm, args): | |||||||
| 
 | 
 | ||||||
|     netvm = args[0] |     netvm = args[0] | ||||||
|     if netvm == "none": |     if netvm == "none": | ||||||
|         netvm_vm = None |         netvm = None | ||||||
|         vm.uses_default_netvm = False |         vm.uses_default_netvm = False | ||||||
|     elif netvm == "default": |     elif netvm == "default": | ||||||
|         netvm_vm = vms.get_default_netvm_vm() |         netvm = vms.get_default_netvm() | ||||||
|         vm.uses_default_netvm = True |         vm.uses_default_netvm = True | ||||||
|     else: |     else: | ||||||
|         netvm_vm = vms.get_vm_by_name (netvm) |         netvm = vms.get_vm_by_name (netvm) | ||||||
|         if netvm_vm is None: |         if netvm is None: | ||||||
|             print >> sys.stderr, "A VM with the name '{0}' does not exist in the system.".format(netvm) |             print >> sys.stderr, "A VM with the name '{0}' does not exist in the system.".format(netvm) | ||||||
|             exit(1) |             exit(1) | ||||||
|         if not netvm_vm.is_netvm(): |         if not netvm.is_netvm(): | ||||||
|             print >> sys.stderr, "VM '{0}' is not a NetVM".format(netvm) |             print >> sys.stderr, "VM '{0}' is not a NetVM".format(netvm) | ||||||
|             exit (1) |             exit (1) | ||||||
|         vm.uses_default_netvm = False |         vm.uses_default_netvm = False | ||||||
| 
 | 
 | ||||||
|     vm.set_netvm_vm(netvm_vm) |     vm.set_netvm(netvm) | ||||||
|     if not vm.is_running(): |     if not vm.is_running(): | ||||||
|         return |         return | ||||||
|     # this can fail if VM was not connected to any NetVM |     # this can fail if VM was not connected to any NetVM | ||||||
|     subprocess.call(["xl", "network-detach", vm.name, "0"], stderr=subprocess.PIPE) |     subprocess.call(["xl", "network-detach", vm.name, "0"], stderr=subprocess.PIPE) | ||||||
|     if vm.netvm_vm is None: |     if vm.netvm is None: | ||||||
|         return |         return | ||||||
|     if not vm.netvm_vm.is_running(): |     if not vm.netvm.is_running(): | ||||||
|         subprocess.check_call(["qvm-start", vm.netvm_vm.name]) |         subprocess.check_call(["qvm-start", vm.netvm.name]) | ||||||
|     # refresh IP, DNS etc |     # refresh IP, DNS etc | ||||||
|     vm.create_xenstore_entries() |     vm.create_xenstore_entries() | ||||||
|     vm.attach_network(verbose = True) |     vm.attach_network(verbose = True) | ||||||
|  | |||||||
| @ -84,7 +84,7 @@ def main(): | |||||||
|         if vm.installed_by_rpm: |         if vm.installed_by_rpm: | ||||||
|             if options.verbose: |             if options.verbose: | ||||||
|                 print >> sys.stderr, "--> VM installed by RPM, leaving all the files on disk" |                 print >> sys.stderr, "--> VM installed by RPM, leaving all the files on disk" | ||||||
|         else: |         elif not options.remove_from_db_only: | ||||||
|             if options.verbose: |             if options.verbose: | ||||||
|                 print "--> Removing all the files on disk..." |                 print "--> Removing all the files on disk..." | ||||||
|             #TODO:  ask for confirmation, perhaps? |             #TODO:  ask for confirmation, perhaps? | ||||||
|  | |||||||
| @ -31,8 +31,8 @@ qvm_collection = None | |||||||
| 
 | 
 | ||||||
| def get_netvm_of_vm(vm): | def get_netvm_of_vm(vm): | ||||||
|     netvm = vm |     netvm = vm | ||||||
|     while netvm.netvm_vm is not None: |     while netvm.netvm is not None: | ||||||
|         netvm = netvm.netvm_vm |         netvm = netvm.netvm | ||||||
|     if netvm is None or netvm.name == 'dom0': |     if netvm is None or netvm.name == 'dom0': | ||||||
|         print >> sys.stderr, 'There seems to be no network connected to ClockVM, aborting.' |         print >> sys.stderr, 'There seems to be no network connected to ClockVM, aborting.' | ||||||
|         sys.exit(1) |         sys.exit(1) | ||||||
| @ -89,7 +89,10 @@ def main(): | |||||||
|         if vm.is_running() and vm.qid != 0 and vm.qid != clock_vm.qid: |         if vm.is_running() and vm.qid != 0 and vm.qid != clock_vm.qid: | ||||||
|             if verbose: |             if verbose: | ||||||
|                 print >> sys.stderr, '--> Syncing \'%s\' clock.' % vm.name |                 print >> sys.stderr, '--> Syncing \'%s\' clock.' % vm.name | ||||||
|  |             try: | ||||||
|                 vm.run('root:date -u -s "%s"' % date_out, verbose=verbose) |                 vm.run('root:date -u -s "%s"' % date_out, verbose=verbose) | ||||||
|  |             except NotImplementedError: | ||||||
|  |                 pass | ||||||
| 
 | 
 | ||||||
| main() | main() | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -29,14 +29,14 @@ case "$command" in | |||||||
| 	online) | 	online) | ||||||
| 		ifconfig ${vif} up | 		ifconfig ${vif} up | ||||||
| 		echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp | 		echo 1 >/proc/sys/net/ipv4/conf/${vif}/proxy_arp | ||||||
| 		ipcmd='add' | 		ipcmd='replace' | ||||||
| 		iptables_cmd='-I FORWARD 1' | 		iptables_cmd='-I PREROUTING 1' | ||||||
| 		cmdprefix='' | 		cmdprefix='' | ||||||
| 		;; | 		;; | ||||||
| 	offline) | 	offline) | ||||||
| 		do_without_error ifdown ${vif} | 		do_without_error ifdown ${vif} | ||||||
| 		ipcmd='del' | 		ipcmd='del' | ||||||
| 		iptables_cmd='-D FORWARD' | 		iptables_cmd='-D PREROUTING' | ||||||
| 		cmdprefix='do_without_error' | 		cmdprefix='do_without_error' | ||||||
| 		;; | 		;; | ||||||
| esac | esac | ||||||
| @ -45,10 +45,9 @@ if [ "${ip}" ] ; then | |||||||
| 	# If we've been given a list of IP addresses, then add routes from dom0 to | 	# If we've been given a list of IP addresses, then add routes from dom0 to | ||||||
| 	# the guest using those addresses. | 	# the guest using those addresses. | ||||||
| 	for addr in ${ip} ; do | 	for addr in ${ip} ; do | ||||||
| 		${cmdprefix} ip route del ${addr} || true |  | ||||||
| 		${cmdprefix} ip route ${ipcmd} ${addr} dev ${vif} || true | 		${cmdprefix} ip route ${ipcmd} ${addr} dev ${vif} || true | ||||||
| 	done | 	done | ||||||
| 		echo ${cmdprefix} iptables $iptables_cmd -i ${vif} \! -s ${ip} -j DROP | 		echo ${cmdprefix} iptables -t raw $iptables_cmd -i ${vif} \! -s ${ip} -j DROP | ||||||
| 		${cmdprefix} iptables $iptables_cmd -i ${vif} \! -s ${ip} -j DROP | 		${cmdprefix} iptables $iptables_cmd -i ${vif} \! -s ${ip} -j DROP | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -122,6 +122,7 @@ cp ../qrexec/qubes_rpc_multiplexer $RPM_BUILD_ROOT/usr/lib/qubes | |||||||
| cp aux-tools/qubes.ReceiveUpdates.policy $RPM_BUILD_ROOT/etc/qubes_rpc/policy/qubes.ReceiveUpdates | cp aux-tools/qubes.ReceiveUpdates.policy $RPM_BUILD_ROOT/etc/qubes_rpc/policy/qubes.ReceiveUpdates | ||||||
| cp aux-tools/qubes.ReceiveUpdates $RPM_BUILD_ROOT/etc/qubes_rpc/ | cp aux-tools/qubes.ReceiveUpdates $RPM_BUILD_ROOT/etc/qubes_rpc/ | ||||||
| install -D aux-tools/qubes-dom0.modules $RPM_BUILD_ROOT/etc/sysconfig/modules/qubes-dom0.modules | install -D aux-tools/qubes-dom0.modules $RPM_BUILD_ROOT/etc/sysconfig/modules/qubes-dom0.modules | ||||||
|  | install -D aux-tools/cpufreq-xen.modules $RPM_BUILD_ROOT/etc/sysconfig/modules/cpufreq-xen.modules | ||||||
| install -D aux-tools/qubes-dom0-updates.cron $RPM_BUILD_ROOT/etc/cron.daily/qubes-dom0-updates.cron | install -D aux-tools/qubes-dom0-updates.cron $RPM_BUILD_ROOT/etc/cron.daily/qubes-dom0-updates.cron | ||||||
| install -D aux-tools/qubes-sync-clock.cron $RPM_BUILD_ROOT/etc/cron.d/qubes-sync-clock.cron | install -D aux-tools/qubes-sync-clock.cron $RPM_BUILD_ROOT/etc/cron.d/qubes-sync-clock.cron | ||||||
| 
 | 
 | ||||||
| @ -214,6 +215,9 @@ echo 'installonlypkgs = kernel, kernel-qubes-vm' >> /etc/yum.conf | |||||||
| 
 | 
 | ||||||
| sed 's/^PRELINKING\s*=.*/PRELINKING=no/' -i /etc/sysconfig/prelink | sed 's/^PRELINKING\s*=.*/PRELINKING=no/' -i /etc/sysconfig/prelink | ||||||
| 
 | 
 | ||||||
|  | sed 's/^#\?\s*XENCONSOLED_LOG_HYPERVISOR\s*=.*/XENCONSOLED_LOG_HYPERVISOR=yes/' -i /etc/sysconfig/xenconsoled | ||||||
|  | sed 's/^#\?\s*XENCONSOLED_LOG_GUESTS\s*=.*/XENCONSOLED_LOG_HYPERVISOR=yes/' -i /etc/sysconfig/xenconsoled | ||||||
|  | 
 | ||||||
| chkconfig --add qubes_core || echo "WARNING: Cannot add service qubes_core!" | chkconfig --add qubes_core || echo "WARNING: Cannot add service qubes_core!" | ||||||
| chkconfig --add qubes_netvm || echo "WARNING: Cannot add service qubes_netvm!" | chkconfig --add qubes_netvm || echo "WARNING: Cannot add service qubes_netvm!" | ||||||
| chkconfig --add qubes_setupdvm || echo "WARNING: Cannot add service qubes_setupdvm!" | chkconfig --add qubes_setupdvm || echo "WARNING: Cannot add service qubes_setupdvm!" | ||||||
| @ -355,6 +359,7 @@ fi | |||||||
| /etc/NetworkManager/dispatcher.d/qubes_nmhook | /etc/NetworkManager/dispatcher.d/qubes_nmhook | ||||||
| /etc/sysconfig/iptables | /etc/sysconfig/iptables | ||||||
| /etc/sysconfig/modules/qubes-dom0.modules | /etc/sysconfig/modules/qubes-dom0.modules | ||||||
|  | /etc/sysconfig/modules/cpufreq-xen.modules | ||||||
| /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/51qubes-suspend-netvm | /usr/lib64/pm-utils/sleep.d/51qubes-suspend-netvm | ||||||
| /usr/lib64/pm-utils/sleep.d/52qubes-pause-vms | /usr/lib64/pm-utils/sleep.d/52qubes-pause-vms | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Joanna Rutkowska
						Joanna Rutkowska