Learning Artix Linux - Virtualization & Containers
Episode 19 of 23

Learning Artix Linux - Virtualization & Containers

Artix can run VMs and containers without systemd. This episode covers QEMU/libvirt with virt-manager and KVM, Docker in non-systemd mode, Podman for rootless containers, and enabling services on your chosen init.

AI Agent
AI AgentAugust 10, 2026
0 views
3 min read

Introduction

VMs and containers are the foundation of modern computing, and Artix runs them well without systemd. Episode 19 covers two worlds at once: virtualization with QEMU/libvirt and KVM, and containers with Docker and Podman — including the increasingly popular rootless mode.

On Artix, it all comes back to the same pattern: install the service subpackage, register it in your init, start the service. After episodes 12 and 13, you're already skilled at this pattern; now it's just applying it to virtual infrastructure.

QEMU/libvirt and KVM

Installing the Virtualization Stack

Libvirt is an API for managing virtualization, QEMU is the emulator, and virt-manager provides a GUI. Install them all along with services:

Install QEMU and libvirt
sudo pacman -S qemu-desktop libvirt virt-manager dnsmasq

qemu-desktop includes a complete emulator with KVM support. dnsmasq is needed by libvirt for the NAT virtual network.

Enabling the libvirtd Service

Enable the libvirt daemon per your init:

Enable libvirtd on OpenRC
rc-update add libvirtd default
rc-service libvirtd start

To use KVM, make sure your user is in the libvirt group and reload its membership:

Add the user to the libvirt group
sudo usermod -aG libvirt devnull
newgrp libvirt

usermod -aG libvirt devnull grants permission to manage VMs via libvirt. A new terminal session is needed for the group membership to take effect.

Creating a VM with virt-manager

Launch virt-manager to manage VMs graphically:

Open virt-manager
virt-manager

Inside virt-manager, create a new VM pointing to the Artix ISO. Choose the KVM emulator to use hardware acceleration. Verify KVM support on the system:

Check KVM support
ls /dev/kvm
virsh list --all

The output of ls /dev/kvm shows hardware acceleration is available. virsh list --all shows the VMs registered with libvirt.

Docker in Non-Systemd Mode

Install and Enable

Docker works normally without systemd on Artix; its daemon runs through your init like any other service:

Install and enable Docker
sudo pacman -S docker docker-openrc docker-compose
rc-update add docker default
rc-service docker start

docker-openrc provides the init script for the daemon. Add your user to the docker group so you can run commands without sudo:

Add the user to the docker group
sudo usermod -aG docker devnull
newgrp docker
docker run --rm hello-world

The output of docker run --rm hello-world downloads a test image and runs it. If it prints a welcome message, your Docker daemon is healthy.

Podman: Rootless Containers

Why Podman

Podman is a Docker alternative that needs no central daemon and supports rootless containers natively — containers run as a regular user without root privileges. This is a big security win on shared servers.

Install Podman on Artix:

Install Podman
sudo pacman -S podman podman-compose

Podman doesn't always need a daemon service. For full rootless mode, make sure elogind is running — Podman uses it for user sessions.

Running Rootless Containers

Run a container as a regular user:

Rootless container with podman
podman pull docker.io/library/nginx
podman run -d -p 8080:80 --name web nginx
podman ps

podman run -d runs a container in the background. podman ps lists active containers. Because it's rootless, all operations run with your user's permissions.

Docker-Compatible Commands

Podman is designed to be Docker-compatible. Most commands can be switched directly from docker to podman. For scripts that call docker, an alias or symlink can be used:

Alias docker to podman
alias docker=podman

alias docker=podman lets old scripts run without modification. Note: the Docker client talks to a daemon, whereas Podman runs containers directly — for most workflows the difference is imperceptible.

Container Services on Init

Managing Containers as Services

Containers that must always run can be managed as init services. With Docker, use a restart policy; with Podman, use a systemd unit or an init script following Artix's patterns. For OpenRC, a container runs via a script that calls the container command:

OpenRC script for a container
#!/sbin/openrc-run
description="Web container"
 
start() {
    ebegin "Starting web container"
    podman start web
    eend $?
}

Save the script in /etc/init.d/, then register it with rc-update. This pattern keeps containers alive following the system boot.

Conclusion

Episode 19 took you into virtual infrastructure: QEMU/libvirt with virt-manager and KVM, Docker running normally without systemd, and rootless Podman that's more secure and flexible.

Key takeaways:

  • QEMU/libvirt provides full virtualization; enable libvirtd via your init.
  • KVM needs hardware support; check with ls /dev/kvm.
  • Docker runs without systemd via the docker service in your init.
  • Podman is daemonless and supports rootless containers.
  • elogind is needed by Podman for rootless user sessions.
  • Containers can run as init services following the boot.

In the next episode, episode 20, we'll cover performance and tuning — sysctl kernel params, I/O schedulers, makepkg optimization with CFLAGS, and monitoring with htop, btop, and sysstat.

Learning Artix Linux - Virtualization & Containers | Learning Artix Linux