pkvlm-create
changeset 13 46fdb138420e
parent 12 e6a2966dec6f
child 14 4154c64c5d69
--- a/pkvlm-create	Thu Jan 05 16:47:04 2012 +0200
+++ b/pkvlm-create	Fri Jan 27 10:39:08 2012 +0200
@@ -155,7 +155,9 @@
     define_opt  ip          $(resolve_name ${opt_name}.${opt_dns_domain})
 fi
 
-### State
+
+
+### Preseed content
 ## Guest info
 GUEST_NAME=$opt_name
 
@@ -182,10 +184,58 @@
 GUEST_DISK=$opt_guest_disk
 
 ## Network
+# Network configuration, for /etc/network/interfaces
+NET_DOMAIN=paivola.fi
 NET_HOSTNAME=$opt_hostname
 NET_BRIDGE=$opt_bridge
 NET_IPADDR=$opt_ip
+NET_NETMASK=255.255.255.0
+NET_GATEWAY=194.197.235.1
+NET_NAMESERVERS=( 194.197.235.210 194.197.235.252 )
 
+## Clock/time
+TIME_ZONE='Europe/Helsinki'
+
+# only used during install, not stored in target
+TIME_NTP_SERVER=ntp.paivola.fi                      # XXX: harcoded
+
+## User account
+function getent_user_attr () {
+    local user=$1
+    local db=$2
+    local attr=$3
+
+    line=$(getent $db $user) || die "Unable to read $db database for $user"
+    
+    echo "$line" | cut -d ':' -f $attr
+}
+function user_fullname () {
+    local user=$1
+
+    getent_user_attr $user passwd 5
+}
+function user_shadow () {
+    local user=$1
+
+    if [ $UID -eq 0 ]; then
+        log_debug "Get user password from shadow: $user"
+        getent_user_attr $user shadow 2
+    else
+        echo -n "Install target login ($user) " >&2
+        mkpasswd -m sha-512
+    fi
+}
+
+# XXX: hardcoded
+USER_CREATE='true'
+USER_NAME=$USER
+USER_FULLNAME=$(user_fullname $USER_NAME)
+USER_SHADOW=$(user_shadow $USER_NAME)
+USER_GROUPS=(cdrom sudo adm)
+
+
+
+### Installer setup
 ## Installation image
 # Original Debian Installer image (iso)
 INSTALLER_NAME="debian-6.0.3-amd64"
@@ -200,29 +250,32 @@
 INSTALL_TREE="images/${INSTALL_NAME}"
 INSTALL_ISO="iso-out/${INSTALL_NAME}.iso"
 
+## Preseed files
 # Preseed output file in install tree
+PRESEED_NAME="preseed.cfg"
 
 # Preseed source template
-PRESEED_NAME="preseed.cfg"
 PRESEED_TEMPLATE="preseed/${PRESEED_NAME}"
 PRESEED_FILE="${INSTALL_TREE}/${PRESEED_NAME}"
 PRESEED_ISOLINUX="preseed/isolinux.cfg"
 PRESEED_INCLUDES=("preseed/passwords.cfg" "preseed/host.cfg")
-
 PRESEED_CHECKSUM= # set later
 
 # installer boot args
 INSTALL_BOOT_ARGS="auto=true priority=critical preseed/file=/cdrom/${PRESEED_NAME} preseed/file/checksum=${PRESEED_CHECKSUM} -- quiet console=ttyS0"
 
-## External progs
-# Bootable .iso for Debian isolinux-based installer CDs
+
+
+### External progs
+## Bootable .iso for Debian isolinux-based installer CDs
 GENISOIMAGE=/usr/bin/genisoimage
 GENISOIMAGE_OPTS="-r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat"
 
-# LVM
+## LVM
 LVM=/sbin/lvm
 
-# Libvirt --connect URL
+## Libvirt 
+# --connect URL
 LIBVIRT=qemu:///system
 VIRSH=/usr/bin/virsh
 
@@ -233,13 +286,15 @@
 # type of guest to create
 LIBVIRT_TYPE=kvm
 
-# virt-install
+## virt-install
 VIRT_INSTALL="/usr/bin/virt-install"
 
 ## SELinux?
 #SEMANAGE=/usr/sbin/semanage
 #RESTORECON=/sbin/restorecon
 
+
+
 ### Prepare
 if [ $DO_SHOWSPEC ]; then
     cat <<END
@@ -269,6 +324,11 @@
     Bridge:
         Name:   $NET_BRIDGE
 
+User:
+    username:   $USER_NAME
+    fullname:   $USER_FULLNAME
+    shadow:     $USER_SHADOW
+
 Installer:
     Name:       $INSTALLER_NAME
     ISO:        $INSTALLER_ISO
@@ -295,11 +355,6 @@
 # Parameters given?
 [ -z $NET_IPADDR ] && die "net: No IP-address given: ip"
 
-# VM exists?
-if cmd virsh domid ${GUEST_NAME} > /dev/null 2> /dev/null; then
-    die "Virtual machine already exists: ${GUEST_NAME}"
-fi
-
 # Installer exists?
 if cmd test ! -f ${INSTALLER_ISO}; then
     die "Installer not found: ${INSTALLER_ISO}"
@@ -351,6 +406,12 @@
 
 ### Create virtual machine
 if [ $DO_VIRTINSTALL ]; then
+    ## Check
+    # VM exists?
+    if cmd virsh domid ${GUEST_NAME} > /dev/null 2> /dev/null; then
+        die "Virtual machine already exists: ${GUEST_NAME}"
+    fi
+
     ## Disk
     # Create LV (unless it already exists)
     [ -e $DISK_PATH ] || cmd_confirm sudo $LVM lvcreate -L $DISK_SIZE -n $DISK_NAME $DISK_VG