Like many projects we support a range of target systems and occasionally problems arise on them. Typically Debian/sid, Fedora/rawhide or Alpine/edge gets an update and we see a failure to build from source [FTBFS].
To debug these problems it is helpful to set up a test system, and lxc
provides a useful way to do this.
For testing with Mir, it is convenient to have ssh access to this machine (Mir works over X-forwarding). Setting this up can be a small roadbump as the incantations to create a user with ssh access varies from one OS to another. To easy my way, and maybe yours, I’ve converted my notes to a helper script (shown below).
With this script I can now do something along the lines of:
$ lxc-set-me-up ubuntu:20.04 ubuntu-20-04
10.188.174.171
$ ssh -XC 10.188.174.171
alan@ubuntu-20-04:~$
After this, I can build and test Mir in the target environment whilst running on my normal desktop:
I hope this is useful. Or, maybe, there’s a better way that everyone knows but me?
#!/bin/sh -e
if [ $# -lt 2 ] || [ "$1" = "--help" ]; then
echo "Script to set up a container with ssh access for the current user"
echo "Usage: $0 <image> <name>"
echo "Examples:"
echo " o lxc-set-me-up ubuntu:20.04 ubuntu-20-04"
echo " o lxc-set-me-up images:debian/sid debian-sid"
echo " o lxc-set-me-up images:fedora/34 fedora-34"
echo " o lxc-set-me-up images:alpine/edge alpine-edge"
exit 1
fi
lxc launch "$1" "$2"
lxc config set "$2" limits.cpu 10
lxc config set "$2" security.nesting true
if [ "${1#images:fedora}" != "$1" ]; then
lxc exec "$2" -- adduser "$USER"
lxc exec "$2" -- usermod -aG wheel "$USER"
lxc exec "$2" -- dnf install openssh-server --assumeyes
lxc exec "$2" -- systemctl start sshd.service
elif [ "${1#images:alpine}" != "$1" ]; then
lxc exec "$2" -- apk update
lxc exec "$2" -- apk add openssh-server sudo
lxc exec "$2" -- adduser -D "$USER"
lxc exec "$2" -- adduser "$USER" wheel
lxc exec "$2" -- rc-update add sshd
lxc exec "$2" -- service sshd start
echo "$USER:$USER" | lxc exec "$2" -- chpasswd
else
lxc exec "$2" -- apt install --assume-yes openssh-server
lxc exec "$2" -- adduser --disabled-password --gecos "$USER" "$USER"
lxc exec "$2" -- adduser "$USER" sudo
fi
echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | lxc exec "$2" -- tee "/etc/sudoers.d/$USER" > /dev/null
lxc exec "$2" -- su "$USER" -c "mkdir -p /home/$USER/.ssh"
lxc exec "$2" -- su "$USER" -c "cat > /home/$USER/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
lxc exec "$2" -- su "$USER" -c "cat <<EOT >> /home/$USER/.bashrc
if [ -f ~/.Xauthority ]; then
export XAUTHORITY=~/.Xauthority
fi
EOT"
until
ip4_address=$(lxc list "$2" -c 4 -f csv)
[ -n "${ip4_address}" ]
do
sleep 1
done
echo "${ip4_address}"