Linux Sysprep [2026 Edition]
#!/bin/bash set -e echo "=== Linux Sysprep - Generalizing System ===" find /var/log -type f -exec truncate -s 0 {} ; rm -rf /var/cache/* /tmp/* /var/tmp/* 2. Remove unique IDs echo -n > /etc/machine-id rm -f /var/lib/systemd/random-seed 3. Remove SSH host keys rm -f /etc/ssh/ssh_host_* 4. Remove network interface persistence rm -f /etc/udev/rules.d/70-persistent-net.rules rm -f /etc/network/interfaces.d/50-cloud-init.cfg # if using netplan 5. Clean package manager cache apt clean || yum clean all || dnf clean all 6. Remove shell history unset HISTFILE history -c find /home -name ".*history" -exec rm -f {} ; rm -f /root/.bash_history 7. Prepare for first-boot provisioning Ensure cloud-init is installed and enabled systemctl enable cloud-init 8. Remove udev hardware database (forces re-detection) rm -f /etc/udev/hwdb.bin
echo "=== Sysprep complete. Shutting down for imaging. ===" shutdown -h now linux sysprep
It's the understanding that a computer is more than its disk contents. It's the knowledge that identity, state, and hardware relationships matter. And it's the craft of stripping away the ephemeral so that the essential can be reborn. Remove network interface persistence rm -f /etc/udev/rules
preserve_hostname: false manage_etc_hosts: true ssh_pwauth: false disable_root: false Here is the battle-tested, distro-agnostic flow for Linux sysprep: Step 1: Provision a "clean" VM (not container) Build a VM exactly how you want your golden image: packages, configs, users, hardening. Step 2: Run the Generalization Script Save this as /usr/local/sbin/sysprep-linux.sh : rm -f /root/.bash_history 7.