From patchwork Tue Sep 21 02:25:24 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lucas Meneghel Rodrigues X-Patchwork-Id: 196312 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id o8L2PnNM011019 for ; Tue, 21 Sep 2010 02:25:49 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757131Ab0IUCZq (ORCPT ); Mon, 20 Sep 2010 22:25:46 -0400 Received: from mail-gw0-f46.google.com ([74.125.83.46]:35487 "EHLO mail-gw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755836Ab0IUCZq (ORCPT ); Mon, 20 Sep 2010 22:25:46 -0400 Received: by gwj17 with SMTP id 17so1493922gwj.19 for ; Mon, 20 Sep 2010 19:25:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:sender:from:to:cc:subject :date:message-id:x-mailer:in-reply-to:references; bh=MlqzARAXLHRmAaQL8YT/TanlwD/uQB7Xx+KfRU2OmCE=; b=unXPH2Kg9YtyN2ge4hoWN58p5APmpUlD83HZNwB+Ik6bn+QH3hyOaYD6zDr2fzbVN6 S5AI8OFSlJaZMynGvgJfC7bha8Op1XDq3hwl4nnBqx6xv6cq98dYrVR1TiLegeNz6e4I 7sHlQ3onn8GLMx7voAsVe4xjrcdP7fCk856RI= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:from:to:cc:subject:date:message-id:x-mailer:in-reply-to :references; b=VycoozVB23yyEmAP6CSUnb5MTjbwC31YsYXzsZR8Y4G2zMGrSppP6yVkU+fjKARKKT tAhwbGQs9/pI+Xs45gmBOtpQKt//i7IjV1YE3ylZNTvX0uKfrUi1RakKztBxzqRpOW9x 1u6QuU7As+YiOKBi2C2Pyp2K1AwymjEV7uycc= Received: by 10.151.144.3 with SMTP id w3mr10119045ybn.49.1285035943873; Mon, 20 Sep 2010 19:25:43 -0700 (PDT) Received: from localhost.localdomain ([201.82.138.159]) by mx.google.com with ESMTPS id m12sm9499154ybn.19.2010.09.20.19.25.40 (version=TLSv1/SSLv3 cipher=RC4-MD5); Mon, 20 Sep 2010 19:25:42 -0700 (PDT) From: Lucas Meneghel Rodrigues To: autotest@test.kernel.org Cc: kvm@vger.kernel.org, akong@redhat.com, Lucas Meneghel Rodrigues Subject: [PATCH 2/2] KVM test: Make linux guests to use cdrom to hold answer file Date: Mon, 20 Sep 2010 23:25:24 -0300 Message-Id: <1285035924-2791-3-git-send-email-lmr@redhat.com> X-Mailer: git-send-email 1.7.2.3 In-Reply-To: <1285035924-2791-1-git-send-email-lmr@redhat.com> References: <1285035924-2791-1-git-send-email-lmr@redhat.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter1.kernel.org [140.211.167.41]); Tue, 21 Sep 2010 02:25:50 +0000 (UTC) diff --git a/client/tests/kvm/scripts/unattended.py b/client/tests/kvm/scripts/unattended.py index 4c219cc..e624f5d 100755 --- a/client/tests/kvm/scripts/unattended.py +++ b/client/tests/kvm/scripts/unattended.py @@ -7,6 +7,17 @@ import os, sys, shutil, tempfile, re, ConfigParser, glob, inspect import common +SCRIPT_DIR = os.path.dirname(sys.modules[__name__].__file__) +KVM_TEST_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..")) +try: + QEMU_IMG_BINARY = os.environ['KVM_TEST_qemu_img_binary'] +except KeyError: + QEMU_IMG_BINARY = os.path.join(KVM_TEST_DIR, QEMU_IMG_BINARY) +if not os.path.exists(QEMU_IMG_BINARY): + raise SetupError('The qemu-img binary that is supposed to be used (%s) ' + 'does not exist. Please verify your configuration') + + class SetupError(Exception): """ Simple wrapper for the builtin Exception class. @@ -14,123 +25,125 @@ class SetupError(Exception): pass -class UnattendedInstall(object): +def cleanup(dir): """ - Creates a floppy disk image that will contain a config file for unattended - OS install. Optionally, sets up a PXE install server using qemu built in - TFTP and DHCP servers to install a particular operating system. The - parameters to the script are retrieved from environment variables. + If dir is a mountpoint, do what is possible to unmount it. Afterwards, + try to remove it. + + @param dir: Directory to be cleaned up. + """ + print "Cleaning up directory %s" % dir + if os.path.ismount(dir): + f_cmd = 'fuser -k %s' % dir + os.system(f_cmd) + u_cmd = 'umount %s' % dir + if os.system(u_cmd): + raise SetupError('Could not unmount %s' % dir) + if os.path.isdir(dir): + shutil.rmtree(dir) + + +def clean_old_image(image): + """ + Clean a leftover image file from previous processes. If it contains a + mounted file system, do the proper cleanup procedures. + + @param image: Path to image to be cleaned up. + """ + if os.path.exists(image): + mtab = open('/etc/mtab', 'r') + mtab_contents = mtab.read() + mtab.close() + if image in mtab_contents: + os.system('fuser -k %s' % image) + os.system('umount %s' % image) + os.remove(image) + + +class Disk(object): + """ + Abstract class for Disk objects, with the common methods implemented. """ def __init__(self): - """ - Gets params from environment variables and sets class attributes. - """ - script_dir = os.path.dirname(sys.modules[__name__].__file__) - kvm_test_dir = os.path.abspath(os.path.join(script_dir, "..")) - images_dir = os.path.join(kvm_test_dir, 'images') - self.deps_dir = os.path.join(kvm_test_dir, 'deps') - self.unattended_dir = os.path.join(kvm_test_dir, 'unattended') + self.path = None - attributes = ['kernel_args', 'finish_program', 'cdrom_cd1', - 'unattended_file', 'medium', 'url', 'kernel', 'initrd', - 'nfs_server', 'nfs_dir', 'pxe_dir', 'pxe_image', - 'pxe_initrd', 'install_virtio', 'tftp', 'qemu_img_binary', - 'floppy'] - for a in attributes: - self._setattr(a) - if self.install_virtio == 'yes': - v_attributes = ['virtio_floppy', 'virtio_storage_path', - 'virtio_network_path', 'virtio_oemsetup_id', - 'virtio_network_installer'] - for va in v_attributes: - self._setattr(va) - self.virtio_floppy_mount = tempfile.mkdtemp(prefix='virtio_floppy_', - dir='/tmp') + def setup_answer_file(self, filename, contents): + answer_file = open(os.path.join(self.mount, filename), 'w') + answer_file.write(contents) + answer_file.close() - if self.tftp: - self.tftp = os.path.join(kvm_test_dir, self.tftp) - if not os.path.isdir(self.tftp): - os.makedirs(self.tftp) - if not os.path.isabs(self.qemu_img_binary): - self.qemu_img_binary = os.path.join(kvm_test_dir, - self.qemu_img_binary) + def copy_to(self, src): + dst = os.path.join(self.mount, os.path.basename(src)) + if os.path.isdir(src): + shutil.copytree(src, dst) + elif os.path.isfile(src): + shutil.copyfile(src, dst) - self.cdrom_cd1 = os.path.join(kvm_test_dir, self.cdrom_cd1) - self.floppy_mount = tempfile.mkdtemp(prefix='floppy_', dir='/tmp') - self.cdrom_mount = tempfile.mkdtemp(prefix='cdrom_', dir='/tmp') - if self.medium == 'nfs': - self.nfs_mount = tempfile.mkdtemp(prefix='nfs_', dir='/tmp') - self.floppy = os.path.join(kvm_test_dir, self.floppy) - if not os.path.isdir(os.path.dirname(self.floppy)): - os.makedirs(os.path.dirname(self.floppy)) + def close(self): + os.chmod(self.path, 0755) + cleanup(self.mount) + print "Disk %s successfuly set" % self.path - self.image_path = kvm_test_dir - self.kernel_path = os.path.join(self.image_path, self.kernel) - self.initrd_path = os.path.join(self.image_path, self.initrd) +class FloppyDisk(Disk): + """ + Represents a 1.44 MB floppy disk. We can copy files to it, and setup it in + convenient ways. + """ + def __init__(self, path): + print "Creating floppy unattended image %s" % path - def _setattr(self, key): - """ - Populate class attributes with contents of environment variables. + self.mount = tempfile.mkdtemp(prefix='floppy_', dir='/tmp') + self.virtio_mount = None + self.path = path + clean_old_image(path) + if not os.path.isdir(os.path.dirname(path)): + os.makedirs(os.path.dirname(path)) - Example: KVM_TEST_medium will populate self.medium. + try: + c_cmd = '%s create -f raw %s 1440k' % (QEMU_IMG_BINARY, + path) + if os.system(c_cmd): + raise SetupError('Could not create floppy image.') - @param key: Name of the class attribute we desire to have. - """ - env_name = 'KVM_TEST_%s' % key - value = os.environ.get(env_name, '') - setattr(self, key, value) + f_cmd = 'mkfs.msdos -s 1 %s' % path + if os.system(f_cmd): + raise SetupError('Error formatting floppy image.') + + m_cmd = 'mount -o loop,rw %s %s' % (path, self.mount) + if os.system(m_cmd): + raise SetupError('Could not mount floppy image.') + except: + cleanup(self.mount) - def copy_virtio_drivers_floppy(self): + def _copy_virtio_drivers(self, virtio_floppy): """ Copy the virtio drivers on the virtio floppy to the install floppy. 1) Mount the floppy containing the viostor drivers 2) Copy its contents to the root of the install floppy """ - m_cmd = 'mount -o loop %s %s' % (self.virtio_floppy, - self.virtio_floppy_mount) + virtio_mount = tempfile.mkdtemp(prefix='virtio_floppy_', dir='/tmp') + + m_cmd = 'mount -o loop %s %s' % (virtio_floppy, virtio_mount) pwd = os.getcwd() try: if os.system(m_cmd): raise SetupError('Could not mount virtio floppy driver') - os.chdir(self.virtio_floppy_mount) + os.chdir(virtio_mount) path_list = glob.glob('*') for path in path_list: - src = os.path.join(self.virtio_floppy_mount, path) - dst = os.path.join(self.floppy_mount, path) - if os.path.isdir(path): - shutil.copytree(src, dst) - elif os.path.isfile(path): - shutil.copyfile(src, dst) + self.copy_to(path) finally: os.chdir(pwd) - u_cmd = 'umount %s' % self.virtio_floppy_mount - if os.system(u_cmd): - raise SetupError('Could not unmount virtio floppy at %s' % - self.virtio_floppy_mount) - self.cleanup(self.virtio_floppy_mount) - - - def setup_virtio_win2008(self): - """ - Setup the install floppy with the virtio storage drivers, win2008 style. - - Win2008, Vista and 7 require people to point out the path to the drivers - on the unattended file, so we just need to copy the drivers to the - driver floppy disk. - Process: - - 1) Copy the virtio drivers on the virtio floppy to the install floppy - """ - self.copy_virtio_drivers_floppy() + cleanup(virtio_mount) - def setup_virtio_win2003(self): + def setup_virtio_win2003(self, virtio_floppy): """ Setup the install floppy with the virtio storage drivers, win2003 style. @@ -144,8 +157,8 @@ class UnattendedInstall(object): executed on the config parser object 4) Re-write the config file to the disk """ - self.copy_virtio_drivers_floppy() - txtsetup_oem = os.path.join(self.floppy_mount, 'txtsetup.oem') + self._copy_virtio_drivers(virtio_floppy) + txtsetup_oem = os.path.join(self.mount, 'txtsetup.oem') if not os.path.isfile(txtsetup_oem): raise SetupError('File txtsetup.oem not found on the install ' 'floppy. Please verify if your floppy virtio ' @@ -163,146 +176,237 @@ class UnattendedInstall(object): fp.close() - def create_boot_floppy(self): + def setup_virtio_win2008(self, virtio_floppy): """ - Prepares a boot floppy by creating a floppy image file, mounting it and - copying an answer file (kickstarts for RH based distros, answer files - for windows) to it. After that the image is umounted. + Setup the install floppy with the virtio storage drivers, win2008 style. + + Win2008, Vista and 7 require people to point out the path to the drivers + on the unattended file, so we just need to copy the drivers to the + driver floppy disk. + Process: + + 1) Copy the virtio drivers on the virtio floppy to the install floppy """ - print "Creating boot floppy" + self._copy_virtio_drivers(virtio_floppy) - if os.path.exists(self.floppy): - os.remove(self.floppy) - c_cmd = '%s create -f raw %s 1440k' % (self.qemu_img_binary, - self.floppy) - if os.system(c_cmd): - raise SetupError('Could not create floppy image.') +class CdromDisk(Disk): + """ + Represents a CDROM disk that we can master according to our needs. + """ + def __init__(self, path): + print "Creating ISO unattended image %s" % path + self.mount = tempfile.mkdtemp(prefix='cdrom_unattended', dir='/tmp') + self.path = path + clean_old_image(path) + if not os.path.isdir(os.path.dirname(path)): + os.makedirs(os.path.dirname(path)) - f_cmd = 'mkfs.msdos -s 1 %s' % self.floppy - if os.system(f_cmd): - raise SetupError('Error formatting floppy image.') - try: - m_cmd = 'mount -o loop,rw %s %s' % (self.floppy, - self.floppy_mount) - if os.system(m_cmd): - raise SetupError('Could not mount floppy image.') + def close(self): + g_cmd = ('genisoimage -o %s -max-iso9660-filenames ' + '-relaxed-filenames -D --input-charset iso8859-1 ' + '%s' % (self.path, self.mount)) + if os.system(g_cmd): + raise SetupError("Could not generate iso with answer file") - if self.unattended_file.endswith('.sif'): - dest_fname = 'winnt.sif' - setup_file = 'winnt.bat' - setup_file_path = os.path.join(self.unattended_dir, setup_file) - setup_file_dest = os.path.join(self.floppy_mount, setup_file) - shutil.copyfile(setup_file_path, setup_file_dest) + os.chmod(self.path, 0755) + cleanup(self.mount) + print "Disk %s successfuly set" % self.path + + +class UnattendedInstall(object): + """ + Creates a floppy disk image that will contain a config file for unattended + OS install. Optionally, sets up a PXE install server using qemu built in + TFTP and DHCP servers to install a particular operating system. The + parameters to the script are retrieved from environment variables. + """ + def __init__(self): + """ + Gets params from environment variables and sets class attributes. + """ + images_dir = os.path.join(KVM_TEST_DIR, 'images') + self.deps_dir = os.path.join(KVM_TEST_DIR, 'deps') + self.unattended_dir = os.path.join(KVM_TEST_DIR, 'unattended') + + attributes = ['kernel_args', 'finish_program', 'cdrom_cd1', + 'unattended_file', 'medium', 'url', 'kernel', 'initrd', + 'nfs_server', 'nfs_dir', 'pxe_dir', 'pxe_image', + 'pxe_initrd', 'install_virtio', 'tftp', + 'floppy', 'cdrom_unattended'] + for a in attributes: + self._setattr(a) + + if self.install_virtio == 'yes': + v_attributes = ['virtio_floppy', 'virtio_storage_path', + 'virtio_network_path', 'virtio_oemsetup_id', + 'virtio_network_installer'] + for va in v_attributes: + self._setattr(va) + + # Silly attribution just to calm pylint down... + self.tftp = self.tftp + if self.tftp: + self.tftp = os.path.join(KVM_TEST_DIR, self.tftp) + if not os.path.isdir(self.tftp): + os.makedirs(self.tftp) + + self.cdrom_cd1 = os.path.join(KVM_TEST_DIR, self.cdrom_cd1) + self.cdrom_mount = tempfile.mkdtemp(prefix='cdrom_', dir='/tmp') + if self.medium == 'nfs': + self.nfs_mount = tempfile.mkdtemp(prefix='nfs_', dir='/tmp') + + self.floppy = os.path.join(KVM_TEST_DIR, self.floppy) + if not os.path.isdir(os.path.dirname(self.floppy)): + os.makedirs(os.path.dirname(self.floppy)) + + self.image_path = KVM_TEST_DIR + self.kernel_path = os.path.join(self.image_path, self.kernel) + self.initrd_path = os.path.join(self.image_path, self.initrd) + + + def _setattr(self, key): + """ + Populate class attributes with contents of environment variables. + + Example: KVM_TEST_medium will populate self.medium. + + @param key: Name of the class attribute we desire to have. + """ + env_name = 'KVM_TEST_%s' % key + value = os.environ.get(env_name, '') + setattr(self, key, value) + + + def render_answer_file(self): + # Replace KVM_TEST_CDKEY (in the unattended file) with the cdkey + # provided for this test and replace the KVM_TEST_MEDIUM with + # the tree url or nfs address provided for this test. + unattended_contents = open(self.unattended_file).read() + dummy_cdkey_re = r'\bKVM_TEST_CDKEY\b' + real_cdkey = os.environ.get('KVM_TEST_cdkey') + if re.search(dummy_cdkey_re, unattended_contents): + if real_cdkey: + unattended_contents = re.sub(dummy_cdkey_re, real_cdkey, + unattended_contents) + else: + print ("WARNING: 'cdkey' required but not specified for " + "this unattended installation") + + dummy_medium_re = r'\bKVM_TEST_MEDIUM\b' + if self.medium == "cdrom": + content = "cdrom" + elif self.medium == "url": + content = "url --url %s" % self.url + elif self.medium == "nfs": + content = "nfs --server=%s --dir=%s" % (self.nfs_server, + self.nfs_dir) + else: + raise SetupError("Unexpected installation medium %s" % self.url) + + unattended_contents = re.sub(dummy_medium_re, content, + unattended_contents) + + def replace_virtio_key(contents, dummy_re, env): + """ + Replace a virtio dummy string with contents. + + If install_virtio is not set, replace it with a dummy string. + + @param contents: Contents of the unattended file + @param dummy_re: Regular expression used to search on the. + unattended file contents. + @param env: Name of the environment variable. + """ + dummy_path = "C:" + driver = os.environ.get(env, '') + + if re.search(dummy_re, contents): if self.install_virtio == "yes": - self.setup_virtio_win2003() - - elif self.unattended_file.endswith('.ks'): - # Red Hat kickstart install - dest_fname = 'ks.cfg' - elif self.unattended_file.endswith('.xml'): - if not self.tftp: - # Windows unattended install - dest_fname = "autounattend.xml" - if self.install_virtio == "yes": - self.setup_virtio_win2008() - else: - # SUSE autoyast install - dest_fname = "autoinst.xml" - - dest = os.path.join(self.floppy_mount, dest_fname) - - # Replace KVM_TEST_CDKEY (in the unattended file) with the cdkey - # provided for this test and replace the KVM_TEST_MEDIUM with - # the tree url or nfs address provided for this test. - unattended_contents = open(self.unattended_file).read() - dummy_cdkey_re = r'\bKVM_TEST_CDKEY\b' - real_cdkey = os.environ.get('KVM_TEST_cdkey') - if re.search(dummy_cdkey_re, unattended_contents): - if real_cdkey: - unattended_contents = re.sub(dummy_cdkey_re, real_cdkey, - unattended_contents) + if driver.endswith("msi"): + driver = 'msiexec /passive /package ' + driver + else: + try: + # Let's escape windows style paths properly + drive, path = driver.split(":") + driver = drive + ":" + re.escape(path) + except: + pass + contents = re.sub(dummy_re, driver, contents) else: - print ("WARNING: 'cdkey' required but not specified for " - "this unattended installation") - - dummy_medium_re = r'\bKVM_TEST_MEDIUM\b' - if self.medium == "cdrom": - content = "cdrom" - elif self.medium == "url": - content = "url --url %s" % self.url - elif self.medium == "nfs": - content = "nfs --server=%s --dir=%s" % (self.nfs_server, - self.nfs_dir) + contents = re.sub(dummy_re, dummy_path, contents) + return contents + + vdict = {r'\bKVM_TEST_STORAGE_DRIVER_PATH\b': + 'KVM_TEST_virtio_storage_path', + r'\bKVM_TEST_NETWORK_DRIVER_PATH\b': + 'KVM_TEST_virtio_network_path', + r'\bKVM_TEST_VIRTIO_NETWORK_INSTALLER\b': + 'KVM_TEST_virtio_network_installer_path'} + + for vkey in vdict: + unattended_contents = replace_virtio_key(unattended_contents, + vkey, vdict[vkey]) + + print "Unattended install contents:" + print unattended_contents + return unattended_contents + + + def setup_boot_disk(self): + answer_contents = self.render_answer_file() + + if self.unattended_file.endswith('.sif'): + dest_fname = 'winnt.sif' + setup_file = 'winnt.bat' + boot_disk = FloppyDisk(self.floppy) + boot_disk.setup_answer_file(dest_fname, answer_contents) + setup_file_path = os.path.join(self.unattended_dir, setup_file) + boot_disk.copy_to(setup_file_path) + if self.install_virtio == "yes": + boot_disk.setup_virtio_win2003(self.virtio_floppy) + boot_disk.copy_to(self.finish_program) + + elif self.unattended_file.endswith('.ks'): + # Red Hat kickstart install + dest_fname = 'ks.cfg' + if self.cdrom_unattended: + boot_disk = CdromDisk(self.cdrom_unattended) + elif self.floppy: + boot_disk = FloppyDisk(self.floppy) else: - raise SetupError("Unexpected installation medium %s" % self.url) - - unattended_contents = re.sub(dummy_medium_re, content, - unattended_contents) - - def replace_virtio_key(contents, dummy_re, env): - """ - Replace a virtio dummy string with contents. - - If install_virtio is not set, replace it with a dummy string. - - @param contents: Contents of the unattended file - @param dummy_re: Regular expression used to search on the. - unattended file contents. - @param env: Name of the environment variable. - """ - dummy_path = "C:" - driver = os.environ.get(env, '') - - if re.search(dummy_re, contents): - if self.install_virtio == "yes": - if driver.endswith("msi"): - driver = 'msiexec /passive /package ' + driver - else: - try: - # Let's escape windows style paths properly - drive, path = driver.split(":") - driver = drive + ":" + re.escape(path) - except: - pass - contents = re.sub(dummy_re, driver, contents) - else: - contents = re.sub(dummy_re, dummy_path, contents) - return contents - - vdict = {r'\bKVM_TEST_STORAGE_DRIVER_PATH\b': - 'KVM_TEST_virtio_storage_path', - r'\bKVM_TEST_NETWORK_DRIVER_PATH\b': - 'KVM_TEST_virtio_network_path', - r'\bKVM_TEST_VIRTIO_NETWORK_INSTALLER\b': - 'KVM_TEST_virtio_network_installer_path'} - - for vkey in vdict: - unattended_contents = replace_virtio_key(unattended_contents, - vkey, vdict[vkey]) - - print - print "Unattended install %s contents:" % dest_fname - print unattended_contents - # Write the unattended file contents to 'dest' - open(dest, 'w').write(unattended_contents) - - if self.finish_program: - dest_fname = os.path.basename(self.finish_program) - dest = os.path.join(self.floppy_mount, dest_fname) - shutil.copyfile(self.finish_program, dest) + raise SetupError("Neither cdrom_unattended nor floppy set " + "on the config file, please verify") + boot_disk.setup_answer_file(dest_fname, answer_contents) - finally: - u_cmd = 'umount %s' % self.floppy_mount - if os.system(u_cmd): - raise SetupError('Could not unmount floppy at %s.' % - self.floppy_mount) - self.cleanup(self.floppy_mount) + elif self.unattended_file.endswith('.xml'): + if self.tftp: + # SUSE autoyast install + dest_fname = "autoinst.xml" + if self.cdrom_unattended: + boot_disk = CdromDisk(self.cdrom_unattended) + elif self.floppy: + boot_disk = FloppyDisk(self.floppy) + else: + raise SetupError("Neither cdrom_unattended nor floppy set " + "on the config file, please verify") + boot_disk.setup_answer_file(dest_fname, answer_contents) + + else: + # Windows unattended install + dest_fname = "autounattend.xml" + boot_disk = FloppyDisk(self.floppy) + boot_disk.setup_answer_file(dest_fname, answer_contents) + if self.install_virtio == "yes": + boot_disk.setup_virtio_win2008(self.virtio_floppy) + boot_disk.copy_to(self.finish_program) - os.chmod(self.floppy, 0755) + else: + raise SetupError('Unknown answer file %s' % + self.unattended_file) - print "Boot floppy created successfuly" + boot_disk.close() def setup_pxe_boot(self): @@ -385,7 +489,7 @@ class UnattendedInstall(object): def setup_url(self): """ - Download the vmlinuz and initrd.img from URL + Download the vmlinuz and initrd.img from URL. """ print "Downloading the vmlinuz and initrd.img" os.chdir(self.image_path) @@ -453,6 +557,11 @@ class UnattendedInstall(object): def setup(self): + """ + Configure the environment for unattended install. + + Uses an appropriate strategy according to each install model. + """ print "Starting unattended install setup" print @@ -464,8 +573,8 @@ class UnattendedInstall(object): print " %s: %s" % (name, value) print - if self.unattended_file and self.floppy is not None: - self.create_boot_floppy() + if self.unattended_file and (self.floppy or self.cdrom_unattended): + self.setup_boot_disk() if self.medium == "cdrom": if self.tftp: self.setup_pxe_boot() diff --git a/client/tests/kvm/tests_base.cfg.sample b/client/tests/kvm/tests_base.cfg.sample index 3e8803e..e89b998 100644 --- a/client/tests/kvm/tests_base.cfg.sample +++ b/client/tests/kvm/tests_base.cfg.sample @@ -90,7 +90,6 @@ variants: pre_command += " scripts/unattended.py;" extra_params += " -boot d" guest_port_unattended_install = 12323 - floppy = "images/floppy.img" kernel = vmlinuz initrd = initrd.img nic_mode = tap @@ -638,6 +637,12 @@ variants: mem_chk_cmd = dmidecode -t 17 | awk -F: '/Size/ {print $2}' mem_chk_cur_cmd = grep MemTotal /proc/meminfo cpu_chk_cmd = grep -c processor /proc/cpuinfo + unattended_install.cdrom: + # If you want to use floppy to hold kickstarts, + # comment the 3 lines below + cdroms += " unattended" + drive_index_unattended = 1 + drive_index_cd1 = 2 timedrift: extra_params += " -no-kvm-pit-reinjection" time_command = date +'TIME: %a %m/%d/%Y %H:%M:%S.%N' @@ -668,7 +673,10 @@ variants: tftp = "images/tftpboot" bootp = "/pxelinux.0" extra_params += " -boot cn" - kernel_args = "ks=floppy nicdelay=60 console=ttyS0,115200 console=tty0" + # You have to use ks=floppy if you want to use floppies to + # hold your kickstart file + #kernel_args = "ks=floppy nicdelay=60 console=ttyS0,115200 console=tty0" + kernel_args = "ks=cdrom nicdelay=60 console=ttyS0,115200 console=tty0" variants: - 8.32: @@ -682,7 +690,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/Fedora-8.ks tftp = images/f8-32/tftpboot - floppy = images/f8-32/floppy.img + #floppy = images/f8-32/ks.vfd + cdrom_unattended = images/f8-32/ks.iso - 8.64: no setup @@ -695,7 +704,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/Fedora-8.ks tftp = images/f8-64/tftpboot - floppy = images/f8-64/floppy.img + #floppy = images/f8-64/ks.vfd + cdrom_unattended = images/f8-64/ks.iso - 9.32: image_name = f9-32 @@ -707,7 +717,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/Fedora-9.ks tftp = images/f9-32/tftpboot - floppy = images/f9-32/floppy.img + #floppy = images/f9-32/ks.vfd + cdrom_unattended = images/f9-32/ks.iso - 9.64: image_name = f9-64 @@ -719,7 +730,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/Fedora-9.ks tftp = images/f9-64/tftpboot - floppy = images/f9-64/floppy.img + #floppy = images/f9-64/ks.vfd + cdrom_unattended = images/f9-64/ks.iso - 10.32: image_name = f10-32 @@ -729,7 +741,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/Fedora-10.ks tftp = images/f10-32/tftpboot - floppy = images/f10-32/floppy.img + #floppy = images/f10-32/ks.vfd + cdrom_unattended = images/f10-32/ks.iso - 10.64: image_name = f10-64 @@ -739,7 +752,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/Fedora-10.ks tftp = images/f10-64/tftpboot - floppy = images/f10-64/floppy.img + #floppy = images/f10-64/ks.vfd + cdrom_unattended = images/f10-64/ks.iso - 11.32: image_name = f11-32 @@ -751,7 +765,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/Fedora-11.ks tftp = images/f11-32/tftpboot - floppy = images/f11-32/floppy.img + #floppy = images/f11-32/ks.vfd + cdrom_unattended = images/f11-32/ks.iso - 11.64: image_name = f11-64 @@ -761,7 +776,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/Fedora-11.ks tftp = images/f11-64/tftpboot - floppy = images/f11-64/floppy.img + #floppy = images/f11-64/ks.vfd + cdrom_unattended = images/f11-64/ks.iso - 12.32: image_name = f12-32 @@ -771,7 +787,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/Fedora-12.ks tftp = images/f12-32/tftpboot - floppy = images/f12-32/floppy.img + #floppy = images/f12-32/ks.vfd + cdrom_unattended = images/f12-32/ks.iso - 12.64: image_name = f12-64 @@ -781,27 +798,30 @@ variants: unattended_install.cdrom: unattended_file = unattended/Fedora-12.ks tftp = images/f12-64/tftpboot - floppy = images/f12-64/floppy.img + #floppy = images/f12-64/ks.vfd + cdrom_unattended = images/f12-64/ks.iso - 13.32: image_name = f13-32 cdrom_cd1 = linux/Fedora-13-i386-DVD.iso md5sum = 212fec517c2629b4b5eaf3662ac13136 md5sum_1m = 4e1578a6ed5a6e7cd03b8fb074030746 - unattended_install: + unattended_install.cdrom: unattended_file = unattended/Fedora-13.ks tftp = images/f13-32/tftpboot - floppy = images/f13-32/floppy.img + #floppy = images/f13-32/ks.vfd + cdrom_unattended = images/f13-32/ks.iso - 13.64: image_name = f13-64 cdrom_cd1 = linux/Fedora-13-x86_64-DVD.iso md5sum = 6fbae6379cf27f36e1f2c7827ba7dc35 md5sum_1m = 68821b9de4d3b5975d6634334e7f47a6 - unattended_install: + unattended_install.cdrom: unattended_file = unattended/Fedora-13.ks tftp = images/f13-64/tftpboot - floppy = images/f13-64/floppy.img + #floppy = images/f13-64/ks.vfd + cdrom_unattended = images/f13-64/ks.iso - DSL-4.2.5: @@ -830,7 +850,10 @@ variants: tftp = "images/tftpboot" bootp = "/pxelinux.0" extra_params += " -boot cn" - kernel_args = "autoyast=floppy console=ttyS0,115200 console=tty0" + # You have to use autoyast=floppy if you want to use floppies to + # hold your autoyast file + #kernel_args = "autoyast=floppy console=ttyS0,115200 console=tty0" + kernel_args = "autoyast=cdrom console=ttyS0,115200 console=tty0" post_install_delay = 10 variants: @@ -855,7 +878,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/OpenSUSE-11.xml tftp = images/opensuse-11-0-64/tftpboot - floppy = images/opensuse-11-0-64/floppy.img + #floppy = images/opensuse-11-0-64/autoyast.vfd + cdrom_unattended = images/opensuse-11-0-64/autoyast.iso pxe_dir = boot/x86_64/loader - 11.1.32: @@ -868,7 +892,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/OpenSUSE-11.xml tftp = images/opensuse-11-1-32/tftpboot - floppy = images/opensuse-11-1-32/floppy.img + #floppy = images/opensuse-11-1-32/autoyast.vfd + cdrom_unattended = images/opensuse-11-1-32/autoyast.iso pxe_dir = boot/i386/loader - 11.1.64: @@ -881,7 +906,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/OpenSUSE-11.xml tftp = images/opensuse-11-1-64/tftpboot - floppy = images/opensuse-11-1-64/floppy.img + #floppy = images/opensuse-11-1-64/autoyast.vfd + cdrom_unattended = images/opensuse-11-1-64/autoyast.iso pxe_dir = boot/x86_64/loader - 11.2.32: @@ -892,7 +918,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/OpenSUSE-11.xml tftp = images/opensuse-11-2-32/tftpboot - floppy = images/opensuse-11-2-32/floppy.img + #floppy = images/opensuse-11-2-32/autoyast.vfd + cdrom_unattended = images/opensuse-11-2-32/autoyast.iso pxe_dir = boot/i386/loader - 11.2.64: @@ -903,7 +930,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/OpenSUSE-11.xml tftp = images/opensuse-11-2-64/tftpboot - floppy = images/opensuse11-2-64/floppy.img + #floppy = images/opensuse11-2-64/autoyast.vfd + cdrom_unattended = images/opensuse11-2-64/autoyast.iso pxe_dir = boot/x86_64/loader - 11.3.32: @@ -914,7 +942,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/OpenSUSE-11.xml tftp = images/opensuse-11-3-32/tftpboot - floppy = images/opensuse-11-3-32/floppy.img + #floppy = images/opensuse-11-3-32/autoyast.vfd + cdrom_unattended = images/opensuse-11-3-32/autoyast.iso pxe_dir = boot/i386/loader - 11.3.64: @@ -925,7 +954,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/OpenSUSE-11.xml tftp = images/opensuse-11-3-64/tftpboot - floppy = images/opensuse-11-3-64/floppy.img + #floppy = images/opensuse-11-3-64/autoyast.vfd + cdrom_unattended = images/opensuse-11-3-64/autoyast.iso pxe_dir = boot/x86_64/loader - SLES: @@ -935,7 +965,10 @@ variants: pxe_initrd = "initrd" bootp = "/pxelinux.0" extra_params += " -boot cn" - kernel_args = "autoyast=floppy console=ttyS0,115200 console=tty0" + # You have to use autoyast=floppy if you want to use floppies to + # hold your autoyast file + #kernel_args = "autoyast=floppy console=ttyS0,115200 console=tty0" + kernel_args = "autoyast=cdrom console=ttyS0,115200 console=tty0" post_install_delay = 10 variants: @@ -946,9 +979,10 @@ variants: md5sum_1m = 1f19d4eff5bcead2a3e5b8b4212b6796 unattended_install.cdrom: unattended_file = unattended/SLES-11.xml - tftp = "images/sles-11-0-32/tftpboot" - floppy = "images/sles-11-0-32/floppy.img" - pxe_dir = "boot/i386/loader" + tftp = images/sles-11-0-32/tftpboot + #floppy = images/sles-11-0-32/autoyast.vfd + cdrom_unattended = images/sles-11-0-32/autoyast.iso + pxe_dir = boot/i386/loader - 11.0.64: image_name = sles11-64 @@ -957,9 +991,10 @@ variants: md5sum_1m = 00000951cab7c32e332362fc424c1054 unattended_install.cdrom: unattended_file = unattended/SLES-11.xml - tftp = "images/sles-11-0-64/tftpboot" - floppy = "images/sles-11-0-64/floppy.img" - pxe_dir = "boot/x86_64/loader" + tftp = images/sles-11-0-64/tftpboot + #floppy = images/sles-11-0-64/autoyast.vfd + cdrom_unattended = images/sles-11-0-64/autoyast.iso + pxe_dir = boot/x86_64/loader - 11.1.32: image_name = sles11sp1-32 @@ -968,9 +1003,10 @@ variants: md5sum_1m = a626a3d50813410e3ac42794e05773bb unattended_install: unattended_file = unattended/SLES-11.xml - tftp = "images/sles-11-1-32/tftpboot" - floppy = "images/sles-11-1-32/floppy.img" - pxe_dir = "boot/i386/loader" + tftp = images/sles-11-1-32/tftpboot + #floppy = images/sles-11-1-32/autoyast.vfd + cdrom_unattended = images/sles-11-1-32/autoyast.iso + pxe_dir = boot/i386/loader - 11.1.64: image_name = sles11sp1-64 @@ -979,9 +1015,10 @@ variants: md5sum_1m = f7f67b5da46923a9f01da8a2b6909654 unattended_install: unattended_file = unattended/SLES-11.xml - tftp = "images/sles-11-1-64/tftpboot" - floppy = "images/sles-11-1-64/floppy.img" - pxe_dir = "boot/x86_64/loader" + tftp = images/sles-11-1-64/tftpboot + #floppy = images/sles-11-1-64/autoyast.vfd + cdrom_unattended = images/sles-11-1-64/autoyast.iso + pxe_dir = boot/x86_64/loader - @Ubuntu: shell_prompt = "^root@.*[\#\$]\s*$" @@ -1028,7 +1065,10 @@ variants: tftp = "images/tftpboot" bootp = "/pxelinux.0" extra_params += " -boot cn" - kernel_args = "ks=floppy nicdelay=60 console=ttyS0,115200 console=tty0" + # You have to use ks=floppy if you want to use floppies to + # hold your kickstart file + #kernel_args = "ks=floppy nicdelay=60 console=ttyS0,115200 console=tty0" + kernel_args = "ks=cdrom nicdelay=60 console=ttyS0,115200 console=tty0" variants: - 3.9.i386: @@ -1043,7 +1083,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-3-series.ks tftp = images/rhel39-32/tftpboot - floppy = images/rhel39-32/floppy.img + #floppy = images/rhel39-32/ks.vfd + cdrom_unattended = images/rhel39-32/ks.iso - 3.9.x86_64: no setup autotest linux_s3 guest_s4 shutdown @@ -1057,7 +1098,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-3-series.ks tftp = images/rhel39-64/tftpboot - floppy = images/rhel39-64/floppy.img + #floppy = images/rhel39-64/ks.vfd + cdrom_unattended = images/rhel39-64/ks.iso - 4.7.i386: no setup autotest @@ -1070,7 +1112,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-4-series.ks tftp = images/rhel47-32/tftpboot - floppy = images/rhel47-32/floppy.img + #floppy = images/rhel47-32/ks.vfd + cdrom_unattended = images/rhel47-32/ks.iso - 4.7.x86_64: no setup autotest @@ -1083,7 +1126,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-4-series.ks tftp = images/rhel47-64/tftpboot - floppy = images/rhel47-64/floppy.img + #floppy = images/rhel47-64/ks.vfd + cdrom_unattended = images/rhel47-64/ks.iso - 4.8.i386: no setup autotest @@ -1094,7 +1138,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-4-series.ks tftp = images/rhel48-32/tftpboot - floppy = images/rhel48-32/floppy.img + #floppy = images/rhel48-32/ks.vfd + cdrom_unattended = images/rhel48-32/ks.iso - 4.8.x86_64: no setup autotest @@ -1105,7 +1150,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-4-series.ks tftp = images/rhel48-64/tftpboot - floppy = images/rhel48-64/floppy.img + #floppy = images/rhel48-64/ks.vfd + cdrom_unattended = images/rhel48-64/ks.iso - 5.3.i386: no setup @@ -1118,7 +1164,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-5-series.ks tftp = images/rhel53-32/tftpboot - floppy = images/rhel53-32/floppy.img + #floppy = images/rhel53-32/ks.vfd + cdrom_unattended = images/rhel53-32/ks.iso - 5.3.x86_64: no setup @@ -1131,7 +1178,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-5-series.ks tftp = images/rhel53-64/tftpboot - floppy = images/rhel53-64/floppy.img + #floppy = images/rhel53-64/ks.vfd + cdrom_unattended = images/rhel53-64/ks.iso - 5.4.i386: no setup @@ -1142,7 +1190,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-5-series.ks tftp = images/rhel54-32/tftpboot - floppy = images/rhel54-32/floppy.img + #floppy = images/rhel54-32/ks.vfd + cdrom_unattended = images/rhel54-32/ks.iso - 5.4.x86_64: no setup @@ -1153,7 +1202,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-5-series.ks tftp = images/rhel54-64/tftpboot - floppy = images/rhel54-64/floppy.img + #floppy = images/rhel54-64/ks.vfd + cdrom_unattended = images/rhel54-64/ks.iso - 5.5.i386: no setup @@ -1164,7 +1214,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-5-series.ks tftp = images/rhel55-32/tftpboot - floppy = images/rhel55-32/floppy.img + #floppy = images/rhel55-32/ks.vfd + cdrom_unattended = images/rhel55-32/ks.iso - 5.5.x86_64: no setup @@ -1175,7 +1226,8 @@ variants: unattended_install.cdrom: unattended_file = unattended/RHEL-5-series.ks tftp = images/rhel55-64/tftpboot - floppy = images/rhel55-64/floppy.img + #floppy = images/rhel55-64/ks.vfd + cdrom_unattended = images/rhel55-64/ks.iso # Windows section @@ -1212,9 +1264,9 @@ variants: # Turn install_virtio = yes if you want to install the # Windows virtio drivers. It might be a lot of setup though :) #install_virtio = no - #cdroms += " virtiocd" - #cdrom_virtiocd = windows/virtio-win.iso - #drive_index_virtiocd = 3 + #cdroms += " virtio" + #cdrom_virtio = windows/virtio-win.iso + #drive_index_virtio = 3 #virtio_floppy = /usr/share/virtio-win/virtio-drivers.vfd migrate: migration_test_command = ver && vol @@ -1290,7 +1342,7 @@ variants: md5sum = dda6039f3a9173f0f6bfae40f5efdfea md5sum_1m = dd28fba196d366d56fe774bd93df5527 unattended_file = unattended/win2000-32.sif - floppy = images/win2000-32/floppy.img + floppy = images/win2000-32/answer.vfd - WinXP: image_name = winXP @@ -1310,7 +1362,7 @@ variants: md5sum = 743450644b1d9fe97b3cf379e22dceb0 md5sum_1m = b473bf75af2d1269fec8958cf0202bfd unattended_file = unattended/winxp32.sif - floppy = images/winXP-32/floppy.img + floppy = images/winXP-32/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1340,7 +1392,7 @@ variants: md5sum = 8d3f007ec9c2060cec8a50ee7d7dc512 md5sum_1m = e812363ff427effc512b7801ee70e513 unattended_file = unattended/winxp64.sif - floppy = images/winXP-64/floppy.img + floppy = images/winXP-64/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1375,7 +1427,7 @@ variants: md5sum = 03e921e9b4214773c21a39f5c3f42ef7 md5sum_1m = 37c2fdec15ac4ec16aa10fdfdb338aa3 unattended_file = unattended/win2003-32.sif - floppy = images/win2003-32/floppy.img + floppy = images/win2003-32/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1404,7 +1456,7 @@ variants: md5sum = 5703f87c9fd77d28c05ffadd3354dbbd md5sum_1m = 439393c384116aa09e08a0ad047dcea8 unattended_file = unattended/win2003-64.sif - floppy = images/win2003-64/floppy.img + floppy = images/win2003-64/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1449,7 +1501,7 @@ variants: md5sum = 1008f323d5170c8e614e52ccb85c0491 md5sum_1m = c724e9695da483bc0fd59e426eaefc72 unattended_file = unattended/winvista-32-autounattend.xml - floppy = images/winvista-sp1-32/floppy.img + floppy = images/winvista-sp1-32/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1466,7 +1518,7 @@ variants: sha1sum = 25ad9a776503e6a583bec07879dbcc5dfd20cd6e sha1sum_1m = a2afa4cffdc1c362dbf9e62942337f4f875a22cf unattended_file = unattended/winvista-32-autounattend.xml - floppy = images/winvista-sp2-32/floppy.img + floppy = images/winvista-sp2-32/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1495,7 +1547,7 @@ variants: md5sum = 11e2010d857fffc47813295e6be6d58d md5sum_1m = 0947bcd5390546139e25f25217d6f165 unattended_file = unattended/winvista-64-autounattend.xml - floppy = images/winvista-sp1-64/floppy.img + floppy = images/winvista-sp1-64/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1511,7 +1563,7 @@ variants: sha1sum = aaee3c04533899f9f8c4ae0c4250ef5fafbe29a3 sha1sum_1m = 1fd21bd3ce2a4de8856c7b8fe6fdf80260f6d1c7 unattended_file = unattended/winvista-64-autounattend.xml - floppy = images/winvista-sp2-64/floppy.img + floppy = images/winvista-sp2-64/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1543,7 +1595,7 @@ variants: md5sum=0bfca49f0164de0a8eba236ced47007d md5sum_1m=07d7f5006393f74dc76e6e2e943e2440 unattended_file = unattended/win2008-32-autounattend.xml - floppy = images/win2008-sp1-32/floppy.img + floppy = images/win2008-sp1-32/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1560,7 +1612,7 @@ variants: sha1sum = 49d0d6917c1256fe81048d414fa473bbc76a8724 sha1sum_1m = 9662ff7ed715faa00407e4befc484ea52a92a9fb unattended_file = unattended/win2008-32-autounattend.xml - floppy = images/win2008-sp2-32/floppy.img + floppy = images/win2008-sp2-32/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1587,7 +1639,7 @@ variants: md5sum=27c58cdb3d620f28c36333a5552f271c md5sum_1m=efdcc11d485a1ef9afa739cb8e0ca766 unattended_file = unattended/win2008-64-autounattend.xml - floppy = images/win2008-sp1-64/floppy.img + floppy = images/win2008-sp1-64/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1604,7 +1656,7 @@ variants: sha1sum = 34c7d726c57b0f8b19ba3b40d1b4044c15fc2029 sha1sum_1m = 8fe08b03e3531906855a60a78020ac9577dff5ba unattended_file = unattended/win2008-64-autounattend.xml - floppy = images/win2008-sp2-64/floppy.img + floppy = images/win2008-sp2-64/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1621,7 +1673,7 @@ variants: sha1sum = ad855ea913aaec3f1d0e1833c1aef7a0de326b0a sha1sum_1m = 9194a3aabae25b36e5f73cad001314b2c8d07d14 unattended_file = unattended/win2008-r2-autounattend.xml - floppy = images/win2008-r2-64/floppy.img + floppy = images/win2008-r2-64/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1649,7 +1701,7 @@ variants: sha1sum = 5395dc4b38f7bdb1e005ff414deedfdb16dbf610 sha1sum_1m = 9f9c3780aebeb28a9bf22188eed6bc15475dc9c5 unattended_file = unattended/win7-32-autounattend.xml - floppy = images/win7-32/floppy.img + floppy = images/win7-32/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso. @@ -1679,7 +1731,7 @@ variants: sha1sum = 326327cc2ff9f05379f5058c41be6bc5e004baa7 sha1sum_1m = 4a3903bd5157de54f0702e5263e0a683c5775515 unattended_file = unattended/win7-64-autounattend.xml - floppy = images/win7-64/floppy.img + floppy = images/win7-64/answer.vfd # Uncomment virtio_network_installer_path line if # you have an msi installer, also make sure the # paths are properly set in your virtio driver iso.