--- virt-manager-1.4.2.orig/man/virt-install.pod 2017-07-17 08:06:02.000000000 -0500 +++ virt-manager-1.4.2/man/virt-manager.pod 2016-06-17 17:54:21.000000000 -0500 @@ -401,36 +401,6 @@ =back -Some distro specific url samples: - -=over 4 - -=item Fedora/Red Hat Based - -http://download.fedoraproject.org/pub/fedora/linux/releases/25/Server/x86_64/os - -=item Debian - -http://ftp.us.debian.org/debian/dists/stable/main/installer-amd64/ - -=item Ubuntu - -http://us.archive.ubuntu.com/ubuntu/dists/wily/main/installer-amd64/ - -=item Suse - -http://download.opensuse.org/distribution/11.0/repo/oss/ - -=item Mandriva - -ftp://ftp.uwsg.indiana.edu/linux/mandrake/official/2009.0/i586/ - -=item Mageia - -ftp://distrib-coffee.ipsl.jussieu.fr/pub/linux/Mageia/distrib/1 - -=back - =item B<--pxe> Use the PXE boot protocol to load the initial ramdisk and kernel for starting @@ -465,21 +435,6 @@ --initrd-inject=/path/to/my.ks --extra-args "ks=file:/my.ks" -=item B<--os-variant> OS_VARIANT - -Optimize the guest configuration for a specific operating system (ex. -'fedora18', 'rhel7', 'winxp'). While not required, specifying this -options is HIGHLY RECOMMENDED, as it can greatly increase performance -by specifying virtio among other guest tweaks. - -By default, virt-install will attempt to auto detect this value from -the install media (currently only supported for URL installs). Autodetection -can be disabled with the special value 'none'. Autodetection can be -forced with the special value 'auto'. - -Use the command "osinfo-query os" to get the list of the accepted OS -variants. - =item B<--boot> BOOTOPTS Optionally specify the post-install VM boot configuration. This option allows @@ -637,7 +592,7 @@ =item B -Sets the removable flag (/sys/block/$dev/removable on Linux). Only +Sets the removable flag (/sys/block/$dev/removable on GNU/Linux). Only used with QEMU and bus=usb. Value can be 'on' or 'off'. =item B @@ -717,7 +672,7 @@ =item B -Serial number of the emulated disk device. This is used in linux guests +Serial number of the emulated disk device. This is used in GNU/Linux guests to set /dev/disk/by-id symlinks. An example serial number might be: WD-WMAP9A966149 @@ -746,7 +701,7 @@ --filesystem /source/on/host,/target/point/in/guest -Which will work for recent QEMU and linux guest OS or LXC containers. For +Which will work for recent QEMU and GNU/Linux guest OS or LXC Linux containers. For QEMU, the target point is just a mounting hint in sysfs, so will not be automatically mounted. @@ -1695,45 +1650,6 @@ =head1 EXAMPLES -Install a Fedora 20 KVM guest with virtio accelerated disk/network, -creating a new 10GiB qcow2 file, installing from media in the hosts -CDROM drive. This will use Spice graphics by default, and launch autolaunch -a graphical client. - - # virt-install \ - --connect qemu:///system \ - --virt-type kvm \ - --name demo \ - --memory 500 \ - --disk size=10 \ - --cdrom /dev/cdrom \ - --os-variant fedora13 - -Install a Fedora 9 plain QEMU guest, using LVM partition, virtual networking, -booting from PXE, using VNC server/viewer, with virtio-scsi disk - - # virt-install \ - --connect qemu:///system \ - --name demo \ - --memory 500 \ - --disk path=/dev/HostVG/DemoVM,bus=scsi \ - --controller virtio-scsi \ - --network network=default \ - --virt-type qemu \ - --graphics vnc \ - --os-variant fedora9 - -Run a Live CD image under Xen fullyvirt, in diskless environment - - # virt-install \ - --hvm \ - --name demo \ - --memory 500 \ - --disk none \ - --livecd \ - --graphics vnc \ - --cdrom /root/fedora7live.iso - Run /usr/bin/httpd in a linux container guest (LXC). Resource usage is capped at 512 MiB of ram and 2 host cpus: @@ -1759,7 +1675,7 @@ --init /bin/sh Install a paravirtualized Xen guest, 500 MiB of RAM, a 5 GiB of disk, and -Fedora Core 6 from a web server, in text-only mode, with old style --file +Parabola from a web server, in text-only mode, with old style --file options: # virt-install \ @@ -1768,7 +1684,7 @@ --memory 500 \ --disk /var/lib/xen/images/demo.img,size=6 \ --graphics none \ - --location http://download.fedora.redhat.com/pub/fedora/linux/core/6/x86_64/os/ + --location https://repo.parabola.nu/iso/latest/ Create a guest from an existing disk image 'mydisk.img' using defaults for the rest of the options. --- virt-manager-1.4.2.orig/man/virt-xml.pod 2017-07-17 08:06:02.000000000 -0500 +++ virt-manager-1.4.2/man/virt-xml.pod 2017-08-14 22:36:32.652992525 -0500 @@ -290,53 +290,10 @@ # virt-xml winxp --edit --cpu host-model,clearxml=yes --confirm -Change the second sound card to model=ich6 on 'fedora19', but only output the diff: - - # virt-xml fedora19 --edit 2 --sound model=ich6 --print-diff - -Update the every graphics device password to 'foo' of the running VM 'rhel6': - - # virt-xml rhel6 --edit all --graphics password=foo --update - -Remove the disk path from disk device hdc: - - # virt-xml rhel6 --edit target=hdc --disk path= - Change all disk devices of type 'disk' to use cache=none, using XML from stdin, printing the new XML to stdout. # cat | virt-xml --edit device=disk --disk cache=none -Change disk 'hda' IO to native and use startup policy as 'optional'. - - # virt-xml fedora20 --edit target=hda \ - --disk io=native,startup_policy=optional - -Change all host devices to use driver_name=vfio for VM 'fedora20' on the remote connection - - # virt-xml --connect qemu+ssh://remotehost/system \ - fedora20 --edit all --hostdev driver_name=vfio - -Hotplug host USB device 001.003 to running domain 'fedora19': - - # virt-xml fedora19 --update --add-device --hostdev 001.003 - -Add a spicevmc channel to the domain 'winxp', that will be available after the next VM shutdown. - - # virt-xml winxp --add-device --channel spicevmc - -Create a 10G qcow2 disk image and attach it to 'fedora18' for the next VM startup: - - # virt-xml fedora18 --add-device \ - --disk /var/lib/libvirt/images/newimage.qcow2,format=qcow2,size=10 - -Hotunplug the disk vdb from the running domain 'rhel7': - - # virt-xml rhel7 --update --remove-device --disk target=vdb - -Remove all graphics devices from the VM 'rhel7' after the next shutdown: - - # virt-xml rhel7 --remove-device --graphics all - Generate XML for a virtio console device and print it to stdout: # virt-xml --build-xml --console pty,target_type=virtio --- virt-manager-1.4.2.orig/setup.py 2017-08-02 12:57:43.000000000 -0500 +++ virt-manager-1.4.2/setup.py 2017-08-14 22:38:05.058814528 -0500 @@ -338,7 +338,6 @@ self.libvirt_package_names = None self.kvm_package_names = None self.askpass_package_names = None - self.preferred_distros = None self.stable_defaults = None self.default_graphics = None self.default_hvs = None @@ -356,8 +355,6 @@ template += "hv_packages = %s\n" % self.kvm_package_names if self.askpass_package_names is not None: template += "askpass_packages = %s\n" % self.askpass_package_names - if self.preferred_distros is not None: - template += "preferred_distros = %s\n" % self.preferred_distros if self.stable_defaults is not None: template += ("stable_defaults = %s\n" % self.stable_defaults) --- virt-manager-1.4.2.orig/virt-manager.spec 2017-08-08 17:15:54.000000000 -0500 +++ virt-manager-1.4.2/virt-manager.spec 2017-08-14 22:40:06.757018202 -0500 @@ -7,14 +7,8 @@ %global qemu_user "qemu" %global libvirt_packages "libvirt-daemon-kvm,libvirt-daemon-config-network" %global kvm_packages "" -%global preferred_distros "fedora,rhel" %global default_hvs "qemu,xen,lxc" -%if 0%{?rhel} -%global preferred_distros "rhel,fedora" -%global stable_defaults 1 -%endif - # End local config @@ -48,10 +42,6 @@ Requires: gtk-vnc2 Requires: spice-gtk3 -%if 0%{?rhel} == 7 -Requires: gnome-icon-theme -%endif - BuildRequires: intltool BuildRequires: /usr/bin/pod2man @@ -118,10 +108,6 @@ %global _kvm_packages --kvm-package-names=%{kvm_packages} %endif -%if %{preferred_distros} -%global _preferred_distros --preferred-distros=%{preferred_distros} -%endif - %if %{libvirt_packages} %global _libvirt_packages --libvirt-package-names=%{libvirt_packages} %endif @@ -143,7 +129,6 @@ %{?_kvm_packages} \ %{?_libvirt_packages} \ %{?_askpass_package} \ - %{?_preferred_distros} \ %{?_stable_defaults} \ %{?_default_hvs} --- virt-manager-1.4.2.orig/virt-manager.spec.in 2017-07-17 08:06:02.000000000 -0500 +++ virt-manager-1.4.2/virt-manager.spec.in 2017-08-14 22:41:34.683050407 -0500 @@ -7,14 +7,8 @@ %global qemu_user "qemu" %global libvirt_packages "libvirt-daemon-kvm,libvirt-daemon-config-network" %global kvm_packages "" -%global preferred_distros "fedora,rhel" %global default_hvs "qemu,xen,lxc" -%if 0%{?rhel} -%global preferred_distros "rhel,fedora" -%global stable_defaults 1 -%endif - # End local config @@ -48,10 +42,6 @@ Requires: gtk-vnc2 Requires: spice-gtk3 -%if 0%{?rhel} == 7 -Requires: gnome-icon-theme -%endif - BuildRequires: intltool BuildRequires: /usr/bin/pod2man @@ -118,10 +108,6 @@ %global _kvm_packages --kvm-package-names=%{kvm_packages} %endif -%if %{preferred_distros} -%global _preferred_distros --preferred-distros=%{preferred_distros} -%endif - %if %{libvirt_packages} %global _libvirt_packages --libvirt-package-names=%{libvirt_packages} %endif @@ -143,7 +129,6 @@ %{?_kvm_packages} \ %{?_libvirt_packages} \ %{?_askpass_package} \ - %{?_preferred_distros} \ %{?_stable_defaults} \ %{?_default_hvs} --- virt-manager-1.4.2.orig/virtManager/config.py 2017-08-08 07:42:58.000000000 -0500 +++ virt-manager-1.4.2/virtManager/config.py 2017-08-14 22:42:52.471973552 -0500 @@ -170,7 +170,6 @@ self.keyring = None self.default_qemu_user = CLIConfig.default_qemu_user - self.preferred_distros = CLIConfig.preferred_distros self.hv_packages = CLIConfig.hv_packages self.libvirt_packages = CLIConfig.libvirt_packages self.askpass_package = CLIConfig.askpass_package --- virt-manager-1.4.2.orig/virtManager/connection.py 2017-08-02 12:57:43.000000000 -0500 +++ virt-manager-1.4.2/virtManager/connection.py 2017-08-14 22:44:21.107973719 -0500 @@ -665,8 +665,8 @@ continue if (devtype == "usb_device" and - (("Linux Foundation" in str(xmlobj.vendor_name) or - ("Linux" in str(xmlobj.vendor_name) and + (("Free Software Foundation" in str(xmlobj.vendor_name) or + ("GNU/Linux" in str(xmlobj.vendor_name) and xmlobj.vendor_id == "0x1d6b")) and ("root hub" in str(xmlobj.product_name) or ("host controller" in str(xmlobj.product_name).lower() and --- virt-manager-1.4.2.orig/virtManager/create.py 2017-08-02 12:57:43.000000000 -0500 +++ virt-manager-1.4.2/virtManager/create.py 2017-08-15 00:10:08.678589639 -0500 @@ -997,9 +997,7 @@ model = widget.get_model() model.clear() - # Kind of a hack, just show linux + windows by default since - # that's all 98% of people care about - supported = {"generic", "linux", "windows"} + supported = {"generic"} # Move 'generic' to the front of the list types = virtinst.OSDB.list_types() @@ -1009,13 +1007,7 @@ # Pretty names for OSes. If a new OS is not found here, # its capitalized name is used. oses = { - "bsd": _("BSD"), "generic": _("Generic"), - "linux": _("Linux"), - "macos": _("macOS"), - "other": _("Others"), - "solaris": _("Solaris"), - "windows": _("Windows"), } # When only the "supported" types are requested, @@ -1046,32 +1038,14 @@ completion_model = self.widget("install-os-version-entry").get_completion().get_model() completion_model.clear() - preferred = self.config.preferred_distros - # All the subgroups for top-level types. Distributions not # belonging to these groups will be shown either in a "Others" # group, or top-level if there are no other groups. - groups = { - "altlinux": _("ALT Linux"), - "centos": _("CentOS"), - "debian": _("Debian"), - "fedora": _("Fedora"), - "freebsd": _("FreeBSD"), - "mageia": _("Mageia"), - "netbsd": _("NetBSD"), - "openbsd": _("OpenBSD"), - "opensuse": _("openSUSE"), - "rhel": _("Red Hat Enterprise Linux"), - "sled": _("SUSE Linux Enterprise Desktop"), - "sles": _("SUSE Linux Enterprise Server"), - "ubuntu": _("Ubuntu"), - } + groups = {} if self._show_all_os_was_selected: # List all the OSes, and determine which OSes have groups, # and which do not. - variants = virtinst.OSDB.list_os(typename=_type, - sortpref=preferred) all_distros = set([_os.distro for _os in variants]) distros = [_os for _os in all_distros if _os in groups] distros.sort() @@ -1099,15 +1073,13 @@ else: # We are showing only the supported systems, so query them, # and add them directly to their type. - variants = virtinst.OSDB.list_os(typename=_type, - sortpref=preferred, only_supported=True) for v in variants: self._add_os_row(model, v.name, v.label) self._add_completion_row(completion_model, v.name, v.label) # Add the menu entries to show all the OSes - self._add_os_row(model, sep=True) - self._add_os_row(model, label=_("Show all OS options"), action=True) + self._add_os_row(model, sep=False) + self._add_os_row(model, label=_("Show all OS options"), action=False) widget.set_active(0) @@ -1224,9 +1196,7 @@ osstr = "" have_os = True - if self._guest.os.is_container(): - osstr = _("Linux") - elif not distro: + if not distro: osstr = _("Generic") have_os = False elif not version: @@ -1328,7 +1298,7 @@ break if not variant: - return (None, None, False, None, None) + return (None, None, True, None, None) if drow: distro = drow[OS_COL_ID] --- virt-manager-1.4.2.orig/virtcli/cliconfig.py 2017-08-08 17:04:11.000000000 -0500 +++ virt-manager-1.4.2/virtcli/cliconfig.py 2017-08-15 01:23:24.289573171 -0500 @@ -79,8 +79,6 @@ self.default_qemu_user = _get_param("default_qemu_user", "root") self.stable_defaults = bool(int(_get_param("stable_defaults", "0"))) - self.preferred_distros = _split_list( - _get_param("preferred_distros", "")) self.hv_packages = _split_list(_get_param("hv_packages", "")) self.askpass_package = _split_list(_get_param("askpass_packages", "")) self.libvirt_packages = _split_list(_get_param("libvirt_packages", "")) --- virt-manager-1.4.2.orig/virtinst/guest.py 2017-08-02 12:57:43.000000000 -0500 +++ virt-manager-1.4.2/virtinst/guest.py 2017-08-15 01:35:54.605724267 -0500 @@ -708,7 +708,6 @@ return if (self.conn.is_qemu() and - self._os_object.supports_qemu_ga() and self.conn.check_support(self.conn.SUPPORT_CONN_AUTOSOCKET)): dev = VirtualChannelDevice(self.conn) dev.type = "unix" @@ -772,8 +771,7 @@ # But only if we are installing windows which has a multi stage # install. if (dev.is_cdrom() and - getattr(dev, "installer_media", False) and - not self._os_object.is_windows()): + getattr(dev, "installer_media", False)): dev.path = None def _set_defaults(self): @@ -856,10 +854,8 @@ hpet.present = False hv_clock = self.conn.check_support(self.conn.SUPPORT_CONN_HYPERV_CLOCK) - hv_clock_rhel = self.conn.check_support(self.conn.SUPPORT_CONN_HYPERV_CLOCK_RHEL) - if (self._os_object.is_windows() and self._hyperv_supported() and - (hv_clock or (self.stable_defaults() and hv_clock_rhel))): + if (self._hyperv_supported() and (hv_clock or self.stable_defaults())): hyperv = self.clock.add_timer() hyperv.name = "hypervclock" hyperv.present = True @@ -900,8 +896,6 @@ return self.cpu.set_special_mode(self.x86_cpu_default) - if self._os_object.broken_x2apic(): - self.cpu.add_feature("x2apic", policy="disable") def _hyperv_supported(self): @@ -937,8 +931,7 @@ return default = True - if (self._os_object.need_old_xen_disable_acpi() and - not self.conn.check_support(support.SUPPORT_CONN_CAN_ACPI)): + if (not self.conn.check_support(support.SUPPORT_CONN_CAN_ACPI)): default = False if self.features.acpi == "default": @@ -962,8 +955,7 @@ self.conn.check_support(self.conn.SUPPORT_CONN_VMPORT)): self.features.vmport = False - if (self._os_object.is_windows() and - self._hyperv_supported() and + if (self._hyperv_supported() and self.conn.check_support(self.conn.SUPPORT_CONN_HYPERV_VAPIC)): if self.features.hyperv_relaxed is None: self.features.hyperv_relaxed = True @@ -1065,9 +1057,7 @@ return True if (self.os.is_arm_vexpress() and - self.os.dtb and - self._os_object.supports_virtiommio() and - self.conn.check_support(support.SUPPORT_CONN_VIRTIO_MMIO)): + self.os.dtb): return True return False --- virt-manager-1.4.2.orig/virtinst/initrdinject.py 2017-08-02 12:57:43.000000000 -0500 +++ virt-manager-1.4.2/virtinst/initrdinject.py 2017-08-15 01:38:49.171182454 -0500 @@ -24,61 +24,6 @@ import tempfile -def _rhel4_initrd_inject(initrd, injections): - try: - file_proc = subprocess.Popen(["file", "-z", initrd], - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - if "ext2 filesystem" not in file_proc.communicate()[0]: - return False - except Exception: - logging.exception("Failed to file command for rhel4 initrd detection") - return False - - logging.debug("Is RHEL4 initrd") - - # Uncompress the initrd - newinitrd = open(initrd + ".new", "wb") - gzip_proc = subprocess.Popen(["gzip", "-d", "-f", "-c", initrd], - stdout=newinitrd, - stderr=subprocess.PIPE) - gzip_proc.wait() - newinitrd.close() - - debugfserr = "" - for filename in injections: - # We have an ext2 filesystem, use debugfs to inject files - cmd = ["debugfs", "-w", "-R", - "write %s %s" % (filename, os.path.basename(filename)), - newinitrd.name] - logging.debug("Copying %s to the initrd with cmd=%s", filename, cmd) - - debugfs_proc = subprocess.Popen(cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - debugfs_proc.wait() - debugfserr += debugfs_proc.stderr.read() or "" - - gziperr = gzip_proc.stderr.read() - if gziperr: - logging.debug("gzip stderr=%s", gziperr) - if debugfserr: - logging.debug("debugfs stderr=%s", debugfserr) - - # Recompress the initrd - gzip_proc = subprocess.Popen(["gzip"], - stdin=open(newinitrd.name, "rb"), - stdout=open(initrd, "wb"), - stderr=subprocess.PIPE) - gzip_proc.wait() - gziperr = gzip_proc.stderr.read() - if gziperr: - logging.debug("gzip stderr=%s", gziperr) - os.unlink(newinitrd.name) - - return True - - def perform_initrd_injections(initrd, injections, scratchdir): """ Insert files into the root directory of the initial ram disk @@ -86,9 +31,6 @@ if not injections: return - if _rhel4_initrd_inject(initrd, injections): - return - tempdir = tempfile.mkdtemp(dir=scratchdir) os.chmod(tempdir, 0o775) --- virt-manager-1.4.2.orig/virtinst/osdict.py 2017-08-02 12:57:43.000000000 -0500 +++ virt-manager-1.4.2/virtinst/osdict.py 2017-08-15 01:46:42.306504635 -0500 @@ -39,10 +39,6 @@ return int(osobj.name.rsplit(".", 1)[-1]) def _find_latest(prefix): - """ - Given a prefix like 'rhel4', find the latest 'rhel4.X', - and remove the rest from the os list - """ latest_os = None first_id = None for osobj in ret[:]: @@ -61,15 +57,6 @@ if latest_os: ret.insert(first_id, latest_os) - _find_latest("rhel4") - _find_latest("rhel5") - _find_latest("rhel6") - _find_latest("rhel7") - _find_latest("freebsd9") - _find_latest("freebsd10") - _find_latest("freebsd11") - _find_latest("centos6") - _find_latest("centos7") return ret @@ -137,49 +124,7 @@ # This is only for back compatibility with pre-libosinfo support. # This should never change. _aliases = { - "altlinux": "altlinux1.0", - "debianetch": "debian4", - "debianlenny": "debian5", - "debiansqueeze": "debian6", - "debianwheezy": "debian7", - "freebsd10": "freebsd10.0", - "freebsd6": "freebsd6.0", - "freebsd7": "freebsd7.0", - "freebsd8": "freebsd8.0", - "freebsd9": "freebsd9.0", - "mandriva2009": "mandriva2009.0", - "mandriva2010": "mandriva2010.0", - "mbs1": "mbs1.0", - "msdos": "msdos6.22", - "openbsd4": "openbsd4.2", - "opensolaris": "opensolaris2009.06", - "opensuse11": "opensuse11.4", - "opensuse12": "opensuse12.3", - "rhel4": "rhel4.0", - "rhel5": "rhel5.0", - "rhel6": "rhel6.0", - "rhel7": "rhel7.0", - "ubuntuhardy": "ubuntu8.04", - "ubuntuintrepid": "ubuntu8.10", - "ubuntujaunty": "ubuntu9.04", - "ubuntukarmic": "ubuntu9.10", - "ubuntulucid": "ubuntu10.04", - "ubuntumaverick": "ubuntu10.10", - "ubuntunatty": "ubuntu11.04", - "ubuntuoneiric": "ubuntu11.10", - "ubuntuprecise": "ubuntu12.04", - "ubuntuquantal": "ubuntu12.10", - "ubunturaring": "ubuntu13.04", - "ubuntusaucy": "ubuntu13.10", - "virtio26": "fedora10", - "vista": "winvista", - "winxp64": "winxp", - # Old --os-type values - "linux": "generic", - "windows": "winxp", - "solaris": "solaris10", - "unix": "freebsd9.0", "other": "generic", } @@ -235,17 +180,11 @@ return None osname = ret[0].get_short_id() - if osname == "fedora-unknown": - osname = self.latest_fedora_version() - logging.debug("Detected location=%s as os=fedora-unknown. " - "Converting that to the latest fedora OS version=%s", - location, osname) return osname def list_types(self): - approved_types = ["linux", "windows", "bsd", "macos", - "solaris", "other", "generic"] + approved_types = ["generic"] return approved_types def list_os(self, typename=None, only_supported=False, sortpref=None): @@ -268,13 +207,6 @@ return _sort(sortmap, sortpref=sortpref, limit_point_releases=only_supported) - def latest_fedora_version(self): - for osinfo in self.list_os(): - if (osinfo.name.startswith("fedora") and - "unknown" not in osinfo.name): - # First fedora* occurrence should be the newest - return osinfo.name - ##################### # OsVariant classes # @@ -291,7 +223,6 @@ self.distro = self._os and self._os.get_distro() or "" self.sortby = self._get_sortby() - self.urldistro = self._get_urldistro() self._supported = None @@ -366,34 +297,6 @@ return (datetime.datetime.strptime(eol_date, "%Y-%m-%d") > datetime.datetime.now()) - if self.name == "fedora-unknown": - return False - - # As of libosinfo 2.11, many clearly EOL distros don't have an - # EOL date. So assume None == EOL, add some manual work arounds. - # We should fix this in a new libosinfo version, and then drop - # this hack - if self._is_related_to(["fedora24", "rhel7.0", "debian6", - "ubuntu13.04", "win8", "win2k12", "mageia5", "centos7.0"], - check_clones=False, check_derives=False): - return True - return False - - def _get_urldistro(self): - if not self._os: - return None - urldistro = self.distro - remap = { - "opensuse": "suse", - "sles": "suse", - "mes": "mandriva" - } - - if remap.get(urldistro): - return remap[urldistro] - - return urldistro - ############### # Public APIs # @@ -410,43 +313,11 @@ """ if not self._os: return "generic" - - if self._family in ['linux']: - return "linux" - - if self._family in ['win9x', 'winnt', 'win16']: - return "windows" - - if self._family in ['solaris']: - return "solaris" - - if self._family in ['openbsd', 'freebsd', 'netbsd']: - return "bsd" - - if self._family in ['darwin']: - return "macos" - - return "other" - - def is_windows(self): - return self.get_typename() == "windows" - - def need_old_xen_disable_acpi(self): - return self._is_related_to(["winxp", "win2k"], check_upgrades=False) - - def broken_x2apic(self): - # x2apic breaks networking in solaris10 - # https://bugs.launchpad.net/bugs/1395217 - return self.name in ('solaris10', 'solaris11') + return None def get_clock(self): - if self.is_windows() or self._family in ['solaris']: - return "localtime" return "utc" - def supports_virtiommio(self): - return self._is_related_to(["fedora19"]) - def default_netmodel(self): """ Default non-virtio net-model, since we check for that separately @@ -512,9 +383,6 @@ return False - def supports_qemu_ga(self): - return self._is_related_to(["debian8", "fedora18", "rhel6.0", "sles11sp4"]) - def default_videomodel(self, guest): if guest.os.is_pseries(): return "vga" @@ -525,9 +393,6 @@ else: return "qxl" - if self.is_windows(): - return "vga" - return None def get_recommended_resources(self, guest): --- virt-manager-1.4.2.orig/virtinst/urlfetcher.py 2017-08-02 12:57:43.000000000 -0500 +++ virt-manager-1.4.2/virtinst/urlfetcher.py 2017-08-15 01:50:32.319461427 -0500 @@ -384,96 +384,6 @@ return treeinfo -def _distroFromSUSEContent(fetcher, arch, vmtype=None): - # Parse content file for the 'LABEL' field containing the distribution name - # None if no content, GenericDistro if unknown label type. - try: - cbuf = fetcher.acquireFileContent("content") - except ValueError: - return None - - distribution = None - distro_version = None - distro_summary = None - distro_distro = None - distro_arch = None - - lines = cbuf.splitlines()[1:] - for line in lines: - if line.startswith("LABEL "): - distribution = line.split(' ', 1) - elif line.startswith("DISTRO "): - distro_distro = line.rsplit(',', 1) - elif line.startswith("VERSION "): - distro_version = line.split(' ', 1) - if len(distro_version) > 1: - d_version = distro_version[1].split('-', 1) - if len(d_version) > 1: - distro_version[1] = d_version[0] - elif line.startswith("SUMMARY "): - distro_summary = line.split(' ', 1) - elif line.startswith("BASEARCHS "): - distro_arch = line.split(' ', 1) - elif line.startswith("DEFAULTBASE "): - distro_arch = line.split(' ', 1) - elif line.startswith("REPOID "): - distro_arch = line.rsplit('/', 1) - if distribution and distro_version and distro_arch: - break - - if not distribution: - if distro_summary: - distribution = distro_summary - elif distro_distro: - distribution = distro_distro - if distro_arch: - arch = distro_arch[1].strip() - # Fix for 13.2 official oss repo - if arch.find("i586-x86_64") != -1: - arch = "x86_64" - else: - if cbuf.find("x86_64") != -1: - arch = "x86_64" - elif cbuf.find("i586") != -1: - arch = "i586" - elif cbuf.find("s390x") != -1: - arch = "s390x" - - def _parse_sle_distribution(d): - sle_version = d[1].strip().rsplit(' ')[4] - if len(d[1].strip().rsplit(' ')) > 5: - sle_version = sle_version + '.' + d[1].strip().rsplit(' ')[5][2] - return ['VERSION', sle_version] - - dclass = GenericDistro - if distribution: - if re.match(".*SUSE Linux Enterprise Server*", distribution[1]) or \ - re.match(".*SUSE SLES*", distribution[1]): - dclass = SLESDistro - if distro_version is None: - distro_version = _parse_sle_distribution(distribution) - elif re.match(".*SUSE Linux Enterprise Desktop*", distribution[1]): - dclass = SLEDDistro - if distro_version is None: - distro_version = _parse_sle_distribution(distribution) - elif re.match(".*openSUSE.*", distribution[1]): - dclass = OpensuseDistro - if distro_version is None: - distro_version = ['VERSION', distribution[0].strip().rsplit(':')[4]] - - if distro_version is None: - return None - - ob = dclass(fetcher, arch, vmtype) - if dclass != GenericDistro: - ob.version_from_content = distro_version - - # Explictly call this, so we populate os_type/variant info - ob.isValidStore() - - return ob - - def getDistroStore(guest, fetcher): stores = [] logging.debug("Finding distro store for location=%s", fetcher.location) @@ -764,589 +674,6 @@ return self.fetcher.acquireFile(self._valid_iso_path) -class RedHatDistro(Distro): - """ - Base image store for any Red Hat related distros which have - a common layout - """ - uses_treeinfo = True - _version_number = None - - _boot_iso_paths = ["images/boot.iso"] - _hvm_kernel_paths = [("images/pxeboot/vmlinuz", - "images/pxeboot/initrd.img")] - _xen_kernel_paths = [("images/xen/vmlinuz", - "images/xen/initrd.img")] - - def isValidStore(self): - raise NotImplementedError() - - def _get_method_arg(self): - if (self._version_number is not None and - ((self.urldistro == "rhel" and self._version_number >= 7) or - (self.urldistro == "fedora" and self._version_number >= 19))): - return "inst.repo" - return "method" - - -# Fedora distro check -class FedoraDistro(RedHatDistro): - name = "Fedora" - urldistro = "fedora" - - def isValidStore(self): - if not self.treeinfo: - return self.fetcher.hasFile("Fedora") - - if not re.match(".*Fedora.*", self.treeinfo.get("general", "family")): - return False - - ver = self.treeinfo.get("general", "version") - if not ver: - logging.debug("No version found in .treeinfo") - return False - logging.debug("Found treeinfo version=%s", ver) - - latest_variant = OSDB.latest_fedora_version() - if re.match("fedora[0-9]+", latest_variant): - latest_vernum = int(latest_variant[6:]) - else: - logging.debug("Failed to parse version number from latest " - "fedora variant=%s. Using safe default 22", latest_variant) - latest_vernum = 22 - - # rawhide trees changed to use version=Rawhide in Apr 2016 - if ver in ["development", "rawhide", "Rawhide"]: - self._version_number = latest_vernum - self.os_variant = latest_variant - return True - - # Dev versions can be like '23_Alpha' - if "_" in ver: - ver = ver.split("_")[0] - - # Typical versions are like 'fedora-23' - vernum = str(ver).split("-")[0] - if vernum.isdigit(): - vernum = int(vernum) - else: - logging.debug("Failed to parse version number from treeinfo " - "version=%s, using vernum=latest=%s", ver, latest_vernum) - vernum = latest_vernum - - if vernum > latest_vernum: - self.os_variant = latest_variant - else: - self.os_variant = "fedora" + str(vernum) - - self._version_number = vernum - return True - - -# Red Hat Enterprise Linux distro check -class RHELDistro(RedHatDistro): - name = "Red Hat Enterprise Linux" - urldistro = "rhel" - - def isValidStore(self): - if self.treeinfo: - # Matches: - # Red Hat Enterprise Linux - # RHEL Atomic Host - m = re.match(".*(Red Hat Enterprise Linux|RHEL).*", - self.treeinfo.get("general", "family")) - ret = (m is not None) - - if ret: - self._variantFromVersion() - return ret - - if (self.fetcher.hasFile("Server") or - self.fetcher.hasFile("Client")): - self.os_variant = "rhel5" - return True - return self.fetcher.hasFile("RedHat") - - - ################################ - # osdict autodetection helpers # - ################################ - - def _parseTreeinfoVersion(self, verstr): - def _safeint(c): - try: - val = int(c) - except Exception: - val = 0 - return val - - version = _safeint(verstr[0]) - update = 0 - - # RHEL has version=5.4, scientific linux=54 - updinfo = verstr.split(".") - if len(updinfo) > 1: - update = _safeint(updinfo[1]) - elif len(verstr) > 1: - update = _safeint(verstr[1]) - - return version, update - - def _variantFromVersion(self): - ver = self.treeinfo.get("general", "version") - name = None - if self.treeinfo.has_option("general", "name"): - name = self.treeinfo.get("general", "name") - if not ver: - return - - if name and name.startswith("Red Hat Enterprise Linux Server for ARM"): - # Kind of a hack, but good enough for the time being - version = 7 - update = 0 - else: - version, update = self._parseTreeinfoVersion(ver) - - self._version_number = version - self._setRHELVariant(version, update) - - def _setRHELVariant(self, version, update): - base = "rhel" + str(version) - if update < 0: - update = 0 - - ret = None - while update >= 0: - tryvar = base + ".%s" % update - if not self._check_osvariant_valid(tryvar): - update -= 1 - continue - - ret = tryvar - break - - if not ret: - # Try plain rhel5, rhel6, whatev - if self._check_osvariant_valid(base): - ret = base - - if ret: - self.os_variant = ret - - -# CentOS distro check -class CentOSDistro(RHELDistro): - name = "CentOS" - urldistro = "centos" - - def isValidStore(self): - if not self.treeinfo: - return self.fetcher.hasFile("CentOS") - - m = re.match(".*CentOS.*", self.treeinfo.get("general", "family")) - ret = (m is not None) - if ret: - self._variantFromVersion() - if self.os_variant: - new_variant = self.os_variant.replace("rhel", "centos") - if self._check_osvariant_valid(new_variant): - self.os_variant = new_variant - return ret - - -# Scientific Linux distro check -class SLDistro(RHELDistro): - name = "Scientific Linux" - urldistro = None - - _boot_iso_paths = RHELDistro._boot_iso_paths + ["images/SL/boot.iso"] - _hvm_kernel_paths = RHELDistro._hvm_kernel_paths + [ - ("images/SL/pxeboot/vmlinuz", "images/SL/pxeboot/initrd.img")] - - def isValidStore(self): - if self.treeinfo: - m = re.match(".*Scientific.*", - self.treeinfo.get("general", "family")) - ret = (m is not None) - - if ret: - self._variantFromVersion() - return ret - - return self.fetcher.hasFile("SL") - - -class SuseDistro(Distro): - name = "SUSE" - - _boot_iso_paths = ["boot/boot.iso"] - - def __init__(self, *args, **kwargs): - Distro.__init__(self, *args, **kwargs) - if re.match(r'i[4-9]86', self.arch): - self.arch = 'i386' - - oldkern = "linux" - oldinit = "initrd" - if self.arch == "x86_64": - oldkern += "64" - oldinit += "64" - - if self.arch == "s390x": - self._hvm_kernel_paths = [("boot/%s/linux" % self.arch, - "boot/%s/initrd" % self.arch)] - # No Xen on s390x - self._xen_kernel_paths = [] - else: - # Tested with Opensuse >= 10.2, 11, and sles 10 - self._hvm_kernel_paths = [("boot/%s/loader/linux" % self.arch, - "boot/%s/loader/initrd" % self.arch)] - # Tested with Opensuse 10.0 - self._hvm_kernel_paths.append(("boot/loader/%s" % oldkern, - "boot/loader/%s" % oldinit)) - # Tested with SLES 12 for ppc64le - self._hvm_kernel_paths.append(("boot/%s/linux" % self.arch, - "boot/%s/initrd" % self.arch)) - - # Matches Opensuse > 10.2 and sles 10 - self._xen_kernel_paths = [("boot/%s/vmlinuz-xen" % self.arch, - "boot/%s/initrd-xen" % self.arch)] - - def _variantFromVersion(self): - distro_version = self.version_from_content[1].strip() - version = distro_version.split('.', 1)[0].strip() - self.os_variant = self.urldistro - if int(version) >= 10: - if self.os_variant.startswith(("sles", "sled")): - sp_version = None - if len(distro_version.split('.', 1)) == 2: - sp_version = 'sp' + distro_version.split('.', 1)[1].strip() - self.os_variant += version - if sp_version: - self.os_variant += sp_version - else: - # Tumbleweed 8 digit date - if len(version) == 8: - self.os_variant += "tumbleweed" - else: - self.os_variant += distro_version - else: - self.os_variant += "9" - - def isValidStore(self): - # self.version_from_content is the VERSION line from the contents file - if (not self.version_from_content or - self.version_from_content[1] is None): - return False - - self._variantFromVersion() - - self.os_variant = self._detect_osdict_from_url() - - # Reset kernel name for sle11 source on s390x - if self.arch == "s390x": - if self.os_variant == "sles11" or self.os_variant == "sled11": - self._hvm_kernel_paths = [("boot/%s/vmrdr.ikr" % self.arch, - "boot/%s/initrd" % self.arch)] - - return True - - def _get_method_arg(self): - return "install" - - ################################ - # osdict autodetection helpers # - ################################ - - def _detect_osdict_from_url(self): - root = "opensuse" - oses = [n for n in OSDB.list_os() if n.name.startswith(root)] - - for osobj in oses: - codename = osobj.name[len(root):] - if re.search("/%s/" % codename, self.uri): - return osobj.name - return self.os_variant - - -class SLESDistro(SuseDistro): - urldistro = "sles" - - -class SLEDDistro(SuseDistro): - urldistro = "sled" - - -# Suse image store is harder - we fetch the kernel RPM and a helper -# RPM and then munge bits together to generate a initrd -class OpensuseDistro(SuseDistro): - urldistro = "opensuse" - - -class DebianDistro(Distro): - # ex. http://ftp.egr.msu.edu/debian/dists/sarge/main/installer-i386/ - # daily builds: http://d-i.debian.org/daily-images/amd64/ - name = "Debian" - urldistro = "debian" - - def __init__(self, *args, **kwargs): - Distro.__init__(self, *args, **kwargs) - - self._url_prefix = "" - self._treeArch = self._find_treearch() - self._installer_dirname = self.name.lower() + "-installer" - - def _find_treearch(self): - for pattern in ["^.*/installer-(\w+)/?$", - "^.*/daily-images/(\w+)/?$"]: - arch = re.findall(pattern, self.uri) - if not arch: - continue - logging.debug("Found pattern=%s treearch=%s in uri", - pattern, arch[0]) - return arch[0] - - # Check for standard 'i386' and 'amd64' which will be - # in the URI name for --location $ISO mounts - for arch in ["i386", "amd64", "x86_64"]: - if arch in self.uri: - logging.debug("Found treearch=%s in uri", arch) - if arch == "x86_64": - arch = "amd64" - return arch - - # Otherwise default to i386 - arch = "i386" - logging.debug("No treearch found in uri, defaulting to arch=%s", arch) - return arch - - def _set_media_paths(self): - self._boot_iso_paths = ["%s/netboot/mini.iso" % self._url_prefix] - - hvmroot = "%s/netboot/%s/%s/" % (self._url_prefix, - self._installer_dirname, - self._treeArch) - initrd_basename = "initrd.gz" - kernel_basename = "linux" - if self._treeArch in ["ppc64el"]: - kernel_basename = "vmlinux" - - if self._treeArch == "s390x": - hvmroot = "%s/generic/" % self._url_prefix - kernel_basename = "kernel.%s" % self.name.lower() - initrd_basename = "initrd.%s" % self.name.lower() - - self._hvm_kernel_paths = [ - (hvmroot + kernel_basename, hvmroot + initrd_basename)] - - xenroot = "%s/netboot/xen/" % self._url_prefix - self._xen_kernel_paths = [(xenroot + "vmlinuz", xenroot + "initrd.gz")] - - def _check_manifest(self, filename): - if not self.fetcher.hasFile(filename): - return False - - if self.arch == "s390x": - regex = ".*generic/kernel\.%s.*" % self.name.lower() - else: - regex = ".*%s.*" % self._installer_dirname - - if not self._fetchAndMatchRegex(filename, regex): - logging.debug("Regex didn't match, not a %s distro", self.name) - return False - - return True - - def _check_info(self, filename): - if not self.fetcher.hasFile(filename): - return False - - regex = "%s.*" % self.name - - if not self._fetchAndMatchRegex(filename, regex): - logging.debug("Regex didn't match, not a %s distro", self.name) - return False - - return True - - def _is_regular_tree(self): - # For regular trees - if not self._check_manifest("current/images/MANIFEST"): - return False - - self._url_prefix = "current/images" - self._set_media_paths() - self.os_variant = self._detect_debian_osdict_from_url() - - return True - - def _is_daily_tree(self): - # For daily trees - if not self._check_manifest("daily/MANIFEST"): - return False - - self._url_prefix = "daily" - self._set_media_paths() - self.os_variant = self._detect_debian_osdict_from_url() - - return True - - def _is_install_cd(self): - # For install CDs - if not self._check_info(".disk/info"): - return False - - if self.arch == "x86_64": - kernel_initrd_pair = ("install.amd/vmlinuz", "install.amd/initrd.gz") - elif self.arch == "i686": - kernel_initrd_pair = ("install.386/vmlinuz", "install.386/initrd.gz") - elif self.arch == "s390x": - kernel_initrd_pair = ("boot/linux_vm", "boot/root.bin") - else: - kernel_initrd_pair = ("install/vmlinuz", "install/initrd.gz") - self._hvm_kernel_paths += [kernel_initrd_pair] - self._xen_kernel_paths += [kernel_initrd_pair] - - return True - - def isValidStore(self): - return any(check() for check in [ - self._is_regular_tree, - self._is_daily_tree, - self._is_install_cd, - ]) - - - ################################ - # osdict autodetection helpers # - ################################ - - def _detect_debian_osdict_from_url(self): - root = self.name.lower() - oses = [n for n in OSDB.list_os() if n.name.startswith(root)] - - if self._url_prefix == "daily": - logging.debug("Appears to be debian 'daily' URL, using latest " - "debian OS") - return oses[0].name - - for osobj in oses: - if osobj.codename: - # Ubuntu codenames look like 'Warty Warthog' - codename = osobj.codename.split()[0].lower() - else: - if " " not in osobj.label: - continue - # Debian labels look like 'Debian Sarge' - codename = osobj.label.split()[1].lower() - - if ("/%s/" % codename) in self.uri: - logging.debug("Found codename=%s in the URL string", codename) - return osobj.name - - logging.debug("Didn't find any known codename in the URL string") - return self.os_variant - - -class UbuntuDistro(DebianDistro): - # http://archive.ubuntu.com/ubuntu/dists/natty/main/installer-amd64/ - name = "Ubuntu" - urldistro = "ubuntu" - - def _is_tree_iso(self): - # For trees based on ISO's - if not self._check_info("install/netboot/version.info"): - return False - - self._url_prefix = "install" - self._set_media_paths() - self.os_variant = self._detect_debian_osdict_from_url() - - return True - - def _is_install_cd(self): - # For install CDs - if not self._check_info(".disk/info"): - return False - - if not self.arch == "s390x": - kernel_initrd_pair = ("linux", "initrd.gz") - else: - kernel_initrd_pair = ("boot/kernel.ubuntu", "boot/initrd.ubuntu") - - self._hvm_kernel_paths += [kernel_initrd_pair] - self._xen_kernel_paths += [kernel_initrd_pair] - - return True - - - -class MandrivaDistro(Distro): - # ftp://ftp.uwsg.indiana.edu/linux/mandrake/official/2007.1/x86_64/ - name = "Mandriva/Mageia" - urldistro = "mandriva" - - _boot_iso_paths = ["install/images/boot.iso"] - _xen_kernel_paths = [] - - def __init__(self, *args, **kwargs): - Distro.__init__(self, *args, **kwargs) - self._hvm_kernel_paths = [] - - # At least Mageia 5 uses arch in the names - self._hvm_kernel_paths += [ - ("isolinux/%s/vmlinuz" % self.arch, - "isolinux/%s/all.rdz" % self.arch)] - - # Kernels for HVM: valid for releases 2007.1, 2008.*, 2009.0 - self._hvm_kernel_paths += [ - ("isolinux/alt0/vmlinuz", "isolinux/alt0/all.rdz")] - - - def isValidStore(self): - # Don't support any paravirt installs - if self.type is not None and self.type != "hvm": - return False - - # Mandriva websites / media appear to have a VERSION - # file in top level which we can use as our 'magic' - # check for validity - if not self.fetcher.hasFile("VERSION"): - return False - - for name in ["Mandriva", "Mageia"]: - if self._fetchAndMatchRegex("VERSION", ".*%s.*" % name): - return True - - logging.debug("Regex didn't match, not a %s distro", self.name) - return False - - -class ALTLinuxDistro(Distro): - # altlinux doesn't have installable URLs, so this is just for a - # mounted ISO - name = "ALT Linux" - urldistro = "altlinux" - - _boot_iso_paths = [("altinst", "live")] - _hvm_kernel_paths = [("syslinux/alt0/vmlinuz", "syslinux/alt0/full.cz")] - _xen_kernel_paths = [] - - def isValidStore(self): - # Don't support any paravirt installs - if self.type is not None and self.type != "hvm": - return False - - if not self.fetcher.hasFile(".disk/info"): - return False - - if self._fetchAndMatchRegex(".disk/info", ".*%s.*" % self.name): - return True - - logging.debug("Regex didn't match, not a %s distro", self.name) - return False - - # Build list of all *Distro classes def _build_distro_list(): allstores = []