Jump to content

Install Arch Linux ARM di QEMU

From Haidhi Wiki
Revision as of 04:40, 14 June 2026 by SanzSkuy (talk | contribs) (Created page with "Panduan ini menjalankan '''Arch Linux ARM (ALARM)''' sebagai ''guest'' di dalam QEMU lewat '''emulasi penuh''' (''full-system emulation''), sehingga bisa dijalankan dari host arsitektur apa pun (x86_64, ARM, dll). {{Note|Arch Linux ARM '''tidak menyediakan ISO installer'''. Distronya dikirim sebagai ''rootfs tarball'' yang harus disiapkan ke dalam disk dari sisi host terlebih dahulu, baru di-boot. Karena itu langkahnya berbeda dari instalasi Arch x86 biasa.}} Terse...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Panduan ini menjalankan Arch Linux ARM (ALARM) sebagai guest di dalam QEMU lewat emulasi penuh (full-system emulation), sehingga bisa dijalankan dari host arsitektur apa pun (x86_64, ARM, dll).

Template:Note

Tersedia 2 metode:

  • Metode A — Direct kernel boot (disarankan, paling sederhana). Kernel di-pass langsung lewat argumen QEMU. Tidak butuh firmware UEFI maupun bootloader.
  • Metode B — UEFI boot (lebih realistis & mandiri). VM boot sendiri seperti mesin asli. Lebih banyak langkah.

Mulai dari Metode A. Pindah ke Metode B kalau sudah nyaman.

Prasyarat

Kebutuhan di host:

  • RAM cukup (alokasikan ≥ 2–4 GB untuk VM)
  • Disk kosong ± 20 GB
  • Akses sudo
  • Emulasi murni (TCG) itu lambat di host non-ARM — ini normal. Di host Apple Silicon bisa pakai akselerasi HVF (lihat catatan di bagian boot).

Install paket QEMU

Arch / Manjaro:

sudo pacman -S --needed qemu-base qemu-system-aarch64 libarchive
# untuk Metode B (UEFI), tambahkan firmware:
sudo pacman -S edk2-aarch64

Debian / Ubuntu:

sudo apt update
sudo apt install qemu-system-arm qemu-utils libarchive-tools
# untuk Metode B (UEFI):
sudo apt install qemu-efi-aarch64

Fedora:

sudo dnf install qemu-system-aarch64 qemu-img libarchive
# untuk Metode B (UEFI):
sudo dnf install edk2-aarch64

Tip: libarchive / libarchive-tools dibutuhkan untuk perintah bsdtar. Tarball ALARM wajib diekstrak pakai bsdtar, bukan tar GNU biasa, supaya permission & atribut file terjaga.

Metode A — Direct Kernel Boot (disarankan)

Langkah 1: Download rootfs tarball

wget http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz

Langkah 2: Buat disk image

qemu-img create -f qcow2 alarm.qcow2 16G

(16G = batas maksimum; file qcow2 tumbuh sesuai pemakaian, tidak langsung memakan 16 GB.)

Langkah 3: Siapkan partisi via qemu-nbd

Sambungkan image qcow2 sebagai network block device agar bisa dipartisi dari host:

sudo modprobe nbd max_part=8
sudo qemu-nbd --connect=/dev/nbd0 alarm.qcow2

Buat satu partisi root ext4 (cukup untuk Metode A):

sudo parted -s /dev/nbd0 mklabel gpt
sudo parted -s /dev/nbd0 mkpart primary ext4 1MiB 100%
sudo mkfs.ext4 /dev/nbd0p1

Langkah 4: Mount & ekstrak rootfs

sudo mount /dev/nbd0p1 /mnt
sudo bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C /mnt
sudo sync

Cek isi /boot — pastikan ada kernel & initramfs:

ls -lh /mnt/boot

Harus muncul Image dan initramfs-linux-fallback.img (juga initramfs-linux.img). Kalau initramfs tidak ada, gunakan Metode B yang me-regenerate-nya saat boot pertama.

Langkah 5: Salin kernel + initramfs ke host

Metode A mem-boot kernel dari sisi host, jadi salin keluar:

sudo cp /mnt/boot/Image ./Image
sudo cp /mnt/boot/initramfs-linux-fallback.img ./initramfs.img
sudo chown $USER:$USER Image initramfs.img

Template:Note

Langkah 6: (Opsional) atur fstab

echo '/dev/vda1  /  ext4  defaults  0 1' | sudo tee /mnt/etc/fstab

Langkah 7: Lepas mount & putuskan nbd

sudo umount /mnt
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd      # opsional

Langkah 8: Jalankan VM

qemu-system-aarch64 \
  -M virt \
  -cpu cortex-a72 \
  -smp 4 \
  -m 4G \
  -kernel Image \
  -initrd initramfs.img \
  -append "root=/dev/vda1 rw console=ttyAMA0" \
  -drive if=virtio,file=alarm.qcow2,format=qcow2 \
  -nic user,model=virtio-net-pci,hostfwd=tcp::2222-:22 \
  -nographic

Penjelasan opsi:

Opsi Arti
-M virt Mesin virtual ARM generik standar QEMU
-cpu cortex-a72 CPU yang diemulasi (alternatif: -cpu max)
-smp 4 / -m 4G 4 vCPU, RAM 4 GB
-kernel / -initrd / -append Boot kernel langsung + argumen kernel
-drive if=virtio,... Disk muncul sebagai /dev/vda di dalam VM
-nic user,...,hostfwd=tcp::2222-:22 Jaringan user-mode + forward port host 2222 → guest 22 (SSH)
-nographic Output serial langsung ke terminal

Tip: Keluar dari -nographic: tekan Template:Ic lalu Template:Ic.
Apple Silicon (host ARM): tambahkan -accel hvf -cpu host untuk kecepatan jauh lebih tinggi (ganti -cpu cortex-a72).

⚠️
Warning
Catatan Metode A: karena kernel berada di host, kalau nanti update kernel di dalam VM (pacman -Syu), salin ulang Image & initramfs yang baru dari /boot, atau pindah ke Metode B agar update kernel otomatis ke-boot.

Login pertama & konfigurasi awal

Akun default Arch Linux ARM:

User Password
alarm alarm
root root

Login sebagai root untuk setup.

Inisialisasi keyring pacman (WAJIB sebelum update)

pacman-key --init
pacman-key --populate archlinuxarm

Update sistem

pacman -Syu

Konfigurasi dasar

# Ganti password root
passwd

# Zona waktu (Bandung = WIB)
ln -sf /usr/share/zoneinfo/Asia/Jakarta /etc/localtime
hwclock --systohc

# Locale
sed -i 's/#en_US.UTF-8/en_US.UTF-8/' /etc/locale.gen
sed -i 's/#id_ID.UTF-8/id_ID.UTF-8/' /etc/locale.gen
locale-gen
echo 'LANG=en_US.UTF-8' > /etc/locale.conf

# Hostname
echo 'archarm' > /etc/hostname

# Buat user baru + sudo
pacman -S --needed sudo
useradd -m -G wheel namauser
passwd namauser
EDITOR=nano visudo   # hapus tanda # pada baris: %wheel ALL=(ALL:ALL) ALL

SSH dari host

ALARM sudah menyertakan sshd. Dari terminal host:

ssh -p 2222 alarm@localhost

(Kalau koneksi ditolak: di dalam VM jalankan systemctl enable --now sshd.)

Selesai — sistem Arch Linux ARM siap dipakai.

Metode B — UEFI Boot (mandiri, lebih realistis)

Di sini VM boot sendiri lewat firmware UEFI (edk2), tanpa perlu pass kernel dari host. Update kernel di dalam VM otomatis ke-boot. Pendekatan paling andal di QEMU adalah lewat startup.nsh di EFI System Partition (ESP).

Ulangi Langkah 1–3 dari Metode A (download tarball, buat qcow2, modprobe + connect nbd), lalu lanjut:

B1. Partisi: ESP + root

sudo parted -s /dev/nbd0 mklabel gpt
sudo parted -s /dev/nbd0 mkpart ESP fat32 1MiB 513MiB
sudo parted -s /dev/nbd0 set 1 esp on
sudo parted -s /dev/nbd0 mkpart primary ext4 513MiB 100%
sudo mkfs.fat -F32 /dev/nbd0p1
sudo mkfs.ext4 /dev/nbd0p2

B2. Mount & ekstrak

sudo mount /dev/nbd0p2 /mnt
sudo bsdtar -xpf ArchLinuxARM-aarch64-latest.tar.gz -C /mnt
sudo mkdir -p /mnt/boot/efi
sudo mount /dev/nbd0p1 /mnt/boot/efi

B3. Siapkan kernel + startup.nsh di ESP

# Ambil PARTUUID partisi root
ROOT_PARTUUID=$(sudo blkid -s PARTUUID -o value /dev/nbd0p2)
echo "Root PARTUUID = $ROOT_PARTUUID"

# Salin kernel + initramfs ke ESP
sudo cp /mnt/boot/Image /mnt/boot/efi/
sudo cp /mnt/boot/initramfs-linux-fallback.img /mnt/boot/efi/

# Buat startup.nsh (UEFI Shell otomatis menjalankannya)
printf 'Image initrd=initramfs-linux-fallback.img root=PARTUUID=%s rw console=ttyAMA0\n' "$ROOT_PARTUUID" \
  | sudo tee /mnt/boot/efi/startup.nsh

B4. fstab

ESP_UUID=$(sudo blkid -s UUID -o value /dev/nbd0p1)
sudo tee /mnt/etc/fstab >/dev/null <<EOF
PARTUUID=$ROOT_PARTUUID  /          ext4   defaults        0 1
UUID=$ESP_UUID           /boot/efi  vfat   defaults        0 2
EOF

B5. Lepas mount & putuskan nbd

sudo umount /mnt/boot/efi
sudo umount /mnt
sudo qemu-nbd --disconnect /dev/nbd0

B6. Siapkan firmware UEFI

Variabel NVRAM perlu file yang bisa ditulis — salin templatenya:

# Arch (edk2-aarch64):
cp /usr/share/edk2/aarch64/QEMU_VARS.fd ./QEMU_VARS.fd
CODE=/usr/share/edk2/aarch64/QEMU_CODE.fd

# Debian/Ubuntu (qemu-efi-aarch64) — pakai ini sebagai gantinya:
# cp /usr/share/AAVMF/AAVMF_VARS.fd ./QEMU_VARS.fd
# CODE=/usr/share/AAVMF/AAVMF_CODE.fd

B7. Jalankan VM (UEFI)

qemu-system-aarch64 \
  -M virt \
  -cpu cortex-a72 \
  -smp 4 \
  -m 4G \
  -drive if=pflash,format=raw,readonly=on,file="$CODE" \
  -drive if=pflash,format=raw,file=QEMU_VARS.fd \
  -drive if=virtio,file=alarm.qcow2,format=qcow2 \
  -nic user,model=virtio-net-pci,hostfwd=tcp::2222-:22 \
  -nographic

Firmware akan gagal menemukan bootloader standar, jatuh ke UEFI Shell, lalu menjalankan startup.nsh yang mem-boot kernel. Setelah masuk, lanjutkan dari bagian Login pertama & konfigurasi awal.

Tip: Setelah update kernel di dalam VM, salin ulang kernel/initramfs ke ESP, atau (lebih baik) install bootloader sungguhan seperti systemd-boot/grub dari dalam VM agar tidak perlu startup.nsh.

Troubleshooting

Kernel panic "Unable to mount root fs" / "VFS
Cannot open root device"
Disk tidak terbaca. Pastikan pakai initramfs-linux-fallback.img (bukan yang biasa), dan root=/dev/vda1 cocok dengan layout disk (/dev/vda = drive virtio pertama).
Layar diam / tidak ada output
Pastikan ada console=ttyAMA0 di -append dan pakai -nographic. Untuk Metode B, console diatur di startup.nsh.
bsdtar: command not found
Install libarchive (Arch/Fedora) atau libarchive-tools (Debian/Ubuntu).
Could not access KVM kernel module / sangat lambat
Normal di host non-ARM: kamu memang sedang mengemulasi ARM (TCG), bukan virtualisasi. Tidak ada KVM. Untuk percepatan, jalankan di host ARM (Apple Silicon: -accel hvf -cpu host).
/dev/nbd0 sibuk / tidak bisa connect
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd && sudo modprobe nbd max_part=8
Permission saat ekstrak
Selalu pakai sudo bsdtar -xpf ... (flag -p mempertahankan permission).

Tips lanjutan

  • GUI/desktop: ganti -nographic dengan -device virtio-gpu-pci -display gtk (atau -display sdl), lalu install desktop di dalam VM (mis. pacman -S xfce4). Emulasi grafis terasa berat.
  • Folder bersama host↔guest: paling praktis lewat SSH/scp ke port 2222, atau pakai virtfs/9p.
  • Perbesar disk nanti: qemu-img resize alarm.qcow2 +10G, lalu perluas partisi dari dalam VM.
  • Snapshot: qemu-img snapshot -c nama alarm.qcow2 (buat), -a nama (kembalikan), -l (daftar).
  • Bikin skrip launcher: simpan perintah qemu-system-aarch64 ... di file .sh agar tidak ketik ulang.