Containerized easily-extended Alpine login shell
Go to file
Neale Pickett 7f8a16da8a Switch to non-PID1 init 2023-12-20 14:24:48 -07:00
etc Switch to non-PID1 init 2023-12-20 14:24:48 -07:00
sbin Switch to non-PID1 init 2023-12-20 14:24:48 -07:00
Containerfile Switch to non-PID1 init 2023-12-20 14:24:48 -07:00 Switch to non-PID1 init 2023-12-20 14:24:48 -07:00 Working version 2023-12-20 20:04:23 +00:00

Alpine Toolbox

This is a little Alpine container I run to provide SSH logins with a bunch of tools.


If /mnt/toolbox exists, toolbox will persist installed packages and system changes by using methods that already exist in arch.

It's important to lbu that your machine have a hostname. If you change hostnames, you will need to rename files in /mnt/toolbox/lbu.

podman run \
  --hostname toolbox \
  --volume /path/to/toolbox:/mnt/toolbox \

First Run

You may want to podman exec into the container, in order to edit /etc/doas.conf set up user accounts, and/or install ssh authorized_keys.

Once set up, you should be able to ssh in for most of your needs.

Startup scripts

The system uses runit. If you drop an executable in /etc/service/*/run, runit will run it.

Be sure to lbu commit if you're making startup scripts.

Podman vs Docker

On my diskless Raspberry Pi, Podman takes half as much space on the RAM disk as Docker. So I use Podman.

You do you. If you like docker better, just type docker instead of podman.

Why This Exists

I run my home server in Alpine's "diskless mode". The Raspberry Pi uses a MicroSD card, which will "wear out" after many writes. This means my system runs entirely in RAM.

Once my home server is up, it mounts a 12TB btrfs array. So I run a bunch of containers backed by the disk.

Running a more robust installation in a container allows me to use my magnetic storage for the larger system, and install and remove packages when I like, without worrying about wearing out the MicroSD card.

Shout Out

Alpine Linux is cool. It provides all the difficult parts of this, I just had to set up some config files.

The really cool part is that my container works the same way as the host it runs on!