|  Using 
              VMWare as a Development Tool
 Brian Wilson
              I set up my first Linux system in 1992 as a lark. I was a SunOS 
              and Mac lab manager at the time, and the idea of a UNIX system of 
              my own appealled to me. Three weeks later, I started using it for 
              consulting and telecommuting, and have relied on it ever since.
              When I telecommute, I need to have at least one system at home 
              running and ready for real work. I must be certain that I don't 
              take my main system down when I experiment with new kernels, alternative 
              operating systems, or different Linux distributions. I usually have 
              a "hacker" computer around cobbled together out of my 
              junk box, but it's a couple generations behind state of the 
              art, and not much fun to work on.
              I have tried dual boot setups; I keep Windows 95 and Linux on 
              my laptop. Dual boot works, but only if the OSes involved play well 
              together. I am using removeable hard drives for some things, however, 
              only one OS is usable at a time. With multiple computers comes the 
              nuisance of dealing with multiple keyboards and screens, unless 
              you get a KVM (keyboard/video/monitor) switch. A good KVM is indeed 
              a worthy investment. Given all this, the ideal setup for me is to 
              simultaneously run multiple operating systems on the same computer, 
              and that's where VMWare comes in.
              Some Terminology
              VM stands for virtual machine. A running copy of VMWare pretends 
              to be a complete, standardized PC. It provides an environment that 
              acts like an Intel x86 PC with an IDE hard drive, ATAPI CD-ROM drive, 
              AMD Ethernet card, floppy drive, and serial and parallel ports. 
              It has support for a sound card but I have not tried it yet. It 
              does not matter what your real hardware is; VMWare maps your real 
              hardware to the virtual devices. For example, if you have a 3Com 
              Ethernet card, it still looks like an AMD card to the virtual machine.
              When a VM is in the "power off" state, you can change 
              some configuration settings, such as the amount of RAM it will use 
              and which virtual devices will be available. You power on a VM by 
              clicking a button; then you can watch the full boot process just 
              like any PC. See Figure 1.
              The host operating system is the operating system that is installed 
              as your primary operating system. I run Red Hat Linux, and thus 
              I use "VMWare for Linux". The guest operating system is 
              the system that you install in a virtual machine. There is an officially 
              supported list of operating systems, which includes the MS Windows 
              family, Linux, and FreeBSD. My attempts to run other operating systems 
              (Solaris and BeOS) under VMWare have failed. I would guess that 
              close variants from the BSD family (OpenBSD and NetBSD) would work, 
              but have not tried them yet (see sidebar).
              Jumping on Board
              When version 2 of VMWare came out, I downloaded and tested evaluation 
              copies of it in both its Linux and NT incarnations. When the 30-day 
              trial period expired, I paid for a licensed copy of "VMWare 
              for Linux" and dumped the NT version. "VMWare for NT" 
              works, but I did not find it as satisfying.
              Each VM uses a configurable amount of RAM when it starts. I find 
              64 MB sufficient for a desktop Linux system. Therefore, to run one 
              guest OS, I'd want at least 128 MB (64 MB for the host and 
              64 MB for the guest). I currently have a total of 256 MB, so I can 
              easily run three VMs at the same time. Once a VM has started, the 
              RAM is not dynamically allocated/freed; you must power down the 
              VM if you want the guest OS to have more or less space.
              Each VM uses a maximum of 2 GB of disk space; you set the limit 
              when you initially configure it. It's possible to move beyond 
              the 2-GB limit by using raw disk partitions. I have never tried 
              this, because I have never found 2 GB to be a limitation. When I 
              want extra storage space, I share it with the host operating system 
              via Samba or NFS. This is more convenient, anyway; I keep my home 
              directory and sources in the host disk space and share it among 
              all the guests.
              When you create a new VM, VMware creates a subdirectory with three 
              files in it. One is the configuration file, which is a text file. 
              The second is non-volatile memory that holds BIOS settings for the 
              VM. The third file is space that holds the virtual disk drive. I 
              usually ask for the full 2-GB partition when creating a VM; unlike 
              a raw disk partition, the actual disk space is not used until you 
              need it.
              What's It Good For?
              The most common and most obvious use for VMWare is probably that 
              it lets you run application software not available for your host 
              operating system. If you run Windows or Windows NT as a guest, then 
              you can load up and run Office 2000, for example. So far, every 
              application that I have tried works. I run programs that use the 
              serial port to a digital camera and to a GPS receiver. I run Microsoft 
              Access and use it to talk to the MySQL database server running in 
              the Linux space. I can connect to NT fileservers running on other 
              systems across the Internet.
              Additionally, I run Linux in VMs. Why would anyone want to run 
              Linux in a virtual machine on a Linux system? Let me give you some 
              examples:
              
              1. I can develop a single floppy Linux system (like one from the 
              Linux Router Project or a rescue disk) using the full suite of development 
              tools available on my main system, write it to the floppy, and then 
              boot from the floppy in a VM. I can boot and reboot the VM without 
              the nuisance of rebooting the real computer; and while the VM test 
              OS is running, I still have full access to the development system 
              tools.
              2. I build and test experimental Linux kernels out before committing 
              to them in the real system. For example, I might try out a 2.4 kernel 
              to see how it works. The only trick here is that the hardware specs 
              are different; make sure you get support for both your real hardware 
              and the VM hardware into the kernel if you plan to use it on your 
              real system.
              3. I can test network code. This is very handy for testing firewall 
              and masquerading setups -- all on a single computer.
              4. I upgraded to Red Hat 7.0 on my home machine, but the servers 
              I maintain will be at Red Hat 6.2 for the next few months while 
              I wait for 7.1 to come out. Because Red Hat releases new libraries 
              when it does major releases, anything I compile under 7.0 cannot 
              be uploaded to my servers. By setting up a VM with 6.2, I can continue 
              to maintain my servers. I can do compiles and test code in the VM 
              and then upload to the servers. I can also selectively load newer 
              packages from 7.0 into virtual 6.2 to test them.
              Save Yourself Some Work
              Here's a time-saving tip when doing system testing. Let's 
              say you just installed Windows NT 4.0 as a guest OS and then put 
              in Service Pack 6 and maybe the full Office 2000 suite, too. You 
              have now invested several hours. Before you go any further, shut 
              down VMWare and make a copy of the new directory that it created. 
              (VMWare normally keeps all its files per user in a directory that 
              you choose the first time you run it.) You can just do a compressed 
              tar (such as tar czvf nt4.tar.gz nt4).
              Now you have a clean backup of the entire virtual machine. You 
              can do anything you want to the virtual NT system and restore from 
              the tar file to get back to the fresh system.
              You can also create additional VMs without going through the process 
              of installing from distribution media each time. While working on 
              this article, I installed Red Hat 6.1 and did a few customizations. 
              I then shut it down and copied the entire directory to a new location. 
              I edited the new copy of the *.cfg file with a text editor, 
              changing references that pointed to the old directory to point at 
              the new one. I then launched both the original and the copy in separate 
              copies of VMWare. Voíla! Two separate machines, each running 
              on a different IP address. This is much faster than installing Red 
              Hat from CD-ROM every time I want to run a new test (see Figure 
              2).
              Running Multiple Operating Systems
              When you run more than one copy of VMWare, some of the real hardware 
              devices cannot be shared. For example, only one virtual machine 
              can be connected to the the floppy drive at a time. With VMWare 
              2.x, Windows 98 wants to have exclusive access to the virtual /dev/rtc 
              (real-time clock) for performance reasons. So, I try to start it 
              first when I also need to run additional guests. When you start 
              additional VMs, you will see several dialog boxes warning you about 
              what resources are being disconnected.
              The most important connection is the network, which can be shared 
              among all the VMs. VMWare comes with its own DHCP server, so if 
              you set up each guest OS to act as a DHCP client, then you won't 
              have any address conflicts when running several guests at the same 
              time. I set all guest OSes to mount filesystems from my host, using 
              either NFS or Samba, so I can have common home directories accessible 
              everywhere.
              Conclusion
              I am a strong believer in the power of open source software, but 
              after evaluating VMWare, I decided it was definitely worth owning 
              a copy. If you already own a copy, I hope that I've provided 
              a few ideas on new ways to use it. I recommend that you download 
              an evaluation copy and at least try it out.
              Resources
              VMWare home page: http://www.vmware.com
              Brian Wilson is currently build/release engineer at Coactive 
              Networks in Sausalito, where they are developing Internet gateways 
              for home control and telemetry systems. He has a B.S. in Computer 
              Science and more than 16 years experience as a programmer and UNIX 
              sys admin. You can reach him at: bwilson@clickshift.com.
           |