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.
| Command | What it does |
|---|---|
apk update | Refresh the package index from the repositories |
apk upgrade | Upgrade 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 |
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:
- Package search: pkgs.alpinelinux.org/packages
- Alpine User Handbook (covers apk, storage, users, services): docs.alpinelinux.org/user-handbook
- Alpine Wiki: wiki.alpinelinux.org
What ships pre-installed
The following packages are baked into the Alpine squashfs that Podroid ships. You do not need to install them.
| Category | Packages |
|---|---|
| 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 |
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.
| Service | What 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.