Snap-guest is a simple script for creating copy-on-write QEMU/KVM guests. I have added new option “-1 [command]” that will execute a script during first boot. It uses rc.local file, so it should be compatible with most distributions. I test on RHEL and Fedoras.
Primary reason is I maintain some auto-install scripts in git, so I usually do something like:
./snap-guest -b fedora-17-base -t test-vm -s 4098 -1 "git clone xyz && \ cd xyz && bash -x script.sh"
Command is executed using screen utility (must be installed) in the /root directory and output of STDOUT and STDERR is captured in the /root/firstboot.log file. Also two aliases are dropped to root account: tt tails the logfile and ttr resumes screen.
To recapitulate snap-guest usage:
usage: ./snap-guest options Simple script for creating copy-on-write QEMU/KVM guests. For the base image install Fedora or RHEL (compatible), install acpid and ntpd or similar, do not make any swap partition (use -s option), make sure the hostname is the same as the vm name and it has "base" in it. Example: rhel-6-base. OPTIONS: -h Show this message -l List avaiable images (with "base" in the name) -a List all images -b [image] Base image name (template) - required -t [image] Target image name (and hostname) - required -n [network] Network settings (default: "network=default") -m [MB] Memory (default: 800 MiB) -c [CPUs] Number of CPUs (default: 1) -p [path] Images path (default: /var/lib/libvirt/images/) -d [domain] Domain suffix like "mycompany.com" (default: none) -f Force creating new guest (no questions) -w Add IP address to /etc/hosts (works only with NAT) -s Swap size (in MB) that is appeded as /dev/sdb to fstab -1 [command] Command to execute during first boot in /root dir (logfile available in /root/firstboot.log) EXAMPLE: ./snap-guest -l ./snap-guest -p /mnt/data/images -l ./snap-guest -b fedora-17-base -t test-vm -s 4098 ./snap-guest -b fedora-17-base -t test-vm2 -n bridge=br0 -d example.com ./snap-guest -b rhel-6-base -t test-vm -m 2048 -c 4 -p /mnt/data/images