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

[et-mgmt-tools] [PATCH] First-cut at livecd support in virt-manager



Hey,
	The attached patch demos how we might add livecd support to
virt-manager using the virtinst patches I just posted.

	The way I did in the patch isn't great, but the basic idea is that in
order to boot a LiveCD you'd go through the create wizard as follows:

  - Intro - as normal
  - Name - choose a name for the VM
  - Type - choose LiveCD instead of fully-virt or paravirt
  - Location - choose the path of the LiveCD iso or device, choose
    OS type or variant
  - Disks - default it to create no disks, but you can choose to create
    a disk too
  - Network/CPU/Finish - as normal

Cheers,
Mark.
Index: virt-manager-0.4.0/src/virtManager/create.py
===================================================================
--- virt-manager-0.4.0.orig/src/virtManager/create.py
+++ virt-manager-0.4.0/src/virtManager/create.py
@@ -160,29 +160,8 @@ class vmmCreate(gobject.GObject):
             name = "page" + str(num) + "-title"
             self.window.get_widget(name).modify_bg(gtk.STATE_NORMAL,black)
 
-        # set up the list for the cd-path widget
-        cd_list = self.window.get_widget("cd-path")
-        # Fields are raw device path, volume label, flag indicating
-        # whether volume is present or not, and HAL path
-        cd_model = gtk.ListStore(str, str, bool, str)
-        cd_list.set_model(cd_model)
-        text = gtk.CellRendererText()
-        cd_list.pack_start(text, True)
-        cd_list.add_attribute(text, 'text', 1)
-        cd_list.add_attribute(text, 'sensitive', 2)
-        try:
-            # Get a connection to the SYSTEM bus
-            self.bus = dbus.SystemBus()
-            # Get a handle to the HAL service
-            hal_object = self.bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager')
-            self.hal_iface = dbus.Interface(hal_object, 'org.freedesktop.Hal.Manager')
-            self.populate_opt_media(cd_model)
-        except Exception, e:
-            logging.error("Unable to connect to HAL to list cdrom volumes: '%s'", e)
-            self.window.get_widget("media-physical").set_sensitive(False)
-            self.bus = None
-            self.hal_iface = None
-
+        self.populate_cd_list(self.window.get_widget("cd-path"))
+
         if os.getuid() != 0:
             self.window.get_widget("media-physical").set_sensitive(False)
             self.window.get_widget("storage-partition").set_sensitive(False)
@@ -938,6 +917,28 @@ class vmmCreate(gobject.GObject):
             else:
                 model.append([devnode, _("No media present"), False, None])
 
+    def populate_cd_list(self, cd_list):
+        # Fields are raw device path, volume label, flag indicating
+        # whether volume is present or not, and HAL path
+        cd_model = gtk.ListStore(str, str, bool, str)
+        cd_list.set_model(cd_model)
+        text = gtk.CellRendererText()
+        cd_list.pack_start(text, True)
+        cd_list.add_attribute(text, 'text', 1)
+        cd_list.add_attribute(text, 'sensitive', 2)
+        try:
+            # Get a connection to the SYSTEM bus
+            self.bus = dbus.SystemBus()
+            # Get a handle to the HAL service
+            hal_object = self.bus.get_object('org.freedesktop.Hal', '/org/freedesktop/Hal/Manager')
+            self.hal_iface = dbus.Interface(hal_object, 'org.freedesktop.Hal.Manager')
+            self.populate_opt_media(cd_model)
+        except Exception, e:
+            logging.error("Unable to connect to HAL to list cdrom volumes: '%s'", e)
+            self.window.get_widget("media-physical").set_sensitive(False)
+            self.bus = None
+            self.hal_iface = None
+
     def _device_added(self, path):
         vol = self.bus.get_object("org.freedesktop.Hal", path)
         if vol.QueryCapability("volume"):
Index: virt-manager-0.4.0/src/vmm-create.glade
===================================================================
--- virt-manager-0.4.0.orig/src/vmm-create.glade
+++ virt-manager-0.4.0/src/vmm-create.glade
@@ -1226,6 +1226,97 @@ mipsel</property>
 		      <property name="fill">True</property>
 		    </packing>
 		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label395">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">You will also need to choose an installation method for your new system:</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">True</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">True</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">20</property>
+		      <property name="ypad">10</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment154">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">1</property>
+		      <property name="yscale">1</property>
+		      <property name="top_padding">0</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">25</property>
+		      <property name="right_padding">0</property>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox66">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">0</property>
+
+			  <child>
+			    <widget class="GtkLabel" id="label396">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">_Installation method:</property>
+			      <property name="use_underline">True</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">5</property>
+			      <property name="ypad">0</property>
+			      <property name="mnemonic_widget">inst-method</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkComboBox" id="inst-method">
+			      <property name="visible">True</property>
+			      <property name="add_tearoffs">False</property>
+			      <property name="focus_on_click">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">True</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
 		</widget>
 		<packing>
 		  <property name="padding">0</property>
@@ -2290,35 +2381,49 @@ mipsel</property>
 	  </child>
 
 	  <child>
-	    <widget class="GtkVBox" id="vbox34">
+	    <widget class="GtkVBox" id="vbox54">
 	      <property name="border_width">1</property>
 	      <property name="visible">True</property>
 	      <property name="homogeneous">False</property>
 	      <property name="spacing">0</property>
 
 	      <child>
-		<widget class="GtkEventBox" id="page5-title">
+		<widget class="GtkAlignment" id="alignment148">
 		  <property name="visible">True</property>
-		  <property name="visible_window">True</property>
-		  <property name="above_child">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xscale">1</property>
+		  <property name="yscale">1</property>
+		  <property name="top_padding">0</property>
+		  <property name="bottom_padding">0</property>
+		  <property name="left_padding">0</property>
+		  <property name="right_padding">0</property>
 
 		  <child>
-		    <widget class="GtkLabel" id="label216">
+		    <widget class="GtkEventBox" id="page5-title">
 		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">&lt;span weight=&quot;heavy&quot; size=&quot;xx-large&quot; foreground=&quot;#FFF&quot;&gt;Assigning storage space&lt;/span&gt;</property>
-		      <property name="use_underline">False</property>
-		      <property name="use_markup">True</property>
-		      <property name="justify">GTK_JUSTIFY_FILL</property>
-		      <property name="wrap">False</property>
-		      <property name="selectable">False</property>
-		      <property name="xalign">0</property>
-		      <property name="yalign">0</property>
-		      <property name="xpad">5</property>
-		      <property name="ypad">6</property>
-		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-		      <property name="width_chars">-1</property>
-		      <property name="single_line_mode">False</property>
-		      <property name="angle">0</property>
+		      <property name="visible_window">True</property>
+		      <property name="above_child">False</property>
+
+		      <child>
+			<widget class="GtkLabel" id="label386">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">&lt;span weight=&quot;heavy&quot; size=&quot;xx-large&quot; foreground=&quot;#FFF&quot;&gt;Locating LiveCD&lt;/span&gt;</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">True</property>
+			  <property name="justify">GTK_JUSTIFY_FILL</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0</property>
+			  <property name="xpad">5</property>
+			  <property name="ypad">6</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+		      </child>
 		    </widget>
 		  </child>
 		</widget>
@@ -2330,15 +2435,15 @@ mipsel</property>
 	      </child>
 
 	      <child>
-		<widget class="GtkVBox" id="vbox35">
+		<widget class="GtkVBox" id="vbox55">
 		  <property name="visible">True</property>
 		  <property name="homogeneous">False</property>
 		  <property name="spacing">0</property>
 
 		  <child>
-		    <widget class="GtkLabel" id="label217">
+		    <widget class="GtkLabel" id="label387">
 		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">Please indicate how you'd like to assign space on this physical host system for your new virtual system. This space will be used to install the virtual system's operating system.</property>
+		      <property name="label" translatable="yes">Please indicate where the LiveCD you wish to run on this virtual system is located:</property>
 		      <property name="use_underline">False</property>
 		      <property name="use_markup">True</property>
 		      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -2361,7 +2466,7 @@ mipsel</property>
 		  </child>
 
 		  <child>
-		    <widget class="GtkAlignment" id="alignment77">
+		    <widget class="GtkAlignment" id="alignment149">
 		      <property name="visible">True</property>
 		      <property name="xalign">0.5</property>
 		      <property name="yalign">0.5</property>
@@ -2370,19 +2475,19 @@ mipsel</property>
 		      <property name="top_padding">0</property>
 		      <property name="bottom_padding">0</property>
 		      <property name="left_padding">25</property>
-		      <property name="right_padding">15</property>
+		      <property name="right_padding">0</property>
 
 		      <child>
-			<widget class="GtkTable" id="table23">
+			<widget class="GtkTable" id="table32">
 			  <property name="visible">True</property>
-			  <property name="n_rows">9</property>
-			  <property name="n_columns">5</property>
+			  <property name="n_rows">5</property>
+			  <property name="n_columns">3</property>
 			  <property name="homogeneous">False</property>
 			  <property name="row_spacing">2</property>
 			  <property name="column_spacing">0</property>
 
 			  <child>
-			    <widget class="GtkAlignment" id="alignment79">
+			    <widget class="GtkAlignment" id="alignment150">
 			      <property name="visible">True</property>
 			      <property name="xalign">0.5</property>
 			      <property name="yalign">0</property>
@@ -2408,95 +2513,718 @@ mipsel</property>
 			  </child>
 
 			  <child>
-			    <widget class="GtkLabel" id="label219">
+			    <widget class="GtkAlignment" id="alignment151">
 			      <property name="visible">True</property>
-			      <property name="label" translatable="yes">P_artition:</property>
-			      <property name="use_underline">True</property>
-			      <property name="use_markup">True</property>
-			      <property name="justify">GTK_JUSTIFY_LEFT</property>
-			      <property name="wrap">False</property>
-			      <property name="selectable">False</property>
-			      <property name="xalign">1</property>
-			      <property name="yalign">0.5</property>
-			      <property name="xpad">4</property>
-			      <property name="ypad">0</property>
-			      <property name="mnemonic_widget">storage-partition-address</property>
-			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-			      <property name="width_chars">-1</property>
-			      <property name="single_line_mode">False</property>
-			      <property name="angle">0</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0</property>
+			      <property name="xscale">1</property>
+			      <property name="yscale">0</property>
+			      <property name="top_padding">0</property>
+			      <property name="bottom_padding">0</property>
+			      <property name="left_padding">0</property>
+			      <property name="right_padding">0</property>
+
+			      <child>
+				<widget class="GtkRadioButton" id="livecd-iso-image">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">_ISO Image Location:</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <property name="active">True</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				  <signal name="toggled" handler="on_media_toggled" last_modification_time="Tue, 12 Sep 2006 21:35:57 GMT"/>
+				</widget>
+			      </child>
 			    </widget>
 			    <packing>
-			      <property name="left_attach">2</property>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">0</property>
+			      <property name="bottom_attach">1</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options">fill</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkAlignment" id="alignment152">
+			      <property name="visible">True</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0</property>
+			      <property name="xscale">1</property>
+			      <property name="yscale">0</property>
+			      <property name="top_padding">0</property>
+			      <property name="bottom_padding">0</property>
+			      <property name="left_padding">0</property>
+			      <property name="right_padding">0</property>
+
+			      <child>
+				<widget class="GtkRadioButton" id="livecd-physical">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">_CD-ROM or DVD:</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <property name="active">False</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				  <property name="group">media-iso-image</property>
+				  <signal name="toggled" handler="on_media_toggled" last_modification_time="Tue, 12 Sep 2006 21:36:05 GMT"/>
+				</widget>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
 			      <property name="right_attach">3</property>
-			      <property name="top_attach">1</property>
-			      <property name="bottom_attach">2</property>
+			      <property name="top_attach">3</property>
+			      <property name="bottom_attach">4</property>
 			      <property name="x_options">fill</property>
-			      <property name="y_options"></property>
+			      <property name="y_options">fill</property>
 			    </packing>
 			  </child>
 
 			  <child>
-			    <widget class="GtkHBox" id="hbox33">
+			    <widget class="GtkHBox" id="hbox64">
 			      <property name="visible">True</property>
 			      <property name="homogeneous">False</property>
 			      <property name="spacing">0</property>
 
 			      <child>
-				<widget class="GtkImage" id="image84">
+				<widget class="GtkEntry" id="livecd-iso-location">
 				  <property name="visible">True</property>
-				  <property name="icon_size">4</property>
-				  <property name="icon_name">gtk-info</property>
-				  <property name="xalign">0.5</property>
-				  <property name="yalign">0.5</property>
-				  <property name="xpad">0</property>
-				  <property name="ypad">0</property>
+				  <property name="can_focus">True</property>
+				  <property name="editable">True</property>
+				  <property name="visibility">True</property>
+				  <property name="max_length">0</property>
+				  <property name="text" translatable="yes"></property>
+				  <property name="has_frame">True</property>
+				  <property name="invisible_char">•</property>
+				  <property name="activates_default">False</property>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
-				  <property name="expand">False</property>
+				  <property name="expand">True</property>
 				  <property name="fill">True</property>
 				</packing>
 			      </child>
 
 			      <child>
-				<widget class="GtkLabel" id="label221">
+				<widget class="GtkButton" id="livecd-location">
 				  <property name="visible">True</property>
-				  <property name="label" translatable="yes">&lt;small&gt;&lt;b&gt;Example:&lt;/b&gt; /dev/hdc2&lt;/small&gt;</property>
-				  <property name="use_underline">False</property>
-				  <property name="use_markup">True</property>
-				  <property name="justify">GTK_JUSTIFY_LEFT</property>
-				  <property name="wrap">False</property>
-				  <property name="selectable">False</property>
-				  <property name="xalign">0.5</property>
-				  <property name="yalign">0.5</property>
-				  <property name="xpad">7</property>
-				  <property name="ypad">0</property>
-				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-				  <property name="width_chars">-1</property>
-				  <property name="single_line_mode">False</property>
-				  <property name="angle">0</property>
-				</widget>
-				<packing>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">_Browse...</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <signal name="clicked" handler="on_livecd_location_browse_clicked" last_modification_time="Thu, 10 Aug 2006 15:47:24 GMT"/>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">2</property>
+			      <property name="right_attach">3</property>
+			      <property name="top_attach">1</property>
+			      <property name="bottom_attach">2</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options">fill</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label388">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">ISO _Location:</property>
+			      <property name="use_underline">True</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">1</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="mnemonic_widget">livecd-iso-location</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">1</property>
+			      <property name="bottom_attach">2</property>
+			      <property name="x_padding">3</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label389">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes"></property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">2</property>
+			      <property name="bottom_attach">3</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox65">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">0</property>
+
+			      <child>
+				<widget class="GtkLabel" id="label390">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">_Path to media:</property>
+				  <property name="use_underline">True</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">5</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkComboBox" id="livecd-path">
+				  <property name="visible">True</property>
+				  <property name="add_tearoffs">False</property>
+				  <property name="focus_on_click">True</property>
+				  <signal name="changed" handler="on_cd_path_changed" last_modification_time="Wed, 23 Aug 2006 20:46:09 GMT"/>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">True</property>
+				  <property name="fill">True</property>
+				</packing>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">3</property>
+			      <property name="top_attach">4</property>
+			      <property name="bottom_attach">5</property>
+			      <property name="x_options">fill</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment153">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">1</property>
+		      <property name="yscale">1</property>
+		      <property name="top_padding">15</property>
+		      <property name="bottom_padding">15</property>
+		      <property name="left_padding">15</property>
+		      <property name="right_padding">5</property>
+
+		      <child>
+			<widget class="GtkTable" id="table33">
+			  <property name="visible">True</property>
+			  <property name="n_rows">3</property>
+			  <property name="n_columns">3</property>
+			  <property name="homogeneous">False</property>
+			  <property name="row_spacing">10</property>
+			  <property name="column_spacing">0</property>
+
+			  <child>
+			    <widget class="GtkLabel" id="label391">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Please choose the type of guest operating system you will be running:</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">True</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">True</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">0</property>
+			      <property name="bottom_attach">1</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label392">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">OS _Variant:</property>
+			      <property name="use_underline">True</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">1</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="mnemonic_widget">os-variant</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">2</property>
+			      <property name="bottom_attach">3</property>
+			      <property name="x_options"></property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkComboBox" id="livecd-os-type">
+			      <property name="visible">True</property>
+			      <property name="add_tearoffs">False</property>
+			      <property name="focus_on_click">True</property>
+			      <signal name="changed" handler="on_livecd_os_type_changed"/>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">1</property>
+			      <property name="bottom_attach">2</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkComboBox" id="livecd-os-variant">
+			      <property name="visible">True</property>
+			      <property name="add_tearoffs">False</property>
+			      <property name="focus_on_click">True</property>
+			      <signal name="changed" handler="on_livecd_os_variant_changed"/>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">2</property>
+			      <property name="bottom_attach">3</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label393">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">OS _Type:</property>
+			      <property name="use_underline">True</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">1</property>
+			      <property name="yalign">1</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="mnemonic_widget">os-type</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">1</property>
+			      <property name="bottom_attach">2</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label394">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes"> </property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">2</property>
+			      <property name="right_attach">3</property>
+			      <property name="top_attach">0</property>
+			      <property name="bottom_attach">1</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label385">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">LiveCD</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox34">
+	      <property name="border_width">1</property>
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkEventBox" id="page6-title">
+		  <property name="visible">True</property>
+		  <property name="visible_window">True</property>
+		  <property name="above_child">False</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label216">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">&lt;span weight=&quot;heavy&quot; size=&quot;xx-large&quot; foreground=&quot;#FFF&quot;&gt;Assigning storage space&lt;/span&gt;</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">True</property>
+		      <property name="justify">GTK_JUSTIFY_FILL</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0</property>
+		      <property name="xpad">5</property>
+		      <property name="ypad">6</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkVBox" id="vbox35">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label217">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Please indicate how you'd like to assign space on this physical host system for your new virtual system. This space will be used to install the virtual system's operating system.</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">True</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">True</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">20</property>
+		      <property name="ypad">10</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment77">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">1</property>
+		      <property name="yscale">1</property>
+		      <property name="top_padding">0</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">25</property>
+		      <property name="right_padding">15</property>
+
+		      <child>
+			<widget class="GtkTable" id="table23">
+			  <property name="visible">True</property>
+			  <property name="n_rows">10</property>
+			  <property name="n_columns">5</property>
+			  <property name="homogeneous">False</property>
+			  <property name="row_spacing">2</property>
+			  <property name="column_spacing">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox49">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">0</property>
+
+			      <child>
+				<widget class="GtkImage" id="image98">
+				  <property name="visible">True</property>
+				  <property name="icon_size">4</property>
+				  <property name="icon_name">gtk-dialog-warning</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">True</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label349">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">&lt;small&gt;&lt;b&gt;Warning:&lt;/b&gt; If you do not allocate the entire disk at VM creation, space will be allocated as needed while the guest is running. If sufficient free space is not available on the host, this may result in data corruption on the guest.&lt;/small&gt;</property>
+				  <property name="use_underline">False</property>
+				  <property name="use_markup">True</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">True</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">7</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">2</property>
+			      <property name="right_attach">5</property>
+			      <property name="top_attach">9</property>
+			      <property name="bottom_attach">10</property>
+			      <property name="x_options">fill</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkCheckButton" id="non-sparse">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">Allocate entire virtual disk now?</property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			      <property name="active">True</property>
+			      <property name="inconsistent">False</property>
+			      <property name="draw_indicator">True</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">3</property>
+			      <property name="right_attach">4</property>
+			      <property name="top_attach">8</property>
+			      <property name="bottom_attach">9</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox41">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">0</property>
+
+			      <child>
+				<widget class="GtkAlignment" id="alignment117">
+				  <property name="visible">True</property>
+				  <property name="xalign">0</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xscale">0</property>
+				  <property name="yscale">1</property>
+				  <property name="top_padding">0</property>
+				  <property name="bottom_padding">0</property>
+				  <property name="left_padding">0</property>
+				  <property name="right_padding">0</property>
+
+				  <child>
+				    <widget class="GtkSpinButton" id="storage-file-size">
+				      <property name="visible">True</property>
+				      <property name="sensitive">False</property>
+				      <property name="can_focus">True</property>
+				      <property name="climb_rate">1</property>
+				      <property name="digits">0</property>
+				      <property name="numeric">True</property>
+				      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+				      <property name="snap_to_ticks">True</property>
+				      <property name="wrap">False</property>
+				      <property name="adjustment">500 0 4000000 100 500 500</property>
+				      <signal name="changed" handler="on_storage_file_size_changed" last_modification_time="Thu, 10 Aug 2006 19:19:04 GMT"/>
+				    </widget>
+				  </child>
+				</widget>
+				<packing>
 				  <property name="padding">0</property>
 				  <property name="expand">False</property>
-				  <property name="fill">False</property>
+				  <property name="fill">True</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label301">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">MB</property>
+				  <property name="use_underline">False</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">3</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">True</property>
 				</packing>
 			      </child>
+
+			      <child>
+				<placeholder/>
+			      </child>
 			    </widget>
 			    <packing>
 			      <property name="left_attach">3</property>
 			      <property name="right_attach">4</property>
-			      <property name="top_attach">2</property>
-			      <property name="bottom_attach">3</property>
+			      <property name="top_attach">7</property>
+			      <property name="bottom_attach">8</property>
 			      <property name="x_options">fill</property>
+			      <property name="y_options">fill</property>
 			    </packing>
 			  </child>
 
 			  <child>
-			    <widget class="GtkLabel" id="label222">
+			    <widget class="GtkLabel" id="label300">
 			      <property name="visible">True</property>
-			      <property name="label" translatable="yes">File _Location:</property>
+			      <property name="label" translatable="yes">File _Size:</property>
 			      <property name="use_underline">True</property>
 			      <property name="use_markup">True</property>
 			      <property name="justify">GTK_JUSTIFY_LEFT</property>
@@ -2506,7 +3234,7 @@ mipsel</property>
 			      <property name="yalign">0.5</property>
 			      <property name="xpad">4</property>
 			      <property name="ypad">0</property>
-			      <property name="mnemonic_widget">storage-file-address</property>
+			      <property name="mnemonic_widget">storage-file-size</property>
 			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
 			      <property name="width_chars">-1</property>
 			      <property name="single_line_mode">False</property>
@@ -2515,124 +3243,50 @@ mipsel</property>
 			    <packing>
 			      <property name="left_attach">2</property>
 			      <property name="right_attach">3</property>
-			      <property name="top_attach">5</property>
-			      <property name="bottom_attach">6</property>
+			      <property name="top_attach">7</property>
+			      <property name="bottom_attach">8</property>
 			      <property name="x_options">fill</property>
 			      <property name="y_options"></property>
 			    </packing>
 			  </child>
 
 			  <child>
-			    <widget class="GtkLabel" id="label282">
+			    <widget class="GtkLabel" id="label222">
 			      <property name="visible">True</property>
-			      <property name="label" translatable="yes"></property>
-			      <property name="use_underline">False</property>
-			      <property name="use_markup">False</property>
+			      <property name="label" translatable="yes">File _Location:</property>
+			      <property name="use_underline">True</property>
+			      <property name="use_markup">True</property>
 			      <property name="justify">GTK_JUSTIFY_LEFT</property>
 			      <property name="wrap">False</property>
 			      <property name="selectable">False</property>
-			      <property name="xalign">0</property>
+			      <property name="xalign">1</property>
 			      <property name="yalign">0.5</property>
-			      <property name="xpad">0</property>
+			      <property name="xpad">4</property>
 			      <property name="ypad">0</property>
+			      <property name="mnemonic_widget">storage-file-address</property>
 			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
 			      <property name="width_chars">-1</property>
 			      <property name="single_line_mode">False</property>
 			      <property name="angle">0</property>
 			    </widget>
 			    <packing>
-			      <property name="left_attach">3</property>
-			      <property name="right_attach">4</property>
-			      <property name="top_attach">3</property>
-			      <property name="bottom_attach">4</property>
+			      <property name="left_attach">2</property>
+			      <property name="right_attach">3</property>
+			      <property name="top_attach">6</property>
+			      <property name="bottom_attach">7</property>
 			      <property name="x_options">fill</property>
 			      <property name="y_options"></property>
 			    </packing>
 			  </child>
 
 			  <child>
-			    <widget class="GtkAlignment" id="alignment78">
-			      <property name="visible">True</property>
-			      <property name="xalign">0.5</property>
-			      <property name="yalign">0</property>
-			      <property name="xscale">1</property>
-			      <property name="yscale">0</property>
-			      <property name="top_padding">0</property>
-			      <property name="bottom_padding">0</property>
-			      <property name="left_padding">0</property>
-			      <property name="right_padding">0</property>
-
-			      <child>
-				<widget class="GtkRadioButton" id="storage-partition">
-				  <property name="visible">True</property>
-				  <property name="can_focus">True</property>
-				  <property name="label" translatable="yes">Normal Disk _Partition:</property>
-				  <property name="use_underline">True</property>
-				  <property name="relief">GTK_RELIEF_NORMAL</property>
-				  <property name="focus_on_click">True</property>
-				  <property name="active">True</property>
-				  <property name="inconsistent">False</property>
-				  <property name="draw_indicator">True</property>
-				  <signal name="toggled" handler="on_storage_toggled" last_modification_time="Thu, 10 Aug 2006 17:47:30 GMT"/>
-				</widget>
-			      </child>
-			    </widget>
-			    <packing>
-			      <property name="left_attach">0</property>
-			      <property name="right_attach">5</property>
-			      <property name="top_attach">0</property>
-			      <property name="bottom_attach">1</property>
-			      <property name="x_options">fill</property>
-			      <property name="y_options">fill</property>
-			    </packing>
-			  </child>
-
-			  <child>
-			    <widget class="GtkAlignment" id="alignment80">
-			      <property name="visible">True</property>
-			      <property name="xalign">0.5</property>
-			      <property name="yalign">0</property>
-			      <property name="xscale">1</property>
-			      <property name="yscale">0</property>
-			      <property name="top_padding">0</property>
-			      <property name="bottom_padding">0</property>
-			      <property name="left_padding">0</property>
-			      <property name="right_padding">0</property>
-
-			      <child>
-				<widget class="GtkRadioButton" id="storage-file-backed">
-				  <property name="visible">True</property>
-				  <property name="can_focus">True</property>
-				  <property name="label" translatable="yes">Simple F_ile:</property>
-				  <property name="use_underline">True</property>
-				  <property name="relief">GTK_RELIEF_NORMAL</property>
-				  <property name="focus_on_click">True</property>
-				  <property name="active">False</property>
-				  <property name="inconsistent">False</property>
-				  <property name="draw_indicator">True</property>
-				  <property name="group">storage-partition</property>
-				  <signal name="toggled" handler="on_storage_toggled" last_modification_time="Thu, 10 Aug 2006 17:47:46 GMT"/>
-				</widget>
-			      </child>
-			    </widget>
-			    <packing>
-			      <property name="left_attach">0</property>
-			      <property name="right_attach">5</property>
-			      <property name="top_attach">4</property>
-			      <property name="bottom_attach">5</property>
-			      <property name="x_options">fill</property>
-			      <property name="y_options">fill</property>
-			    </packing>
-			  </child>
-
-			  <child>
-			    <widget class="GtkHBox" id="storage-partition-box">
+			    <widget class="GtkHBox" id="storage-file-box">
 			      <property name="visible">True</property>
 			      <property name="homogeneous">False</property>
 			      <property name="spacing">0</property>
 
 			      <child>
-				<widget class="GtkEntry" id="storage-partition-address">
+				<widget class="GtkEntry" id="storage-file-address">
 				  <property name="visible">True</property>
 				  <property name="can_focus">True</property>
 				  <property name="editable">True</property>
@@ -2642,6 +3296,7 @@ mipsel</property>
 				  <property name="has_frame">True</property>
 				  <property name="invisible_char">•</property>
 				  <property name="activates_default">False</property>
+				  <signal name="changed" handler="on_storage_file_address_changed" last_modification_time="Tue, 12 Sep 2006 21:28:45 GMT"/>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
@@ -2651,14 +3306,14 @@ mipsel</property>
 			      </child>
 
 			      <child>
-				<widget class="GtkButton" id="storage-partition-address-browse">
+				<widget class="GtkButton" id="storage-file-address-browse">
 				  <property name="visible">True</property>
 				  <property name="can_focus">True</property>
 				  <property name="label" translatable="yes">Browse...</property>
 				  <property name="use_underline">True</property>
 				  <property name="relief">GTK_RELIEF_NORMAL</property>
 				  <property name="focus_on_click">True</property>
-				  <signal name="clicked" handler="on_storage_partition_address_browse_clicked" last_modification_time="Thu, 10 Aug 2006 17:33:42 GMT"/>
+				  <signal name="clicked" handler="on_storage_file_address_browse_clicked" last_modification_time="Thu, 10 Aug 2006 17:35:02 GMT"/>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
@@ -2670,58 +3325,42 @@ mipsel</property>
 			    <packing>
 			      <property name="left_attach">3</property>
 			      <property name="right_attach">5</property>
-			      <property name="top_attach">1</property>
-			      <property name="bottom_attach">2</property>
+			      <property name="top_attach">6</property>
+			      <property name="bottom_attach">7</property>
 			      <property name="x_options">fill</property>
 			      <property name="y_options">fill</property>
 			    </packing>
 			  </child>
 
 			  <child>
-			    <widget class="GtkHBox" id="storage-file-box">
+			    <widget class="GtkAlignment" id="alignment80">
 			      <property name="visible">True</property>
-			      <property name="homogeneous">False</property>
-			      <property name="spacing">0</property>
-
-			      <child>
-				<widget class="GtkEntry" id="storage-file-address">
-				  <property name="visible">True</property>
-				  <property name="can_focus">True</property>
-				  <property name="editable">True</property>
-				  <property name="visibility">True</property>
-				  <property name="max_length">0</property>
-				  <property name="text" translatable="yes"></property>
-				  <property name="has_frame">True</property>
-				  <property name="invisible_char">•</property>
-				  <property name="activates_default">False</property>
-				  <signal name="changed" handler="on_storage_file_address_changed" last_modification_time="Tue, 12 Sep 2006 21:28:45 GMT"/>
-				</widget>
-				<packing>
-				  <property name="padding">0</property>
-				  <property name="expand">True</property>
-				  <property name="fill">True</property>
-				</packing>
-			      </child>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0</property>
+			      <property name="xscale">1</property>
+			      <property name="yscale">0</property>
+			      <property name="top_padding">0</property>
+			      <property name="bottom_padding">0</property>
+			      <property name="left_padding">0</property>
+			      <property name="right_padding">0</property>
 
 			      <child>
-				<widget class="GtkButton" id="storage-file-address-browse">
+				<widget class="GtkRadioButton" id="storage-file-backed">
 				  <property name="visible">True</property>
 				  <property name="can_focus">True</property>
-				  <property name="label" translatable="yes">Browse...</property>
+				  <property name="label" translatable="yes">Simple F_ile:</property>
 				  <property name="use_underline">True</property>
 				  <property name="relief">GTK_RELIEF_NORMAL</property>
 				  <property name="focus_on_click">True</property>
-				  <signal name="clicked" handler="on_storage_file_address_browse_clicked" last_modification_time="Thu, 10 Aug 2006 17:35:02 GMT"/>
+				  <property name="active">False</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				  <signal name="toggled" handler="on_storage_toggled" last_modification_time="Thu, 10 Aug 2006 17:47:46 GMT"/>
 				</widget>
-				<packing>
-				  <property name="padding">0</property>
-				  <property name="expand">False</property>
-				  <property name="fill">False</property>
-				</packing>
 			      </child>
 			    </widget>
 			    <packing>
-			      <property name="left_attach">3</property>
+			      <property name="left_attach">0</property>
 			      <property name="right_attach">5</property>
 			      <property name="top_attach">5</property>
 			      <property name="bottom_attach">6</property>
@@ -2731,67 +3370,48 @@ mipsel</property>
 			  </child>
 
 			  <child>
-			    <widget class="GtkLabel" id="label300">
+			    <widget class="GtkLabel" id="label282">
 			      <property name="visible">True</property>
-			      <property name="label" translatable="yes">File _Size:</property>
-			      <property name="use_underline">True</property>
-			      <property name="use_markup">True</property>
+			      <property name="label" translatable="yes"></property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
 			      <property name="justify">GTK_JUSTIFY_LEFT</property>
 			      <property name="wrap">False</property>
 			      <property name="selectable">False</property>
-			      <property name="xalign">1</property>
+			      <property name="xalign">0</property>
 			      <property name="yalign">0.5</property>
-			      <property name="xpad">4</property>
+			      <property name="xpad">0</property>
 			      <property name="ypad">0</property>
-			      <property name="mnemonic_widget">storage-file-size</property>
 			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
 			      <property name="width_chars">-1</property>
 			      <property name="single_line_mode">False</property>
 			      <property name="angle">0</property>
 			    </widget>
 			    <packing>
-			      <property name="left_attach">2</property>
-			      <property name="right_attach">3</property>
-			      <property name="top_attach">6</property>
-			      <property name="bottom_attach">7</property>
+			      <property name="left_attach">3</property>
+			      <property name="right_attach">4</property>
+			      <property name="top_attach">4</property>
+			      <property name="bottom_attach">5</property>
 			      <property name="x_options">fill</property>
 			      <property name="y_options"></property>
 			    </packing>
 			  </child>
 
 			  <child>
-			    <widget class="GtkHBox" id="hbox41">
+			    <widget class="GtkHBox" id="hbox33">
 			      <property name="visible">True</property>
 			      <property name="homogeneous">False</property>
 			      <property name="spacing">0</property>
 
 			      <child>
-				<widget class="GtkAlignment" id="alignment117">
+				<widget class="GtkImage" id="image84">
 				  <property name="visible">True</property>
-				  <property name="xalign">0</property>
+				  <property name="icon_size">4</property>
+				  <property name="icon_name">gtk-info</property>
+				  <property name="xalign">0.5</property>
 				  <property name="yalign">0.5</property>
-				  <property name="xscale">0</property>
-				  <property name="yscale">1</property>
-				  <property name="top_padding">0</property>
-				  <property name="bottom_padding">0</property>
-				  <property name="left_padding">0</property>
-				  <property name="right_padding">0</property>
-
-				  <child>
-				    <widget class="GtkSpinButton" id="storage-file-size">
-				      <property name="visible">True</property>
-				      <property name="sensitive">False</property>
-				      <property name="can_focus">True</property>
-				      <property name="climb_rate">1</property>
-				      <property name="digits">0</property>
-				      <property name="numeric">True</property>
-				      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
-				      <property name="snap_to_ticks">True</property>
-				      <property name="wrap">False</property>
-				      <property name="adjustment">500 0 4000000 100 500 500</property>
-				      <signal name="changed" handler="on_storage_file_size_changed" last_modification_time="Thu, 10 Aug 2006 19:19:04 GMT"/>
-				    </widget>
-				  </child>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
@@ -2801,17 +3421,17 @@ mipsel</property>
 			      </child>
 
 			      <child>
-				<widget class="GtkLabel" id="label301">
+				<widget class="GtkLabel" id="label221">
 				  <property name="visible">True</property>
-				  <property name="label" translatable="yes">MB</property>
+				  <property name="label" translatable="yes">&lt;small&gt;&lt;b&gt;Example:&lt;/b&gt; /dev/hdc2&lt;/small&gt;</property>
 				  <property name="use_underline">False</property>
-				  <property name="use_markup">False</property>
+				  <property name="use_markup">True</property>
 				  <property name="justify">GTK_JUSTIFY_LEFT</property>
 				  <property name="wrap">False</property>
 				  <property name="selectable">False</property>
-				  <property name="xalign">0</property>
+				  <property name="xalign">0.5</property>
 				  <property name="yalign">0.5</property>
-				  <property name="xpad">3</property>
+				  <property name="xpad">7</property>
 				  <property name="ypad">0</property>
 				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
 				  <property name="width_chars">-1</property>
@@ -2821,64 +3441,108 @@ mipsel</property>
 				<packing>
 				  <property name="padding">0</property>
 				  <property name="expand">False</property>
-				  <property name="fill">True</property>
+				  <property name="fill">False</property>
 				</packing>
 			      </child>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">3</property>
+			      <property name="right_attach">4</property>
+			      <property name="top_attach">3</property>
+			      <property name="bottom_attach">4</property>
+			      <property name="x_options">fill</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkAlignment" id="alignment79">
+			      <property name="visible">True</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0</property>
+			      <property name="xscale">1</property>
+			      <property name="yscale">0</property>
+			      <property name="top_padding">0</property>
+			      <property name="bottom_padding">0</property>
+			      <property name="left_padding">0</property>
+			      <property name="right_padding">0</property>
 
 			      <child>
 				<placeholder/>
 			      </child>
 			    </widget>
 			    <packing>
-			      <property name="left_attach">3</property>
-			      <property name="right_attach">4</property>
-			      <property name="top_attach">6</property>
-			      <property name="bottom_attach">7</property>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">2</property>
+			      <property name="bottom_attach">3</property>
 			      <property name="x_options">fill</property>
 			      <property name="y_options">fill</property>
 			    </packing>
 			  </child>
 
 			  <child>
-			    <widget class="GtkHBox" id="hbox49">
+			    <widget class="GtkLabel" id="label219">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">P_artition:</property>
+			      <property name="use_underline">True</property>
+			      <property name="use_markup">True</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">1</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">4</property>
+			      <property name="ypad">0</property>
+			      <property name="mnemonic_widget">storage-partition-address</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">2</property>
+			      <property name="right_attach">3</property>
+			      <property name="top_attach">2</property>
+			      <property name="bottom_attach">3</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkHBox" id="storage-partition-box">
 			      <property name="visible">True</property>
 			      <property name="homogeneous">False</property>
 			      <property name="spacing">0</property>
 
 			      <child>
-				<widget class="GtkImage" id="image98">
+				<widget class="GtkEntry" id="storage-partition-address">
 				  <property name="visible">True</property>
-				  <property name="icon_size">4</property>
-				  <property name="icon_name">gtk-dialog-warning</property>
-				  <property name="xalign">0.5</property>
-				  <property name="yalign">0</property>
-				  <property name="xpad">0</property>
-				  <property name="ypad">0</property>
+				  <property name="can_focus">True</property>
+				  <property name="editable">True</property>
+				  <property name="visibility">True</property>
+				  <property name="max_length">0</property>
+				  <property name="text" translatable="yes"></property>
+				  <property name="has_frame">True</property>
+				  <property name="invisible_char">•</property>
+				  <property name="activates_default">False</property>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
-				  <property name="expand">False</property>
+				  <property name="expand">True</property>
 				  <property name="fill">True</property>
 				</packing>
 			      </child>
 
 			      <child>
-				<widget class="GtkLabel" id="label349">
+				<widget class="GtkButton" id="storage-partition-address-browse">
 				  <property name="visible">True</property>
-				  <property name="label" translatable="yes">&lt;small&gt;&lt;b&gt;Warning:&lt;/b&gt; If you do not allocate the entire disk at VM creation, space will be allocated as needed while the guest is running. If sufficient free space is not available on the host, this may result in data corruption on the guest.&lt;/small&gt;</property>
-				  <property name="use_underline">False</property>
-				  <property name="use_markup">True</property>
-				  <property name="justify">GTK_JUSTIFY_LEFT</property>
-				  <property name="wrap">True</property>
-				  <property name="selectable">False</property>
-				  <property name="xalign">0.5</property>
-				  <property name="yalign">0.5</property>
-				  <property name="xpad">7</property>
-				  <property name="ypad">0</property>
-				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-				  <property name="width_chars">-1</property>
-				  <property name="single_line_mode">False</property>
-				  <property name="angle">0</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">Browse...</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <signal name="clicked" handler="on_storage_partition_address_browse_clicked" last_modification_time="Thu, 10 Aug 2006 17:33:42 GMT"/>
 				</widget>
 				<packing>
 				  <property name="padding">0</property>
@@ -2888,31 +3552,85 @@ mipsel</property>
 			      </child>
 			    </widget>
 			    <packing>
-			      <property name="left_attach">2</property>
+			      <property name="left_attach">3</property>
 			      <property name="right_attach">5</property>
-			      <property name="top_attach">8</property>
-			      <property name="bottom_attach">9</property>
+			      <property name="top_attach">2</property>
+			      <property name="bottom_attach">3</property>
 			      <property name="x_options">fill</property>
+			      <property name="y_options">fill</property>
 			    </packing>
 			  </child>
 
 			  <child>
-			    <widget class="GtkCheckButton" id="non-sparse">
+			    <widget class="GtkAlignment" id="alignment78">
 			      <property name="visible">True</property>
-			      <property name="can_focus">True</property>
-			      <property name="label" translatable="yes">Allocate entire virtual disk now?</property>
-			      <property name="use_underline">True</property>
-			      <property name="relief">GTK_RELIEF_NORMAL</property>
-			      <property name="focus_on_click">True</property>
-			      <property name="active">True</property>
-			      <property name="inconsistent">False</property>
-			      <property name="draw_indicator">True</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0</property>
+			      <property name="xscale">1</property>
+			      <property name="yscale">0</property>
+			      <property name="top_padding">0</property>
+			      <property name="bottom_padding">0</property>
+			      <property name="left_padding">0</property>
+			      <property name="right_padding">0</property>
+
+			      <child>
+				<widget class="GtkRadioButton" id="storage-partition">
+				  <property name="visible">True</property>
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">Normal Disk _Partition:</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <property name="active">True</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				  <property name="group">storage-file-backed</property>
+				  <signal name="toggled" handler="on_storage_toggled" last_modification_time="Thu, 10 Aug 2006 17:47:30 GMT"/>
+				</widget>
+			      </child>
 			    </widget>
 			    <packing>
-			      <property name="left_attach">3</property>
-			      <property name="right_attach">4</property>
-			      <property name="top_attach">7</property>
-			      <property name="bottom_attach">8</property>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">5</property>
+			      <property name="top_attach">1</property>
+			      <property name="bottom_attach">2</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options">fill</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkAlignment" id="alignment155">
+			      <property name="visible">True</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0</property>
+			      <property name="xscale">1</property>
+			      <property name="yscale">0</property>
+			      <property name="top_padding">0</property>
+			      <property name="bottom_padding">0</property>
+			      <property name="left_padding">0</property>
+			      <property name="right_padding">0</property>
+
+			      <child>
+				<widget class="GtkRadioButton" id="no-storage">
+				  <property name="can_focus">True</property>
+				  <property name="label" translatable="yes">_None</property>
+				  <property name="use_underline">True</property>
+				  <property name="relief">GTK_RELIEF_NORMAL</property>
+				  <property name="focus_on_click">True</property>
+				  <property name="active">True</property>
+				  <property name="inconsistent">False</property>
+				  <property name="draw_indicator">True</property>
+				  <property name="group">storage-file-backed</property>
+				  <signal name="toggled" handler="on_storage_toggled" last_modification_time="Thu, 10 Aug 2006 17:47:30 GMT"/>
+				</widget>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">5</property>
+			      <property name="top_attach">0</property>
+			      <property name="bottom_attach">1</property>
 			      <property name="x_options">fill</property>
 			      <property name="y_options"></property>
 			    </packing>
@@ -3040,7 +3758,7 @@ mipsel</property>
 	      <property name="spacing">0</property>
 
 	      <child>
-		<widget class="GtkEventBox" id="page6-title">
+		<widget class="GtkEventBox" id="page7-title">
 		  <property name="visible">True</property>
 		  <property name="visible_window">True</property>
 		  <property name="above_child">False</property>
@@ -3511,7 +4229,7 @@ mipsel</property>
 		  <property name="right_padding">0</property>
 
 		  <child>
-		    <widget class="GtkEventBox" id="page7-title">
+		    <widget class="GtkEventBox" id="page8-title">
 		      <property name="visible">True</property>
 		      <property name="visible_window">True</property>
 		      <property name="above_child">False</property>
@@ -4175,7 +4893,7 @@ mipsel</property>
 		  <property name="right_padding">0</property>
 
 		  <child>
-		    <widget class="GtkEventBox" id="page8-title">
+		    <widget class="GtkEventBox" id="page9-title">
 		      <property name="visible">True</property>
 		      <property name="visible_window">True</property>
 		      <property name="above_child">False</property>
Index: virt-manager-0.4.0/src/virtManager/create.py
===================================================================
--- virt-manager-0.4.0.orig/src/virtManager/create.py
+++ virt-manager-0.4.0/src/virtManager/create.py
@@ -38,6 +38,10 @@ from virtManager.error import vmmErrorDi
 
 VM_PARA_VIRT = 1
 VM_FULLY_VIRT = 2
+VM_LIVECD = 3
+
+VM_DISTRO_INSTALLER = 1
+VM_LIVECD_INSTALLER = 2
 
 VM_INSTALL_FROM_ISO = 1
 VM_INSTALL_FROM_CD = 2
@@ -52,10 +56,11 @@ PAGE_NAME = 1
 PAGE_TYPE = 2
 PAGE_FVINST = 3
 PAGE_PVINST = 4
-PAGE_DISK = 5
-PAGE_NETWORK = 6
-PAGE_CPUMEM = 7
-PAGE_SUMMARY = 8
+PAGE_LIVECD = 5
+PAGE_DISK = 6
+PAGE_NETWORK = 7
+PAGE_CPUMEM = 8
+PAGE_SUMMARY = 9
 
 KEYBOARD_DIR = "/etc/sysconfig/keyboard"
 
@@ -129,6 +134,7 @@ class vmmCreate(gobject.GObject):
             "on_create_forward_clicked" : self.forward,
             "on_create_finish_clicked" : self.finish,
             "on_fv_iso_location_browse_clicked" : self.browse_iso_location,
+            "on_livecd_location_browse_clicked" : self.browse_livecd_location,
             "on_create_memory_max_value_changed": self.set_max_memory,
             "on_storage_partition_address_browse_clicked" : self.browse_storage_partition_address,
             "on_storage_file_address_browse_clicked" : self.browse_storage_file_address,
@@ -137,6 +143,7 @@ class vmmCreate(gobject.GObject):
             "on_network_toggled" : self.change_network_type,
             "on_media_toggled" : self.change_media_type,
             "on_os_type_changed" : self.change_os_type,
+            "on_livecd_os_type_changed" : self.change_livecd_os_type,
             "on_cpu_architecture_changed": self.change_cpu_arch,
             "on_virt_method_toggled": self.change_virt_method,
             "on_create_help_clicked": self.show_help,
@@ -161,11 +168,20 @@ class vmmCreate(gobject.GObject):
             self.window.get_widget(name).modify_bg(gtk.STATE_NORMAL,black)
 
         self.populate_cd_list(self.window.get_widget("cd-path"))
+        self.populate_cd_list(self.window.get_widget("livecd-path"))
 
         if os.getuid() != 0:
             self.window.get_widget("media-physical").set_sensitive(False)
             self.window.get_widget("storage-partition").set_sensitive(False)
 
+        # set up the install method combo
+        inst_method_list = self.window.get_widget("inst-method")
+        inst_method_model = gtk.ListStore(str, int)
+        inst_method_list.set_model(inst_method_model)
+        text = gtk.CellRendererText()
+        inst_method_list.pack_start(text, True)
+        inst_method_list.add_attribute(text, 'text', 0)
+
         # set up the lists for the url widgets
         media_url_list = self.window.get_widget("pv-media-url")
         media_url_model = gtk.ListStore(str)
@@ -177,13 +193,14 @@ class vmmCreate(gobject.GObject):
         ks_url_list.set_model(ks_url_model)
         ks_url_list.set_text_column(0)
 
-        # set up the lists for the networks
-        network_list = self.window.get_widget("net-network")
-        network_model = gtk.ListStore(str, str)
-        network_list.set_model(network_model)
-        text = gtk.CellRendererText()
-        network_list.pack_start(text, True)
-        network_list.add_attribute(text, 'text', 1)
+        # set up the lists for the network and os-type/os-variant widgets
+        for name in [ "os-type", "livecd-os-type", "os-variant", "livecd-os-variant", "net-network" ]:
+            combo = self.window.get_widget(name)
+            model = gtk.ListStore(str, str)
+            combo.set_model(model)
+            text = gtk.CellRendererText()
+            combo.pack_start(text, True)
+            combo.add_attribute(text, 'text', 1)
 
         device_list = self.window.get_widget("net-device")
         device_model = gtk.ListStore(str)
@@ -192,21 +209,6 @@ class vmmCreate(gobject.GObject):
         device_list.pack_start(text, True)
         device_list.add_attribute(text, 'text', 0)
 
-        # set up the lists for the os-type/os-variant widgets
-        os_type_list = self.window.get_widget("os-type")
-        os_type_model = gtk.ListStore(str, str)
-        os_type_list.set_model(os_type_model)
-        text = gtk.CellRendererText()
-        os_type_list.pack_start(text, True)
-        os_type_list.add_attribute(text, 'text', 1)
-
-        os_variant_list = self.window.get_widget("os-variant")
-        os_variant_model = gtk.ListStore(str, str)
-        os_variant_list.set_model(os_variant_model)
-        text = gtk.CellRendererText()
-        os_variant_list.pack_start(text, True)
-        os_variant_list.add_attribute(text, 'text', 1)
-
         self.window.get_widget("create-cpus-physical").set_text(str(self.connection.host_maximum_processor_count()))
         memory = int(self.connection.host_memory_size())
         self.window.get_widget("create-host-memory").set_text(self.pretty_memory(memory))
@@ -263,6 +265,7 @@ class vmmCreate(gobject.GObject):
         self.window.get_widget("create-vm-name").set_text("")
         self.window.get_widget("media-iso-image").set_active(True)
         self.window.get_widget("fv-iso-location").set_text("")
+        self.window.get_widget("no-storage").hide()
         if os.getuid() == 0:
             self.window.get_widget("storage-partition").set_active(True)
         else:
@@ -274,14 +277,17 @@ class vmmCreate(gobject.GObject):
         self.window.get_widget("create-memory-startup").set_value(500)
         self.window.get_widget("create-vcpus").set_value(1)
         self.window.get_widget("non-sparse").set_active(True)
+        self.populate_inst_method(self.window.get_widget("inst-method"))
         model = self.window.get_widget("pv-media-url").get_model()
         self.populate_url_model(model, self.config.get_media_urls())
         model = self.window.get_widget("pv-ks-url").get_model()
         self.populate_url_model(model, self.config.get_kickstart_urls())
 
         # Fill list of OS types
-        self.populate_os_type_model()
+        self.populate_os_type_model(self.window.get_widget("os-type").get_model())
         self.window.get_widget("os-type").set_active(-1)
+        self.populate_os_type_model(self.window.get_widget("livecd-os-type").get_model())
+        self.window.get_widget("livecd-os-type").set_active(-1)
 
         model = self.window.get_widget("net-network").get_model()
         self.populate_network_model(model)
@@ -295,9 +301,14 @@ class vmmCreate(gobject.GObject):
         if(self.validate(notebook.get_current_page()) != True):
             return
 
-        if (notebook.get_current_page() == PAGE_TYPE and self.get_config_method() == VM_PARA_VIRT):
-            notebook.set_current_page(PAGE_PVINST)
-        elif (notebook.get_current_page() == PAGE_FVINST and self.get_config_method() == VM_FULLY_VIRT):
+        if notebook.get_current_page() == PAGE_TYPE:
+            if self.get_config_method() == VM_PARA_VIRT:
+                notebook.set_current_page(PAGE_PVINST)
+            elif self.get_config_method() == VM_LIVECD:
+                notebook.set_current_page(PAGE_LIVECD)
+            else:
+                notebook.next_page()
+        elif notebook.get_current_page() == PAGE_FVINST or notebook.get_current_page() == PAGE_PVINST:
             notebook.set_current_page(PAGE_DISK)
         elif (notebook.get_current_page() == PAGE_DISK and os.getuid() != 0):
             notebook.set_current_page(PAGE_CPUMEM)
@@ -309,10 +320,15 @@ class vmmCreate(gobject.GObject):
         # do this always, since there's no "leaving a notebook page" event.
         self.window.get_widget("create-finish").hide()
         self.window.get_widget("create-forward").show()
-        if notebook.get_current_page() == PAGE_PVINST and self.get_config_method() == VM_PARA_VIRT:
+        if notebook.get_current_page() == PAGE_PVINST or notebook.get_current_page() == PAGE_LIVECD:
             notebook.set_current_page(PAGE_TYPE)
-        elif notebook.get_current_page() == PAGE_DISK and self.get_config_method() == VM_FULLY_VIRT:
-            notebook.set_current_page(PAGE_FVINST)
+        elif notebook.get_current_page() == PAGE_DISK:
+            if self.get_config_method() == VM_PARA_VIRT:
+                notebook.set_current_page(PAGE_PVINST)
+            elif self.get_config_method() == VM_FULLY_VIRT:
+                notebook.set_current_page(PAGE_FVINST)
+            else:
+                notebook.prev_page()
         elif notebook.get_current_page() == PAGE_CPUMEM and os.getuid() != 0:
             notebook.set_current_page(PAGE_DISK)
         else:
@@ -322,7 +338,9 @@ class vmmCreate(gobject.GObject):
         return self.window.get_widget("create-vm-name").get_text()
 
     def get_config_method(self):
-        if self.window.get_widget("virt-method-pv").get_active():
+        if self.window.get_widget("inst-method").get_active() == 1:
+            return VM_LIVECD
+        elif self.window.get_widget("virt-method-pv").get_active():
             return VM_PARA_VIRT
         elif self.window.get_widget("virt-method-fv").get_active():
             return VM_FULLY_VIRT
@@ -337,13 +355,20 @@ class vmmCreate(gobject.GObject):
             self.config.add_media_url(url)
             self.populate_url_model(widget.get_model(), self.config.get_media_urls())
             return url
-        else:
+        elif self.get_config_method() == VM_FULLY_VIRT:
             if self.window.get_widget("media-iso-image").get_active():
                 return self.window.get_widget("fv-iso-location").get_text()
             else:
                 cd = self.window.get_widget("cd-path")
                 model = cd.get_model()
                 return model.get_value(cd.get_active_iter(), 0)
+        else:
+            if self.window.get_widget("livecd-iso-image").get_active():
+                return self.window.get_widget("livecd-iso-location").get_text()
+            else:
+                cd = self.window.get_widget("livecd-path")
+                model = cd.get_model()
+                return model.get_value(cd.get_active_iter(), 0)
 
     def get_config_kickstart_source(self):
         if self.get_config_method() == VM_PARA_VIRT:
@@ -356,13 +381,16 @@ class vmmCreate(gobject.GObject):
             return ""
 
     def get_config_disk_image(self):
-        if self.window.get_widget("storage-partition").get_active():
+        if self.window.get_widget("no-storage").get_active():
+            return None
+        elif self.window.get_widget("storage-partition").get_active():
             return self.window.get_widget("storage-partition-address").get_text()
         else:
             return self.window.get_widget("storage-file-address").get_text()
 
     def get_config_disk_size(self):
-        if self.window.get_widget("storage-partition").get_active():
+        if self.window.get_widget("no-storage").get_active() or \
+           self.window.get_widget("storage-partition").get_active():
             return None
         else:
             return self.window.get_widget("storage-file-size").get_value()
@@ -426,6 +454,10 @@ class vmmCreate(gobject.GObject):
         elif page_number == PAGE_PVINST:
             url_widget = self.window.get_widget("pv-media-url")
             url_widget.grab_focus()
+        elif page_number == PAGE_LIVECD:
+            radio = self.window.get_widget("no-storage")
+            radio.show()
+            radio.set_active(True)
         elif page_number == PAGE_DISK:
             partwidget = self.window.get_widget("storage-partition-address")
             filewidget = self.window.get_widget("storage-file-address")
@@ -446,7 +478,9 @@ class vmmCreate(gobject.GObject):
                 self.window.get_widget("summary-os").show()
             self.window.get_widget("summary-install-source").set_text(self.get_config_install_source())
             self.window.get_widget("summary-kickstart-source").set_text(self.get_config_kickstart_source())
-            self.window.get_widget("summary-disk-image").set_text(self.get_config_disk_image())
+            diskimage = self.get_config_disk_image()
+            if diskimage != None:
+                self.window.get_widget("summary-disk-image").set_text(self.get_config_disk_image())
             disksize = self.get_config_disk_size()
             if disksize != None:
                 self.window.get_widget("summary-disk-size").set_text(str(int(disksize)) + " MB")
@@ -481,10 +515,15 @@ class vmmCreate(gobject.GObject):
 
     def finish(self, ignore=None):
         # first things first, are we trying to create a fully virt guest?
-        if self.get_config_method() == VM_FULLY_VIRT:
+        if self.get_config_method() == VM_FULLY_VIRT or \
+           self.get_config_method() == VM_LIVECD:
+            installer = None
+            if self.get_config_method() == VM_LIVECD:
+                installer = virtinst.LiveCDInstaller(type=self.get_domain_type())
             guest = virtinst.FullVirtGuest(type=self.get_domain_type(), \
                                            hypervisorURI=self.connection.get_uri(), \
-                                           arch=self.get_domain_arch())
+                                           arch=self.get_domain_arch(),
+                                           installer=installer)
             try:
                 guest.cdrom = self.get_config_install_source()
             except ValueError, e:
@@ -538,23 +577,25 @@ class vmmCreate(gobject.GObject):
 
         # disks
         filesize = None
-        if self.get_config_disk_size() != None:
-            filesize = self.get_config_disk_size() / 1024.0
-        try:
-            d = virtinst.VirtualDisk(self.get_config_disk_image(), filesize, sparse = self.is_sparse_file())
-            if d.type == virtinst.VirtualDisk.TYPE_FILE and \
-                   self.get_config_method() == VM_PARA_VIRT \
-                   and virtinst.util.is_blktap_capable():
-                d.driver_name = virtinst.VirtualDisk.DRIVER_TAP
-            if d.type == virtinst.VirtualDisk.TYPE_FILE and not \
-               self.is_sparse_file():
-                self.non_sparse = True
-            else:
-                self.non_sparse = False
-        except ValueError, e:
-            self._validation_error_box(_("Invalid storage address"), e.args[0])
-            return
-        guest.disks.append(d)
+        self.non_sparse = False
+        if not self.get_config_disk_image() is None:
+            if self.get_config_disk_size() != None:
+                filesize = self.get_config_disk_size() / 1024.0
+            try:
+                d = virtinst.VirtualDisk(self.get_config_disk_image(), filesize, sparse = self.is_sparse_file())
+                if d.type == virtinst.VirtualDisk.TYPE_FILE and \
+                   self.get_config_method() == VM_PARA_VIRT and \
+                   virtinst.util.is_blktap_capable():
+                    d.driver_name = virtinst.VirtualDisk.DRIVER_TAP
+                if d.type == virtinst.VirtualDisk.TYPE_FILE and \
+                   not self.is_sparse_file():
+                    self.non_sparse = True
+                else:
+                    self.non_sparse = False
+            except ValueError, e:
+                self._validation_error_box(_("Invalid storage address"), e.args[0])
+                return
+            guest.disks.append(d)
 
         # uuid
         guest.uuid = virtinst.util.uuidToString(virtinst.util.randomUUID())
@@ -678,6 +719,11 @@ class vmmCreate(gobject.GObject):
         if file != None:
             self.window.get_widget("fv-iso-location").set_text(file)
 
+    def browse_livecd_location(self, ignore1=None, ignore2=None):
+        file = self._browse_file(_("Locate LiveCD Image"), type="iso")
+        if file != None:
+            self.window.get_widget("livecd-iso-location").set_text(file)
+
     def _browse_file(self, dialog_name, folder=None, type=None):
         # user wants to browse for an ISO
         fcdialog = gtk.FileChooserDialog(dialog_name,
@@ -757,7 +803,12 @@ class vmmCreate(gobject.GObject):
             self.window.get_widget("cd-path").set_active(-1)
 
     def change_storage_type(self, ignore=None):
-        if self.window.get_widget("storage-partition").get_active():
+        if self.window.get_widget("no-storage").get_active():
+            self.window.get_widget("storage-partition-box").set_sensitive(False)
+            self.window.get_widget("storage-file-box").set_sensitive(False)
+            self.window.get_widget("storage-file-size").set_sensitive(False)
+            self.window.get_widget("non-sparse").set_sensitive(False)
+        elif self.window.get_widget("storage-partition").get_active():
             self.window.get_widget("storage-partition-box").set_sensitive(True)
             self.window.get_widget("storage-file-box").set_sensitive(False)
             self.window.get_widget("storage-file-size").set_sensitive(False)
@@ -824,10 +875,31 @@ class vmmCreate(gobject.GObject):
                 self._validation_error_box(_("URL Required"), \
                                            _("You must specify a URL for the install image for the guest install"))
                 return False
+        elif page_num == PAGE_LIVECD:
+            if self.window.get_widget("livecd-iso-image").get_active():
+                src = self.get_config_install_source()
+                if src == None or len(src) == 0:
+                    self._validation_error_box(_("LiveCD Path Required"), \
+                                               _("You must specify an LiveCD ISO location for the guest"))
+                    return False
+                elif not(os.path.exists(src)):
+                    self._validation_error_box(_("LiveCD Path Not Found"), \
+                                               _("You must specify a valid path to the LiveCD ISO image for the guest"))
+                    return False
+            else:
+                cdlist = self.window.get_widget("livecd-path")
+                if cdlist.get_active() == -1:
+                    self._validation_error_box(_("LiveCD media required"), \
+                                               _("You must select the LiveCD media for the guest"))
+                    return False
 
         elif page_num == PAGE_DISK:
             disk = self.get_config_disk_image()
-            if disk == None or len(disk) == 0:
+            if disk is None:
+                self.window.get_widget("create-back").set_sensitive(True)
+                return True
+
+            if not disk:
                 self._validation_error_box(_("Storage Address Required"), \
                                            _("You must specify a partition or a file for storage for the guest install"))
                 return False
@@ -979,21 +1051,26 @@ class vmmCreate(gobject.GObject):
                     cdlist.set_active(-1)
             idx = idx + 1
 
+    def populate_inst_method(self, inst_method):
+        model = inst_method.get_model()
+        model.clear()
+        model.append([_("Distro Installer"), VM_DISTRO_INSTALLER])
+        model.append([_("LiveCD"),           VM_LIVECD_INSTALLER])
+        inst_method.set_active(0)
+
     def populate_url_model(self, model, urls):
         model.clear()
         for url in urls:
             model.append([url])
 
-    def populate_os_type_model(self):
-        model = self.window.get_widget("os-type").get_model()
+    def populate_os_type_model(self, model):
         model.clear()
         types = virtinst.FullVirtGuest.list_os_types()
         types.sort()
         for type in types:
             model.append([type, virtinst.FullVirtGuest.get_os_type_label(type)])
 
-    def populate_os_variant_model(self, type):
-        model = self.window.get_widget("os-variant").get_model()
+    def populate_os_variant_model(self, type, model):
         model.clear()
         variants = virtinst.FullVirtGuest.list_os_variants(type)
         variants.sort()
@@ -1015,10 +1092,18 @@ class vmmCreate(gobject.GObject):
 
     def change_os_type(self, box):
         model = box.get_model()
+        variant = self.window.get_widget("os-variant")
+        if box.get_active_iter() != None:
+            type = model.get_value(box.get_active_iter(), 0)
+            self.populate_os_variant_model(type, variant.get_model())
+        variant.set_active(-1)
+
+    def change_livecd_os_type(self, box):
+        model = box.get_model()
+        variant = self.window.get_widget("livecd-os-variant")
         if box.get_active_iter() != None:
             type = model.get_value(box.get_active_iter(), 0)
-            self.populate_os_variant_model(type)
-        variant = self.window.get_widget("os-variant")
+            self.populate_os_variant_model(type, variant.get_model())
         variant.set_active(-1)
 
     def change_virt_method(self, ignore=None):

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