76 lines
3.2 KiB
Bash
76 lines
3.2 KiB
Bash
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
BANNER="==========================================================="
|
|
printf "%s\n Proxmox Bootstrap\n%s\n\n" "$BANNER" "$BANNER"
|
|
|
|
echo "Applying post-pve-install fixes (fixing repos)..."
|
|
# Remove enterprise repos and add non-subscription repos safely
|
|
rm -f /etc/apt/sources.list.d/pve-enterprise.list
|
|
|
|
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" > /etc/apt/sources.list.d/pve-no-subscription.list
|
|
|
|
# Disable the "No Valid Subscription" nag screen
|
|
sed -i.bak "s/data.status !== 'Active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js
|
|
|
|
echo ""
|
|
echo "Applying NIC offloading fixes..."
|
|
# The community script disables TSO, GSO, and GRO on physical interfaces.
|
|
# We create a systemd service to ensure this applies on boot.
|
|
cat <<'EOF' > /etc/systemd/system/nic-offload-fix.service
|
|
[Unit]
|
|
Description=Disable NIC offloading (TSO/GRO/GSO) for physical interfaces
|
|
After=network-online.target
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
# Iterate over all physical interfaces (excluding lo, bridges, veth, etc.)
|
|
ExecStart=/bin/bash -c 'for dev in /sys/class/net/*; do if [ "$(basename "$dev")" != "lo" ] && [[ ! "$(basename "$dev")" =~ ^(vmbr|veth|fwbr|tap|bonding) ]]; then /usr/sbin/ethtool -K "$(basename "$dev")" tso off gso off gro off || true; fi; done'
|
|
RemainAfterExit=yes
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
systemctl enable --now nic-offload-fix.service || true
|
|
|
|
echo ""
|
|
echo "Updating system and installing OpenTofu..."
|
|
apt-get update
|
|
# Install curl, git, gnupg, ethtool, and required apt dependencies
|
|
apt-get install -y apt-transport-https ca-certificates curl git gnupg ethtool
|
|
|
|
# Install OpenTofu repository and binary
|
|
install -m 0755 -d /etc/apt/keyrings
|
|
curl -fsSL https://get.opentofu.org/opentofu.gpg | tee /etc/apt/keyrings/opentofu.gpg >/dev/null
|
|
curl -fsSL https://packages.opentofu.org/opentofu/tofu/gpgkey | gpg --no-tty --batch --dearmor -o /etc/apt/keyrings/opentofu-repo.gpg >/dev/null
|
|
chmod a+r /etc/apt/keyrings/opentofu.gpg /etc/apt/keyrings/opentofu-repo.gpg
|
|
|
|
printf "deb [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main\ndeb-src [signed-by=/etc/apt/keyrings/opentofu.gpg,/etc/apt/keyrings/opentofu-repo.gpg] https://packages.opentofu.org/opentofu/tofu/any/ any main\n" > /etc/apt/sources.list.d/opentofu.list
|
|
chmod a+r /etc/apt/sources.list.d/opentofu.list
|
|
|
|
apt-get update
|
|
apt-get install -y tofu
|
|
|
|
echo ""
|
|
echo "Cloning the infrastructure repository..."
|
|
cd /root
|
|
if [ -d "nix-config" ]; then
|
|
echo "Repository already exists. Pulling latest..."
|
|
cd nix-config
|
|
git pull
|
|
else
|
|
git clone -b v2 https://git.depeuter.dev/Bos55/nix-config.git
|
|
cd nix-config
|
|
fi
|
|
|
|
echo ""
|
|
echo "Bootstrapping Proxmox Host State..."
|
|
cd opentofu/nodes/mikoshi
|
|
|
|
echo "Initializing OpenTofu..."
|
|
tofu init -upgrade
|
|
|
|
echo "Applying bare-metal state..."
|
|
tofu apply -auto-approve
|
|
|
|
printf "\n%s\n Bootstrap Complete!\n The ZFS pool, Resource Pools, and the Control Center\n VM have been provisioned.\n\n The Control Center is booting now. Once online, it will automatically\n pull this repository and provision the rest of your VMs!\n%s\n" "$BANNER" "$BANNER"
|