github.com/scaleway/scaleway-cli@v1.11.1/examples/create-image-from-http.sh (about) 1 #!/bin/bash 2 3 set -e 4 URL="${1}" 5 6 if [ -z "${1}" ]; then 7 echo "usage: $(basename ${0}) <url>" 8 echo "" 9 echo "examples:" 10 echo " - $(basename ${0}) http://test-images.fr-1.storage.online.net/scw-distrib-ubuntu-trusty.tar" 11 echo " - VOLUME_SIZE=50GB $(basename ${0}) http://test-images.fr-1.storage.online.net/scw-distrib-ubuntu-trusty.tar" 12 exit 1 13 fi 14 15 16 NAME=$(basename "${URL}") 17 SNAPSHOT_NAME=${NAME%.*}-$(date +%Y-%m-%d_%H:%M) 18 IMAGE_NAME=${IMAGE_NAME:-$SNAPSHOT_NAME} 19 IMAGE_BOOTSCRIPT=${IMAGE_BOOTSCRIPT:stable} 20 SCW_COMMERCIAL_TYPE=${SCW_COMMERCIAL_TYPE:-VC1S} 21 VOLUME_SIZE=${VOLUME_SIZE:-50GB} 22 SCW_TARGET_ARCH=x86_64 23 if [ "$SCW_COMMERCIAL_TYPE" = "C1" ]; then 24 SCW_TARGET_ARCH=arm 25 fi 26 KEY=$(cat ~/.ssh/id_rsa.pub | awk '{ print $1" "$2 }' | tr ' ' '_') 27 28 echo "[+] URL of the tarball: ${URL}" 29 echo "[+] Target name: ${NAME}" 30 31 32 echo "[+] Creating new server in rescue mode with a secondary volume..." 33 SERVER=$(SCW_TARGET_ARCH="$SCW_TARGET_ARCH" scw run --commercial-type="${SCW_COMMERCIAL_TYPE}" -d --env="AUTHORIZED_KEY=${KEY} boot=none INITRD_DROPBEAR=1" --name="image-writer-${NAME}" "${VOLUME_SIZE}") 34 echo "[+] Server created: ${SERVER}" 35 36 37 echo "[+] Booting..." 38 scw exec -w "${SERVER}" 'uname -a' 39 echo "[+] Server is booted" 40 41 42 if [ -n "${SCW_GATEWAY_HTTP_PROXY}" ]; then 43 echo "[+] Configuring HTTP proxy" 44 # scw exec "${SERVER}" "echo proxy=${SCW_GATEWAY_HTTP_PROY} >> .curlrc" 45 ( 46 set +x 47 scw exec "${SERVER}" "echo export http_proxy=${SCW_GATEWAY_HTTP_PROXY} > /proxy-env" >/dev/null 2>/dev/null || (echo "Failed to configure HTTP proxy"; exit 1) || exit 1 48 ) 49 fi 50 51 52 echo "[+] Formating and mounting disk..." 53 # FIXME: make disk dynamic between /dev/vda and /dev/nbd1 54 scw exec "${SERVER}" '/sbin/mkfs.ext4 /dev/vda && mkdir -p /mnt && mount /dev/vda /mnt' 55 echo "[+] /dev/nbd1 formatted in ext4 and mounted on /mnt" 56 57 58 echo "[+] Download tarball and write it to /mnt" 59 scw exec "${SERVER}" "touch /proxy-env; . /proxy-env; wget -qO - ${URL} | tar -C /mnt/ -xf - && sync" 60 echo "[+] Tarball extracted on disk" 61 62 63 echo "[+] Stopping the server" 64 scw stop "${SERVER}" >/dev/null 65 scw wait "${SERVER}" 66 echo "[+] Server stopped" 67 68 69 echo "[+] Creating a snapshot of disk 1" 70 SNAPSHOT=$(scw commit --volume=0 "${SERVER}" "${SNAPSHOT_NAME}") 71 echo "[+] Snapshot ${SNAPSHOT} created" 72 73 74 echo "[+] Creating an image based of the snapshot" 75 if [ -n "${IMAGE_ARCH}" ]; then 76 IMAGE=$(scw tag --arch="${IMAGE_ARCH}" --bootscript="${IMAGE_BOOTSCRIPT}" "${SNAPSHOT}" "${IMAGE_NAME}") 77 else 78 IMAGE=$(scw tag --bootscript="${IMAGE_BOOTSCRIPT}" "${SNAPSHOT}" "${IMAGE_NAME}") 79 fi 80 echo "[+] Image created: ${IMAGE}" 81 82 83 echo "[+] Deleting temporary server" 84 scw rm "${SERVER}" >/dev/null 85 echo "[+] Server deleted"