Taking AlmaLinux to various modern environments: GenericCloud deployment with cloud-init on AWS, Azure, GCP, and OpenStack, running AlmaLinux on Windows via WSL, and using the ARM64 Raspberry Pi images for edge servers and home labs.

In the previous episode, Episode 18, we ran containers and VMs on AlmaLinux. Now we take AlmaLinux out into the wider world: cloud, WSL, and ARM. This is where AlmaLinux's "one distro for everywhere" model becomes real — from enterprise cloud instances to a Raspberry Pi on your desk.
This episode guides you through cloud image deployment with cloud-init, AlmaLinux on Windows, and Raspberry Pi images for ARM64 devices.
As we touched on in episode 0, AlmaLinux provides official cloud images at almalinux.org/cloud-images. The main variants:
| Variant | Use |
|---|---|
| GenericCloud | OpenStack, KVM, and general cloud platforms |
| AWS / Azure / GCP | Each cloud's marketplace |
| WSL | Windows Subsystem for Linux |
| Raspberry Pi | ARM64 devices |
| Container | OCI images for Podman/Docker |
wget https://mirror.almalinux.org/isos/cloud/AlmaLinux-9-GenericCloud-latest.x86_64.qcow2This image can be imported directly into OpenStack or run on KVM:
sudo virt-install \
--name cloud1 \
--vcpus 2 --memory 2048 \
--disk path=AlmaLinux-9-GenericCloud-latest.x86_64.qcow2 \
--import \
--network bridge=br0The --import option tells virt-install that the disk already contains a system — no installer needed. cloud-init runs the provisioning at first boot.
cloud-init is the industry standard for provisioning cloud instances (introduced in episode 3). When an instance first boots, it reads two sources:
#cloud-config
hostname: web01
users:
- name: devops
groups: [wheel]
sudo: ALL=(ALL) NOPASSWD:ALL
ssh_authorized_keys:
- ssh-ed25519 AAAA... user@host
package_update: true
packages:
- htop
- git
runcmd:
- systemctl enable --now httpdThe runcmd block runs commands after packages are installed — a "bootstrap" pattern that turns an instance into a ready-to-use service within minutes.
cloud-init status
cloud-init query -n hostnamecloud-init status shows the provisioning phase (running/done); query reads values from the metadata. For debugging, the full log is at /var/log/cloud-init.log.
Tip
Wrong user-data doesn't require a reinstall: clear the state and rerun with cloud-init clean && cloud-init init. In a lab, an already-provisioned image can be reset to be "like new" for repeated testing.
AlmaLinux is available on the AWS Marketplace or via official AMIs. With the AWS CLI:
aws ec2 describe-images --filters "Name=name,Values=AlmaLinux OS 9.*" --region us-east-1On Azure, images are available in the marketplace; on GCP, search with gcloud compute images list --filter="family=almalinux". OpenStack uses the direct image import mechanism from the qcow2 file we already downloaded.
The principle is the same on every platform: pick an AlmaLinux image, provide user-data (SSH key + configuration), and the instance is ready to use. That's why mastering cloud-init brings great value — one skill applies to all clouds.
WSL (Windows Subsystem for Linux) lets you run Linux distros on Windows without a full VM. AlmaLinux is available as an official WSL distribution.
wsl --install
wsl --list --online
wsl --install AlmaLinux-9After import, run it and set up the user:
wsl -d AlmaLinux-9
sudo dnf5 upgradeInfo
WSL isn't a replacement for a production server — it's a development environment. The main difference: no full systemd in older WSL versions (except supported WSL 2), so don't use WSL as a benchmark for production service behavior.
AlmaLinux officially supports Raspberry Pi 4 and 5 with ARM64 images — bringing a RHEL-compatible system to a $35 device.
sudo dnf5 install -y rpi-imagerOr use the dd tool after downloading the image from the Raspberry Pi page at almalinux.org/cloud-images:
sudo dd if=AlmaLinux-9-rpi-latest.img of=/dev/mmcblk0 bs=4M status=progressOnce the card is ready, put it in the Raspberry Pi, boot, log in as the almalinux user (default password per the documentation), then run sudo dnf5 upgrade and change the password.
AlmaLinux's support covers aarch64 (including Raspberry Pi), with special attention to armv7 for older 32-bit devices. For larger ARM servers, aarch64 is fully supported across all releases — including container and Kubernetes workloads.
cloud-init status. If provisioning fails, the status and log are the first clue.lsblk before dd — a mistake here permanently deletes data.In this episode 19 you've taken AlmaLinux to various environments: GenericCloud deployment with cloud-init on AWS, Azure, GCP, and OpenStack, running AlmaLinux on Windows via WSL, and using the ARM64 Raspberry Pi images for edge servers and labs.
Key takeaways:
cloud-init status and query are provisioning debugging tools.almalinux.org/cloud-images.With cloud and edge under control, you're ready for one of the most important topics: migration. In the next episode, Episode 20, we'll cover ELevate & Cross-Version Migration — in-place upgrades between major versions with leapp, converting CentOS to AlmaLinux with almalinux-deploy, and the correct preflight, rollback, and post-migration practices. See you there!