One places such information into a file which you point to
with the environment variable "MTOOLSRC".
+Below are some Perl functions to use the above tools:
+
+
+ #####################################################
+ #
+ # VM Universe code for VmWare
+ #
+ # Initializing the VM for a job and accessing the
+ # results are done by including a suitable second
+ # VmWare disk. This disk is created for dynamic
+ # allocation and created in a VM which can use fdisk
+ # to create a fat32 partition and must have an
+ # mkfs which allows a "-t vfat" to complete creation
+ # of the disk.
+ #
+ # Once one has this disk it can be used as a template
+ # second drive for any VmWare VM. Note keep the core
+ # empty disk and copy it when needed as it gets
+ # larger with every use.
+ #
+ # We rely on "mtools" and "qemu" for the rest.
+ # "qemu-img" is used to convert the disk back and forth
+ # between vmdk and raw formats. "mcopy, mdir etc"
+ # are used to place and fetch files off the raw
+ # disk.
+ #
+ #####################################################
+
+ sub VMwareAddFile
+ {
+ my $file = shift;
+ runcmd("mcopy $file n:");
+ runcmd("mdir n:");
+ }
+
+ sub VMwareFetchByPattern
+ {
+ my $pattern = shift;
+ runcmd("mcopy n:\*$pattern* .");
+ runcmd("mdir n:");
+ }
+
+ sub VMwareRemakeDataDisk
+ {
+ my $data = shift;
+ my $raw = shift;
+
+ my $cmd = "qemu-img convert -f raw $raw -O vmdk $data";
+ runcmd($cmd);
+ }
+
+ sub VMwareCreateRawDisk
+ {
+ my $empty = shift;
+ my $raw = shift;
+
+ my $cmd = "qemu-img convert -f vmdk $empty -O raw $raw";
+ runcmd($cmd);
+ }
+
+ sub VMwareCreateMTOOLSRC
+ {
+ my $rawdisk = shift;
+ my $top = getcwd();
+ my $baseentry = "drive n: file=\"$top/$rawdisk\" offset=32256 mtools_skip_check=1";
+ print "Making MTOOLSRC here<$top>\n";
+ open(MTRC,">$top/mtoolsrc") or die "Can not open mtoolsrc in <$top>:$!\n";
+ print MTRC "$baseentry\n";
+ close(MTRC);
+ $ENV{MTOOLSRC} = "$top/mtoolsrc";
+ runcmd("mdir n:");
+ }
+
Below is a suitable script for mounting a second disk at the right
run level and deciding if a job should be run or the VM simply brought up for
changes or inspection.
@@ -123,4 +196,3 @@
close(JOB);
print "Copy results back to /vmjob\n";
system("cp *.log /vmjob");
-[