Re: [PATCH 1/2] KVM test: Parallel install of guest OS v2

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

 



Sorry, added one comment in the unattended_install.py section.

----- "Lucas Meneghel Rodrigues" <lmr@xxxxxxxxxx> wrote:

> From: yogi <anantyog@xxxxxxxxxxxxxxxxxx>
> 
> The patch enables doing mulitple install of guest OS in parallel.
> Have added four more options to  test_base.cfg, port redirection
> entry "guest_port_unattend_shell" for host to communicate with
> guest during installation, "pxe_dir", 'pxe_image' and
> 'pxe_initrd" to specify locations for kernel and initrd.
> For parallel installation to work in unattended mode, the floppy
> image and pxe boot path also  has to be unique for each quest.

I don't think being unique for each guest is always enough.  It's
possible for the same guest to run twice in parallel in different
configurations (e.g. up.Fedora.11 and smp2.Fedora.11 at the same
time).  Each such run requires a unique floppy image and pxe path.
Come to think of it, it also requires a unique disk image, so right
now parallel tests on the same guest shouldn't work at all.  I'll
think of a solution to that (in the form of a modification to
kvm_scheduler) but in the mean time, parallel tests should work as
long as they're for different guests.

> All the relevant unattended post install steps for guests were
> changed, now they are server based codes.

I still think much code can be saved by using the existing remote
login servers (ssh for Linux, rss.exe for Windows) that should
already be running when unattended install is done.
It's not critical however.

> Changes from v1:
>  * Fixed the logic for the new unattended install test (original
> implementation would hang indefinitely if guest dies in the middle
> of the install).
>  * Fixed the config changes to make sure the unattended install
> port actually gets redirected so the test can work, also made the
> config specific to unattended install
>  * Merged the finish.exe patch, including a binary patch that
> changes the binary shipped to the new version
>  * Changed all unattended install files to use the parallel
> mechanism
> 
> Tested with Windows 7 and Fedora 11 guests. I (lmr) am going to
> keep this in the queue for a bit so I can test it more in the
> internal test farm and everybody can take a look at the patch.

See one more comment below in tests_base.cfg.sample.
Other than that everything looks fine.

> 
> Signed-off-by: Yogananth Subramanian <anantyog@xxxxxxxxxxxxxxxxxx>
> Signed-off-by: Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx>
> ---
>  client/tests/kvm/deps/finish.cpp                   |  111 ++--
>  client/tests/kvm/deps/finish.exe                   |  Bin 26913 ->
> 26926 bytes
>  client/tests/kvm/kvm_utils.py                      |    4 +-
>  client/tests/kvm/scripts/unattended.py             |   56 +-
>  client/tests/kvm/tests/unattended_install.py       |   44 +-
>  client/tests/kvm/tests_base.cfg.sample             |   66 ++-
>  client/tests/kvm/unattended/Fedora-10.ks           |   12 +-
>  client/tests/kvm/unattended/Fedora-11.ks           |   11 +-
>  client/tests/kvm/unattended/Fedora-12.ks           |   11 +-
>  client/tests/kvm/unattended/Fedora-8.ks            |   11 +-
>  client/tests/kvm/unattended/Fedora-9.ks            |   11 +-
>  client/tests/kvm/unattended/RHEL-3-series.ks       |   12 +-
>  client/tests/kvm/unattended/RHEL-4-series.ks       |   11 +-
>  client/tests/kvm/unattended/RHEL-5-series.ks       |   11 +-
>  client/tests/kvm/unattended/Sles11-64-autoinst.xml |  898
> ++++++++++++++++++++
>  client/tests/kvm/unattended/win2003-32.sif         |    2 +-
>  client/tests/kvm/unattended/win2003-64.sif         |    2 +-
>  .../kvm/unattended/win2008-32-autounattend.xml     |    2 +-
>  .../kvm/unattended/win2008-64-autounattend.xml     |    2 +-
>  .../kvm/unattended/win2008-r2-autounattend.xml     |    2 +-
>  .../tests/kvm/unattended/win7-32-autounattend.xml  |    2 +-
>  .../tests/kvm/unattended/win7-64-autounattend.xml  |    2 +-
>  .../kvm/unattended/winvista-32-autounattend.xml    |    2 +-
>  .../kvm/unattended/winvista-64-autounattend.xml    |    2 +-
>  client/tests/kvm/unattended/winxp32.sif            |    2 +-
>  client/tests/kvm/unattended/winxp64.sif            |    2 +-
>  26 files changed, 1121 insertions(+), 170 deletions(-)
>  create mode 100644
> client/tests/kvm/unattended/Sles11-64-autoinst.xml
> 
> diff --git a/client/tests/kvm/deps/finish.cpp
> b/client/tests/kvm/deps/finish.cpp
> index 9c2867c..e5ba128 100644
> --- a/client/tests/kvm/deps/finish.cpp
> +++ b/client/tests/kvm/deps/finish.cpp
> @@ -1,12 +1,13 @@
> -// Simple app that only sends an ack string to the KVM unattended
> install
> -// watch code.
> +// Simple application that creates a server socket, listening for
> connections
> +// of the unattended install test. Once it gets a client connected,
> the
> +// app will send back an ACK string, indicating the install process
> is done.
>  //
>  // You must link this code with Ws2_32.lib, Mswsock.lib, and
> Advapi32.lib
>  //
>  // Author: Lucas Meneghel Rodrigues <lmr@xxxxxxxxxx>
>  // Code was adapted from an MSDN sample.
>  
> -// Usage: finish.exe [Host OS IP]
> +// Usage: finish.exe
>  
>  // MinGW's ws2tcpip.h only defines getaddrinfo and other functions
> only for
>  // the case _WIN32_WINNT >= 0x0501.
> @@ -21,24 +22,18 @@
>  #include <stdlib.h>
>  #include <stdio.h>
>  
> -#define DEFAULT_BUFLEN 512
>  #define DEFAULT_PORT "12323"
> -
>  int main(int argc, char **argv)
>  {
>      WSADATA wsaData;
> -    SOCKET ConnectSocket = INVALID_SOCKET;
> -    struct addrinfo *result = NULL,
> -                    *ptr = NULL,
> -                    hints;
> +    SOCKET ListenSocket = INVALID_SOCKET, ClientSocket =
> INVALID_SOCKET;
> +    struct addrinfo *result = NULL, hints;
>      char *sendbuf = "done";
> -    char recvbuf[DEFAULT_BUFLEN];
> -    int iResult;
> -    int recvbuflen = DEFAULT_BUFLEN;
> +    int iResult, iSendResult;
>  
>      // Validate the parameters
> -    if (argc != 2) {
> -        printf("usage: %s server-name\n", argv[0]);
> +    if (argc != 1) {
> +        printf("usage: %s", argv[0]);
>          return 1;
>      }
>  
> @@ -49,72 +44,84 @@ int main(int argc, char **argv)
>          return 1;
>      }
>  
> -    ZeroMemory( &hints, sizeof(hints) );
> -    hints.ai_family = AF_UNSPEC;
> +    ZeroMemory(&hints, sizeof(hints));
> +    hints.ai_family = AF_INET;
>      hints.ai_socktype = SOCK_STREAM;
>      hints.ai_protocol = IPPROTO_TCP;
> +    hints.ai_flags = AI_PASSIVE;
>  
>      // Resolve the server address and port
> -    iResult = getaddrinfo(argv[1], DEFAULT_PORT, &hints, &result);
> -    if ( iResult != 0 ) {
> +    iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
> +    if (iResult != 0) {
>          printf("getaddrinfo failed: %d\n", iResult);
>          WSACleanup();
>          return 1;
>      }
>  
> -    // Attempt to connect to an address until one succeeds
> -    for(ptr=result; ptr != NULL ;ptr=ptr->ai_next) {
> -
> -        // Create a SOCKET for connecting to server
> -        ConnectSocket = socket(ptr->ai_family, ptr->ai_socktype,
> -            ptr->ai_protocol);
> -        if (ConnectSocket == INVALID_SOCKET) {
> -            printf("Error at socket(): %ld\n", WSAGetLastError());
> -            freeaddrinfo(result);
> -            WSACleanup();
> -            return 1;
> -        }
> -
> -        // Connect to server.
> -        iResult = connect( ConnectSocket, ptr->ai_addr,
> (int)ptr->ai_addrlen);
> -        if (iResult == SOCKET_ERROR) {
> -            closesocket(ConnectSocket);
> -            ConnectSocket = INVALID_SOCKET;
> -            continue;
> -        }
> -        break;
> +    // Create a SOCKET for connecting to server
> +    ListenSocket = socket(result->ai_family, result->ai_socktype,
> +                          result->ai_protocol);
> +    if (ListenSocket == INVALID_SOCKET) {
> +        printf("socket failed: %ld\n", WSAGetLastError());
> +        freeaddrinfo(result);
> +        WSACleanup();
> +        return 1;
> +    }
> +
> +    // Setup the TCP listening socket
> +    iResult = bind(ListenSocket, result->ai_addr,
> (int)result->ai_addrlen);
> +    if (iResult == SOCKET_ERROR) {
> +        printf("bind failed: %d\n", WSAGetLastError());
> +        freeaddrinfo(result);
> +        closesocket(ListenSocket);
> +        WSACleanup();
> +        return 1;
>      }
>  
>      freeaddrinfo(result);
>  
> -    if (ConnectSocket == INVALID_SOCKET) {
> -        printf("Unable to connect to server!\n");
> +    iResult = listen(ListenSocket, SOMAXCONN);
> +    if (iResult == SOCKET_ERROR) {
> +        printf("listen failed: %d\n", WSAGetLastError());
> +        closesocket(ListenSocket);
>          WSACleanup();
>          return 1;
>      }
>  
> -    // Send the ACK buffer
> -    iResult = send( ConnectSocket, sendbuf, (int)strlen(sendbuf), 0
> );
> -    if (iResult == SOCKET_ERROR) {
> -        printf("send failed: %d\n", WSAGetLastError());
> -        closesocket(ConnectSocket);
> +    // Accept a client socket
> +    ClientSocket = accept(ListenSocket, NULL, NULL);
> +    if (ClientSocket == INVALID_SOCKET) {
> +        printf("accept failed: %d\n", WSAGetLastError());
> +        closesocket(ListenSocket);
>          WSACleanup();
>          return 1;
>      }
>  
> -    printf("Bytes Sent: %ld\n", iResult);
> +    // No longer need the server socket
> +    closesocket(ListenSocket);
> +
> +    // Send the ack string to the client
> +    iSendResult = send(ClientSocket, sendbuf, sizeof(sendbuf), 0);
> +    if (iSendResult == SOCKET_ERROR) {
> +        printf("send failed: %d\n", WSAGetLastError());
> +        closesocket(ClientSocket);
> +        WSACleanup();
> +        return 1;
> +    }
> +    // Report the number of bytes sent
> +    printf("Bytes sent: %d\n", iSendResult);
>  
> -    // shutdown the connection since no more data will be sent
> -    iResult = shutdown(ConnectSocket, SD_SEND);
> +    // Shutdown the connection since we're done
> +    iResult = shutdown(ClientSocket, SD_SEND);
>      if (iResult == SOCKET_ERROR) {
>          printf("shutdown failed: %d\n", WSAGetLastError());
> -        closesocket(ConnectSocket);
> +        closesocket(ClientSocket);
>          WSACleanup();
>          return 1;
>      }
>  
> -    // cleanup
> -    closesocket(ConnectSocket);
> +    // Cleanup
> +    closesocket(ClientSocket);
>      WSACleanup();
>  
>      return 0;
> diff --git a/client/tests/kvm/deps/finish.exe
> b/client/tests/kvm/deps/finish.exe
> index
> 5387780fd769fe574ef5c4cc93e57fece35d2132..59792973aea6e405d725371c077d032e2aa936b1
> 100755
> GIT binary patch
> delta 4604
> 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
> Zp}+ZaM4rB9rIgSZD&O-mJ|>#-{|gl$Ak_c>
> 
> delta 4371
> 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
> 
> diff --git a/client/tests/kvm/kvm_utils.py
> b/client/tests/kvm/kvm_utils.py
> index 4565dc1..9201b87 100644
> --- a/client/tests/kvm/kvm_utils.py
> +++ b/client/tests/kvm/kvm_utils.py
> @@ -635,7 +635,7 @@ def is_port_free(port):
>  
>  def find_free_port(start_port, end_port):
>      """
> -    Return a free port in the range [start_port, end_port).
> +    Return a host free port in the range [start_port, end_port].
>  
>      @param start_port: First port that will be checked.
>      @param end_port: Port immediately after the last one that will be
> checked.
> @@ -648,7 +648,7 @@ def find_free_port(start_port, end_port):
>  
>  def find_free_ports(start_port, end_port, count):
>      """
> -    Return count free ports in the range [start_port, end_port).
> +    Return count of host free ports in the range [start_port,
> end_port].
>  
>      @count: Initial number of ports known to be free in the range.
>      @param start_port: First port that will be checked.
> diff --git a/client/tests/kvm/scripts/unattended.py
> b/client/tests/kvm/scripts/unattended.py
> index 343f955..3c48fb3 100755
> --- a/client/tests/kvm/scripts/unattended.py
> +++ b/client/tests/kvm/scripts/unattended.py
> @@ -31,35 +31,31 @@ class UnattendedInstall(object):
>          self.deps_dir = os.path.join(kvm_test_dir, 'deps')
>          self.unattended_dir = os.path.join(kvm_test_dir,
> 'unattended')
>  
> -        try:
> -            tftp_root = os.environ['KVM_TEST_tftp']
> +        tftp_root = os.environ.get('KVM_TEST_tftp', '')
> +        if tftp_root:
>              self.tftp_root = os.path.join(kvm_test_dir, tftp_root)
>              if not os.path.isdir(self.tftp_root):
>                  os.makedirs(self.tftp_root)
> -        except KeyError:
> -            self.tftp_root = ''
> -
> -        try:
> -            self.kernel_args = os.environ['KVM_TEST_kernel_args']
> -        except KeyError:
> -            self.kernel_args = ''
> -
> -        try:
> -            self.finish_program=
> os.environ['KVM_TEST_finish_program']
> -        except:
> -            self.finish_program = None
> -
> +        else:
> +            self.tftp_root = tftp_root
>  
> -        cdrom_iso = os.environ['KVM_TEST_cdrom']
> -        self.unattended_file =
> os.environ['KVM_TEST_unattended_file']
> +        self.kernel_args = os.environ.get('KVM_TEST_kernel_args',
> '')
> +        self.finish_program=
> os.environ.get('KVM_TEST_finish_program', '')
> +        cdrom_iso = os.environ.get('KVM_TEST_cdrom')
> +        self.unattended_file =
> os.environ.get('KVM_TEST_unattended_file')
>  
> -        self.qemu_img_bin = os.environ['KVM_TEST_qemu_img_binary']
> +        self.qemu_img_bin =
> os.environ.get('KVM_TEST_qemu_img_binary')
>          if not os.path.isabs(self.qemu_img_bin):
>              self.qemu_img_bin = os.path.join(kvm_test_dir,
> self.qemu_img_bin)
>          self.cdrom_iso = os.path.join(kvm_test_dir, cdrom_iso)
>          self.floppy_mount = tempfile.mkdtemp(prefix='floppy_',
> dir='/tmp')
>          self.cdrom_mount = tempfile.mkdtemp(prefix='cdrom_',
> dir='/tmp')
> -        self.floppy_img = os.path.join(images_dir, 'floppy.img')
> +        flopy_name = os.path.basename(os.environ['KVM_TEST_floppy'])
> +        self.floppy_img = os.path.join(images_dir, flopy_name)
> +
> +        self.pxe_dir = os.environ.get('KVM_TEST_pxe_dir', '')
> +        self.pxe_image = os.environ.get('KVM_TEST_pxe_image', '')
> +        self.pxe_initrd = os.environ.get('KVM_TEST_pxe_initrd', '')
>  
>  
>      def create_boot_floppy(self):
> @@ -94,9 +90,15 @@ class UnattendedInstall(object):
>                  setup_file_dest = os.path.join(self.floppy_mount,
> setup_file)
>                  shutil.copyfile(setup_file_path, setup_file_dest)
>              elif self.unattended_file.endswith('.ks'):
> +                # Red Hat kickstart install
>                  dest_fname = 'ks.cfg'
>              elif self.unattended_file.endswith('.xml'):
> -                dest_fname = "autounattend.xml"
> +                if  self.tftp_root is '':
> +                    # Windows unattended install
> +                    dest_fname = "autounattend.xml"
> +                else:
> +                    # SUSE autoyast install
> +                    dest_fname = "autoinst.xml"
>  
>              dest = os.path.join(self.floppy_mount, dest_fname)
>  
> @@ -166,21 +168,20 @@ class UnattendedInstall(object):
>                  raise SetupError('Could not mount CD image %s.' %
>                                   self.cdrom_iso)
>  
> -            p = os.path.join('images', 'pxeboot')
> -            pxe_dir = os.path.join(self.cdrom_mount, p)
> -            pxe_image = os.path.join(pxe_dir, 'vmlinuz')
> -            pxe_initrd = os.path.join(pxe_dir, 'initrd.img')
> +            pxe_dir = os.path.join(self.cdrom_mount, self.pxe_dir)
> +            pxe_image = os.path.join(pxe_dir, self.pxe_image)
> +            pxe_initrd = os.path.join(pxe_dir, self.pxe_initrd)
>  
>              if not os.path.isdir(pxe_dir):
>                  raise SetupError('The ISO image does not have a %s
> dir. The '
>                                   'script assumes that the cd has a %s
> dir '
>                                   'where to search for the vmlinuz
> image.' %
> -                                 (p, p))
> +                                 (self.pxe_dir, self.pxe_dir))
>  
>              if not os.path.isfile(pxe_image) or not
> os.path.isfile(pxe_initrd):
>                  raise SetupError('The location %s is lacking either a
> vmlinuz '
>                                   'or a initrd.img file. Cannot find a
> PXE '
> -                                 'image to proceed.' % pxe_dir)
> +                                 'image to proceed.' % self.pxe_dir)
>  
>              tftp_image = os.path.join(self.tftp_root, 'vmlinuz')
>              tftp_initrd = os.path.join(self.tftp_root, 'initrd.img')
> @@ -239,6 +240,9 @@ class UnattendedInstall(object):
>          print "    floppy_mount: " + str(self.floppy_mount)
>          print "    floppy_img: " + str(self.floppy_img)
>          print "    finish_program: " + str(self.finish_program)
> +        print "    pxe_dir: " + str(self.pxe_dir)
> +        print "    pxe_image: " + str(self.pxe_image)
> +        print "    pxe_initrd: " + str(self.pxe_initrd)
>  
>          self.create_boot_floppy()
>          if self.tftp_root:
> diff --git a/client/tests/kvm/tests/unattended_install.py
> b/client/tests/kvm/tests/unattended_install.py
> index e3df72a..ee587a8 100644
> --- a/client/tests/kvm/tests/unattended_install.py
> +++ b/client/tests/kvm/tests/unattended_install.py
> @@ -13,34 +13,34 @@ def run_unattended_install(test, params, env):
>      @param params: Dictionary with the test parameters.
>      @param env: Dictionary with test environment.
>      """
> +    buf = 1024
>      vm = kvm_test_utils.get_living_vm(env, params.get("main_vm"))
>  
> -    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> -    server.bind(('', 12323))
> -    server.listen(1)
> +    port =
> vm.get_port(int(params.get("guest_port_unattended_install")))
> +    addr = ('localhost', port)
>  
>      install_timeout = float(params.get("timeout", 3000))
>      logging.info("Starting unattended install watch process. "
>                   "Timeout set to %ds (%d min)", install_timeout,
>                   install_timeout/60)
>      start_time = time.time()
> -
> -    while True:
> -        server.settimeout(install_timeout)
> +    time_elapsed = 0
> +    while time_elapsed < install_timeout:
> +        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>          try:
> -            (client, addr) = server.accept()
> -        except socket.timeout:
> -            server.close()
> -            raise error.TestFail('Timeout elapsed while waiting for
> install to '
> -                                 'finish.')
> -        msg = client.recv(1024)
> -        logging.debug("Received '%s' from %s", msg, addr)
> -        if msg == 'done':
> -            end_time = time.time()
> -            time_elapsed = int(end_time - start_time)
> -            logging.info('Guest reported successful installation
> after %ds '
> -                         '(%d min)', time_elapsed, time_elapsed/60)
> -            server.close()
> -            break
> -        else:
> -            logging.error('Got invalid string from client: %s.' %
> msg)
> +            client.connect(addr)

Before the guest is done installing, connect() should raise a "connection
refused" exception.  It looks like the exception isn't handled here.

> +            msg = client.recv(1024)
> +            if msg == 'done':
> +                break
> +        finally:

Maybe this 'finally' should be an 'except socket.error: pass' or something
similar.

On the other hand, you're saying the patch works, so I'm really not sure.

Here's a theory: because this test is run with user mode networking, qemu
accepts all incoming connections to the redirected ports, but no data is
actually transferred from the guest, so recv() blocks or returns ''.
Even if this works right now, I think it's cleaner to assume that connect()
can raise a socket.error exception.

> +            time.sleep(1)
> +            client.close()
> +        end_time = time.time()
> +        time_elapsed = int(end_time - start_time)
> +
> +    if time_elapsed < install_timeout:
> +        logging.info('Guest reported successful installation after
> %ds '
> +                     '(%d min)', time_elapsed, time_elapsed/60)
> +    else:
> +        raise error.TestFail('Timeout elapsed while waiting for
> install to '
> +                             'finish.')
> diff --git a/client/tests/kvm/tests_base.cfg.sample
> b/client/tests/kvm/tests_base.cfg.sample
> index beae786..c76470d 100644
> --- a/client/tests/kvm/tests_base.cfg.sample
> +++ b/client/tests/kvm/tests_base.cfg.sample
> @@ -70,6 +70,8 @@ variants:
>          floppy = "images/floppy.img"
>          extra_params += " -boot d"
>          nic_mode = user
> +        redirs += " unattended_install"
> +        guest_port_unattended_install = 12323
>  
>      - boot:         install setup unattended_install
>          type = boot
> @@ -337,6 +339,9 @@ variants:
>                  no setup
>                  shell_prompt = "^\[.*\][\#\$]\s*$"
>                  unattended_install:
> +                    pxe_dir = "images/pxeboot"
> +                    pxe_image = "vmlinuz"
> +                    pxe_initrd = "initrd.img"
>                      tftp = "images/tftpboot"
>                      extra_params += " -bootp /pxelinux.0 -boot n"
>                      kernel_args = "ks=floppy nicdelay=60"
> @@ -352,10 +357,12 @@ variants:
>                              steps = Fedora-8-i386.steps
>                          unattended_install:
>                              unattended_file = unattended/Fedora-8.ks
> +                            tftp = "images/f8-32/tftpboot"
> +                            floppy = "images/f8-32floppy.img"
>  
>                      - 8.64:
>                          no setup
> -                        image_name = fc8-64
> +                        image_name = f8-64
>                          cdrom = linux/Fedora-8-x86_64-DVD.iso
>                          md5sum = 2cb231a86709dec413425fd2f8bf5295
>                          md5sum_1m = 145f6414e19492649a56c89f0a45e719
> @@ -363,9 +370,11 @@ variants:
>                              steps = Fedora-8-64.steps
>                          unattended_install:
>                              unattended_file = unattended/Fedora-8.ks
> +                            tftp = "images/f8-64/tftpboot"
> +                            floppy = "images/f8-64floppy.img"

Is this intentional or a typo?
tftp is in a subdir of images/ but floppy is directly under images/.
Looks intentional but I'm just making sure.

>  
>                      - 9.32:
> -                        image_name = fc9-32
> +                        image_name = f9-32
>                          cdrom = linux/Fedora-9-i386-DVD.iso
>                          md5sum = 72601f685ea8c808c303353d8bf4d307
>                          md5sum_1m = f24fa25689e5863f1b99984c6feb787f
> @@ -373,9 +382,11 @@ variants:
>                              steps = Fedora-9-i386.steps
>                          unattended_install:
>                              unattended_file = unattended/Fedora-9.ks
> +                            tftp = "images/f9-32/tftpboot"
> +                            floppy = "images/f9-32floppy.img"
>  
>                      - 9.64:
> -                        image_name = fc9-64
> +                        image_name = f9-64
>                          cdrom = linux/Fedora-9-x86_64-DVD.iso
>                          md5sum = 05b2ebeed273ec54d6f9ed3d61ea4c96
>                          md5sum_1m = 9822ab5097e37e8fe306ef2192727db4
> @@ -383,25 +394,31 @@ variants:
>                              steps = Fedora-9-64.steps
>                          unattended_install:
>                              unattended_file = unattended/Fedora-9.ks
> +                            tftp = "images/f9-64/tftpboot"
> +                            floppy = "images/f9-64floppy.img"
>  
>                      - 10.32:
> -                        image_name = fc10-32
> +                        image_name = f10-32
>                          cdrom = linux/Fedora-10-i386-DVD.iso
>                          md5sum = 27e581edb392728c4a07d00d3fc5ced0
>                          md5sum_1m = bd67c68bdf595e4ba7131ec702159181
>                          unattended_install:
>                              unattended_file =
> unattended/Fedora-10.ks
> +                            tftp = "images/f10-32/tftpboot"
> +                            floppy = "images/f10-32floppy.img"
>  
>                      - 10.64:
> -                        image_name = fc10-64
> +                        image_name = f10-64
>                          cdrom = linux/Fedora-10-x86_64-DVD.iso
>                          sha1sum =
> f1e5ae7db6a1ba227de7294c4112385922388648
>                          md5sum_1m = 732857cbf40c80c34683e874601d982c
>                          unattended_install:
>                              unattended_file =
> unattended/Fedora-10.ks
> +                            tftp = "images/f10-64/tftpboot"
> +                            floppy = "images/f10-64floppy.img"
>  
>                      - 11.32:
> -                        image_name = fc11-32
> +                        image_name = f11-32
>                          cdrom = linux/Fedora-11-i386-DVD.iso
>                          md5sum = e3b1e2d1ba42aa4705fa5f41771b3927
>                          md5sum_1m = dc8ddf90648c247339c721395aa49714
> @@ -409,30 +426,38 @@ variants:
>                              steps = Fedora-11-32.steps
>                          unattended_install:
>                              unattended_file =
> unattended/Fedora-11.ks
> +                            tftp = "images/f11-32/tftpboot"
> +                            floppy = "images/f11-32floppy.img"
>  
>                      - 11.64:
> -                        image_name = fc11-64
> +                        image_name = f11-64
>                          cdrom = linux/Fedora-11-x86_64-DVD.iso
>                          md5sum = 9d419844adeb93120215fe7505c9bce8
>                          md5sum_1m = 405ee05e2387a2e4328b008d5bcbdd1e
>                          unattended_install:
>                              unattended_file =
> unattended/Fedora-11.ks
> +                            tftp = "images/f11-64/tftpboot"
> +                            floppy = "images/f11-64floppy.img"
>  
>                      - 12.32:
> -                        image_name = fc12-32
> +                        image_name = f12-32
>                          cdrom = linux/Fedora-12-i386-DVD.iso
>                          md5sum = 2c4c1c0d09f2fbcfd8ee6a0c5542eeb2
>                          md5sum_1m = eee935d7f0cf2ef03f6ddce3a2a50050
>                          unattended_install:
>                              unattended_file =
> unattended/Fedora-12.ks
> +                            tftp = "images/f12-32/tftpboot"
> +                            floppy = "images/f12-32floppy.img"
>  
>                      - 12.64:
> -                        image_name = fc12-64
> +                        image_name = f12-64
>                          cdrom = linux/Fedora-12-x86_64-DVD.iso
>                          md5sum = 6dd31e292cc2eb1140544e9b1ba61c56
>                          md5sum_1m = 514efbd7698b55ff6768c8605438bfc5
>                          unattended_install:
>                              unattended_file =
> unattended/Fedora-12.ks
> +                            tftp = "images/f12-64/tftpboot"
> +                            floppy = "images/f12-64floppy.img"
>  
>              - DSL-4.2.5:
>                  no setup dbench bonnie linux_s3
> @@ -517,6 +542,9 @@ variants:
>                  block_hotplug:
>                      modprobe_module = acpiphp
>                  unattended_install:
> +                    pxe_dir = "images/pxeboot"
> +                    pxe_image = "vmlinuz"
> +                    pxe_initrd = "initrd.img"
>                      tftp = "images/tftpboot"
>                      extra_params += " -bootp /pxelinux.0 -boot n"
>                      kernel_args = "ks=floppy nicdelay=60"
> @@ -533,6 +561,8 @@ variants:
>                              steps=RHEL-3.9-i386.steps
>                          unattended_install:
>                              unattended_file =
> unattended/RHEL-3-series.ks
> +                            tftp = "images/rhel39-32/tftpboot"
> +                            floppy = "images/rhel39-32floppy.img"
>  
>                      - 3.9.x86_64:
>                          no setup autotest linux_s3
> @@ -545,6 +575,8 @@ variants:
>                              steps=RHEL-3.9-x86_64.steps
>                          unattended_install:
>                              unattended_file =
> unattended/RHEL-3-series.ks
> +                            tftp = "images/rhel39-64/tftpboot"
> +                            floppy = "images/rhel39-64floppy.img"
>  
>                      - 4.7.i386:
>                          no setup autotest
> @@ -556,6 +588,8 @@ variants:
>                              steps=RHEL-4.7-i386.steps
>                          unattended_install:
>                              unattended_file =
> unattended/RHEL-4-series.ks
> +                            tftp = "images/rhel47-32/tftpboot"
> +                            floppy = "images/rhel47-32floppy.img"
>  
>                      - 4.7.x86_64:
>                          no setup autotest
> @@ -567,6 +601,8 @@ variants:
>                              steps=RHEL-4.7-x86_64.steps
>                          unattended_install:
>                              unattended_file =
> unattended/RHEL-4-series.ks
> +                            tftp = "images/rhel47-64/tftpboot"
> +                            floppy = "images/rhel47-64floppy.img"
>  
>                      - 4.8.i386:
>                          no setup autotest
> @@ -576,6 +612,8 @@ variants:
>                          md5sum_1m = 969c197402b9058f28a278c1f807d15b
>                          unattended_install:
>                              unattended_file =
> unattended/RHEL-4-series.ks
> +                            tftp = "images/rhel48-32/tftpboot"
> +                            floppy = "images/rhel48-32floppy.img"
>  
>                      - 4.8.x86_64:
>                          no setup autotest
> @@ -585,6 +623,8 @@ variants:
>                          md5sum_1m = b11ac0ef7fd345ad712966972db63886
>                          unattended_install:
>                              unattended_file =
> unattended/RHEL-4-series.ks
> +                            tftp = "images/rhel48-64/tftpboot"
> +                            floppy = "images/rhel48-64floppy.img"
>  
>                      - 5.3.i386:
>                          no setup
> @@ -596,6 +636,8 @@ variants:
>                              steps=RHEL-5.3-i386.steps
>                          unattended_install:
>                              unattended_file =
> unattended/RHEL-5-series.ks
> +                            tftp = "images/rhel53-32/tftpboot"
> +                            floppy = "images/rhel53-32floppy.img"
>  
>                      - 5.3.x86_64:
>                          no setup
> @@ -607,6 +649,8 @@ variants:
>                              steps=RHEL-5.3-x86_64.steps
>                          unattended_install:
>                              unattended_file =
> unattended/RHEL-5-series.ks
> +                            tftp = "images/rhel53-64/tftpboot"
> +                            floppy = "images/rhel53-64floppy.img"
>  
>                      - 5.4.i386:
>                          no setup
> @@ -616,6 +660,8 @@ variants:
>                          md5sum_1m = 0dbeb8f58d213752d8c029e8601abfbb
>                          unattended_install:
>                              unattended_file =
> unattended/RHEL-5-series.ks
> +                            tftp = "images/rhel54-32/tftpboot"
> +                            floppy = "images/rhel54-32floppy.img"
>  
>                      - 5.4.x86_64:
>                          no setup
> @@ -625,6 +671,8 @@ variants:
>                          md5sum_1m = 3e74112003e88a966754849dbb8f5c3f
>                          unattended_install:
>                              unattended_file =
> unattended/RHEL-5-series.ks
> +                            tftp = "images/rhel54-64/tftpboot"
> +                            floppy = "images/rhel54-64floppy.img"
>  
>      # Windows section
>      - @Windows:
> diff --git a/client/tests/kvm/unattended/Fedora-10.ks
> b/client/tests/kvm/unattended/Fedora-10.ks
> index 41bb391..61e59d7 100644
> --- a/client/tests/kvm/unattended/Fedora-10.ks
> +++ b/client/tests/kvm/unattended/Fedora-10.ks
> @@ -28,10 +28,10 @@ os.system('dhclient')
>  os.system('chkconfig sshd on')
>  os.system('iptables -F')
>  os.system('echo 0 > /selinux/enforce')
> -port = 12323
> -buf = 1024
> -addr = ('10.0.2.2', port)
> -client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> -client.connect(addr)
> -client.sendto('done', addr)
> +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> +server.bind(('', 12323))
> +server.listen(1)
> +(client, addr) = server.accept()
> +client.send("done")
>  client.close()
> +
> diff --git a/client/tests/kvm/unattended/Fedora-11.ks
> b/client/tests/kvm/unattended/Fedora-11.ks
> index 65e42c3..0be7d06 100644
> --- a/client/tests/kvm/unattended/Fedora-11.ks
> +++ b/client/tests/kvm/unattended/Fedora-11.ks
> @@ -28,11 +28,10 @@ os.system('dhclient')
>  os.system('chkconfig sshd on')
>  os.system('iptables -F')
>  os.system('echo 0 > /selinux/enforce')
> -port = 12323
> -buf = 1024
> -addr = ('10.0.2.2', port)
> -client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> -client.connect(addr)
> -client.sendto('done', addr)
> +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> +server.bind(('', 12323))
> +server.listen(1)
> +(client, addr) = server.accept()
> +client.send("done")
>  client.close()
>  %end
> diff --git a/client/tests/kvm/unattended/Fedora-12.ks
> b/client/tests/kvm/unattended/Fedora-12.ks
> index 65e42c3..0be7d06 100644
> --- a/client/tests/kvm/unattended/Fedora-12.ks
> +++ b/client/tests/kvm/unattended/Fedora-12.ks
> @@ -28,11 +28,10 @@ os.system('dhclient')
>  os.system('chkconfig sshd on')
>  os.system('iptables -F')
>  os.system('echo 0 > /selinux/enforce')
> -port = 12323
> -buf = 1024
> -addr = ('10.0.2.2', port)
> -client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> -client.connect(addr)
> -client.sendto('done', addr)
> +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> +server.bind(('', 12323))
> +server.listen(1)
> +(client, addr) = server.accept()
> +client.send("done")
>  client.close()
>  %end
> diff --git a/client/tests/kvm/unattended/Fedora-8.ks
> b/client/tests/kvm/unattended/Fedora-8.ks
> index 41bb391..f4a872d 100644
> --- a/client/tests/kvm/unattended/Fedora-8.ks
> +++ b/client/tests/kvm/unattended/Fedora-8.ks
> @@ -28,10 +28,9 @@ os.system('dhclient')
>  os.system('chkconfig sshd on')
>  os.system('iptables -F')
>  os.system('echo 0 > /selinux/enforce')
> -port = 12323
> -buf = 1024
> -addr = ('10.0.2.2', port)
> -client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> -client.connect(addr)
> -client.sendto('done', addr)
> +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> +server.bind(('', 12323))
> +server.listen(1)
> +(client, addr) = server.accept()
> +client.send("done")
>  client.close()
> diff --git a/client/tests/kvm/unattended/Fedora-9.ks
> b/client/tests/kvm/unattended/Fedora-9.ks
> index 41bb391..f4a872d 100644
> --- a/client/tests/kvm/unattended/Fedora-9.ks
> +++ b/client/tests/kvm/unattended/Fedora-9.ks
> @@ -28,10 +28,9 @@ os.system('dhclient')
>  os.system('chkconfig sshd on')
>  os.system('iptables -F')
>  os.system('echo 0 > /selinux/enforce')
> -port = 12323
> -buf = 1024
> -addr = ('10.0.2.2', port)
> -client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> -client.connect(addr)
> -client.sendto('done', addr)
> +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> +server.bind(('', 12323))
> +server.listen(1)
> +(client, addr) = server.accept()
> +client.send("done")
>  client.close()
> diff --git a/client/tests/kvm/unattended/RHEL-3-series.ks
> b/client/tests/kvm/unattended/RHEL-3-series.ks
> index 2fcc96e..ad748cb 100644
> --- a/client/tests/kvm/unattended/RHEL-3-series.ks
> +++ b/client/tests/kvm/unattended/RHEL-3-series.ks
> @@ -27,10 +27,10 @@ import socket, os
>  os.system('dhclient')
>  os.system('chkconfig sshd on')
>  os.system('iptables -F')
> -port = 12323
> -buf = 1024
> -addr = ('10.0.2.2', port)
> -client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> -client.connect(addr)
> -client.sendto('done', addr)
> +os.system('echo 0 > /selinux/enforce')
> +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> +server.bind(('', 12323))
> +server.listen(1)
> +(client, addr) = server.accept()
> +client.send("done")
>  client.close()
> diff --git a/client/tests/kvm/unattended/RHEL-4-series.ks
> b/client/tests/kvm/unattended/RHEL-4-series.ks
> index 233c98f..ce4a430 100644
> --- a/client/tests/kvm/unattended/RHEL-4-series.ks
> +++ b/client/tests/kvm/unattended/RHEL-4-series.ks
> @@ -28,10 +28,9 @@ os.system('dhclient')
>  os.system('chkconfig sshd on')
>  os.system('iptables -F')
>  os.system('echo 0 > /selinux/enforce')
> -port = 12323
> -buf = 1024
> -addr = ('10.0.2.2', port)
> -client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> -client.connect(addr)
> -client.sendto('done', addr)
> +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> +server.bind(('', 12323))
> +server.listen(1)
> +(client, addr) = server.accept()
> +client.send("done")
>  client.close()
> diff --git a/client/tests/kvm/unattended/RHEL-5-series.ks
> b/client/tests/kvm/unattended/RHEL-5-series.ks
> index 41bb391..f4a872d 100644
> --- a/client/tests/kvm/unattended/RHEL-5-series.ks
> +++ b/client/tests/kvm/unattended/RHEL-5-series.ks
> @@ -28,10 +28,9 @@ os.system('dhclient')
>  os.system('chkconfig sshd on')
>  os.system('iptables -F')
>  os.system('echo 0 > /selinux/enforce')
> -port = 12323
> -buf = 1024
> -addr = ('10.0.2.2', port)
> -client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> -client.connect(addr)
> -client.sendto('done', addr)
> +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> +server.bind(('', 12323))
> +server.listen(1)
> +(client, addr) = server.accept()
> +client.send("done")
>  client.close()
> diff --git a/client/tests/kvm/unattended/Sles11-64-autoinst.xml
> b/client/tests/kvm/unattended/Sles11-64-autoinst.xml
> new file mode 100644
> index 0000000..93e5685
> --- /dev/null
> +++ b/client/tests/kvm/unattended/Sles11-64-autoinst.xml
> @@ -0,0 +1,898 @@
> +<?xml version="1.0"?>
> +<!DOCTYPE profile>
> +<profile xmlns="http://www.suse.com/1.0/yast2ns";
> xmlns:config="http://www.suse.com/1.0/configns";>
> +  <add-on/>
> +  <bootloader>
> +    <global>
> +      <activate>true</activate>
> +      <boot_boot>false</boot_boot>
> +      <boot_extended>false</boot_extended>
> +      <boot_mbr>false</boot_mbr>
> +      <boot_root>true</boot_root>
> +      <debug>false</debug>
> +      <default>SUSE Linux Enterprise Server 11 -
> 2.6.27.19-5</default>
> +      <generic_mbr>true</generic_mbr>
> +      <hiddenmenu>false</hiddenmenu>
> +      <lines_cache_id>2</lines_cache_id>
> +      <timeout config:type="integer">8</timeout>
> +      <trusted_grub>false</trusted_grub>
> +    </global>
> +    <initrd_modules config:type="list">
> +      <initrd_module>
> +        <module>processor</module>
> +      </initrd_module>
> +      <initrd_module>
> +        <module>thermal</module>
> +      </initrd_module>
> +      <initrd_module>
> +        <module>ata_piix</module>
> +      </initrd_module>
> +      <initrd_module>
> +        <module>ata_generic</module>
> +      </initrd_module>
> +      <initrd_module>
> +        <module>piix</module>
> +      </initrd_module>
> +      <initrd_module>
> +        <module>ide_pci_generic</module>
> +      </initrd_module>
> +      <initrd_module>
> +        <module>fan</module>
> +      </initrd_module>
> +      <initrd_module>
> +        <module>jbd</module>
> +      </initrd_module>
> +      <initrd_module>
> +        <module>ext3</module>
> +      </initrd_module>
> +      <initrd_module>
> +        <module>edd</module>
> +      </initrd_module>
> +    </initrd_modules>
> +    <loader_type>grub</loader_type>
> +    <sections config:type="list"/>
> +  </bootloader>
> +  <ca_mgm>
> +    <CAName>YaST_Default_CA</CAName>
> +    <ca_commonName>YaST Default CA (linux-h1i4)</ca_commonName>
> +    <country>US</country>
> +    <password>ENTER PASSWORD HERE</password>
> +    <server_commonName>linux-h1i4.site</server_commonName>
> +    <server_email>postmaster@site</server_email>
> +    <takeLocalServerName
> config:type="boolean">false</takeLocalServerName>
> +  </ca_mgm>
> +  <deploy_image>
> +    <image_installation
> config:type="boolean">false</image_installation>
> +  </deploy_image>
> +  <firewall>
> +    <FW_ALLOW_FW_BROADCAST_DMZ>no</FW_ALLOW_FW_BROADCAST_DMZ>
> +    <FW_ALLOW_FW_BROADCAST_EXT>no</FW_ALLOW_FW_BROADCAST_EXT>
> +    <FW_ALLOW_FW_BROADCAST_INT>no</FW_ALLOW_FW_BROADCAST_INT>
> +    <FW_CONFIGURATIONS_EXT>sshd</FW_CONFIGURATIONS_EXT>
> +    <FW_DEV_DMZ></FW_DEV_DMZ>
> +    <FW_DEV_EXT>any</FW_DEV_EXT>
> +    <FW_DEV_INT></FW_DEV_INT>
> +    <FW_IGNORE_FW_BROADCAST_DMZ>no</FW_IGNORE_FW_BROADCAST_DMZ>
> +    <FW_IGNORE_FW_BROADCAST_EXT>yes</FW_IGNORE_FW_BROADCAST_EXT>
> +    <FW_IGNORE_FW_BROADCAST_INT>no</FW_IGNORE_FW_BROADCAST_INT>
> +    <FW_IPSEC_TRUST>no</FW_IPSEC_TRUST>
> +    <FW_LOAD_MODULES>nf_conntrack_netbios_ns</FW_LOAD_MODULES>
> +    <FW_LOG_ACCEPT_ALL>no</FW_LOG_ACCEPT_ALL>
> +    <FW_LOG_ACCEPT_CRIT>yes</FW_LOG_ACCEPT_CRIT>
> +    <FW_LOG_DROP_ALL>no</FW_LOG_DROP_ALL>
> +    <FW_LOG_DROP_CRIT>yes</FW_LOG_DROP_CRIT>
> +    <FW_MASQUERADE>no</FW_MASQUERADE>
> +    <FW_PROTECT_FROM_INT>no</FW_PROTECT_FROM_INT>
> +    <FW_ROUTE>no</FW_ROUTE>
> +    <enable_firewall config:type="boolean">false</enable_firewall>
> +    <start_firewall config:type="boolean">false</start_firewall>
> +  </firewall>
> +  <general>
> +    <ask-list config:type="list"/>
> +    <mode>
> +      <confirm config:type="boolean">false</confirm>
> +    </mode>
> +    <mouse>
> +      <id>none</id>
> +    </mouse>
> +    <proposals config:type="list"/>
> +    <signature-handling>
> +      <accept_file_without_checksum
> config:type="boolean">true</accept_file_without_checksum>
> +      <accept_non_trusted_gpg_key
> config:type="boolean">true</accept_non_trusted_gpg_key>
> +      <accept_unknown_gpg_key
> config:type="boolean">true</accept_unknown_gpg_key>
> +      <accept_unsigned_file
> config:type="boolean">true</accept_unsigned_file>
> +      <accept_verification_failed
> config:type="boolean">false</accept_verification_failed>
> +      <import_gpg_key config:type="boolean">true</import_gpg_key>
> +    </signature-handling>
> +  </general>
> +  <groups config:type="list">
> +    <group>
> +      <gid>1000</gid>
> +     
> <group_password>$1$9ibtMhyS$uY16P2nxSWgejk4Ffz/LB0</group_password>
> +      <groupname>users</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>19</gid>
> +      <group_password>x</group_password>
> +      <groupname>floppy</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>1</gid>
> +      <group_password>x</group_password>
> +      <groupname>bin</groupname>
> +      <userlist>daemon</userlist>
> +    </group>
> +    <group>
> +      <gid>41</gid>
> +      <group_password>x</group_password>
> +      <groupname>xok</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>65533</gid>
> +      <group_password>x</group_password>
> +      <groupname>nobody</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>43</gid>
> +      <group_password>x</group_password>
> +      <groupname>modem</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>5</gid>
> +      <group_password>x</group_password>
> +      <groupname>tty</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>7</gid>
> +      <group_password>x</group_password>
> +      <groupname>lp</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>104</gid>
> +      <group_password>!</group_password>
> +      <groupname>uuidd</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>51</gid>
> +      <group_password>!</group_password>
> +      <groupname>postfix</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>111</gid>
> +      <group_password>!</group_password>
> +      <groupname>gdm</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>65534</gid>
> +      <group_password>x</group_password>
> +      <groupname>nogroup</groupname>
> +      <userlist>nobody</userlist>
> +    </group>
> +    <group>
> +      <gid>101</gid>
> +      <group_password>!</group_password>
> +      <groupname>messagebus</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>59</gid>
> +      <group_password>!</group_password>
> +      <groupname>maildrop</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>33</gid>
> +      <group_password>x</group_password>
> +      <groupname>video</groupname>
> +      <userlist>linux</userlist>
> +    </group>
> +    <group>
> +      <gid>3</gid>
> +      <group_password>x</group_password>
> +      <groupname>sys</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>15</gid>
> +      <group_password>x</group_password>
> +      <groupname>shadow</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>20</gid>
> +      <group_password>x</group_password>
> +      <groupname>cdrom</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>21</gid>
> +      <group_password>x</group_password>
> +      <groupname>console</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>42</gid>
> +      <group_password>x</group_password>
> +      <groupname>trusted</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>102</gid>
> +      <group_password>!</group_password>
> +      <groupname>haldaemon</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>16</gid>
> +      <group_password>x</group_password>
> +      <groupname>dialout</groupname>
> +      <userlist>linux</userlist>
> +    </group>
> +    <group>
> +      <gid>106</gid>
> +      <group_password>!</group_password>
> +      <groupname>polkituser</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>10</gid>
> +      <group_password>x</group_password>
> +      <groupname>wheel</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>107</gid>
> +      <group_password>!</group_password>
> +      <groupname>pulse</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>8</gid>
> +      <group_password>x</group_password>
> +      <groupname>www</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>40</gid>
> +      <group_password>x</group_password>
> +      <groupname>games</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>6</gid>
> +      <group_password>x</group_password>
> +      <groupname>disk</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>17</gid>
> +      <group_password>x</group_password>
> +      <groupname>audio</groupname>
> +      <userlist>pulse</userlist>
> +    </group>
> +    <group>
> +      <gid>110</gid>
> +      <group_password>!</group_password>
> +      <groupname>suse-ncc</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>49</gid>
> +      <group_password>x</group_password>
> +      <groupname>ftp</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>25</gid>
> +      <group_password>!</group_password>
> +      <groupname>at</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>9</gid>
> +      <group_password>x</group_password>
> +      <groupname>kmem</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>32</gid>
> +      <group_password>x</group_password>
> +      <groupname>public</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>12</gid>
> +      <group_password>x</group_password>
> +      <groupname>mail</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>0</gid>
> +      <group_password>x</group_password>
> +      <groupname>root</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>2</gid>
> +      <group_password>x</group_password>
> +      <groupname>daemon</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>103</gid>
> +      <group_password>!</group_password>
> +      <groupname>sfcb</groupname>
> +      <userlist>root</userlist>
> +    </group>
> +    <group>
> +      <gid>105</gid>
> +      <group_password>!</group_password>
> +      <groupname>ntp</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>14</gid>
> +      <group_password>x</group_password>
> +      <groupname>uucp</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>109</gid>
> +      <group_password>!</group_password>
> +      <groupname>pulse-access</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>71</gid>
> +      <group_password>!</group_password>
> +      <groupname>ntadmin</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>62</gid>
> +      <group_password>x</group_password>
> +      <groupname>man</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>108</gid>
> +      <group_password>!</group_password>
> +      <groupname>pulse-rt</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>22</gid>
> +      <group_password>x</group_password>
> +      <groupname>utmp</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>13</gid>
> +      <group_password>x</group_password>
> +      <groupname>news</groupname>
> +      <userlist></userlist>
> +    </group>
> +    <group>
> +      <gid>65</gid>
> +      <group_password>!</group_password>
> +      <groupname>sshd</groupname>
> +      <userlist></userlist>
> +    </group>
> +  </groups>
> +  <host>
> +    <hosts config:type="list">
> +      <hosts_entry>
> +        <host_address>127.0.0.1</host_address>
> +        <names config:type="list">
> +          <name>localhost</name>
> +        </names>
> +      </hosts_entry>
> +      <hosts_entry>
> +        <host_address>::1</host_address>
> +        <names config:type="list">
> +          <name>localhost ipv6-localhost ipv6-loopback</name>
> +        </names>
> +      </hosts_entry>
> +      <hosts_entry>
> +        <host_address>fe00::0</host_address>
> +        <names config:type="list">
> +          <name>ipv6-localnet</name>
> +        </names>
> +      </hosts_entry>
> +      <hosts_entry>
> +        <host_address>ff00::0</host_address>
> +        <names config:type="list">
> +          <name>ipv6-mcastprefix</name>
> +        </names>
> +      </hosts_entry>
> +      <hosts_entry>
> +        <host_address>ff02::1</host_address>
> +        <names config:type="list">
> +          <name>ipv6-allnodes</name>
> +        </names>
> +      </hosts_entry>
> +      <hosts_entry>
> +        <host_address>ff02::2</host_address>
> +        <names config:type="list">
> +          <name>ipv6-allrouters</name>
> +        </names>
> +      </hosts_entry>
> +      <hosts_entry>
> +        <host_address>ff02::3</host_address>
> +        <names config:type="list">
> +          <name>ipv6-allhosts</name>
> +        </names>
> +      </hosts_entry>
> +    </hosts>
> +  </host>
> +  <iscsi-client>
> +    <version>1.0</version>
> +  </iscsi-client>
> +  <keyboard>
> +    <keymap>english-us</keymap>
> +  </keyboard>
> +  <language>
> +    <language>en_US</language>
> +    <languages>en_US</languages>
> +  </language>
> +  <ldap>
> +    <base_config_dn></base_config_dn>
> +    <bind_dn></bind_dn>
> +    <create_ldap config:type="boolean">false</create_ldap>
> +    <file_server config:type="boolean">false</file_server>
> +    <ldap_domain>dc=example,dc=com</ldap_domain>
> +    <ldap_server>127.0.0.1</ldap_server>
> +    <ldap_tls config:type="boolean">true</ldap_tls>
> +    <ldap_v2 config:type="boolean">false</ldap_v2>
> +    <login_enabled config:type="boolean">true</login_enabled>
> +    <member_attribute>member</member_attribute>
> +    <nss_base_group></nss_base_group>
> +    <nss_base_passwd></nss_base_passwd>
> +    <nss_base_shadow></nss_base_shadow>
> +    <pam_password>exop</pam_password>
> +    <start_autofs config:type="boolean">false</start_autofs>
> +    <start_ldap config:type="boolean">false</start_ldap>
> +  </ldap>
> +  <login_settings/>
> +  <networking>
> +    <dns>
> +      <dhcp_hostname config:type="boolean">true</dhcp_hostname>
> +      <resolv_conf_policy>auto</resolv_conf_policy>
> +    </dns>
> +    <interfaces config:type="list">
> +      <interface>
> +        <bootproto>dhcp</bootproto>
> +        <device>eth0</device>
> +        <startmode>auto</startmode>
> +        <usercontrol>no</usercontrol>
> +      </interface>
> +    </interfaces>
> +    <managed config:type="boolean">false</managed>
> +    <routing>
> +      <ip_forward config:type="boolean">false</ip_forward>
> +    </routing>
> +  </networking>
> +  <nis>
> +    <netconfig_policy>auto</netconfig_policy>
> +    <nis_broadcast config:type="boolean">false</nis_broadcast>
> +    <nis_broken_server
> config:type="boolean">false</nis_broken_server>
> +    <nis_local_only config:type="boolean">false</nis_local_only>
> +    <start_autofs config:type="boolean">false</start_autofs>
> +    <start_nis config:type="boolean">false</start_nis>
> +  </nis>
> +  <partitioning config:type="list">
> +    <drive>
> +      <initialize config:type="boolean">true</initialize>
> +      <partitions config:type="list"/>
> +      <pesize></pesize>
> +      <type config:type="symbol">CT_DISK</type>
> +      <use>all</use>
> +    </drive>
> +  </partitioning>
> +  <proxy>
> +    <enabled config:type="boolean">false</enabled>
> +    <ftp_proxy></ftp_proxy>
> +    <http_proxy></http_proxy>
> +    <https_proxy></https_proxy>
> +    <no_proxy>localhost, 127.0.0.1</no_proxy>
> +    <proxy_password></proxy_password>
> +    <proxy_user></proxy_user>
> +  </proxy>
> +  <report>
> +    <errors>
> +      <log config:type="boolean">true</log>
> +      <show config:type="boolean">true</show>
> +      <timeout config:type="integer">10</timeout>
> +    </errors>
> +    <messages>
> +      <log config:type="boolean">true</log>
> +      <show config:type="boolean">true</show>
> +      <timeout config:type="integer">10</timeout>
> +    </messages>
> +    <warnings>
> +      <log config:type="boolean">true</log>
> +      <show config:type="boolean">true</show>
> +      <timeout config:type="integer">10</timeout>
> +    </warnings>
> +    <yesno_messages>
> +      <log config:type="boolean">true</log>
> +      <show config:type="boolean">true</show>
> +      <timeout config:type="integer">10</timeout>
> +    </yesno_messages>
> +  </report>
> +  <runlevel>
> +    <default>3</default>
> +  </runlevel>
> +  <scripts>
> +    <post-scripts config:type="list">
> +      <script>
> +        <debug config:type="boolean">true</debug>
> +        <feedback config:type="boolean">false</feedback>
> +        <filename>server</filename>
> +        <interpreter>python</interpreter>
> +        <location></location>
> +        <network_needed config:type="boolean">true</network_needed>
> +        <source><![CDATA[import socket, os
> +os.system('dhclient')
> +os.system('iptables -F')
> +server=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> +server.bind(('',12323))
> +server.listen(1)
> +(client, addr) = server.accept()
> +client.send("done")
> +client.close()
> +]]></source>
> +      </script>
> +    </post-scripts>
> +  </scripts>
> +  <software>
> +    <packages config:type="list">
> +      <package>dhcp-client</package>
> +    </packages>
> +    <patterns config:type="list">
> +      <pattern>Basis-Devel</pattern>
> +      <pattern>base</pattern>
> +      <pattern>laptop</pattern>
> +      <pattern>Minimal</pattern>
> +    </patterns>
> +  </software>
> +  <timezone>
> +    <hwclock>UTC</hwclock>
> +    <timezone>America/New_York</timezone>
> +  </timezone>
> +  <user_defaults>
> +    <group>100</group>
> +    <groups>video,dialout</groups>
> +    <home>/home</home>
> +    <inactive>-1</inactive>
> +    <shell>/bin/bash</shell>
> +    <skel>/etc/skel</skel>
> +  </user_defaults>
> +  <users config:type="list">
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>linux</fullname>
> +      <gid>100</gid>
> +      <home>/home/linux</home>
> +      <password_settings>
> +        <max>99999</max>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/bin/bash</shell>
> +      <uid>1000</uid>
> +     
> <user_password>$2a$05$FAAcDkjOVQxuDKvppCzcROelTVQeDSr9FIKSwP02wrg7SBulFkeXK</user_password>
> +      <username>linux</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>Games account</fullname>
> +      <gid>100</gid>
> +      <home>/var/games</home>
> +      <shell>/bin/bash</shell>
> +      <uid>12</uid>
> +      <user_password>*</user_password>
> +      <username>games</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>bin</fullname>
> +      <gid>1</gid>
> +      <home>/bin</home>
> +      <shell>/bin/bash</shell>
> +      <uid>1</uid>
> +      <user_password>*</user_password>
> +      <username>bin</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>nobody</fullname>
> +      <gid>65533</gid>
> +      <home>/var/lib/nobody</home>
> +      <shell>/bin/bash</shell>
> +      <uid>65534</uid>
> +      <user_password>*</user_password>
> +      <username>nobody</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>Printing daemon</fullname>
> +      <gid>7</gid>
> +      <home>/var/spool/lpd</home>
> +      <shell>/bin/bash</shell>
> +      <uid>4</uid>
> +      <user_password>*</user_password>
> +      <username>lp</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>User for uuidd</fullname>
> +      <gid>104</gid>
> +      <home>/var/run/uuidd</home>
> +      <password_settings>
> +        <max>99999</max>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/bin/false</shell>
> +      <uid>102</uid>
> +      <user_password>*</user_password>
> +      <username>uuidd</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>Postfix Daemon</fullname>
> +      <gid>51</gid>
> +      <home>/var/spool/postfix</home>
> +      <password_settings>
> +        <max>99999</max>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/bin/false</shell>
> +      <uid>51</uid>
> +      <user_password>*</user_password>
> +      <username>postfix</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>Novell Customer Center User</fullname>
> +      <gid>110</gid>
> +      <home>/var/lib/YaST2/suse-ncc-fakehome</home>
> +      <password_settings>
> +        <max>99999</max>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/bin/bash</shell>
> +      <uid>105</uid>
> +      <user_password>*</user_password>
> +      <username>suse-ncc</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>FTP account</fullname>
> +      <gid>49</gid>
> +      <home>/srv/ftp</home>
> +      <shell>/bin/bash</shell>
> +      <uid>40</uid>
> +      <user_password>*</user_password>
> +      <username>ftp</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>Gnome Display Manager daemon</fullname>
> +      <gid>111</gid>
> +      <home>/var/lib/gdm</home>
> +      <password_settings>
> +        <max>99999</max>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/bin/false</shell>
> +      <uid>106</uid>
> +      <user_password>*</user_password>
> +      <username>gdm</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>Batch jobs daemon</fullname>
> +      <gid>25</gid>
> +      <home>/var/spool/atjobs</home>
> +      <password_settings>
> +        <max>99999</max>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/bin/bash</shell>
> +      <uid>25</uid>
> +      <user_password>*</user_password>
> +      <username>at</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>root</fullname>
> +      <gid>0</gid>
> +      <home>/root</home>
> +      <shell>/bin/bash</shell>
> +      <uid>0</uid>
> +     
> <user_password>$2a$05$6EDh/ymzfFidFVZ9GxPpR.QLaswYgGBxlmCoy0WUo42stJDGcPcxK</user_password>
> +      <username>root</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>Mailer daemon</fullname>
> +      <gid>12</gid>
> +      <home>/var/spool/clientmqueue</home>
> +      <shell>/bin/false</shell>
> +      <uid>8</uid>
> +      <user_password>*</user_password>
> +      <username>mail</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>Daemon</fullname>
> +      <gid>2</gid>
> +      <home>/sbin</home>
> +      <shell>/bin/bash</shell>
> +      <uid>2</uid>
> +      <user_password>*</user_password>
> +      <username>daemon</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>NTP daemon</fullname>
> +      <gid>105</gid>
> +      <home>/var/lib/ntp</home>
> +      <password_settings>
> +        <max>99999</max>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/bin/false</shell>
> +      <uid>74</uid>
> +      <user_password>*</user_password>
> +      <username>ntp</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>Unix-to-Unix CoPy system</fullname>
> +      <gid>14</gid>
> +      <home>/etc/uucp</home>
> +      <shell>/bin/bash</shell>
> +      <uid>10</uid>
> +      <user_password>*</user_password>
> +      <username>uucp</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>User for D-Bus</fullname>
> +      <gid>101</gid>
> +      <home>/var/run/dbus</home>
> +      <password_settings>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/bin/false</shell>
> +      <uid>100</uid>
> +      <user_password>*</user_password>
> +      <username>messagebus</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>User for haldaemon</fullname>
> +      <gid>102</gid>
> +      <home>/var/run/hald</home>
> +      <password_settings>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/bin/false</shell>
> +      <uid>101</uid>
> +      <user_password>*</user_password>
> +      <username>haldaemon</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>WWW daemon apache</fullname>
> +      <gid>8</gid>
> +      <home>/var/lib/wwwrun</home>
> +      <shell>/bin/false</shell>
> +      <uid>30</uid>
> +      <user_password>*</user_password>
> +      <username>wwwrun</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>Manual pages viewer</fullname>
> +      <gid>62</gid>
> +      <home>/var/cache/man</home>
> +      <shell>/bin/bash</shell>
> +      <uid>13</uid>
> +      <user_password>*</user_password>
> +      <username>man</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>PolicyKit</fullname>
> +      <gid>106</gid>
> +      <home>/var/run/PolicyKit</home>
> +      <password_settings>
> +        <max>99999</max>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/bin/false</shell>
> +      <uid>103</uid>
> +      <user_password>*</user_password>
> +      <username>polkituser</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>News system</fullname>
> +      <gid>13</gid>
> +      <home>/etc/news</home>
> +      <shell>/bin/bash</shell>
> +      <uid>9</uid>
> +      <user_password>*</user_password>
> +      <username>news</username>
> +    </user>
> +    <user>
> +      <fullname>SSH daemon</fullname>
> +      <gid>65</gid>
> +      <home>/var/lib/sshd</home>
> +      <password_settings>
> +        <flag></flag>
> +        <inact>-1</inact>
> +        <max>99999</max>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/bin/false</shell>
> +      <uid>71</uid>
> +      <username>sshd</username>
> +    </user>
> +    <user>
> +      <encrypted config:type="boolean">true</encrypted>
> +      <fullname>PulseAudio daemon</fullname>
> +      <gid>107</gid>
> +      <home>/var/lib/pulseaudio</home>
> +      <password_settings>
> +        <max>99999</max>
> +        <min>0</min>
> +        <warn>7</warn>
> +      </password_settings>
> +      <shell>/sbin/nologin</shell>
> +      <uid>104</uid>
> +      <user_password>*</user_password>
> +      <username>pulse</username>
> +    </user>
> +  </users>
> +  <x11>
> +    <color_depth config:type="integer">16</color_depth>
> +    <display_manager>gdm</display_manager>
> +    <enable_3d config:type="boolean">false</enable_3d>
> +    <monitor>
> +      <display>
> +        <max_hsync config:type="integer">38</max_hsync>
> +        <max_vsync config:type="integer">60</max_vsync>
> +        <min_hsync config:type="integer">31</min_hsync>
> +        <min_vsync config:type="integer">50</min_vsync>
> +      </display>
> +      <monitor_device>800X600@60HZ</monitor_device>
> +      <monitor_vendor>--&gt; VESA</monitor_vendor>
> +    </monitor>
> +    <resolution>800x600 (SVGA)</resolution>
> +    <window_manager>gnome</window_manager>
> +  </x11>
> +</profile>
> diff --git a/client/tests/kvm/unattended/win2003-32.sif
> b/client/tests/kvm/unattended/win2003-32.sif
> index 85d4694..f58b0b0 100644
> --- a/client/tests/kvm/unattended/win2003-32.sif
> +++ b/client/tests/kvm/unattended/win2003-32.sif
> @@ -61,4 +61,4 @@
>      Command2="cmd /c net start telnet"
>      Command3="cmd /c E:\setuprss.bat"
>      Command4="cmd /c netsh interface ip set address local dhcp"
> -    Command5="cmd /c ping 10.0.2.2 -n 20 && A:\finish.exe 10.0.2.2"
> +    Command5="cmd /c ping 10.0.2.2 -n 20 && A:\finish.exe"
> diff --git a/client/tests/kvm/unattended/win2003-64.sif
> b/client/tests/kvm/unattended/win2003-64.sif
> index 85d4694..f58b0b0 100644
> --- a/client/tests/kvm/unattended/win2003-64.sif
> +++ b/client/tests/kvm/unattended/win2003-64.sif
> @@ -61,4 +61,4 @@
>      Command2="cmd /c net start telnet"
>      Command3="cmd /c E:\setuprss.bat"
>      Command4="cmd /c netsh interface ip set address local dhcp"
> -    Command5="cmd /c ping 10.0.2.2 -n 20 && A:\finish.exe 10.0.2.2"
> +    Command5="cmd /c ping 10.0.2.2 -n 20 && A:\finish.exe"
> diff --git a/client/tests/kvm/unattended/win2008-32-autounattend.xml
> b/client/tests/kvm/unattended/win2008-32-autounattend.xml
> index e5f244b..c6fafac 100644
> --- a/client/tests/kvm/unattended/win2008-32-autounattend.xml
> +++ b/client/tests/kvm/unattended/win2008-32-autounattend.xml
> @@ -140,7 +140,7 @@
>  				</SynchronousCommand>
>  				<SynchronousCommand wcm:action="add">
>  					<Order>7</Order>
> -					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe 10.0.2.2</CommandLine>
> +					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe</CommandLine>
>  				</SynchronousCommand>
>  			</FirstLogonCommands>
>  			<OOBE>
> diff --git a/client/tests/kvm/unattended/win2008-64-autounattend.xml
> b/client/tests/kvm/unattended/win2008-64-autounattend.xml
> index 68f6fcf..2520a7a 100644
> --- a/client/tests/kvm/unattended/win2008-64-autounattend.xml
> +++ b/client/tests/kvm/unattended/win2008-64-autounattend.xml
> @@ -149,7 +149,7 @@
>  				</SynchronousCommand>
>  				<SynchronousCommand wcm:action="add">
>  					<Order>7</Order>
> -					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe 10.0.2.2</CommandLine>
> +					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe</CommandLine>
>  				</SynchronousCommand>
>  			</FirstLogonCommands>
>  			<OOBE>
> diff --git a/client/tests/kvm/unattended/win2008-r2-autounattend.xml
> b/client/tests/kvm/unattended/win2008-r2-autounattend.xml
> index 68f6fcf..2520a7a 100644
> --- a/client/tests/kvm/unattended/win2008-r2-autounattend.xml
> +++ b/client/tests/kvm/unattended/win2008-r2-autounattend.xml
> @@ -149,7 +149,7 @@
>  				</SynchronousCommand>
>  				<SynchronousCommand wcm:action="add">
>  					<Order>7</Order>
> -					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe 10.0.2.2</CommandLine>
> +					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe</CommandLine>
>  				</SynchronousCommand>
>  			</FirstLogonCommands>
>  			<OOBE>
> diff --git a/client/tests/kvm/unattended/win7-32-autounattend.xml
> b/client/tests/kvm/unattended/win7-32-autounattend.xml
> index e858ce9..c37afb7 100644
> --- a/client/tests/kvm/unattended/win7-32-autounattend.xml
> +++ b/client/tests/kvm/unattended/win7-32-autounattend.xml
> @@ -146,7 +146,7 @@
>  					<Order>6</Order>
>  				</SynchronousCommand>
>  				<SynchronousCommand wcm:action="add">
> -					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe 10.0.2.2</CommandLine>
> +					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe</CommandLine>
>  					<Order>7</Order>
>  				</SynchronousCommand>
>  			</FirstLogonCommands>
> diff --git a/client/tests/kvm/unattended/win7-64-autounattend.xml
> b/client/tests/kvm/unattended/win7-64-autounattend.xml
> index 1bff3c9..ad047d0 100644
> --- a/client/tests/kvm/unattended/win7-64-autounattend.xml
> +++ b/client/tests/kvm/unattended/win7-64-autounattend.xml
> @@ -146,7 +146,7 @@
>  					<Order>6</Order>
>  				</SynchronousCommand>
>  				<SynchronousCommand wcm:action="add">
> -					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe 10.0.2.2</CommandLine>
> +					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe</CommandLine>
>  					<Order>7</Order>
>  				</SynchronousCommand>
>  			</FirstLogonCommands>
> diff --git a/client/tests/kvm/unattended/winvista-32-autounattend.xml
> b/client/tests/kvm/unattended/winvista-32-autounattend.xml
> index 443aec6..297c6e5 100644
> --- a/client/tests/kvm/unattended/winvista-32-autounattend.xml
> +++ b/client/tests/kvm/unattended/winvista-32-autounattend.xml
> @@ -147,7 +147,7 @@
>  				</SynchronousCommand>
>  				<SynchronousCommand wcm:action="add">
>  					<Order>7</Order>
> -					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe 10.0.2.2</CommandLine>
> +					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe</CommandLine>
>  				</SynchronousCommand>
>  			</FirstLogonCommands>
>  		</component>
> diff --git a/client/tests/kvm/unattended/winvista-64-autounattend.xml
> b/client/tests/kvm/unattended/winvista-64-autounattend.xml
> index ec35cbb..71eae87 100644
> --- a/client/tests/kvm/unattended/winvista-64-autounattend.xml
> +++ b/client/tests/kvm/unattended/winvista-64-autounattend.xml
> @@ -148,7 +148,7 @@
>  				</SynchronousCommand>
>  				<SynchronousCommand wcm:action="add">
>  					<Order>7</Order>
> -					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe 10.0.2.2</CommandLine>
> +					<CommandLine>%WINDIR%\System32\cmd /c ping 10.0.2.2 -n 20
> &#38;&#38; A:\finish.exe</CommandLine>
>  				</SynchronousCommand>
>  			</FirstLogonCommands>
>  		</component>
> diff --git a/client/tests/kvm/unattended/winxp32.sif
> b/client/tests/kvm/unattended/winxp32.sif
> index 4711a3d..7562846 100644
> --- a/client/tests/kvm/unattended/winxp32.sif
> +++ b/client/tests/kvm/unattended/winxp32.sif
> @@ -70,4 +70,4 @@
>  [GuiRunOnce]
>     Command0="cmd /c E:\setuprss.bat"
>     Command1="cmd /c netsh interface ip set address local dhcp"
> -   Command2="cmd /c ping 10.0.2.2 -n 20 && A:\finish.exe 10.0.2.2"
> +   Command2="cmd /c ping 10.0.2.2 -n 20 && A:\finish.exe"
> diff --git a/client/tests/kvm/unattended/winxp64.sif
> b/client/tests/kvm/unattended/winxp64.sif
> index 4711a3d..7562846 100644
> --- a/client/tests/kvm/unattended/winxp64.sif
> +++ b/client/tests/kvm/unattended/winxp64.sif
> @@ -70,4 +70,4 @@
>  [GuiRunOnce]
>     Command0="cmd /c E:\setuprss.bat"
>     Command1="cmd /c netsh interface ip set address local dhcp"
> -   Command2="cmd /c ping 10.0.2.2 -n 20 && A:\finish.exe 10.0.2.2"
> +   Command2="cmd /c ping 10.0.2.2 -n 20 && A:\finish.exe"
> -- 
> 1.6.6.1
> 
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux