User Tools

Site Tools


virtualization:linux:prep_vm_template

Prepare a Linux VM as a Template

Ubuntu

https://jimangel.io/post/create-a-vm-template-ubuntu-18.04/

curl -sL https://raw.githubusercontent.com/jimangel/ubuntu-18.04-scripts/master/prepare-ubuntu-18.04-template.sh | sudo -E bash -

RHEL Systems (RedHat, CentOS, etc.)

http://lonesysadmin.net/2013/03/26/preparing-linux-template-vms/

Shutdown the GUI, if there is one:

init 3

:!: The next step means you may or may not be able to connect to the VM remotely once instantiated.

Set the networking to DHCP mode so new VMs don't step on others once instantiated:

sed -i '/^\(HWADDR\|UUID\|BOOTPROTO\|IPADDR\|NETMASK\|NM_CONTROLLED\|ONBOOT\)=/d' /etc/sysconfig/network-scripts/ifcfg-eth[012]
echo -e "BOOTPROTO=dhcp\nNM_CONTROLLED=no\nONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0

Clean out the junk:

yum clean all

logrotate -f /etc/logrotate.conf
rm -f /var/log/*-???????? /var/log/*.gz

cat /dev/null > /var/log/audit/audit.log
cat /dev/null > /var/log/wtmp

rm -f /etc/udev/rules.d/70*

rm -rf /tmp/*
rm -rf /var/tmp/*

rm -rf /etc/ssh/*key*

rm -rf ~root/.bash_history
unset HISTFILE

Zero the Filesystem

This is an optional script for RHEL systems to zero out the filesystem.

:!: Don't do this on thinly provisioned VMs (i.e. VHDs on a XenServer NFS SR).

FIXME UNTESTED

#!/bin/sh

# Determine the version of RHEL
COND=`grep -i Taroon /etc/redhat-release`
if [ "$COND" = "" ]; then
        export PREFIX="/usr/sbin"
else
        export PREFIX="/sbin"
fi

FileSystem=`grep ext /etc/mtab| awk -F" " '{ print $2 }'`

for i in $FileSystem
do
        echo $i
        number=`df -B 512 $i | awk -F" " '{print $3}' | grep -v Used`
        echo $number
        percent=$(echo "scale=0; $number * 98 / 100" | bc )
        echo $percent
        dd count=`echo $percent` if=/dev/zero of=`echo $i`/zf
        /bin/sync
        sleep 15
        rm -f $i/zf
done

VolumeGroup=`$PREFIX/vgdisplay | grep Name | awk -F" " '{ print $3 }'`

for j in $VolumeGroup
do
        echo $j
        $PREFIX/lvcreate -l `$PREFIX/vgdisplay $j | grep Free | awk -F" " '{ print $5 }'` -n zero $j
        if [ -a /dev/$j/zero ]; then
                cat /dev/zero > /dev/$j/zero
                /bin/sync
                sleep 15
                $PREFIX/lvremove -f /dev/$j/zero
        fi
done
virtualization/linux/prep_vm_template.txt · Last modified: 2019/05/10 11:04 by gcooper