--- 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..."