#!/bin/bash # pct-create.sh # One-command LXC container provisioner for Proxmox VE. # Creates a container with sane defaults — no GUI needed. # # Usage: bash pct-create.sh # Example: bash pct-create.sh 105 grafana 192.168.1.105 # # Run on the Proxmox host as root. set -euo pipefail # ── Config — edit these defaults ──────────────────────────────── TEMPLATE="local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst" STORAGE="local-lvm" BRIDGE="vmbr0" GATEWAY="192.168.1.1" NAMESERVER="1.1.1.1" CORES=2 MEMORY=1024 # MB SWAP=512 # MB DISK=8 # GB SSH_KEY_FILE="/root/.ssh/id_ed25519.pub" # ── Parse args ─────────────────────────────────────────────────── if [[ $# -lt 3 ]]; then echo "Usage: $0 " echo "Example: $0 105 grafana 192.168.1.105" exit 1 fi VMID="$1" HOSTNAME="$2" IP="$3" # ── Validate ───────────────────────────────────────────────────── if pct status "$VMID" &>/dev/null; then echo "ERROR: Container $VMID already exists" exit 1 fi if [[ ! -f "$SSH_KEY_FILE" ]]; then echo "WARNING: SSH key not found at $SSH_KEY_FILE — container will have no SSH key" SSH_KEY_ARG="" else SSH_KEY_ARG="--ssh-public-keys $SSH_KEY_FILE" fi echo "Creating container:" echo " ID: $VMID" echo " Hostname: $HOSTNAME" echo " IP: ${IP}/24" echo " Gateway: $GATEWAY" echo " RAM: ${MEMORY}MB" echo " Disk: ${DISK}GB on $STORAGE" echo "" read -rp "Continue? [y/N] " confirm [[ "$confirm" =~ ^[Yy]$ ]] || exit 0 # ── Create container ───────────────────────────────────────────── pct create "$VMID" "$TEMPLATE" \ --hostname "$HOSTNAME" \ --cores "$CORES" \ --memory "$MEMORY" \ --swap "$SWAP" \ --net0 "name=eth0,bridge=${BRIDGE},ip=${IP}/24,gw=${GATEWAY}" \ --nameserver "$NAMESERVER" \ --rootfs "${STORAGE}:${DISK}" \ --unprivileged 1 \ --features nesting=1 \ --onboot 1 \ $SSH_KEY_ARG # ── Start and configure ────────────────────────────────────────── pct start "$VMID" sleep 3 # Update packages inside the container pct exec "$VMID" -- bash -c "apt update -qq && apt install -y -qq curl wget git htop" echo "" echo "✓ Container $VMID ($HOSTNAME) created and running" echo " Connect: pct enter $VMID" echo " SSH: ssh root@${IP}"