[virt-tools-list] [virt-manager PATCH] installer: Prefer "cdrom" over "floppy"
Fabiano Fidêncio
fidencio at redhat.com
Fri Jun 7 10:00:56 UTC 2019
Instead of using "floppy" as the way to perform unattended installations
for Windoes, let's prefer using "cdrom" instead.
The main reasons behind this change are:
- VMs using q35 may have floppy device disabled in some systems;
- We can drop mstools dependency;
Generating the ISO depends on genisofs, tho. However, it's not a big
deal as genisofs is already a virt-manager dependency.
Signed-off-by: Fabiano Fidêncio <fidencio at redhat.com>
---
virt-manager.spec.in | 5 ----
virtinst/{floppyinject.py => cdrominject.py} | 26 +++++++++++------
virtinst/installer.py | 30 ++++++++++----------
virtinst/unattended.py | 2 +-
4 files changed, 33 insertions(+), 30 deletions(-)
rename virtinst/{floppyinject.py => cdrominject.py} (55%)
diff --git a/virt-manager.spec.in b/virt-manager.spec.in
index b5f6979b..43e0c10b 100644
--- a/virt-manager.spec.in
+++ b/virt-manager.spec.in
@@ -48,11 +48,6 @@ Requires: dconf
# no ambiguity.
Requires: vte291
-# Those two dependencies are needed in order to support unattended
-# installation for Windows guests.
-Requires: dosfstools
-Requires: mtools
-
# Weak dependencies for the common virt-manager usecase
Recommends: (libvirt-daemon-kvm or libvirt-daemon-qemu)
Recommends: libvirt-daemon-config-network
diff --git a/virtinst/floppyinject.py b/virtinst/cdrominject.py
similarity index 55%
rename from virtinst/floppyinject.py
rename to virtinst/cdrominject.py
index 05f91ee0..9dc6e20a 100644
--- a/virtinst/floppyinject.py
+++ b/virtinst/cdrominject.py
@@ -6,11 +6,12 @@
import logging
import os
+import shutil
import subprocess
import tempfile
-def perform_floppy_injections(injections, scratchdir):
+def perform_cdrom_injections(injections, scratchdir):
"""
Insert files into the root directory of a floppy
"""
@@ -20,17 +21,24 @@ def perform_floppy_injections(injections, scratchdir):
tempdir = tempfile.mkdtemp(dir=scratchdir)
os.chmod(tempdir, 0o775)
- img = os.path.join(tempdir, "unattended.img")
+ tempfiles = []
+ iso = os.path.join(tempdir, "unattended.iso")
+ for filename in injections:
+ shutil.copy(filename, tempdir)
+
+ tempfiles = os.listdir(tempdir)
- cmd = ["mkfs.msdos", "-C", img, "1440"]
+ cmd = ["mkisofs",
+ "-o", iso,
+ "-J",
+ "-input-charset", "utf8",
+ "-rational-rock",
+ tempdir]
logging.debug("Running mkisofs: %s", cmd)
output = subprocess.check_output(cmd)
logging.debug("cmd output: %s", output)
- for filename in injections:
- logging.debug("Copying %s to the floppy.", filename)
- cmd = ["mcopy", "-i", img, filename, "::"]
- output = subprocess.check_output(cmd)
- logging.debug("cmd output: %s", output)
+ for f in tempfiles:
+ os.unlink(os.path.join(tempdir, f))
- return img
+ return iso
diff --git a/virtinst/installer.py b/virtinst/installer.py
index 45caf930..e6524708 100644
--- a/virtinst/installer.py
+++ b/virtinst/installer.py
@@ -15,7 +15,7 @@ from .devices import DeviceDisk
from .domain import DomainOs
from .osdict import OSDB, OsMedia
from .installertreemedia import InstallerTreeMedia
-from .floppyinject import perform_floppy_injections
+from .cdrominject import perform_cdrom_injections
from . import unattended
from . import util
@@ -51,7 +51,7 @@ class Installer(object):
self._install_kernel = None
self._install_initrd = None
self._install_cdrom_device_added = False
- self._install_floppy_device = False
+ self._unattended_install_cdrom_device = None
self._unattended_files = []
self._defaults_are_set = False
self._unattended_data = None
@@ -119,25 +119,25 @@ class Installer(object):
disk.sync_path_props()
break
- def _add_install_floppy_device(self, guest, location):
- if self._install_floppy_device:
+ def _add_unattended_install_cdrom_device(self, guest, location):
+ if self._unattended_install_cdrom_device:
return
dev = DeviceDisk(self.conn)
- dev.device = dev.DEVICE_FLOPPY
+ dev.device = dev.DEVICE_CDROM
dev.path = location
dev.sync_path_props()
dev.validate()
dev.set_defaults(guest)
- self._install_floppy_device = dev
- guest.add_device(self._install_floppy_device)
+ self._unattended_install_cdrom_device = dev
+ guest.add_device(self._unattended_install_cdrom_device)
- def _remove_install_floppy_device(self, guest):
+ def _remove_unattended_install_cdrom_device(self, guest):
dummy = guest
- if not self._install_floppy_device:
+ if not self._unattended_install_cdrom_device:
return
- self._install_floppy_device.path = None
- self._install_floppy_device.sync_path_props()
+ self._unattended_install_cdrom_device.path = None
+ self._unattended_install_cdrom_device.sync_path_props()
def _cleanup_unattended_files(self):
for f in self._unattended_files:
@@ -225,10 +225,10 @@ class Installer(object):
logging.debug("Generated script contents:\n%s",
open(path).read())
- floppy = perform_floppy_injections([path], util.get_cache_dir())
- self._add_install_floppy_device(guest, floppy)
+ iso = perform_cdrom_injections([path], util.get_cache_dir())
+ self._add_unattended_install_cdrom_device(guest, iso)
- self._unattended_files.extend([path, floppy])
+ self._unattended_files.extend([path, iso])
def _cleanup(self, guest):
if self._treemedia:
@@ -377,7 +377,7 @@ class Installer(object):
return ret
finally:
self._remove_install_cdrom_media(guest)
- self._remove_install_floppy_device(guest)
+ self._remove_unattended_install_cdrom_device(guest)
self._finish_get_install_xml(guest, data)
def _build_xml(self, guest, meter):
diff --git a/virtinst/unattended.py b/virtinst/unattended.py
index 11de2fed..4779de93 100644
--- a/virtinst/unattended.py
+++ b/virtinst/unattended.py
@@ -251,7 +251,7 @@ def prepare_install_script(guest, unattended_data, url=None, os_media=None):
# For all tree based installations we're going to perform initrd injection
# and install the systems via network.
- injection_method = "floppy" if guest.osinfo.is_windows() else "initrd"
+ injection_method = "cdrom" if guest.osinfo.is_windows() else "initrd"
script.set_preferred_injection_method(injection_method)
installationsource = _get_installation_source(os_media)
--
2.21.0
More information about the virt-tools-list
mailing list