pkvlm-create
changeset 1 51b1db97f448
parent 0 0b1089c8a8ac
child 2 221db3973c99
equal deleted inserted replaced
0:0b1089c8a8ac 1:51b1db97f448
     1 #!/bin/bash
     1 #!/bin/bash
     2 BRIDGE=br-lan
       
     3 RAM=1024
       
     4 VCPUS=2
       
     5 IMAGE=isos/debian-6.0.3-amd64-netinst_preseed.iso
       
     6 IMAGE_VARIANT=debiansqueeze
       
     7 
     2 
       
     3 ### Parameters
       
     4 ## Options
       
     5 _MOCK=${_MOCK:0}
     8 
     6 
     9 NAME=$1
     7 ## Guest info
    10 VG=pvl
     8 GUEST_NAME=asdf2
    11 DISK_NAME=${NAME}
     9 
    12 DISK=/dev/mapper/${VG}-$DISK_NAME
    10 # Basic params
       
    11 GUEST_RAM=1G
       
    12 GUEST_VCPUS=2
       
    13 
       
    14 # OS variant (for virt-install)
       
    15 GUEST_OS_VARIANT=debiansqueeze
       
    16 
       
    17 ## Disk
       
    18 # Size of LV to create
    13 DISK_SIZE=10G
    19 DISK_SIZE=10G
    14 
    20 
    15 PRESEED_FILE=/cdrom/preseed.cfg
    21 # LVM vg to use
    16 PRESEED_CHECKSUM=35ea42c7b0139aab26284a96c0ec8c31
    22 DISK_VG=pvl
    17 
    23 
    18 PRESEED_BOOT={preseed/file=$PRESEED_FILE preseed/file/checksum=$PRESEED_CHECKSUM}
    24 # LVM lv to use
       
    25 DISK_NAME=${GUEST_NAME}
    19 
    26 
    20 # env
    27 # Path to disk block device
    21 LVCREATE=/sbin/lvcreate
    28 DISK_PATH=/dev/mapper/${DISK_VG}-${DISK_NAME}
    22 VIRT_INSTALL=/usr/bin/virt-install
    29 DISK_BUS=virtio
       
    30 GUEST_DISK=/dev/vda
    23 
    31 
    24 LIBVIRT_URL=qemu:///system
    32 ## Network
    25 VIRT_TYPE=kvm
    33 NET_BRIDGE=br-lan
       
    34 NET_IPADDR=194.197.235.36
    26 
    35 
       
    36 ## Installation image
       
    37 # Original Debian Installer image (iso)
       
    38 INSTALLER_NAME="debian-6.0.3-amd64"
       
    39 INSTALLER_ISO="iso-in/${INSTALLER_NAME}-netinst.iso"
       
    40 INSTALLER_TREE="iso-in/$INSTALLER_NAME"
       
    41 INSTALLER_FLAG="${INSTALLER_TREE}.unpacked"
       
    42 
       
    43 # Customized preseed image name
       
    44 INSTALL_NAME="debian-6.0.3-amd64_${GUEST_NAME}"
       
    45 
       
    46 # Customized image content
       
    47 INSTALL_TREE="images/${INSTALL_NAME}"
       
    48 INSTALL_ISO="iso-out/${INSTALL_NAME}.iso"
       
    49 
       
    50 # Preseed output file in install tree
       
    51 INSTALL_PRESEED_NAME="preseed.cfg"
       
    52 INSTALL_PRESEED_FILE="${INSTALL_TREE}/${INSTALL_PRESEED_NAME}"
       
    53 INSTALL_PRESEED_CHECKSUM= # set later
       
    54 
       
    55 # Preseed source template
       
    56 PRESEED_TEMPLATE="preseed/preseed.cfg"
       
    57 PRESEED_ISOLINUX="preseed/isolinux.cfg"
       
    58 PRESEED_REST="preseed/passwords.cfg"
       
    59 
       
    60 ## External progs
       
    61 # Bootable .iso for Debian isolinux-based installer CDs
       
    62 GENISOIMAGE=/usr/bin/genisoimage
       
    63 GENISOIMAGE_OPTS="-r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat"
       
    64 
       
    65 # LVM
       
    66 LVM=/sbin/lvm
       
    67 
       
    68 # Libvirt --connect URL
       
    69 LIBVIRT=qemu:///system
       
    70 VIRSH=/usr/bin/virsh
       
    71 
       
    72 function virsh () {
       
    73     $VIRSH --connect $LIBVIRT "$@"
       
    74 }
       
    75 
       
    76 # type of guest to create
       
    77 LIBVIRT_TYPE=kvm
       
    78 
       
    79 # virt-install
       
    80 VIRT_INSTALL="/usr/bin/virt-install"
       
    81 
       
    82 ## SELinux?
    27 #SEMANAGE=/usr/sbin/semanage
    83 #SEMANAGE=/usr/sbin/semanage
    28 #RESTORECON=/sbin/restorecon
    84 #RESTORECON=/sbin/restorecon
    29 
    85 
    30 # functions
    86 ### Functions
       
    87 set -u
    31 set -e
    88 set -e
    32 
    89 
    33 function cmd () {
    90 scripts=$(dirname $0)/scripts
    34     echo ">>> $@"
    91 . $scripts/lib.sh
    35     eval "$@" || exit $?
       
    36 }
       
    37 
    92 
       
    93 ### Check
       
    94 # VM exists?
       
    95 if cmd virsh domid ${GUEST_NAME} 2> /dev/null; then
       
    96     die "Virtual machine already exists: ${GUEST_NAME}"
       
    97 fi
       
    98 
       
    99 # Installer exists?
       
   100 if cmd test ! -f ${INSTALLER_ISO}; then
       
   101     die "Installer not found: ${INSTALLER_ISO}"
       
   102 fi
    38 
   103 
    39 ### Go!
   104 ### Go!
       
   105 # Extract .iso
       
   106 if [ -f ${INSTALLER_FLAG} ]; then
       
   107     echo "Installer already unpacked: ${INSTALLER_TREE}"
       
   108 
       
   109 else
       
   110     echo "Unpacking installer: ${INSTALLER_ISO}"
       
   111     cmd extract_iso ${INSTALLER_ISO} ${INSTALLER_TREE}
       
   112     cmd touch ${INSTALLER_FLAG}
       
   113 fi
       
   114 
       
   115 # Copy to customized tree
       
   116 cmd cp -r ${INSTALLER_TREE} ${INSTALL_TREE}
       
   117 cmd chmod -R u=rwX,og=rX ${INSTALL_TREE}
       
   118 
       
   119 # XXX: Customize preseed
       
   120 cmd expand_template ${PRESEED_TEMPLATE} ${INSTALL_PRESEED_FILE}
       
   121 
       
   122 # md5sum
       
   123 INSTALL_PRESEED_CHECKSUM=$(my_md5sum $INSTALL_PRESEED_FILE)
       
   124 
       
   125 # Isolinux .cfg
       
   126 cmd expand_template ${PRESEED_ISOLINUX} ${INSTALL_TREE}/isolinux/isolinux.cfg
       
   127 
       
   128 # Others
       
   129 for file in ${PRESEED_REST}; do
       
   130     name=$(basename $file)
       
   131 
       
   132     cmd expand_template $file ${INSTALL_TREE}/${name}
       
   133 done
       
   134 
       
   135 # Create .iso
       
   136 cmd ${GENISOIMAGE} -o ${INSTALL_ISO} ${GENISOIMAGE_OPTS} ${INSTALL_TREE}
    40 
   137 
    41 ## LVM
   138 ## LVM
    42 [ -e $DISK ] || cmd $LVCREATE -L $DISK_SIZE -n $DISK_NAME $VG
   139 # Create LV (unless it already exists)
    43 
   140 [ -e $DISK_PATH ] || cmd sudo $LVM lvcreate -L $DISK_SIZE -n $DISK_NAME $DISK_VG
    44 
   141 
    45 ## SELinux?
   142 ## SELinux?
    46 #$SEMANAGE fcontext -a -t virt_image_t $DISK
   143 #$SEMANAGE fcontext -a -t virt_image_t $DISK
    47 #$RESTORECON -v $DISK
   144 #$RESTORECON -v $DISK
    48 
   145 
    49 ## virt-install
   146 ## virt-install
    50 cmd $VIRT_INSTALL \
   147 cmd $VIRT_INSTALL \
    51         --connect $LIBVIRT_URL \
   148         --connect $LIBVIRT \
    52         --name $NAME \
   149         --name $GUEST_NAME \
    53         --ram $RAM --vcpus $VCPUS \
   150         --ram $(expand_MB $GUEST_RAM) --vcpus $GUEST_VCPUS \
    54         --cdrom "$IMAGE" \
   151         --cdrom "$INSTALL_ISO" \
    55         --os-variant $IMAGE_VARIANT \
   152         --os-variant $GUEST_OS_VARIANT \
    56         --disk path=$DISK,bus=virtio \
   153         --disk path=$DISK_PATH,bus=$DISK_BUS \
    57         --network bridge:$BRIDGE \
   154         --network bridge:$NET_BRIDGE \
    58         --vnc \
   155         --vnc \
    59         --virt-type $VIRT_TYPE \
   156         --virt-type $LIBVIRT_TYPE \
    60         --accelerate --hvm \
   157         --accelerate --hvm \
    61         --serial pty
   158         --serial pty
    62 
   159