#/bin/bash # # COnvert Initial Ram Disk (extX) to Initial Ram Filesystem (cpio) # BASE=linux-2.6.32 ISO=/var/lib/libvirt/images/ucs_3.0-2-20120717145513-dvd-i386.iso FQDN=kvm.phahn.dev IP=192.168.122.2 for WORK in /root/kvm-profiles /var/tmp /tmp "$HOME" do [ -d "$WORK" ] && break done cache=unsafe format=qcow2 set -e die () { [ -n "$1" ] && echo "$*" >&2 echo "See '$0 --help' for more." >&2 exit 2 } usage () { echo "$0 [options]" echo " --dir=$WORK" echo " --fqdn=$FQDN" echo " --ip=$IP" echo " --cache=writethrough|writeback|none|directsync|unsafe" echo " --format=qcow2|qed|raw" } while [ $# -ge 1 ] do case "$1" in --dir) WORK=$2 shift 2 || die "Missing work directory" ;; --fqdn) FQDN=$2 shift 2 || die "Missing fully qualified domain name" ;; --ip) IP=$2 shift 2 || die "Missing IPv4 address" ;; --cache) cache=$2 shift 2 || die "Missing cache strategy" ;; --format) format=$2 shift 2 || die "Missing image format" ;; --help|-h) usage exit 0 ;; -*) die "Unknown option: $1" ;; *) die "Unknown argument: $1" ;; esac done # Get Initial Ram-Disk file system [ -f "$WORK/$BASE.ext3" ] || { mount -o ro,loop "$ISO" /mnt cp "/mnt/boot/$BASE" "$WORK/$BASE" gzip -dc <"/mnt/boot/$BASE.bin" >"$WORK/$BASE.ext3" umount /mnt } # Extract Initial Ram-Disk file system [ -d "$WORK/$BASE.root" ] || { mkdir "$WORK/$BASE.root" mount -o ro,loop "$WORK/$BASE.ext3" /mnt cp -pr /mnt "$WORK/$BASE.root" umount /mnt } # Add missing link for Initial Ram file system [ -L "$WORK/$BASE.root/init" ] || ln -s bin/busybox "$WORK/$BASE.root/init" # Create Initial Ram File System [ -f "$WORK/$BASE.cpio" ] || { find "$WORK/$BASE.root" -mindepth 1 -printf '%P\0' | ( cd "$WORK/$BASE.root" && fakeroot cpio -o --null --force-local --file "$WORK/$BASE.cpio" --format newc ) } # Create floppy with UCS Installer profile [ -d "$WORK/floppy" ] || { mkdir -p "$WORK/floppy" # /home/phahn/GIT/branches/ucs-3.1/ucs/base/univention-installer/installer/modules/15_profile.py # /home/phahn/GIT/branches/ucs-3.1/ucs/base/univention-installer/installer/modules/65_partition.py hostname=${FQDN%%.*} domainname=${FQDN#*.} net=${IP%.*} sed -re " s|^#?to_check=.*|to_check=''| s|^#?auto_part=.*|auto_part='full_disk'| s|^#?hostname=.*|hostname='${hostname}'| s|^#?domainname=.*|domainname='${domainname}'| s|^#?ldap_base=.*|ldap_base='dc=${domainname//./,dc=}'| s|^#?fqdn=.*|fqdn='${FQDN}'| s|^#?root_password=.*|root_password='univention'| s|^#?dns_forwarder_1=.*|dns_forwarder_1='${net}.1'| s|^#?gateway=.*|gateway='${net}.1'| s|^#?eth0_network=.*|eth0_network='${net}.0'| s|^#?eth0_ip=.*|eth0_ip='${IP}'| s|^#?eth0_broadcast=.*|eth0_broadcast='${net}.255'| s|^#?eth0_netmask=.*|eth0_netmask='255.255.255.0'| s|^#?update_system_after_installation=.*|update_system_after_installation='false'| s|^#?bootloader_record=.*|bootloader_record='/dev/sda'| \$acreate_partitiontable='/dev/sda' \$a#disks='/dev/sda' \$a#boot_partition='/dev/sda1' \$a#part_delete='all' \$a#lvmlv_delete='vg_ucs' \$a#cdrom_device='/dev/sr0' \$aauto_reboot='yes' " < "$WORK/$BASE.root/profiles/Basesystem" > "$WORK/floppy/kvm" } # Create image img="$WORK/$BASE.$format" qemu-img create -f "$format" "$img" 20G trap "rm '$img'" EXIT # Run KVM kvm=(-no-reboot) # Shutdown instead of reboot kvm+=(-sdl) kvm+=(-m 512M) kvm+=(-kernel "$WORK/$BASE") kvm+=(-initrd "$WORK/$BASE.cpio") #kvm+=(-append 'root=/dev/ram ro ramdisk_size=184696 flavor=linux nomodeset quiet loglevel=0 vga=788 text') kvm+=(-append 'root=/dev/hda ro flavor=linux nomodeset verbose loglevel=8 vga=788 text profile=kvm floppy') kvm+=(-drive file="$img",if=ide,index=0,media=disk,cache=$cache,format=$format) kvm+=(-drive file="$ISO",if=ide,index=2,media=cdrom,cache=$cache,format=raw) kvm+=(-drive file=fat:floppy:"$WORK/floppy",if=floppy,index=0) kvm+=(-vga cirrus) # qxl kvm+=(-net nic -net user) echo "format=$format cache=$cache" time kvm "${kvm[@]}"