there may be hidden Linux assumptions.
The tool assumes you have already built Palacios, the Linux embedding,
-and the Linux user-sapce tools. If you haven't done this, hit CTRL-C
+and the Linux user-space tools. If you haven't done this, hit CTRL-C
now, configure and build Palacios, the user-space tools, and run
v3_config_v3vee.pl.
do_storage(\%config, $pdir, $dir, $name, "pci0", "southbridge");
-#
-# NVRAM
-#
-# Note: do_storage *must* have placed an IDE named ide0 in order for this to work
-#
-do_device(\%config, $pdir, "V3_CONFIG_NVRAM", "NVRAM", "nvram", 1, undef, " <storage>ide0</storage>\n"); #must have
#
#
+# Sanity-check - is there something bootable?
+#
+#
+if (!($config{havecd} && !($config{havehd}))) {
+ print "The guest's storage configuration does not have either a CD or an HD. \n";
+ print "This means the guest BIOS will have nothing local to boot. \n";
+ if (!($config{havenic})) {
+ print "The guest also does does not have a NIC, which means the BIOS cannot\n";
+ print "do a network boot.\n";
+ } else {
+ print "The guest does have a NIC, so a network boot is possible, if the\n";
+ print "BIOS supports it.\n";
+ }
+ print "If this is not your intent, you probably want to CTRL-C and try again.\n";
+}
+
+print "The BIOS boot sequence will be set to CD,HD. If you need to change this\n";
+print "later, edit the <bootseq> block within the NVRAM device.\n";
+
+#
+# NVRAM
+#
+# Note: do_storage *must* have placed an IDE named ide0 in order for this to work
+#
+do_device(\%config, $pdir, "V3_CONFIG_NVRAM", "NVRAM", "nvram", 1, undef, " <storage>ide0</storage>\n <bootseq>cd,hd</bootseq>\n"); #must have
+
+#
#
# Generic Catch-all Device
#
close(PAL);
-print "\n\nYour guest is now ready in the directory $dir\n";
+print "\n\nYour guest is now ready in the directory $dir\n\n";
+print "To run it, do:\n\n";
+print " cd $dir\n";
+print " v3_create -b $name.pal $name\n";
+print " v3_launch /dev/v3-vmN (N given by v3_create)\n\n";
+print "Other useful tools:\n\n";
+print " v3_console (CGA console)\n";
+print " v3_stream (connect to stream, for example, serial port)\n\n";
exit;
if (!($cancga || $canvga || $canserial || $canvirtioconsole)) {
print "Hmm... No console mechanism is enabled in your Palacios build...\n";
print " This is probably not what you want...\n";
-}
+ }
$didcga=0;
if ($cancga) {
print "You have configured your guest without any obvious way of interacting with it....\n";
print " This is probably not what you want...\n";
}
+
}
}
$num++;
}
+
+ if ($num>0) {
+ $cr->{havenic}=1;
+ }
}
do_storage_backend($cr, $pdir, $dir, $name, "virtioblk$i", "data$i", "");
}
}
-}
+
+}
+
sub do_storage_backend {
print " * FILEDISK - the data is kept in a host file (common) : ".($canfiledisk ? "available" : "UNAVAILABLE")."\n";
print " * NETDISK - the data is accessed via the network (uncommon) : ".($cannetdisk ? "available" : "UNAVAILABLE")."\n";
print " * TMPDISK - the data is kept in memory and discarded (common) : ".($cantmpdisk ? "available" : "UNAVAILABLE")."\n";
- print " * RAMDISK - the data is kept in memory (common) : ".($canramdisk ? "available" : "UNAVAILABLE")."\n";
while (1) {
print "Which option do you want for this device? {".join(", ",@disks)."} [] : ";
$type = get_user("");
if ($what eq "cd") {
$attach.=" <model>V3VEE CDROM</model>\n".
" <type>CDROM</type>\n".$frontendblock;
+ $cr->{havecd}=1;
} else {
$attach.=" <model>V3VEE HD</model>\n".
" <type>HD</type>\n".$frontendblock;
+ $cr->{havehd}=1;
}
$attach.=" </frontend>\n";