Packages & services

The VM is a standard Alpine Linux system. Install packages with apk as you would on any Alpine machine. Changes persist across reboots on the writable ext4 overlay.

Package management with apk

Both the main and community repositories are pre-configured in /etc/apk/repositories. Any package available on Alpine 3.23 for aarch64 can be installed directly.

CommandWhat it does
apk updateRefresh the package index from the repositories
apk upgradeUpgrade all installed packages to the latest versions
apk add <pkg>Install a package (and its dependencies)
apk del <pkg>Remove a package
apk search <kw>Search for packages by name or description
apk info <pkg>Show details about an installed or available package
Alpine documentation

The Alpine project maintains authoritative documentation for package management and everything else in the distribution. These are the best references for what packages exist and how to use them:

What ships pre-installed

The following packages are baked into the Alpine squashfs that Podroid ships. You do not need to install them.

CategoryPackages
Rootless containers podman, crun, netavark, aardvark-dns, fuse-overlayfs, slirp4netns, shadow, shadow-uidmap
Docker docker, docker-openrc, docker-cli-compose
LXC lxc, lxc-templates, lxc-openrc, lxc-bridge
Networking tools iptables, ip6tables, nftables, bridge-utils, iproute2
SSH server dropbear, dropbear-openrc
X11 / audio tigervnc (Xvnc), pulseaudio, pulseaudio-utils, font-misc-misc, font-cursor-misc, ttf-dejavu
System base alpine-base, openrc, busybox-openrc, bash, curl, ca-certificates, doas, sudo, gcompat, libcap-utils, gzip
Podman, Docker and LXC are all ready at boot

Rootless Podman needs no daemon and works immediately. The Docker and LXC services are enabled in the default runlevel, so they start automatically on every boot - there is nothing to run. Confirm with rc-status, and use rc-service docker stop if you want to free memory when you are not using it.

OpenRC service management

The VM uses OpenRC as its init system (PID 1 is busybox init; OpenRC manages the service tree). Standard OpenRC commands work as-is:

# List all services and their status
~# rc-status

# Start, stop, restart, or check a service
~# rc-service dropbear start
~# rc-service docker stop
~# rc-service podroid-x11 restart
~# rc-service podroid-x11 status

# Enable a service you installed on every boot (adds to the 'default' runlevel)
~# rc-update add crond default

# Disable a service from auto-starting (e.g. Docker, to save memory)
~# rc-update del docker default

Podroid system services

These OpenRC services are part of Podroid's Alpine image. Most start automatically; a few are conditional.

ServiceWhat it does
podroid-bootstrap First service to run. Sets the system clock (AVF path), enables cgroup v2, loads kernel modules, mounts devpts/shm/mqueue, configures ZRAM swap, sets sysctl tunables, sets the hostname, and bind-mounts the persistent ext4 storage onto the Podman/Docker/LXC data directories.
podroid-network Brings up eth0 (10.0.2.15/24 on QEMU, DHCP on AVF), adds the default route, and writes /etc/resolv.conf.
podroid-resize Runs the terminal resize daemon: reads RESIZE rows cols messages from the ctrl virtio-console (hvc1) and calls stty on hvc0 so the shell prompt redraws correctly after keyboard or orientation changes.
podroid-x11 Starts Xvnc on display :0 (port 5900) and PulseAudio on port 4713. These back the in-app X11 viewer and audio stream.
podroid-vsock AVF only. Starts the vsock port-forwarding agent that bridges Android-side TCP connections to guest vsock ports. On QEMU this service marks itself inactive and does nothing.
podroid-ready Runs last (after all other services). Emits the boot-stage markers (Starting SSH..., Almost ready..., Ready!) that the Android app watches to detect a successful boot. Also sets OOM scores on infrastructure processes so the kernel reaps user apps before killing the VM.
dropbear SSH server on guest port 22, started at boot. It is reachable from the host and LAN only when the SSH toggle is on (which adds the 9922→22 forward). Default credentials: root / podroid.
docker Docker daemon. Enabled in the default runlevel, so it starts automatically at boot. Stop it (rc-service docker stop) or disable it (rc-update del docker default) to save memory if you only use Podman.
lxc LXC container manager. Also enabled in the default runlevel and starts automatically at boot.
dnsmasq.lxcbr0 DHCP and DNS for the LXC bridge network (lxcbr0). Started alongside the lxc service.

Podroid is free software (GPL). Docs for v1.2.1. Found something inaccurate? Open an issue.