mirror of
https://github.com/joleuger/vuinputd.git
synced 2026-07-17 16:36:03 +00:00
60 lines
1.7 KiB
Bash
60 lines
1.7 KiB
Bash
#!/bin/sh
|
|
# SPDX-License-Identifier: MIT
|
|
set -eu
|
|
|
|
# How to do it is documented on https://cloudinit.readthedocs.io/en/latest/howto/launch_qemu.html
|
|
|
|
|
|
ROOT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
|
|
PREPARED_DIR="${ROOT_DIR}/prepared"
|
|
IDENTITY_DIR="${PREPARED_DIR}/identity"
|
|
TMP_DIR="${ROOT_DIR}/tmp"
|
|
|
|
KEY_PRIV="${IDENTITY_DIR}/ssh_ed25519"
|
|
KEY_PUB="${IDENTITY_DIR}/ssh_ed25519.pub"
|
|
|
|
USER_DATA_SRC="${ROOT_DIR}/cloud-init/template/user-data.tmpl"
|
|
META_DATA_SRC="${ROOT_DIR}/cloud-init/template/meta-data.tmpl"
|
|
|
|
mkdir -p ${TMP_DIR}
|
|
|
|
# --------------------------------------------------------------------
|
|
# SSH identity (per user, stable)
|
|
# --------------------------------------------------------------------
|
|
if [ ! -f "${KEY_PRIV}" ]; then
|
|
echo "[*] Generating SSH keypair"
|
|
ssh-keygen -t ed25519 -N "" -f "${KEY_PRIV}" -C "distro-tests"
|
|
else
|
|
echo "[*] Reusing existing SSH key"
|
|
fi
|
|
|
|
SSH_KEY="$(cat "${KEY_PUB}")"
|
|
|
|
# --------------------------------------------------------------------
|
|
# Build user-data with injected SSH key
|
|
# --------------------------------------------------------------------
|
|
USER_DATA_TMP="${TMP_DIR}/user-data"
|
|
META_DATA_TMP="${TMP_DIR}/meta-data"
|
|
|
|
awk -v key="${SSH_KEY}" '
|
|
/^users:/ { print; users=1; next }
|
|
users && /ssh_authorized_keys:/ {
|
|
print
|
|
print " - " key
|
|
next
|
|
}
|
|
{ print }
|
|
' "${USER_DATA_SRC}" > "${USER_DATA_TMP}"
|
|
|
|
cp "${META_DATA_SRC}" "${META_DATA_TMP}"
|
|
|
|
# --------------------------------------------------------------------
|
|
# Create seed ISO
|
|
# --------------------------------------------------------------------
|
|
echo "[*] Creating cloud-init seed.iso"
|
|
cloud-localds \
|
|
"${PREPARED_DIR}/seed.iso" \
|
|
"${USER_DATA_TMP}" \
|
|
"${META_DATA_TMP}"
|
|
|
|
echo "[✓] cloud-init ISO ready: ${PREPARED_DIR}/seed.iso"
|