[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#579138: virtinst 0.500,3-1 can't do a paravirt install from a debian dvd



Package: virtinst
Version: 1:1.0.1-3
Followup-For: Bug #579138

Hello,

attached it an admittedly ugly patch[1] to make it possible to start an
installation from debian-jessie-DI-rc1-amd64-DVD-1.iso. The patch
applies on top of debian/1%1.0.1-4.

Best regards
Uwe

[1] I think part of the reason that the patch is ugly is that virtinst
is ugly, too :-)
>From e2d963252bcb155fb09792dcfea4d239ea2bf51c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koenig@pengutronix.de>
Date: Fri, 27 Feb 2015 21:09:24 +0100
Subject: [PATCH] urlfetcher: support installing for Debian iso images

The layout on Debian installer iso images is different from the layout
on the web servers that provide the netinstall images.

So handle move handling the netlayout into a dedicated function and add
one for the isolayout.

With this change applied it's possible to run:

	virt-install --location /path/to/mountpoint/of/installer.iso ...
---
 virtinst/urlfetcher.py | 81 +++++++++++++++++++++++++++++++++-----------------
 1 file changed, 54 insertions(+), 27 deletions(-)

diff --git a/virtinst/urlfetcher.py b/virtinst/urlfetcher.py
index 0d9a066..0cfe8c9 100644
--- a/virtinst/urlfetcher.py
+++ b/virtinst/urlfetcher.py
@@ -881,40 +881,56 @@ class DebianDistro(Distro):
             self.arch = 'i386'
 
         self._installer_name = self.name.lower() + "-" + "installer"
-        self._prefix = 'current/images'
-        self._set_media_paths()
 
     def _set_media_paths(self):
-        # Use self._prefix to set media paths
-        self._boot_iso_paths   = ["%s/netboot/mini.iso" % self._prefix]
-        hvmroot = "%s/netboot/%s/%s/" % (self._prefix,
-                                         self._installer_name,
-                                         self._treeArch)
-        xenroot = "%s/netboot/xen/" % self._prefix
-        self._hvm_kernel_paths = [(hvmroot + "linux", hvmroot + "initrd.gz")]
-        self._xen_kernel_paths = [(xenroot + "vmlinuz",
-                                    xenroot + "initrd.gz")]
+        def set_netlayout(self, prefix):
+            if not self._fetchAndMatchRegex("%s/MANIFEST" % prefix,
+                    ".*%s.*" % self._installer_name):
+                logging.debug("Regex didn't match, not a %s distro", self.name)
+                self._paths_ok = False
+                return
+
+            self._boot_iso_paths   = ["%s/netboot/mini.iso" % prefix]
+            hvmroot = "%s/netboot/%s/%s/" % (prefix,
+                                             self._installer_name,
+                                             self._treeArch)
+            xenroot = "%s/netboot/xen/" % prefix
+            self._hvm_kernel_paths = [(hvmroot + "linux", hvmroot + "initrd.gz")]
+            self._xen_kernel_paths = [(xenroot + "vmlinuz",
+                                        xenroot + "initrd.gz")]
+            self._paths_ok = True
+            self._prefix = prefix
+
+        def set_isolayout(self):
+            if self._treeArch == "i386":
+                installdir = 'install.386/'
+            elif self._treeArch == "amd64":
+                installdir = 'install.amd/'
+            else:
+                self._paths_ok = False
+                return
 
-    def isValidStore(self):
-        if self.fetcher.hasFile("%s/MANIFEST" % self._prefix):
-            # For regular trees
-            pass
-        elif self.fetcher.hasFile("daily/MANIFEST"):
-            # For daily trees
-            self._prefix = "daily"
-            self._set_media_paths()
-        else:
-            return False
+            self._hvm_kernel_paths = [(installdir + "vmlinuz", installdir + "initrd.gz")]
+            self._xen_kernel_paths = [(installdir + "xen/vmlinuz", installdir + "xen/initrd.gz")]
+            self._paths_ok = True
+            self._prefix = installdir
 
-        filename = "%s/MANIFEST" % self._prefix
-        regex = ".*%s.*" % self._installer_name
-        if not self._fetchAndMatchRegex(filename, regex):
-            logging.debug("Regex didn't match, not a %s distro", self.name)
-            return False
+        if hasattr(self, '_paths_ok'):
+            return
+
+        if self.fetcher.hasFile("current/images/MANIFEST"):
+            set_netlayout(self, 'current/images')
+        elif self.fetcher.hasFile("daily/MANIFEST"):
+            set_netlayout(self, 'daily')
+        elif self._fetchAndMatchRegex(".disk/info", "^Debian GNU"):
+            set_isolayout(self)
 
         self.os_variant = self._detect_osdict_from_url()
-        return True
 
+    def isValidStore(self):
+        self._set_media_paths()
+
+        return self._paths_ok
 
     ################################
     # osdict autodetection helpers #
@@ -939,6 +955,17 @@ class UbuntuDistro(DebianDistro):
     name = "Ubuntu"
     urldistro = "ubuntu"
 
+    def _set_media_paths():
+        # Use self._prefix to set media paths
+        self._boot_iso_paths   = ["%s/netboot/mini.iso" % self._prefix]
+        hvmroot = "%s/netboot/%s/%s/" % (self._prefix,
+                                         self._installer_name,
+                                         self._treeArch)
+        xenroot = "%s/netboot/xen/" % self._prefix
+        self._hvm_kernel_paths = [(hvmroot + "linux", hvmroot + "initrd.gz")]
+        self._xen_kernel_paths = [(xenroot + "vmlinuz",
+                                    xenroot + "initrd.gz")]
+
     def isValidStore(self):
         if self.fetcher.hasFile("%s/MANIFEST" % self._prefix):
             # For regular trees
-- 
2.1.4


Reply to: