## Install a Gentoo nspawn Container on Ubuntu 17.04 on Digital Ocean. Spin up an Ubuntu 17.04 droplet, because nspawn containers are slightly more difficult with Ubuntu 16.04. Install systemd-container. (This will also work on your local workstation or laptop running Ubuntu 17.04.) ```bash apt install systemd-container ``` After installing systemd-container you will discover a new directory, /var/lib/machines, and you can create a directory there for a new container. You'll need a systemd stage3 tarball for gentoo and you can get those from the [Gentoo Website](http://distfiles.gentoo.org/releases/amd64/autobuilds/current-stage3-amd64-systemd/) After checking the hash you can extract it to your new folder ```bash cd /var/lib/machines/gentoocontainer/ tar xvjpf /path/to/stage3-*.tar.bz2 --xattrs --numeric-owner cd ../ ``` Start the container so you can create a root password ```bash systemd-nspawn -D gentoocontainer passwd logout ``` Because of how Digital Ocean and Ubuntu set up networking, if you want to subnet the container, start systemd-network (systemd-resolved is probably already running). And optionally it's also pretty straightforward to create a /usr/portage directory on the host operating system, and then bind that directory to the container. ```bash # start the container and login as root systemd-nspawn -b -D gentoocontainer # to subnet the container # start systemd-networkd on host # and add -n flag systemctl start systemd-networkd systemd-nspawn -b -D gentoocontainer -n # to bind /usr/portage # create /usr/portage on host mkdir /usr/portage # and add the --bind option systemd-nspawn -b -D gentoocontainer -n --bind=/usr/portage ``` You should have a root command line on the container, and there really are only two further things to consider: the container probably inherits timezone from the host, but not locale. And your MAKEOPTS="-j", some things seem to not compile if your MAKEOPTS j number is more than the number of cores on the host. Testing this on a local machine, the nspawn container does not inherit the correct time-zone, so from the container's command line ```bash timedatectl set-timezone ``` [And here is what the Gentoo wiki has to say about setting the locale if you're concerned about that](https://wiki.gentoo.org/wiki/Localization/Guide#Generating_specific_locales), again from the container's command line. Your systemd-nspawn command will open up one root console, but if you use a multi-plexer like byobu you can run additional sessions with machinectl commands ```bash # also works with new users in the container which you might create machinectl shell root@gentoocontainer # and then to get the whole environment call bash bash # to power down the container poweroff ``` Before you can install anything, you'll need to update your portage tree, and `emerge-webrsync` takes care of that easily enough. If you want to update everything: `emerge -avDuN @world` By default, any overlays will end up in /var/lib/layman. If you need to build mono, it needs a kernel config. Depending on the host operating system you might be able to find one at /proc/config.gz, or in the /boot directory. If you find yourself fetching git repos repeatedly, you can add `EVCS_OFFLINE=1` temporarily in make.conf, and any ebuild that depends on git-r3.eclass will stop fetching from git.