I've been driven a little crazy lately with trying to develop for Joomla with the following limitations:

1) Half the sites use PHP 5.2 and half of them use PHP 5.3
2) Sometimes I'm online and sometimes I'm offline


I kept coming back to "if only I was using linux, I could set things up more easily".... Then it struck me that my desktop is a beefy system memorywise[this solution is gonna take a lot of memory] - so I gave VirtualBox a try.
http://www.virtualbox.org/

VirtualBox basically allows you to run different operating systems in a virtual environment.

For my current setup, I started with Ubuntu Server:
http://www.ubuntu.com/download/server/download

For the VirtualBox settings, choose fixed disk size - not dynamic. I use 10GB, it eats up the full space but improves performance. My system has 8GB of memory, so I give the system 2GB of ram, I'd suggest nothing under 1GB.

in the network settings for the virtual machine, I setup TWO network adapters. Adapter 1 is set to "bridged adapter", the name is selected from my active adapter. This allows the system to connect through yours to the internet. Adapter 2 is a "Host Only Adapter" - basically it's a "fake" network adapter that allows your pc communicate with the VM and the VM communicate with you. So if your doing this on a laptop, you can still work even while offline.

****For the application settings[File-->Preferences] - go to the network settings and configure the virtual network adapter settings. The important bit here is to disable the dhcp server.

When installing Ubuntu, setup adapter 1 for DHCP and adapter 2 as a static IP address in a different network[most home networks are 192.168.1.0 or 192.168.2.0 - so I give my internal only network the address 192.168.129.1, netmask 255.255.255.0 - no default gateway!]

Openssh is important to install for decent CLI access.
Samba should be installed to make it easy to access the files on the server[just share out your web directory and then you can map the drive and access it from your favorite web editor]. Git, subversion, and mercurial should be installed since you need it at some point
I always make sure to install wget
Now, the piece of magic that makes this all work, DNSMasq:
http://thekelleys.org.uk/dnsmasq/doc.html

DNSMasq allows you to run a DHCP server and DNS cache on the virtual machine. So you setup the DHCP server to give out an IP address to your system, and have it pass itself along as the DNS server[make VERY sure to also specify a blank gateway/router so all your internet traffic goes to the right place].
The importan bits I've found:
interface=eth1
interface=lo
^^^these 2 lines makes sure that your system doesn't try to take over your "real" network
address=/osm/192.168.56.1
domain=osm
^^^this sets up the "fake" domain osm and configures it so any domain ending in .osm will be given the ip address 192.168.56.1 - the virtual machines ip address
dhcp-range=192.168.56.10,192.168.56.15,255.255.255.0,12h
^^^ this gives your fake network a range of addresses, and a long timeout
dhcp-option=3
^^^ makes sure dnsmasq doesn't try to get your computer to route traffic through it
dhcp-option=19,0           # option ip-forwarding off
dhcp-option=44,192.168.56.1 # set netbios-over-TCP/IP nameserver(s) aka WINS server(s)
dhcp-option=45,192.168.56.1     # netbios datagram distribution server
dhcp-option=46,8           # netbios node type
^^^^helps with the file shareing
dhcp-authoritative
^^^speeds up initialization
cache-size=1500
no-negcache
^^^helps with lookups


As an added bennie, with dnsmasq running, your lame windows box now has the full power of a linux domain name caching - so it will speed up your general internet usage.

Then, in general, I follow the instructions at http://www.metod.si/multiple-php-versions-with-apache-2-fastcgi-phpfarm-on-ubuntu/ to setup and install apache, mysql, and php 5.2 and 5.3 - with modifications for the latest versions of each.

In my virtual hosts configuration the following are important:
VirtualDocumentRoot /var/www/%-3

%-3 basically means the third element of the domain name and is used to map domains to directories. So for me: http://testsite.53.osm - the files stored at /var/www/testsite - the THIRD element of the domain name will be used also using that directory is http://www.testsite.53.osm and http://testsite.52.home

Wheras http://mydomain.53.osm will use the files located at /var/www/mydomain

Our last bit of magic uses the virtual host configuration:
<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName 52.osm
    ServerAlias *.52.osm
    VirtualDocumentRoot /var/www/%-3
        DocumentRoot /var/www
<Directory /var/www/>
                Options +Indexes +FollowSymLinks +MultiViews +ExecCGI
                AllowOverride All
                Order allow,deny
                allow from all
                AddHandler php-cgi .php
                Action php-cgi /php-fcgi/php-cgi-5.2

</Directory>

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName 53.osm
    ServerAlias *.53.osm
    VirtualDocumentRoot /var/www/%-3
        DocumentRoot /var/www
<Directory /var/www/>
                Options +Indexes +FollowSymLinks +MultiViews +ExecCGI
                AllowOverride All
                Order allow,deny
                allow from all
                AddHandler php-cgi .php
                Action php-cgi /php-fcgi/php-cgi-5.3

</Directory>


These 2 configurations are almost identical, the only things that change are servername, serveralias, and action The servername has to be a full name, so I just use the php version I want with the domain tacked on[53.osm]. The serveralias can have a wildcard, so *.53.osm means that for ANY website you try to load which ends in .53.osm use this configuration. Lastly, the Action line tells apache which PHP FastCGI server to route the request to. So I have 2 different instances of PHP running, 5.2 and 5.3 and route accordingly.

[Note, I share out the /var/www directory using SAMBA, and then map it on my windows box to drive letter W:]

So now to edit files on my test website, garyamort, I edit the files located at w:/garyamort
To see the website using PHP 5.2, I go to http://garyamort.52.osm
To see the website using PHP 5.3 I go to http://garyamort.53.osm

When dealing with oddities like a website which "suddenly" stops working, one cause is upgrading to PHP 5.3 CiviCRM for example has 2 versions, almost identical but one of them will run on PHP 5.2 and one runs on PHP 5.3 - so a CiviCRM website that suddenly stops working is likely to have a webhost who upgraded PHP from 5.2 to 5.3

It's a fairly simple solution - just copy the 5.3 version files over the old version files AND DELETE THE TEMPLATE CACHE DIRECTORIES - and it will start working again.

If there is interest, I'm trying to put together a virtual box of all this pre-configured, so all you have to do is - with the exception of the part I put *** in front of, it would all be plug and play for most home networks.

By the same token, if anyone knows a bit more about DHCP and DNS - I've had trouble with this part with windows...since both the home router and my virtual box broadcast a DNS server address, Windows will occassionally grab the wrong DNS address. The problem is, I don't want to ALWAYS run the virtualbox, so I want some way for the VM to override the DNS address, but still allow the client to use the other one.

And for those of you who are really good with IPForwarding, I sometimes have to use remove VPN networks. So I have the VPN client on both my windows machine and the virtual machine running. It would be great if I could get the VPN client on the linux machine to dynamically update dnsmasq so that when it's running, the DHCP server will tell my windows box to route all traffic just for the remote network through it, and do some NAT routing on the virtualbox so the connection goes through there.

-Gary
_______________________________________________
New York PHP Users Group Community Talk Mailing List
http://lists.nyphp.org/mailman/listinfo/talk

http://www.nyphp.org/Show-Participation

Reply via email to