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