I work on robotics on ROS running with Xenial, but this applies to any application running on Ubuntu. With a team of engineers, its rather hard to keep everyone's test station uniform in package versions. A while back, we had a testbed break completely since a new update/upgrade changed much of a package functionality.

I want to avoid this and have a solution that allows me to duplicate these testbeds with ease.

I realize that Docker is the popular solution for this, but the container solution is a little bit too restrictive for my needs. I don't mind reinstalling drivers and etc and I'm finding it cumbersome to deal with Docker specific issues in getting my original testbed running(especially as it requires multi-containers).

Is there a solution available that can achieve my needs without going as far as a container like Docker?

The dumb method would just be clone my entire testbed...maybe that's still the best for me?

  • 1
    I'm not sure what exactly your requirements are.. but maybe a VM solution withxen or kvm would be good ? you could prepare and image once and re-apply it if the VMs start to get "dirty" ? Maybe even a kiosk mechanism were all the VMs revert to a defined state on sunday night ? alternatively, you could do a jails setup or OpenVZ ? – Robert Riedl Sep 17 at 6:47
  • I like the VM idea. It's kinda what everyone did before Docker showed up. – msb Sep 18 at 1:31
  • Have you tried somethign like systemd-nspawn? wiki.archlinux.org/index.php/Systemd-nspawn – j-money Sep 22 at 21:24

I think your best alternative for you is https://www.vagrantup.com/ (Their motto is "Development Environments Made Easy")

The following paragraphs are copied (with some editing) from their web site:

What is it for? Vagrant is a tool for building and managing virtual machine environments in a single workflow. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases production parity, and makes the "works on my machine" excuse a relic of the past.

If you are already familiar with the basics of Vagrant, the documentation provides a better reference build for all available features and internals.

Why Vagrant? Vagrant provides easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to help maximize the productivity and flexibility of you and your team.

To achieve its magic, Vagrant stands on the shoulders of giants. Machines are provisioned on top of VirtualBox, VMware, AWS, or any other provider. Then, industry-standard provisioning tools such as shell scripts, Chef, or Puppet, can automatically install and configure software on the virtual machine.

If you are a developer, Vagrant will isolate dependencies and their configuration within a single disposable, consistent environment, without sacrificing any of the tools you are used to working with (editors, browsers, debuggers, etc.) Once you or someone else creates a single Vagrantfile, you just need to vagrant up and everything is installed and configured for you to work. Other members of your team create their development environments from the same configuration, so whether you are working on Linux, Mac OS X, or Windows, all your team members are running code in the same environment, against the same dependencies, all configured the same way. Say goodbye to "works on my machine" bugs.

My experience: I use vagrant on a daily basis and it solves all dependency problems. I run multiple VM for different projects on my depelopment computer. Also, you configure once and everybody get the same configuration. Simple, easy to use and As a plus, you can use it with AWS


As I'd suggested in the comments, if you are looking for a simple way to have the same environment for everyone and easily revert to a predefined state, I'd suggest virtualization.

A full Howto would probably exceed the frame of an answer here, so here aresome hints and links:


I'd suggest using LVM, which offers snapshots, reverting and resizing

or if you prefer files: qcow2, since it also offers snapshots and (some) resizing

QEMU Images (qcow2)


An alternative would also be XEN.

There are some built-in tools available to use debootstrap, so you could create a new and updated VM every time you need it for your colleagues. You can also use LVM or file-backend (qcow2) here.

XEN also offers PVM/paravirtualized guests, which could improve performance significantly.

Specifically, I'd suggest preparing one master image/VM then cloning it, so each teammember has his/her VM.

With LVM you can then create a snapshot of the original state and easily revert to it with --merge (on demand or regularly with a cronjob).

Alternatively you could use file-backend (maybe impact I/O) and just copy over the individual VMs with your master image file.

The real data, that each developer needs, I'd mount with NFS and make it clear to the team that only mounted data would be saved.

  • thanks for taking the time to answer. My main concern is that VM's prevent me from using hardware. For my applications, I need to access various drivers to use cameras, motor controllers, etc... We have a sim mode that can run fine in VM, but ultimately it doesn't exercise real hardware. Unless KVM is a step above virtualbox in that? – mugetsu Sep 25 at 20:48
  • @mugetsu KVM is several steps above Virtualbox for that. You can "passthrough" whole PCIe devices, like GPUs to specific VMs, or NICs or USB devices... etc. You can also pin specific VMs to specific CPU sockets or cores - so that they won't interfere with each other. Passthrough Blogpost ... LiIbvirtManual passthrough ... CPU Pinning KVM – Robert Riedl Sep 26 at 6:48
  • @mugetsu, did you have time to check it out ? – Robert Riedl Oct 11 at 6:44
  • not yet, right now I'm deciding between this and SIngularity, have you ever heard of it? – mugetsu Oct 17 at 1:01
  • @mugetsu, no never heard of it. After a quick glance and judging by the flow-diagrtam, I can say it seems interesting. Seems also to have some (science?)community behind it - there are official Ubuntu packages in Bionic and the GitHub page see regularly and there are hundreds of forks. Seems worth a try. I don't know about pass-through of hardware though... – Robert Riedl Oct 17 at 7:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.