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"