pkvlm-create
changeset 25 527d0fb0bdc4
parent 24 e6d4310613a4
child 26 28dd9159f1ad
--- a/pkvlm-create	Wed Feb 01 13:22:27 2012 +0200
+++ b/pkvlm-create	Wed Feb 01 14:23:32 2012 +0200
@@ -141,7 +141,7 @@
 define_opt  user        $USER
 define_opt  puppet      
 define_opt  puppet_master   puppet
-define_opt  serial_console
+define_opt  serial_console  yes
 
 log_info "Processing ${#@} parameters:"
 for param in "$@"; do
@@ -270,14 +270,26 @@
         
 USER_GROUPS=( cdrom sudo adm )
 
-### Installer setup
+### Paths
 ## Installation image
 # Original Debian Installer image (iso)
-INSTALLER_NAME="debian-6.0.3-amd64"
-INSTALLER_ISO="iso/${INSTALLER_NAME}-netinst.iso"
-INSTALLER_TREE="images/$INSTALLER_NAME"
-INSTALLER_FLAG="${INSTALLER_TREE}.unpacked"
+BASE_INSTALLER_NAME="debian-6.0.3-amd64"
+BASE_INSTALLER_ISO="iso/${BASE_INSTALLER_NAME}-netinst.iso"
+BASE_INSTALLER_TREE="images/$BASE_INSTALLER_NAME"
+BASE_INSTALLER_FLAG="${BASE_INSTALLER_TREE}.unpacked"
 
+
+## preseed config templates
+# Source files for preseeding
+PRESEED_DIR="preseed"
+PRESEED_NAME="preseed.cfg"
+PRESEED_FILE="${PRESEED_DIR}/${PRESEED_NAME}"
+
+# Source for isolinux bootloader config
+PRESEED_ISOLINUX_FILE="${PRESEED_DIR}/isolinux.cfg"
+
+
+## Installer tree
 # Customized preseed image name
 INSTALL_NAME="debian-6.0.3-amd64_${GUEST_NAME}"
 
@@ -285,29 +297,25 @@
 INSTALL_TREE="images/${INSTALL_NAME}"
 INSTALL_ISO="iso/${INSTALL_NAME}.iso"
 
-
-### Preseed setup
-## preseed.cfg templating
-PRESEED_DIR="preseed"
-
-# Preseed output file in install tree
-PRESEED_NAME="preseed.cfg"
-
-# Mount path of preseed target in installer
-PRESEED_MOUNT="/cdrom"
-
-# Prefix for target files in install tree
-# XXX: not implemented
-#PRESEED_TARGET_PREFIX=""
-
-# Main preseed source template
-PRESEED_TEMPLATE="${PRESEED_DIR}/${PRESEED_NAME}"
-
-# Target path for preseed in install tree
-PRESEED_FILE="${INSTALL_TREE}/${PRESEED_NAME}"
+# Preseed data in installer
+INSTALL_PRESEED_DIR_NAME="preseed"
+INSTALL_PRESEED_DIR="${INSTALL_TREE}/${INSTALL_PRESEED_DIR_NAME}"
+INSTALL_PRESEED_FILE_NAME="${NAME}.cfg"
+INSTALL_PRESEED_FILE="${INSTALL_PRESEED_DIR}/${INSTALL_PRESEED_FILE_NAME}"
 
 # Checksum of target preseed.cfg
-PRESEED_CHECKSUM= # set later
+INSTALL_PRESEED_CHECKSUM= # set later
+
+# isolinux.cfg for bootloader
+INSTALL_ISOLINUX_FILE="${INSTALL_TREE}/isolinux/isolinux.cfg"
+
+## Paths within installer runtime
+# Paths to preseed files from within installer runtime
+INSTALLER_MOUNT="/cdrom"
+INSTALLER_PRESEED_DIR="${INSTALLER_MOUNT}/${INSTALL_PRESEED_DIR_NAME}"
+INSTALLER_PRESEED_FILE="${INSTALLER_PRESEED_DIR}/${INSTALL_PRESEED_FILE_NAME}"
+
+
 
 
 ## preseed.cfg contents
@@ -339,19 +347,19 @@
 
 
 ## preseed-files
-# template source
-PRESEED_FILES_SOURCES=( 'preseed/files' )
+# template source trees
+PRESEED_FILES_SOURCES=( "${PRESEED_DIR}/files" )
 
 # template output into install tree
-PRESEED_FILES_TARGET_NAME='preseed-files'
-PRESEED_FILES_TARGET="${INSTALL_TREE}/${PRESEED_FILES_TARGET_NAME}"
+INSTALL_PRESEED_FILES_DIR_NAME="${INSTALL_PRESEED_DIR_NAME}/files"
+INSTALL_PRESEED_FILES_DIR="${INSTALL_TREE}/${INSTALL_PRESEED_FILES_DIR_NAME}"
 
 # paths within installer runtime
-PRESEED_FILES_INSTALLER_SOURCE="${PRESEED_MOUNT}/${PRESEED_FILES_TARGET_NAME}"
-PRESEED_FILES_INSTALLER_TARGET='/target'
+INSTALLER_PRESEED_FILES_DIR="${INSTALLER_MOUNT}/${INSTALL_PRESEED_FILES_DIR_NAME}"
+INSTALLER_PRESEED_FILES_TARGET='/target'
 
 # Add a tree of configuration files to template into the installer
-function preseed_conf_files () {
+function preseed_files_sources () {
     PRESEED_FILES_SOURCES=( "${PRESEED_FILES_SOURCES[@]:-}" "$@" )
 }
 
@@ -395,7 +403,7 @@
    
     ## Preseed files 
     # add to list of conf files to copy
-    preseed_conf_files "${PUPPET_PRESEED_DIR}/files"
+    preseed_files_sources "${PUPPET_PRESEED_DIR}/files"
 
 fi
 
@@ -450,18 +458,16 @@
 BOOT_KERNEL_ARGS_DEFAULT="quiet"
 BOOT_KERNEL_ARGS="${BOOT_KERNEL_CONSOLE}"
 
-### Postprocess preseed
-## Preseed files
+### Postprocess preseed data
 ## Preseed / config files
 
-
+# copy at end of install
+preseed_late_commands "cp -rd -- ${INSTALLER_PRESEED_FILES_DIR}/* ${INSTALLER_PRESEED_FILES_TARGET}"
 
-# copy at end of install
-preseed_late_commands "cp -rd -- ${PRESEED_FILES_INSTALLER_SOURCE}/* ${PRESEED_FILES_INSTALLER_TARGET}"
+## preseed.cfg
 
 # Additional files to copy
 PRESEED_INCLUDE_FILES=( $(for preseed in ${PRESEED_INCLUDES[@]}; do echo "${PRESEED_DIR}/${preseed}"; done) )
-#PRESEED_INCLUDE_FILES=("preseed/passwords.cfg" "preseed/host.cfg")
 
 # preseed.cfg 'includes' line
 PRESEED_INCLUDE=${PRESEED_INCLUDES[@]}
@@ -471,22 +477,19 @@
 
 
 ## Isolinux
-# Source for install tree isolinux file
-PRESEED_ISOLINUX="${PRESEED_DIR}/isolinux.cfg"
-
 # Automagics for serial boot :)
 #      virt-install assumes we have an X $DISPLAY if given --vnc
 #      but we also want to enable the serial console...
 #      d-i automagically configures the serial boot/login console, but only if the installer is run under serial...
 #      we want to have both :(
 if [ ${DISPLAY:-} ]; then
-    INSTALL_BOOT_CONSOLE=""
+    INSTALLER_BOOT_CONSOLE=""
 else
-    INSTALL_BOOT_CONSOLE="console=ttyS0"
+    INSTALLER_BOOT_CONSOLE="console=ttyS0"
 fi
 
 # isolinux installer boot args
-INSTALL_BOOT_ARGS="auto=true priority=critical preseed/file=${PRESEED_MOUNT}/${PRESEED_NAME} preseed/file/checksum=${PRESEED_CHECKSUM} -- ${INSTALL_BOOT_CONSOLE} quiet"
+INSTALLER_BOOT_ARGS="auto=true priority=critical preseed/file=${INSTALLER_PRESEED_FILE} preseed/file/checksum=${INSTALL_PRESEED_CHECKSUM} -- ${INSTALLER_BOOT_CONSOLE} quiet"
 
 ### External progs
 ## Bootable .iso for Debian isolinux-based installer CDs
@@ -557,9 +560,9 @@
     shadow:     $USER_SHADOW
 
 Installer:
-    Name:       $INSTALLER_NAME
-    ISO:        $INSTALLER_ISO
-    Tree:       $INSTALLER_TREE
+    Name:       $BASE_INSTALLER_NAME
+    ISO:        $BASE_INSTALLER_ISO
+    Tree:       $BASE_INSTALLER_TREE
 
 Install:
     Name:       $INSTALL_NAME
@@ -567,10 +570,7 @@
     ISO:        $INSTALL_ISO
 
 Preseed:
-    Name:       $PRESEED_NAME
-    Template:   $PRESEED_TEMPLATE
-    Target:     $PRESEED_FILE
-    Isolinux:   $PRESEED_ISOLINUX
+    Template:   $PRESEED_FILE
     Includes:   $PRESEED_INCLUDES
 
 END
@@ -583,68 +583,74 @@
 [ -z $NET_IPADDR ] && die "net: No IP-address given: ip"
 
 # Installer exists?
-if cmd test ! -f ${INSTALLER_ISO}; then
-    die "Installer not found: ${INSTALLER_ISO}"
+if [ ! -f ${BASE_INSTALLER_ISO} ]; then
+    die "Base installer image not found: ${BASE_INSTALLER_ISO}"
 fi
 
 
 
 
 ### Prepare install
-log_info "Extract installer..."
+
 
 ## Extract .iso
-if [ -f ${INSTALLER_FLAG} ]; then
-    log_info "Installer already unpacked: ${INSTALLER_TREE}"
+if [ -f ${BASE_INSTALLER_FLAG} -a -d ${BASE_INSTALLER_TREE} ]; then
+    log_info "Installer already unpacked: ${BASE_INSTALLER_TREE}"
 
 else
-    log_info "Unpacking installer: ${INSTALLER_ISO}"
-    cmd extract_iso ${INSTALLER_ISO} ${INSTALLER_TREE}
-    cmd touch ${INSTALLER_FLAG}
+    log_info "Unpacking installer: ${BASE_INSTALLER_ISO}"
+    cmd extract_iso ${BASE_INSTALLER_ISO} ${BASE_INSTALLER_TREE}
+    cmd touch ${BASE_INSTALLER_FLAG}
 fi
 
+
+
 ## Copy to customized tree
+log_info "Prepare customized install tree..."
+
 [ -d ${INSTALL_TREE} ] && cmd rm -r ${INSTALL_TREE}
-cmd cp -rd ${INSTALLER_TREE} ${INSTALL_TREE}
+cmd cp -rd ${BASE_INSTALLER_TREE} ${INSTALL_TREE}
 cmd chmod -R u=rwX,og=rX ${INSTALL_TREE}
 
-log_info "Installer extracted: $INSTALL_TREE"
-
 
 
 ### Customize preseed
 log_info "Generate preseed..."
 
-## preseed.cfg
-cmd expand_template ${PRESEED_TEMPLATE} ${PRESEED_FILE}
+## Prepare
+cmd mkdir ${INSTALL_PRESEED_DIR}
+
+## Expand preseed.cfg
+cmd expand_file ${PRESEED_FILE} ${INSTALL_PRESEED_FILE}
 
 # md5sum
-PRESEED_CHECKSUM=$(my_md5sum $PRESEED_FILE)
+INSTALL_PRESEED_CHECKSUM=$(my_md5sum $INSTALL_PRESEED_FILE)
 
 
-## Isolinux
-cmd expand_template ${PRESEED_ISOLINUX} ${INSTALL_TREE}/isolinux/isolinux.cfg
-
-
-## Includes
+## Expand includes
 for file in ${PRESEED_INCLUDE_FILES[@]}; do
     name=$(basename $file)
 
-    cmd expand_template $file ${INSTALL_TREE}/${name}
+    cmd expand_file $file ${INSTALL_PRESEED_DIR}/${name}
 done
 
-log_debug "Preseed generated: $PRESEED_FILE"
+## Expand isolinux
+cmd expand_file ${PRESEED_ISOLINUX_FILE} ${INSTALL_ISOLINUX_FILE}
 
-
-## Config preseed-files
+## Expand preseed-files
 log_info "Copy preseed-files..."
 
 for tree in "${PRESEED_FILES_SOURCES[@]}"; do
     log_info "preseed-files: $tree"
 
-    cmd expand_tree $tree ${PRESEED_FILES_TARGET}
+    cmd expand_tree $tree ${INSTALL_PRESEED_FILES_DIR}
 done
 
+log_info "Preseed generated: $INSTALL_PRESEED_DIR"
+
+
+
+
 ## Modules
 # Puppet
 [ $PUPPET ] && puppet_config
@@ -652,7 +658,6 @@
 
 
 
-
 ### Create .iso
 log_info "Generate ISO..."
 
@@ -667,7 +672,6 @@
 
 
 
-
 ### Create virtual machine
 if [ $DO_VIRTINSTALL ]; then
     log_info "Create VM..."