mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-10 06:26:57 +02:00
VirtualBox script changed to convert image untouched
With config drive there is no need to crack image to insert SSH keys. Then VirtualBox script was changed to just download CoreOS image and convert it to VDI format.
This commit is contained in:
parent
33858859fb
commit
8f3fc749c2
@ -1,15 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
VERSION_ID=alpha
|
||||
SSH_KEYS=""
|
||||
CORE_UID=500
|
||||
CORE_GID=500
|
||||
|
||||
USAGE="Usage: $0 [-V version] [-d /target/path] [-a authorized_keys]
|
||||
USAGE="Usage: $0 [-V version] [-d /target/path]
|
||||
Options:
|
||||
-d DEST Create CoreOS VDI image to the given path.
|
||||
-V VERSION Version to install (e.g. alpha) [default: ${VERSION_ID}]
|
||||
-a FILE SSH public keys for login access. [~/.ssh/id_{dsa,rsa}.pub]
|
||||
-h This help
|
||||
|
||||
This tool creates a CoreOS VDI image to be used with VirtualBox.
|
||||
@ -99,15 +95,14 @@ do
|
||||
case $OPTION in
|
||||
V) VERSION_ID="$OPTARG" ;;
|
||||
d) DEST="$OPTARG" ;;
|
||||
a) SSH_KEYS="$OPTARG" ;;
|
||||
h) echo "$USAGE"; exit;;
|
||||
*) exit 1;;
|
||||
esac
|
||||
done
|
||||
|
||||
# root user required
|
||||
if [ $(id -u) -ne 0 ]; then
|
||||
echo "$0: You must be root to run this script." >&2
|
||||
# root user forbidden
|
||||
if [ $(id -u) -eq 0 ]; then
|
||||
echo "$0: This script should not be run as root." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@ -118,19 +113,10 @@ if [ $? -ne 0 ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Verify provided keys file
|
||||
if [[ -n "${SSH_KEYS}" ]]; then
|
||||
if [[ ! -f "${SSH_KEYS}" ]]; then
|
||||
echo "$0: SSH keys file not found: ${SSH_KEYS}." >&2
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
# SSH keys file was not provided, setting to default
|
||||
SSH_KEYS=~/.ssh/id_*.pub
|
||||
if [ -z "${DEST}" ]; then
|
||||
DEST=$PWD
|
||||
fi
|
||||
|
||||
|
||||
|
||||
if [[ ! -d "${DEST}" ]]; then
|
||||
echo "$0: Target path (${DEST}) do not exists." >&2
|
||||
exit 1
|
||||
@ -141,7 +127,6 @@ mkdir "$WORKDIR"
|
||||
trap "rm -rf '${WORKDIR}'" EXIT
|
||||
|
||||
RAW_IMAGE_NAME="coreos_production_image.bin"
|
||||
VDI_IMAGE_NAME="coreos_production_${VERSION_ID}.vdi"
|
||||
IMAGE_NAME="${RAW_IMAGE_NAME}.bz2"
|
||||
DIGESTS_NAME="${IMAGE_NAME}.DIGESTS.asc"
|
||||
|
||||
@ -149,7 +134,6 @@ BASE_URL="http://storage.core-os.net/coreos/amd64-usr/${VERSION_ID}"
|
||||
IMAGE_URL="${BASE_URL}/${IMAGE_NAME}"
|
||||
DIGESTS_URL="${BASE_URL}/${DIGESTS_NAME}"
|
||||
DOWN_IMAGE="${WORKDIR}/${RAW_IMAGE_NAME}"
|
||||
VDI_IMAGE="${DEST}/${VDI_IMAGE_NAME}"
|
||||
|
||||
if ! wget --spider --quiet "${IMAGE_URL}"; then
|
||||
echo "$0: Image URL unavailable: $IMAGE_URL" >&2
|
||||
@ -161,6 +145,14 @@ if ! wget --spider --quiet "${DIGESTS_URL}"; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Gets CoreOS verion from version.txt file
|
||||
VERSION_NAME="version.txt"
|
||||
VERSION_URL="${BASE_URL}/${VERSION_NAME}"
|
||||
wget --no-verbose -O "${WORKDIR}/${VERSION_NAME}" "${VERSION_URL}"
|
||||
. "${WORKDIR}/${VERSION_NAME}"
|
||||
VDI_IMAGE_NAME="coreos_production_${COREOS_BUILD}.${COREOS_BRANCH}.${COREOS_PATCH}.vdi"
|
||||
VDI_IMAGE="${DEST}/${VDI_IMAGE_NAME}"
|
||||
|
||||
# Setup GnuPG for verifying the image signature
|
||||
export GNUPGHOME="${WORKDIR}/gnupg"
|
||||
mkdir "${GNUPGHOME}"
|
||||
@ -188,35 +180,6 @@ done
|
||||
echo "Writing ${IMAGE_NAME} to ${DOWN_IMAGE}..."
|
||||
bzcat -v --stdout "${WORKDIR}/${IMAGE_NAME}" >"${DOWN_IMAGE}"
|
||||
|
||||
# The ROOT partition should be #9 but make no assumptions here!
|
||||
# Also don't mount by label directly in case other devices conflict.
|
||||
PART_OFFSET=$(parted ${DOWN_IMAGE} unit b print | grep "ROOT" | awk '{print $2}')
|
||||
PART_OFFSET=${PART_OFFSET//B/}
|
||||
if [[ -z "${PART_OFFSET}" ]]; then
|
||||
echo "Unable to find new ROOT partition on ${DOWN_IMAGE}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MOUNT_DEST="${WORKDIR}/rootfs"
|
||||
CORE_SSH_DIR="${MOUNT_DEST}/home/core/.ssh"
|
||||
AUTHORIZED_KEYS="${CORE_SSH_DIR}/authorized_keys"
|
||||
|
||||
echo "Adding SSH key to authorized keys file..."
|
||||
mkdir -p "${MOUNT_DEST}"
|
||||
mount -t btrfs -o loop,offset=${PART_OFFSET},subvol=root "${DOWN_IMAGE}" "${MOUNT_DEST}"
|
||||
trap "umount '${MOUNT_DEST}' && rm -rf '${WORKDIR}'" EXIT
|
||||
|
||||
if [ ! -d "${CORE_SSH_DIR}" ]; then
|
||||
mkdir -p ${CORE_SSH_DIR}
|
||||
chmod 0600 ${CORE_SSH_DIR}
|
||||
fi
|
||||
|
||||
cat ${SSH_KEYS} > ${AUTHORIZED_KEYS}
|
||||
chmod 0600 ${AUTHORIZED_KEYS}
|
||||
chown -R $CORE_UID:$CORE_GID "${CORE_SSH_DIR}"
|
||||
|
||||
umount "${MOUNT_DEST}"
|
||||
|
||||
echo "Converting ${RAW_IMAGE_NAME} to VirtualBox format..."
|
||||
VBoxManage convertdd ${DOWN_IMAGE} ${VDI_IMAGE} --format VDI
|
||||
|
||||
@ -224,3 +187,5 @@ rm -rf "${WORKDIR}"
|
||||
trap - EXIT
|
||||
|
||||
echo "Success! CoreOS ${VERSION_ID} VDI image was created on ${VDI_IMAGE_NAME}"
|
||||
|
||||
# vim: ts=4 et
|
||||
|
Loading…
Reference in New Issue
Block a user