I tend to follow a model of disposo-images for new development projects. I create an image in ESXi for a project, put just the tools I want into the image, use it only for a month or two and then blow it away when I have either finished the project or simply want to return to a clean environment. In the past I have used Ubuntu but most recently I have been using a lighter Lubuntu install and using X2Go for remoting the desktop.
The process below works for the 14.04 LTS release of Ubuntu.
The easiest way to install a minimal Lubunutu instance is to use the alternative installation process with the Ubuntu mini-iso distribution. A link to the Lubuntu minimal install documentation appears below:
The mini-iso is small and the majority of the distribution is downloaded during the install process. The installer is the standard Ubuntu text-graphical tool, not the more polished desktop installer. The first screen appears below:
Choose the ‘Install’ option and follow the dialogs. I typically just choose to use the entire disk when prompted for storage options. I also typically leave automatic updating off and handle that manually if I feel it makes sense to update. Eventually, it will get to the Tasksel dialog.
On this dialog I usually just choose OpenSSH and the Lubuntu Desktop. The Lubuntu desktop doesn’t have nearly the bloat of the Ubuntu desktop so while it is not truly the ‘minimal installation’, it is very light none-the-less and you would have to install the majority of the pre-installed apps anyway.
If you are using ESXi you can install VMWare Tools at this point but you do not have to install them as most of the virtual drivers are already in the Ubuntu distribution and we will not be needing the nice X integration into the VSphere client.
X2Go is an implementation of the NX protocol and is based on the NX 3.x libraries as NoMachine went closed-source starting with the V4.0 libraries. My experience with X2Go has been very good, the quality of the server and client are such that the projects have been adopted by the Fedora community. Installing the X2Go server on Lubuntu is a breeze:
sudo apt-add-repository ppa:x2go/stable sudo apt-get update sudo apt-get install x2goserver x2goserver-xsession x2golxdebindings
Once installed, reboot the VM and you should be able to connect with an X2Go client. As Lubuntu uses the LXDE desktop environment, it is necessary to configure the client session type as a ‘custom desktop’ with the following command:
lxsession -s Lubuntu -e LXDE
I typically map the desktop display to an entire monitor. Sometimes on the first connection after a reboot, the desktop does not resize to fill the screen but I’ve found that suspending the session and then restarting it forces the display to resize. Maybe there is a more elegant fix out there but the suspend/reconnect works anyway.
I use Eclipse CDT as my C++ IDE. Installation into a minimal Lubuntu environment is straightforward. First, install a JRE or JDK and then just download the ‘Eclipse for C/C++ Developers’ zip file from the Eclipse website. I use the OpenJDK 7 JDK
sudo apt-get install openjdk-7-jdk
After you have downloaded the Eclipse CDT zip file and extracted everything, it is usually nice to create a desktop shortcut. You can do this in Lubuntu using the lxshortcut tool. Open a terminal window and move to your ~/Desktop directory, then do the following.
cd ~/Desktop lxshortcut -o eclipse
That will pop a small dialog, just click ‘OK’. You should see a shortcut labelled ‘eclipse’ on your desktop. Right-click on the icon and select ‘Shortcut Editor’ from the drop-down menu. A dialog for the shortcut editor will open and will allow you to choose the executable for the shortcut (i.e. eclipse) and an icon file (i.e. icon.xpm from the eclipse install directory).
Installing the GCC C/C++ Compilers
The minimal install of Lubuntu does not include the GCC C/C++ compilers. Adding them is also very straightforward.
sudo apt-get install build-essential
At this point, you should have an image with compilers, JDK and Eclipse CDT installed and configured. I usually snapshot the image at this point so I can branch new, clean images for other projects without having to go through the install process again.