The Best Multiplatform Development Environment that Ever Lived on One Box

A wish list of capabilities for one environment included security, availability, lots of support for servers and platforms, and remote access. Here's how Linux saved the day and money, too.

I decided my consulting company needed to have a professional development environment where I could potentially host works-in-progress for my clients. I wanted high security. I wanted high availability. I wanted to support not only multiple servers (Oracle and Sybase; Tomcat, JRun and Weblogic; different JDK revs), but multiple platforms (NT and UNIX). I wanted to be able to grow disk partitions without having to repartition or re-install. I needed to enable developers from all over the country to have speedy remote access. And, oh yeah, I wanted to spend less than $4,000.00 on all of the hardware and software needed to accomplish this.

This wish list was made possible thanks to Linux, the latest kernel build, a host of freely available and very inexpensive software, and a (relatively) inexpensive server machine.

The Hardware

The bulk of my costs went to the purchase of a refurbished Dell PowerEdge 2300 that I got for a steal, $2700.00. For those of you who don't know, a refurbished Dell carry the exact same warranty as a new Dell.

Cable internet access provides a reasonably inexpensive high-speed connection to the Internet. Since I had only a single "real" IP address from a cable connection, a second network adapter was added to the one that came with the server, so that the server could act as a gateway for my LAN.

The table below outlines the hardware and associated costs:

Hardware                         Cost             Obtained From
Refurbished Dell PowerEdge 2300       $2,700.00
(Dual Pentium III 450MHz, 256MB
RAM, 54GB Hard Disk, 100Mb 
Ethernet, external SCSI controller)
Second PCI Ethernet Card                $ 30.00         Had it laying around
20/40GB DAT Tape Drive                  $740.00
256MB Additional RAM                    $420.00, from 
                                                        (comparison shopping portal)
Total                                      $3,890.00
Software Laundry List

The table below outlines all the software in use, with an overview of its purpose:

Software         Purpose                                  Location
Red Hat 6.2             Base Operating System         
Kernel v2.4.3           Kernel that includes support  
                        for LVM and more robust 
LVM (Logical Volume     Allows physical partitions to   
Management)             be grouped arbitrarily into 
                        Logical Volumes. Allows Logical 
                        Volumes to be grown dynamically.
ipchains                Firewall kernel module                  IPCHAINS-HOWTO
redir                   A port redirector to allow    
                        access from the Internet
                        to the (virtual) NT machine
SSH (Secure Shell)      Allows highly secure          
                        authentication and encryption 
                        of remote sessions
VMware                  Allows us to run Windows NT   
                        in a Virtual Machine under 
VNC (Virtual Network    Very thin remote control                research.att
Computing)              software       

Of the software listed here, only VMware costs anything, and its price is nominal. We also had software expenses related to the use of Windows NT 4 server, described below.

Linux Configuration Overview

The first step was to install the base Red Hat 6.2 distribution. I did this by downloading the required boot disks and the DOS utility called rawrite to transfer the disk images to floppies. I then booted off these floppies and installed the entire Red Hat distribution over the Internet. Next, it was time to customize.

Using the Linux kernel v2.4.3 allowed me to take advantage of a key enabling technology: LVM (Logical Volume Management;

The machine came with six 9GB hard drives. Ordinarily, I would have to have a minimum of six partitions along the boundaries of the physical drives. Not only didn't I want to partition based on this arbitrary boundary, but I also wanted flexibility in our partition plan. If a partition was approaching capacity, I wanted to be able to dynamically grow it. This might mean reducing the size of another, less used partition. LVM allows a high degree of configurability through a host of tools.

I also experienced a performance gain by having logical volumes composed of physical partitions across the six drives. This reduces the overall seek time required when accessing files, since you don't have a read/write head moving around a single disk, but all six at once.

During the process of setting up LVM, virtual devices are created for logical volumes and for virtual groups. Here is the output of the mount command after setting up LVM:

/dev/vgRoot/lvRoot on / type ext2 (rw)
none on /proc type proc (rw)
/dev/sda5 on /boot type ext2 (rw) 
/dev/vgHome/lvHome on /home type ext2 (rw) 
/dev/vgOpt/lvOpt on /opt type ext2 (rw) 
/dev/vgTmp/lvTmp on /tmp type ext2 (rw) 
/dev/vgUsr/lvUsr on /usr type ext2 (rw)
/dev/vgUsrLocal/lvUsrLocal on /usr/local type ext2 (rw) 
/dev/vgVar/lvVar on /var type ext2 (rw) 
none on /dev/pts type devpts (rw,gid=5,mode=620)

Here is the output from the df command showing the space on each partition:

Filesystem                   1k-blocks        Used           Available       Use%    Mounted on 
/dev/vgRoot/lvRoot              10885380        106804          10225616        1%      / 
/dev/sda5                       248895          15348           220697          7%      /boot 
/dev/vgHome/lvHome              4354120         966752          3166184         23%     /home 
/dev/vgOpt/lvOpt                10885380        3997884         6334536         39%     /opt 
/dev/vgTmp/lvTmp                2189128         98048           1979876         5%      /tmp 
/dev/vgUsr/lvUsr                6507036         1530480         4646012         25%     /usr
/dev/vgUsrLocal/lvUsrLocal      10865240        4687304         5626000         45%     /usr/local
/dev/vgVar/lvVar                2173016         40584           2022048         2%      /var 

Here is the output from one of the LVM utilities, called lvdisplay, that shows what physical partitions make up a logical volume:

--- Logical volume --- 
LV Name                 /dev/vgRoot/lvRoot 
VG Name                 vgRoot 
LV Size                 10.55 GB 
Current LE              2700 
Allocated LE            2700 
Stripes                 5 
Stripe size (KB)        16 
Allocation              next free 
Read ahead sectors      120 
Block device            58:0
   --- Distribution of logical volume on 5 physical volumes  ---
PV Name             PE on PV     reads      writes 
/dev/sda6             540         7407        394 
/dev/sdb1             540        13843       6893 
/dev/sdc1             540        14395      94168 
/dev/sdd1             540         7793        775 
/dev/sde1             540        11093      64148

The last few lines of this output show that this logical volume is made up of five physical partitions. Notice that each of these partitions is on different disks. The output also shows the number of stripes on the logical volume, in this case five. This means that writes are spread across all five physical partitions, instead of waiting until one physical partition is filled, and then moving on to the next partition. It is the striping that can improve performance, since rather than a single read/write head having to seek across a disk, you are using five at once.

During the process of setting up LVM, you create PEs (physical extents) that represent the underlying physical partitions. I broke each 9GB drive into four partitions, each containing about 2.2GB. This became my minimum unit for making up logical volumes. The next step is to create virtual groups and then assign a group to a logical volume. For more detail, refer to the LVM home page referenced above.



Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Re: The Best Multiplatform Development Environment that Ever Liv

Anonymous's picture

Ever tested it when it crashed? You use ext2 fs, takes a long time to recover (hours i gues).

But otherwise nice.

Re: The Best Multiplatform Development Environment that Ever Liv

Anonymous's picture

Well, you should also try It really rocks, even under 28K modem.

Re: The Best Multiplatform Development Environment that Ever Liv

Anonymous's picture


will use


Geek Guide
The DevOps Toolbox

Tools and Technologies for Scale and Reliability
by Linux Journal Editor Bill Childers

Get your free copy today

Sponsored by IBM

8 Signs You're Beyond Cron

Scheduling Crontabs With an Enterprise Scheduler
On Demand
Moderated by Linux Journal Contributor Mike Diehl

Sign up now

Sponsored by Skybot