My apologies, I misunderstood the LXC comments (i.e. I now know what an LXC is
). I've got a clearer idea of how this can be done with my setup thanks to the guide you linked to, and I think I understand the rationale: as long as you've got a Linux guest running, the hypervisor doesn't matter if you can create a working LXC container for Ubuntu 14.04 using that guest.
The terminology gets confusing because I think you and I are use the word "guest" in different contexts.... but yes that all sounds right. The "guest" of the hypervisor can be anything that you can run Gitian on, including Debian, Gentoo, etc. If this guest machine is a Linux machine, the
build machine which runs underneath
it can be an LXC container (otherwise it needs to be an "inner" KVM or VirtualBox). If using LXC, these two machines share the same kernel.
The build machine's OS must be whatever the project says it is.
I think this may be answering another question for me: it seems like the 14.04 container gitian uses shouldn't be getting package updates in order to preserve the build determinism, and the setup script for LXC suggests the same.
Perhaps you're right, it shouldn't, but it does. When you first run make-base-vm, it does the equivalent of an 'apt-get dist-upgrade' on the build (innermost) machine. Each time you run gbuild after that, a new clone of the base-vm is created (and not updated again) and used for that build.
Builds are reproducible, and multiple people, if they run make-base-vm within a reasonable amount of time of one another, will generally see the same results. However builds are not completely deterministic—if you try to build today a particularly old version of, say, Bitcoin-Qt, you may end up with a different result than is available for download. It's unfortunate, but it's just the way it currently is.
This is partly
vmbuilder's fault, which creates VM images by downloading and installing (via
debbootstrap) .deb files from the package archives (as opposed to say using .deb files from an ISO), and perhaps partly the fault of Canonical who doesn't guarantee that old versions of updated packages will always be available in the archives.
On the plus side, builds from newly created base-vms will pick up security fixes pushed out by Ubuntu.