Prompts for config values on first run, saves to server.pkrvars.hcl. On subsequent runs, shows existing config and asks whether to reuse or enter new values. Secret keys are hidden when displaying existing config. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
86 lines
2.5 KiB
Bash
Executable file
86 lines
2.5 KiB
Bash
Executable file
#!/bin/bash
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
cd "$SCRIPT_DIR"
|
|
|
|
VARS_FILE="server.pkrvars.hcl"
|
|
|
|
collect_values() {
|
|
echo "=== Server Configuration ==="
|
|
echo ""
|
|
|
|
read -p "Base domain: " BASE_DOMAIN
|
|
|
|
read -p "SSH public key path [~/.ssh/id_ed25519.pub]: " PUBKEY_PATH
|
|
PUBKEY_PATH="${PUBKEY_PATH:-$HOME/.ssh/id_ed25519.pub}"
|
|
if [ ! -f "$PUBKEY_PATH" ]; then
|
|
echo "Warning: $PUBKEY_PATH not found, leaving SSH key empty"
|
|
SSH_PUBKEY=""
|
|
else
|
|
SSH_PUBKEY=$(cat "$PUBKEY_PATH")
|
|
fi
|
|
|
|
echo ""
|
|
echo "--- JuiceFS / Nextcloud Storage ---"
|
|
read -p "S3 endpoint (e.g. https://s3.amazonaws.com): " JUICEFS_S3_ENDPOINT
|
|
read -p "S3 bucket name: " JUICEFS_S3_BUCKET
|
|
read -p "S3 access key: " JUICEFS_S3_ACCESS_KEY
|
|
read -s -p "S3 secret key: " JUICEFS_S3_SECRET_KEY
|
|
echo
|
|
read -p "JuiceFS local cache size [50G]: " JUICEFS_CACHE_SIZE
|
|
JUICEFS_CACHE_SIZE="${JUICEFS_CACHE_SIZE:-50G}"
|
|
|
|
cat > "$VARS_FILE" <<EOF
|
|
base_domain = "$BASE_DOMAIN"
|
|
ssh_pubkey = "$SSH_PUBKEY"
|
|
juicefs_s3_endpoint = "$JUICEFS_S3_ENDPOINT"
|
|
juicefs_s3_bucket = "$JUICEFS_S3_BUCKET"
|
|
juicefs_s3_access_key = "$JUICEFS_S3_ACCESS_KEY"
|
|
juicefs_s3_secret_key = "$JUICEFS_S3_SECRET_KEY"
|
|
juicefs_cache_size = "$JUICEFS_CACHE_SIZE"
|
|
EOF
|
|
|
|
echo ""
|
|
echo "Configuration saved to $VARS_FILE"
|
|
}
|
|
|
|
if [ -f "$VARS_FILE" ]; then
|
|
echo "Existing configuration found ($VARS_FILE):"
|
|
echo ""
|
|
grep -v "secret_key" "$VARS_FILE"
|
|
echo " (secret keys hidden)"
|
|
echo ""
|
|
read -p "Use existing config? [Y/n]: " USE_EXISTING
|
|
if [[ "$USE_EXISTING" =~ ^[Nn] ]]; then
|
|
collect_values
|
|
fi
|
|
else
|
|
collect_values
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Initializing Packer plugins ==="
|
|
packer init ubuntu-server.pkr.hcl
|
|
|
|
echo ""
|
|
echo "=== Building image ==="
|
|
echo "This will take 15-30 minutes depending on your machine."
|
|
echo ""
|
|
|
|
packer build -var-file="$VARS_FILE" ubuntu-server.pkr.hcl
|
|
|
|
echo ""
|
|
echo "==========================================="
|
|
echo " Image built successfully!"
|
|
echo "==========================================="
|
|
echo " Output: $SCRIPT_DIR/output/packer-ubuntu-server"
|
|
echo ""
|
|
echo " To test locally:"
|
|
echo " qemu-system-x86_64 -m 4096 -hda output/packer-ubuntu-server -enable-kvm"
|
|
echo ""
|
|
echo " To convert for other formats:"
|
|
echo " qemu-img convert -f qcow2 -O raw output/packer-ubuntu-server output/server.raw"
|
|
echo " qemu-img convert -f qcow2 -O vmdk output/packer-ubuntu-server output/server.vmdk"
|
|
echo "==========================================="
|