93 lines
3.3 KiB
Markdown
93 lines
3.3 KiB
Markdown
## 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 number>", 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 <some/time_zone>
|
|
```
|
|
|
|
[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.
|