I love Gentoo. I’m a Gentoo die-hard. But I also have been very attracted to Solus in the last year or so. It’s advancing rapidly, has an elegant package manager (eat me, apt), and is actually a pleasure to package software for. This mean, of course, I have to get Solus running on my Gentoo box. 🙂
In my experience, forget installing things directly in Gentoo, like LSI (Linux Steam Integration) and solbuild. The stuff just doesn’t work, or isn’t flexible enough, on other distros.
Docker can help to make best use of the resources my system has to offer when building software while maintaining a clear boundary between my main system and the target system. Solus doesn’t have an official docker container like other distros. That’s unfortunate, but I understand they have to do what’s best with the limited resources they have. This situation, however, can be circumvented with a little help from VirtualBox.
Create a virtual machine and install Solus.
Attach the drive from that VM to a VM running another distro (or a different instance of the same on; whatever).
Mount and archive the entire root filesystem for Solus.
root@elementary:/home/herb@ mkdir /mnt/tmp root@elementary:/home/herb@ mount /dev/sdb2 /mnt/tmp root@elementary:/home/herb@ cd /mnt/tmp root@elementary:/home/herb@ tar -cvpf /home/herb/Solus.tar . --xattrs
Sftp the file up to your main system (or use shared folders). Once it’s there, import the .tar file into into docker.
Crystal user herb on 2 in /tmp $ docker import Solus.tar solus:20170418
Launch a container based off of the new image:
Crystal user herb on 2 in /tmp $ docker run -ti -v /tmp/.X11-unix:/tmp/.X11-unix --privileged -e DISPLAY=:0 solus:20170418 /bin/bash root@9756dcf265d4 / #
A quick breakdown…
-v /tmp/.X11-unix:/tmp/.X11-unixallows your container to open windows on your host X server. Anymore I just mount the whole
/tmpdirectory to ease transferring files between containers, but be careful with this if your
tmpfsand you don’t have a lot of memory.
--privilegedwill allow your container to use hardware accelerated graphic if you install the same graphics driver your host is using inside the container.
Never Quite So Easy
There is a gotcha with Solus in particular. Pretty much anything you do that’s the slightest little bit involved, like running
eopkg, will result in strange
dbus errors like the following:
Program terminated. Cannot connect to COMAR: org.freedesktop.DBus.Error.FileNotFound: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
To alleviate this, start up the dbus daemon.
root@9756dcf265d4 / # dbus-daemon --system
Nope, Not the Only One
Another issue is with
root@9756dcf265d4 / # sudo su sudo: pam_open_session: System error sudo: policy plugin failed session initialization
Fix this by opening
/etc/pam.d/system-session in a text editor and commenting out the
pam_systemd.so line (which makes sense as systemd isn’t running inside a docker container).
# Begin /etc/pam.d/system-session session required pam_unix.so #session required pam_systemd.so # End /etc/pam.d/system-session
It’s not the cleanest way of creating a docker image, for sure. The general philosophy with docker is to start with as little as possible and build up from there, but sometimes we just don’t have that luxury.