diff --git a/man/virt-install.pod b/man/virt-install.pod index a1229c8..7177ab2 100644 --- a/man/virt-install.pod +++ b/man/virt-install.pod @@ -357,36 +357,6 @@ Mount the ISO and probe the directory. This requires running virt-install as roo =back -Some distro specific url samples: - -=over 4 - -=item Fedora/Red Hat Based - -http://download.fedoraproject.org/pub/fedora/linux/releases/21/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 diff --git a/virtinst/osdict.py b/virtinst/osdict.py index e8c1487..5f220f6 100644 --- a/virtinst/osdict.py +++ b/virtinst/osdict.py @@ -61,12 +61,6 @@ def _remove_older_point_releases(distro_list): 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") return ret @@ -134,49 +128,8 @@ class _OSDB(object): # 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", } @@ -232,17 +185,11 @@ class _OSDB(object): 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", "unix", - "solaris", "other", "generic"] + approved_types = ["linux", "generic"] return approved_types def list_os(self, typename=None, only_supported=False, sortpref=None): @@ -265,13 +212,6 @@ class _OSDB(object): 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 # @@ -287,7 +227,6 @@ class _OsVariant(object): self.codename = self._os and self._os.get_codename() or "" self.sortby = self._get_sortby() - self.urldistro = self._get_urldistro() self._supported = None @@ -363,34 +302,6 @@ class _OsVariant(object): 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(["fedora20", "rhel7.0", "debian6", - "ubuntu13.04", "win8", "win2k12"], - check_clones=False, check_derives=False): - return True - return False - - def _get_urldistro(self): - if not self._os: - return None - urldistro = self._os.get_distro() - remap = { - "opensuse" : "suse", - "sles" : "suse", - "mes" : "mandriva" - } - - if remap.get(urldistro): - return remap[urldistro] - - return urldistro - ############### # Public APIs # @@ -411,36 +322,13 @@ class _OsVariant(object): 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 "unix" - - 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 @@ -499,37 +387,16 @@ class _OsVariant(object): return False - def supports_qemu_ga(self): - return self._is_related_to(["fedora18", "rhel6.0", "sles11sp4"]) - def default_videomodel(self, guest): if guest.os.is_pseries(): return "vga" - # Marc Deslauriers of canonical had previously patched us - # to use vmvga for ubuntu, see fb76c4e5. And Fedora users report - # issues with ubuntu + qxl for as late as 14.04, so carry the vmvga - # default forward until someone says otherwise. In 2014-09 I contacted - # Marc offlist and he said this was fine for now. - # - # But in my testing ubuntu-15.04 works _better_ with qxl (installer - # resolution is huge with vmvga but reasonable with qxl), and given - # that the qemu vmvga code is not supposed to be of high quality, - # let's use qxl for newer ubuntu - if (self._os and - self._os.get_distro() == "ubuntu" and - not self._is_related_to("ubuntu15.04")): - return "vmvga" - if guest.has_spice() and guest.os.is_x86(): if guest.has_gl(): return "virtio" else: return "qxl" - if self.is_windows(): - return "vga" - return None def get_recommended_resources(self, guest): diff --git a/virtinst/urlfetcher.py b/virtinst/urlfetcher.py index 692a297..58c1724 100644 --- a/virtinst/urlfetcher.py +++ b/virtinst/urlfetcher.py @@ -382,96 +382,6 @@ def _grabTreeinfo(fetcher): 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) @@ -755,513 +665,6 @@ class GenericDistro(Distro): 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 is "rhel" and self._version_number >= 7) or - (self.urldistro is "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: - 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) - - # Pull the tree's arch out of the URL text - self._treeArch = "i386" - for pattern in ["^.*/installer-(\w+)/?$", - "^.*/daily-images/(\w+)/?$"]: - arch = re.findall(pattern, self.uri) - if arch: - self._treeArch = arch[0] - break - - self._url_prefix = 'current/images' - self._installer_dirname = self.name.lower() + "-installer" - self._set_media_paths() - - 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" - 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 isValidStore(self): - if self.fetcher.hasFile("%s/MANIFEST" % self._url_prefix): - # For regular trees - pass - elif self.fetcher.hasFile("daily/MANIFEST"): - # For daily trees - self._url_prefix = "daily" - self._set_media_paths() - else: - return False - - filename = "%s/MANIFEST" % self._url_prefix - 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 - - self.os_variant = self._detect_debian_osdict_from_url() - return True - - - ################################ - # 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 isValidStore(self): - if self.fetcher.hasFile("%s/MANIFEST" % self._url_prefix): - # For regular trees - filename = "%s/MANIFEST" % self._url_prefix - regex = ".*%s.*" % self._installer_dirname - elif self.fetcher.hasFile("install/netboot/version.info"): - # For trees based on ISO's - self._url_prefix = "install" - self._set_media_paths() - filename = "%s/netboot/version.info" % self._url_prefix - regex = "%s*" % self.name - elif self.fetcher.hasFile(".disk/info") and self.arch == "s390x": - self._hvm_kernel_paths += [("boot/kernel.ubuntu", "boot/initrd.ubuntu")] - self._xen_kernel_paths += [("boot/kernel.ubuntu", "boot/initrd.ubuntu")] - filename = ".disk/info" - regex = "%s*" % self.name - else: - return False - - if not self._fetchAndMatchRegex(filename, regex): - logging.debug("Regex didn't match, not a %s distro", self.name) - return False - - self.os_variant = self._detect_debian_osdict_from_url() - 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 = []