diff --git a/README.md b/README.md
index 71bd8022d21ab6b0ca2eb102745ecacbae28195b..c55c6ae6048145781cb1597a9d003508a416df56 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,9 @@ Turn your server/desktop to DigitalOcean / Linode / Vultr with a super-simple sc
 
 qemu, bash, sed
 
-> ArchLinux user: simply run `pacman -S cdrkit qemu-base`
+Optional: aria2c (simply replace aria2c with curl if you don't like it)
+
+> ArchLinux user: simply run `pacman -S cdrkit qemu-base aria2`
 
 ## Usage
 
@@ -24,6 +26,10 @@ qemu, bash, sed
 2. Modify `init.settings` and `runtime.settings`.
 3. Add `*/2 * * * * cd /path/to/my/repo && ./cron-callback.sh` into your crontab.
 
+## Supported cloudimg
+
+
+
 ## FAQ
 
 ## My desired OS is not supported yet...
diff --git a/cron-callback.sh b/cron-callback.sh
index 69c312039fd0fab714cb2944a02d09e5d242bfb9..128ddbd5e251daab450ce1e7222e60202d9c0dae 100755
--- a/cron-callback.sh
+++ b/cron-callback.sh
@@ -28,18 +28,22 @@ password: $password
 chpasswd: { expire: False }
 hostname: $name
 
-# configure sshd to allow users logging in using password 
-# rather than just keys
+# allow password login
 ssh_pwauth: True
 "
 }
 
 function download_cloud_img_if_not_exist () {
     local cloudimg="$1"
-    [[ "$1" != "focal-server-cloudimg-amd64.img" ]] && echo2 "ERROR: cloudimg not supported"
     [[ -f "base/$cloudimg" ]] && return
+
+    declare -A knowledge
+    knowledge["focal-server-cloudimg-amd64.img"]=https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img
+    knowledge["Arch-Linux-x86_64-cloudimg.qcow2"]=https://geo.mirror.pkgbuild.com/images/latest/Arch-Linux-x86_64-cloudimg.qcow2
+    [ ! "${knowledge[$cloudimg]+abc}" ] && echo2 "Unknown cloudimg $cloudimg. cannot download it." && return 1
+
     echo2 "+ Downloading cloudimg $cloudimg..."
-    aria2c -o "base/$cloudimg" https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img || ! echo2 "Failed to download ubuntu cloudimg" || return $?
+    aria2c -o "base/$cloudimg" "${knowledge[$cloudimg]}" || ! echo2 "Failed to download ubuntu cloudimg" || return $?
 }
 
 function create_vm_if_not_exist () {
@@ -50,20 +54,18 @@ function create_vm_if_not_exist () {
     local username=$4
     local password="$5"
 
-    if [[ -f "vm/$name/disk.img" ]]; then
-        # already exists
-        :
-    else
-        download_cloud_img_if_not_exist "$cloudimg" || return $?
-        rm -rf "vm/$name" ; mkdir -p "vm/$name"
-        # create it
-        echo2 "+ Creating VM image $name with options $@..."
-        generate_metadata "$name" > "vm/$name/meta-data" || return $?
-        generate_userdata "$username" "$password" "$name" > "vm/$name/user-data" || return $?
-        ( cd "vm/$name" ; genisoimage  -output initimg.iso -volid cidata -joliet -rock user-data meta-data ) || return $?
-        qemu-img create -f qcow2 -F qcow2 -o backing_file="../../base/focal-server-cloudimg-amd64.img" "vm/$name/disk.img" || return $?
-        qemu-img resize "vm/$name/disk.img" "$disk" || return $?
-    fi
+    # Check if disk img already exists.
+    [[ -f "vm/$name/disk.img" ]] && return
+
+    download_cloud_img_if_not_exist "$cloudimg" || return $?
+    rm -rf "vm/$name" ; mkdir -p "vm/$name"
+    # create it
+    echo2 "+ Creating VM image $name with options $@..."
+    generate_metadata "$name" > "vm/$name/meta-data" || return $?
+    generate_userdata "$username" "$password" "$name" > "vm/$name/user-data" || return $?
+    ( cd "vm/$name" ; genisoimage  -output initimg.iso -volid cidata -joliet -rock user-data meta-data ) || return $?
+    qemu-img create -f qcow2 -F qcow2 -o backing_file="../../base/$cloudimg" "vm/$name/disk.img" || return $?
+    qemu-img resize "vm/$name/disk.img" "$disk" || return $?
 }
 
 function start_vm_if_not_running () {
diff --git a/init.settings b/init.settings
index 05a5ef986e8bebbf54a481ed03af22690ea93e8a..ee1d47ff592dd1f77f87a51864947d1bfbf8b87a 100644
--- a/init.settings
+++ b/init.settings
@@ -1,4 +1,4 @@
 # name;cloudimg;disk;username;password (space will be trimmed)
 instance1;focal-server-cloudimg-amd64.img;60G;r;1
-#gitlab-ci;focal-server-cloudimg-amd64.img;60G;r;1
-#httptest ;focal-server-cloudimg-amd64.img;60G;r;1
+gitlab-ci;Arch-Linux-x86_64-cloudimg.qcow2;40G;r;1
+#httptest ;focal-server-cloudimg-amd64.img;20G;r;1
diff --git a/runtime.settings b/runtime.settings
index 43bbd4c23cd95eb6b16a0ed7ac7e94753d77f85d..d1a31fdb30629f1f691edc3b96d6b658c22ac611 100644
--- a/runtime.settings
+++ b/runtime.settings
@@ -1,4 +1,4 @@
 # name;options (name will be trimmed, options will be passed as-is)
 instance1;-m 2G -smp 2 -vnc :11 -net user,hostfwd=tcp::30471-:22
-#gitlab-ci;-m 4G -smp 4 -vnc :12 -net user,hostfwd=tcp::30473-:22
+gitlab-ci;-m 4G -smp 4 -vnc :12 -net user,hostfwd=tcp::30473-:22
 #httptest ;-m 1G -smp 1 -vnc :13 -net user,hostfwd=tcp::30474-:22