Post-Install Configuration

Essential configuration steps after fresh Proxmox VE installation.

🚀 Automated Setup

Community Scripts (Recommended):

Video Tutorials:

Custom Automated Script:

Use the provided post-install automation script:

# Download and run the post-install script
wget -O - https://raw.githubusercontent.com/your-repo/proxmox-configs/main/scripts/post-install-setup.sh | bash

Or run the local script:

chmod +x configs/scripts/post-install-setup.sh
./configs/scripts/post-install-setup.sh

Configuration Files Available:

The complete automated setup script:

post-install-setup.sh
  1#!/bin/bash
  2
  3# Proxmox Post-Install Setup Script
  4# This script automates the post-installation configuration of Proxmox VE
  5# Run as root on fresh Proxmox installation
  6
  7set -euo pipefail
  8
  9# Colors for output
 10RED='\033[0;31m'
 11GREEN='\033[0;32m'
 12YELLOW='\033[1;33m'
 13NC='\033[0m' # No Color
 14
 15# Logging function
 16log() {
 17    echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}"
 18}
 19
 20warn() {
 21    echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] WARNING: $1${NC}"
 22}
 23
 24error() {
 25    echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $1${NC}"
 26    exit 1
 27}
 28
 29# Check if running as root
 30if [[ $EUID -ne 0 ]]; then
 31   error "This script must be run as root"
 32fi
 33
 34log "Starting Proxmox Post-Install Configuration"
 35
 36# 1. Remove local-lvm and extend root partition
 37log "Removing local-lvm storage and extending root partition..."
 38if lvs | grep -q "data"; then
 39    lvremove -y /dev/pve/data
 40    lvresize -l +100%FREE /dev/pve/root
 41    resize2fs /dev/mapper/pve-root
 42    log "Storage reconfiguration completed"
 43else
 44    warn "local-lvm not found, skipping storage reconfiguration"
 45fi
 46
 47# 2. Configure repositories
 48log "Configuring package repositories..."
 49
 50# Disable enterprise repositories
 51if [ -f /etc/apt/sources.list.d/pve-enterprise.list ]; then
 52    sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/pve-enterprise.list
 53    log "Disabled PVE Enterprise repository"
 54fi
 55
 56if [ -f /etc/apt/sources.list.d/ceph.list ]; then
 57    sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/ceph.list
 58    log "Disabled Ceph Enterprise repository"
 59fi
 60
 61# Add no-subscription repository
 62if ! grep -q "pve-no-subscription" /etc/apt/sources.list; then
 63    echo "deb http://download.proxmox.com/debian/pve $(lsb_release -cs) pve-no-subscription" >> /etc/apt/sources.list
 64    log "Added PVE No-Subscription repository"
 65fi
 66
 67# 3. Update system
 68log "Updating package lists and upgrading system..."
 69apt update
 70apt upgrade -y
 71
 72# 4. Install useful packages
 73log "Installing additional useful packages..."
 74apt install -y \
 75    curl \
 76    wget \
 77    vim \
 78    htop \
 79    iotop \
 80    iftop \
 81    ncdu \
 82    tree \
 83    git \
 84    unzip \
 85    software-properties-common \
 86    apt-transport-https \
 87    ca-certificates \
 88    gnupg \
 89    lsb-release
 90
 91# 5. Disable enterprise popup
 92log "Disabling enterprise subscription popup..."
 93PROXMOX_LIB="/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js"
 94if [ -f "$PROXMOX_LIB" ]; then
 95    cp "$PROXMOX_LIB" "${PROXMOX_LIB}.bak"
 96    sed -i "s/data.status !== 'Active'/false/g" "$PROXMOX_LIB"
 97    systemctl restart pveproxy.service
 98    log "Enterprise popup disabled"
 99else
100    warn "Proxmox library file not found, skipping popup disable"
101fi
102
103# 6. Configure automatic updates (optional)
104log "Configuring automatic security updates..."
105cat > /etc/apt/apt.conf.d/20auto-upgrades << EOF
106APT::Periodic::Update-Package-Lists "1";
107APT::Periodic::Unattended-Upgrade "1";
108APT::Periodic::AutocleanInterval "7";
109EOF
110
111# 7. Create directory structure for services
112log "Creating directory structure for Docker services..."
113mkdir -p /docker/{transmission/{data,watch},prowlarr/config,radarr/config,bazarr/config}
114mkdir -p /opt/docker/media-stack
115mkdir -p /mnt/nas-library/MULTIMEDIA/{movies,Downloads/{complete,incomplete}}
116
117# Create arr-stack user
118if ! id "arr-stack" &>/dev/null; then
119    adduser arr-stack --uid 1002 --disabled-password --gecos ""
120    log "Created arr-stack user (UID: 1002)"
121fi
122
123# Set permissions
124chown -R 1002:1002 /docker/
125log "Set permissions for Docker directories"
126
127# 8. Configure network (example - adjust as needed)
128log "Network configuration template created at /tmp/interfaces.example"
129cat > /tmp/interfaces.example << EOF
130# Example network configuration
131# Copy to /etc/network/interfaces and modify as needed
132
133auto lo
134iface lo inet loopback
135
136# Management interface
137auto vmbr0
138iface vmbr0 inet static
139    address 192.168.1.240/24
140    gateway 192.168.1.1
141    bridge-ports enp0s31f6
142    bridge-stp off
143    bridge-fd 0
144
145# Optional: Additional bridge for VMs
146#auto vmbr1
147#iface vmbr1 inet manual
148#    bridge-ports enp0s31f7
149#    bridge-stp off
150#    bridge-fd 0
151EOF
152
153# 9. Create backup script
154log "Creating backup script..."
155cat > /usr/local/bin/proxmox-backup.sh << 'EOF'
156#!/bin/bash
157# Simple Proxmox backup script
158# Customize as needed for your environment
159
160BACKUP_DIR="/mnt/backup"
161DATE=$(date +%Y%m%d_%H%M%S)
162
163# Create backup directory if it doesn't exist
164mkdir -p "$BACKUP_DIR"
165
166# Backup Proxmox configuration
167tar -czf "$BACKUP_DIR/pve-config-$DATE.tar.gz" /etc/pve/
168
169# Backup Docker configurations
170if [ -d "/docker" ]; then
171    tar -czf "$BACKUP_DIR/docker-configs-$DATE.tar.gz" /docker/
172fi
173
174# Clean old backups (keep last 7 days)
175find "$BACKUP_DIR" -name "*.tar.gz" -mtime +7 -delete
176
177echo "Backup completed: $DATE"
178EOF
179
180chmod +x /usr/local/bin/proxmox-backup.sh
181log "Backup script created at /usr/local/bin/proxmox-backup.sh"
182
183# 10. Final steps
184log "Post-install configuration completed successfully!"
185log ""
186log "Next steps:"
187log "1. Reboot the system: 'reboot'"
188log "2. Configure network settings if needed: /etc/network/interfaces"
189log "3. Set up storage: Run storage-setup.sh"
190log "4. Deploy services: Use docker-compose files in configs/"
191log "5. Configure monitoring and backups"
192log ""
193log "Web interface: https://$(hostname -I | awk '{print $1}'):8006"
194
195# Ask for reboot
196read -p "Reboot now? (y/N): " -n 1 -r
197echo
198if [[ $REPLY =~ ^[Yy]$ ]]; then
199    log "Rebooting system..."
200    reboot
201fi

⚙️ Manual Configuration Steps

If you prefer manual configuration, follow these steps:

1. Storage Reconfiguration

Remove local-lvm and extend root partition:

# Remove local-lvm storage
lvremove /dev/pve/data

# Extend root partition
lvresize -l +100%FREE /dev/pve/root
resize2fs /dev/mapper/pve-root

2. Repository Configuration

Disable enterprise repositories and add no-subscription:

# Disable enterprise repos
sed -i 's/^deb/#deb/' /etc/apt/sources.list.d/pve-enterprise.list

# Add no-subscription repository
echo "deb http://download.proxmox.com/debian/pve $(lsb_release -cs) pve-no-subscription" >> /etc/apt/sources.list

# Update packages
apt update && apt upgrade -y

3. Disable Enterprise Popup

Remove the subscription nag screen:

# Backup original file
cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak

# Disable popup
sed -i "s/data.status !== 'Active'/false/g" /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

# Restart proxy service
systemctl restart pveproxy.service

4. Network Configuration

Configure network interfaces (example for static IP):

# Edit network configuration
nano /etc/network/interfaces

Example configuration:

auto lo
iface lo inet loopback

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.240/24
    gateway 192.168.1.1
    bridge-ports enp0s31f6
    bridge-stp off
    bridge-fd 0

Restart networking:

systemctl restart networking

5. Install Essential Packages

apt install -y curl wget vim htop iotop iftop ncdu tree git unzip

📋 Post-Configuration Checklist

After running the configuration:

  • [ ] Reboot system: reboot

  • [ ] Verify web access: https://your-ip:8006

  • [ ] Check storage: Datacenter → Storage (local should show all content types)

  • [ ] Update system: Node → Updates → Refresh → Upgrade

  • [ ] Configure backups: Set up automated backup procedures

  • [ ] Deploy services: Use Docker Compose stacks from configs/

🔧 Configuration Files

All configuration scripts and templates are available in:

  • Automated script: configs/scripts/post-install-setup.sh

  • Network template: configs/templates/network-interfaces.template

  • Backup script: Created at /usr/local/bin/proxmox-backup.sh

📊 Verification Commands

Verify your configuration:

# Check storage
df -h

# Check services
systemctl status pveproxy pvedaemon pve-cluster

# Check network
ip addr show

# Check repositories
apt update

7. Configure Storage and Repositories

Configure storage and repository settings:

  1. In ‘Datacenter’ - ‘Storage’, remove ‘local-lvm’

  2. In ‘Node’ - ‘Shell’, enter commands:

lvremove /dev/pve/data
lvresize -l +100%FREE /dev/pve/root
resize2fs /dev/mapper/pve-root
  1. In ‘Datacenter’ - ‘Storage’, edit ‘local’ and select all options in content

  2. Configure Repositories:

  • In ‘Node’ - ‘Updates’ - ‘Repositories’, select repository ENTERPRISE and PVE-ENTERPRISE and select DISABLE

  • In ‘Node’ - ‘Updates’ - ‘Repositories’, add repository ‘No-Subscription’

  • In ‘Node’ - ‘Updates’, click REFRESH and then UPGRADE

  • In GUI select REBOOT

8. Enable Notifications

Configure email notifications for system alerts:

# Via Web Interface:
# 1. Navigate to 'Datacenter' → 'Notifications'
# 2. Add a new notification target: 'SMTP'
# 3. Configure SMTP settings (server, port, authentication)
# 4. In notification handler, modify 'default-matcher':
#    - Select your SMTP notification target
#    - Unselect 'mail-to-root'

9. Trusted TLS Certificates

Configure Let’s Encrypt certificates for secure web access:

# Via Web Interface:
# 1. Navigate to 'Datacenter' → 'ACME'
# 2. Add ACME Account (Let's Encrypt)
# 3. Configure DNS challenge or HTTP challenge
# 4. Request certificate for your domain
# 5. Enable automatic renewal

🚨 Troubleshooting

Common issues and solutions:

Storage Issues - Verify LVM configuration: lvs - Check filesystem: df -h

Network Issues - Check interface status: ip link show - Verify bridge configuration: brctl show

Service Issues - Check logs: journalctl -u pveproxy - Restart services: systemctl restart pveproxy