Virtual machine development environment
We provide a 64-bit development/test Virtual Machine (aka FusionForge Sandbox) with an already configured automated tests environment. FusionForge is not pre-installed, it is automatically "built" using included scripts.
- 1 Dependencies : Vagrant and VirtualBox
- 2 Running the VM with Vagrant
- 3 Contents of the Virtual Machine
- 4 Running the test suite
- 5 Tips, Issues and FAQs
- 6 Using QEMU/KVM instead of VirtualBox
- 7 CentOS variant
- 8 Modify the VM
- 9 Links
Dependencies : Vagrant and VirtualBox
If you're running Debian or Ubuntu, the easiest way is (depending on the version of the distribution you're running, packages may be unavailable):
aptitude install vagrant virtualbox
VirtualBox recently moved to the "contrib" section, so you need to enable it in your /etc/apt/sources.list, for instance by adding something like :
deb http://ftp.fr.debian.org/debian/ jessie main contrib
Make sure that you enabled hardware virtualization in your computer's BIOS, otherwise VirtualBox may not be able to run the VM.
(Note: if you wish, you can extract the disk image from the .box and use it with KVM, see below.)
Running the VM with Vagrant
Installing the VM requires a lot of free space in the vagrant directory of the user, so make sure you have enough room where your $HOME/.vagrant.d/ is located (around 2.5 Gb should do) before running these commands :
# download the Vagrantfile : vagrant init fusionforge-dev-debian http://fusionforge.fusionforge.org/sandbox/fusionforge-dev-debian.box # optionaly modify 'Vagrantfile', e.g. enable 'vb.gui' to open the graphics display, by uncommenting the surrounding region of the ruby config file. vagrant up # after a while, downloads and instanciation of the VM will be complete, and you can login without a password : vagrant ssh -- -l root
See vm/Vagrantfile-sample for a sample Vagrantfile configuration.
Configure accessibility of the VM web interface from host - using an internal IP
In the Vagrantfile, add:
config.vm.network :private_network, ip: "192.168.35.11"
(replace 192.168.35.11 with any IP that does *not* exist)
And in your host's /etc/hosts, add:
Apply changes using vagrant reload, then hit http://forge.internal/ !
If the VM doesn't start, try to launch the VirtualBox manager and start the VM manually: you'll have a more detailed error message.
Note: for an alternative with a NAT, cf. the tip alternative with port redirection below.
Contents of the Virtual Machine
This VM/appliance is designed to help you get started on development. It's basically a clean Debian system (wheezy/stable), with a git clone/checkout of the FusionForge code and a few helper scripts.
By default, the code will be a clone of the debian/master branch of the Debian packaging git repository (https://fusionforge.org/plugins/scmgit/cgi-bin/gitweb.cgi?p=deb-packaging/deb-packaging.git;a=shortlog;h=refs/heads/debian/master), checked-out inside /usr/src/fusionforge/. It corresponds to a snapshot of the 'master' branch of the unstable development trunk (which might break at any time). The branches from the main/upstream repository of FusionForge are also available (see git remote -v for details). See below for testing the stable branch.
The helper scripts are in the /usr/src/fusionforge/vm/scripts directory:
- update.sh will update the sources from Debian FusionForge's Git repository, and also the currently installed packages.
- build.sh builds FusionForge Debian packages from the sources, and stores them in a local package repository in /usr/src/debian-repository/.
- install.sh installs those FusionForge packages. This should end up with an up-to-date FusionForge running on the VM's port 80 (which may become available at http://forge.internal/ for instance, see bellow), with the fusionforge administrator's web login being “admin” and its password being “myadmin”.
- install-gui.sh optionally sets up an X11 graphical environment.
- run-testsuite.sh installs Selenium and runs the testsuite (more details below)
We recommend you run these scripts in this order.
There's also an icon on the VM's Desktop to run build.sh+install.sh, and another one for run-testsuite.sh.
The actual source code is stored under /usr/src/fusionforge, so that's where you should do the changes you want to test (rebuilding and installing the rebuilt packages, with build.sh and install.sh).
Running the test suite
The VM is ready to run the functionnal test suite, which uses PHPUnit and Selenium to drive a controlled Web browser through various tests of the different features of the forge (hence functionnal tests), using its highest-level interface : its Web interface.
Note: you don't need to do this if you just want to test FusionForge. This is for running the test suite to ensure you didn't break anything when developping.
You can run the testsuite script in a terminal, or click on the Desktop "run testsuite" shortcut:
Tests need around 25mn to complete, depending on the computing power of your machine. Failure screenshots are stored in /var/log/.
Running graphical programs remotely
If you don't want to install a full GUI on the VM (i.e. not using install-gui.sh), you can also run the interesting things remotely through SSH using
vagrant ssh -- -l root -X
Note that since Selenium needs an X11 display (as it drives a graphical web browser), you may then see the full graphical run of the test suite on your local X display in a new Firefox window.
You may prefer running the X display inside the VM to start the selenium server, so that windows opened by the tests don't bother you.
Tips, Issues and FAQs
To reset the FusionForge admin password
Use: /usr/share/gforge/bin/forge_set_password admin
Stalled SSH accesses
If user SSH access to the VM is stalling, check that nscd is installed:
aptitude install unscd
Accessing the web interface from host - alternative with port redirection
A bit more complicated than using an internal IP, but doesn't need a separate IP.
In the Vagrantfile, add:
config.vm.network :forwarded_port, guest: 80, host: 8080 config.vm.network :forwarded_port, guest: 443, host: 8443
In /etc/fusionforge/config.ini.d/zzzz-local.ini, add:
[core] http_port=8080 https_port=8443
And in your host's /etc/hosts, add:
Then hit http://forge.internal:8080/ !
Attention : the test suite might not work well in such a configuration
Using psql as root
su - postgres -c "psql -c 'CREATE ROLE root WITH LOGIN SUPERUSER'"
Use a stable Git branch
If you want to use the 5.3 stable branch (instead of the development branch), you can:
cd /usr/src/fusionforge/ git checkout debian/5.3
Note: if you already installed the development version, make sure you uninstall your FusionForge first because the packages won't be downgraded automatically to stable:
vm/scripts/uninstall.sh rm -rf /usr/src/debian-repository/
Block outgoing e-mails
Useful if you're working on a database import with real user e-mails...
iptables -A OUTPUT -p tcp --dport 25 -j REJECT --reject-with tcp-reset
Using QEMU/KVM instead of VirtualBox
Converting from Virtualbox image format to QEMU qcow2
Converting from Virtualbox image format to QEMU qcow2: convert to raw format first
tar xf fusionforge-dev.box fusionforge-dev-disk1.vmdk VBoxManage clonehd -format RAW fusionforge-dev-disk1.vmdk ffsandbox.raw # ~10GB
Then optionaly convert to QCOW2 format:
qemu-img convert -f raw -O qcow2 ffsandbox.raw ffsandbox.qcow2
Running inside libvirt
- Create a VM by importing the created qcow2 disk image, with virt-manager.
- You may need to set manually the driver type to 'qcow2' in "disk" device section in the VM xml file (in /etc/libvirt/qemu/). In this case you need to redefine the VM xml file by: `sudo virsh -c qemu:///system define /etc/libvirt/qemu/ffsandbox.xml` then start the VM.
- You need to reconfigure network interfaces in /etc/network/interfaces afterwards for replicating eth0 config stanza for eth1 for instance. You can find which device to enable by running ifconfig -a.
- You may need to check the web_host setting in /etc/fusionforge/config.ini.d/debian-install.ini to adjust the forge's URLs for redirections.
A version of the VM for CentOS 6 is available: http://fusionforge.fusionforge.org/sandbox/fusionforge-dev-centos.box
However there are not scripts for this version. You need to build and install FusionForge manually.
Modify the VM
The VM is automatically generated from scratch using the Packer tool. See the Packer configuration in vm/packer/.