Halo Guys, Ridwan heres!
Come again with a new notes update!
Belakangan ini, arsitektur ARM64 atau aarch64 makin naik daun, mulai dari perangkat Raspberry Pi, Apple Silicon, sampai instance Public Cloud seperti AWS Graviton, Google, Azure, Oracle Ampere, semuanya mulai menyediakan ARM karena efisiensi dayanya yang luar biasa, tetapi tetap punya performa jempolan.
Kenapa sih mulai banyak yang memakai arsitektur ARM?
- Hemat Daya: Cocok buat server rumahan yang nyala 24/7 tanpa bikin tagihan listrik bengkak.
- Performa per watt: Di banyak skenario, prosesor ARM modern jauh lebih efisien dibandingkan dengan x86 tradisional.
- Ekosistem Sudah mulai Matang: Sekarang hampir semua aplikasi open-source sudah mendukung arsitektur
Karena di masa depan akan banyak pengguna ARM, bagaimana cara kita melakukan troubleshooting atau mereplikasi issue, kalau pelanggan menggunakan instances dengan arsitektur ARM ?
Apakah kita perlu menyiapkan Perangkat Devices ARM atau berlangganan Cloud Services juga? Jawabannya tentu tidak.
Laptop harian kita yang biasanya menggunakan arsitektur x86_64 sudah bisa mengemulasikan/virtualisasikan ARM devices. Jadi, kita tidak perlu beli hardware baru atau langganan cloud services hanya untuk testing atau troubleshooting.
Penasaran gimana caranya?
Yuk, simak catatan kali ini!
1. Install Cross-Architecture QEMU
Langkah pertama, kita butuh tools utama, yaitu QEMU. Kamu bisa langsung install dengan perintah ini:
# Debian / Ubuntu
$ sudo apt update
$ sudo apt install qemu-system-arm qemu-efi qemu-efi-aarch64 qemu-utils virt-manager
# RHEL / Fedora
$ sudo dnf group install --with-optional virtualization
$ sudo dnf install qemu-system-aarch64 qemu-utils virt-manager
Note: Paket qemu-system-arm ini adalah paket yang memungkinkan laptop kita menjalankan instruksi CPU ARM64 di atas prosesor Intel/AMD kalian.
2. Download ARM64 Cloud Image
Di sini kita tidak perlu menginstal secara manual menggunakan ISO file yang makan waktu lama.
Cukup pakai Cloud Image saja yang sudah jadi (format .img atau .qcow2).
- Ubuntu = https://cloud-images.ubuntu.com/
- Debian = https://www.debian.org/distrib/
- Rocky Linux = https://rockylinux.org/download?arch=aarch64
- Alpine Linux = https://alpinelinux.org/cloud/
3. Create Virtual Machine ARM64
Oke, setelah file cloud images sudah di-download, Kita bisa langsung create VM-nya, tidak ada perbedaan yang jauh dalam membuat VM untuk ARM atau x64. Perhatikan perbedaannya !
Disini saya menggunakan Debian 13 dengan path /home/ridwan/Documents/Qcow2/debian-13-nocloud-arm64.qcow2
- Menggunakan Qemu ( CLI ):
$ qemu-system-aarch64 \
-machine virt \
-cpu cortex-a57 \
-smp 2 \
-m 2G \
-bios /usr/share/AAVMF/AAVMF_CODE.fd \
-drive if=none,file=/home/ridwan/Documents/Qcow2/debian-13-nocloud-arm64.qcow2,id=hd0 \
-device virtio-blk-device,drive=hd0 \
-netdev user,id=net0 \
-device virtio-net-device,netdev=net0 \
-nographic
Note: untuk Spec CPU & RAM kalian dapat sesuaikan dengan kebutuhan, untuk path bios location pastikan sudah sesuai !
- Menggunakan Virt-Manager (GUI)
Pada "Architecture options" pastikan kalian memilih :
- Architecture = aarch64
- Machine Type = Virt
Kemudian pilih cloud images / qcow2 disk dari OS ARM kalian,
untuk Spec CPU ,RAM , Disk kalian dapat sesuaikan dengan kebutuhan
Next / Forward sampai step terakhir, dan tampil seperti berikut :
Note: Jangan kwatir ini normal, Pada banyak image Linux ARM64 (terutama versi server atau cloud image), output booting diarahkan ke Serial Console (ttyAMA0) secara default, bukan ke display grafis. ARM tidak memiliki standar VGA secara otomatis.
**Bonus: Create Ubuntu ARM64 Instances on Public Cloud
- AWS Graviton (EC2)
# Launch a Graviton instance with Ubuntu 24.04
aws ec2 run-instances \
--image-id $(aws ec2 describe-images \
--filters "Name=name,Values=ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-arm64-server-*" \
"Name=state,Values=available" \
--query 'sort_by(Images, &CreationDate)[-1].ImageId' \
--output text \
--region us-east-1) \
--instance-type t4g.micro \
--key-name your-key-pair \
--region us-east-1
- Google Cloud
# Via Google Cloud Shell
gcloud compute instances create [INSTANCE_NAME] \
--project=[PROJECT_ID] \
--zone=us-central1-a \
--machine-type=t2a-standard-1 \
--image-family=ubuntu-2204-lts-arm64 \
--image-project=ubuntu-os-cloud \
--boot-disk-size=20GB \
--boot-disk-type=pd-balanced
- Oracle Cloud
# Via OCI CLI
oci compute instance launch \
--compartment-id <compartment-id> \
--availability-domain <ad-name> \
--shape VM.Standard.A1.Flex \
--shape-config '{"ocpus": 4, "memoryInGBs": 24}' \
--image-id <ubuntu-24.04-arm64-image-id> \
--subnet-id <subnet-id>
- Hetzner Ampere
# Create an Arm64 server on Hetzner
hcloud server create \
--name arm64-server \
--type cax11 \ # Ampere Altra-based server type
--image ubuntu-24.04 \
--ssh-key your-key
Rdw