--- a/.hgignore Wed Feb 01 14:35:10 2012 +0200
+++ b/.hgignore Wed Feb 01 15:34:25 2012 +0200
@@ -1,4 +1,9 @@
syntax: regexp
\.sw[op]$
-^(images|iso|mnt)/
+^(images|iso|mnt|stage)/
+
+^preseed/puppet/ssl/
+^preseed/passwords.cfg
+
+^misc/
--- a/pkvlm-create Wed Feb 01 14:35:10 2012 +0200
+++ b/pkvlm-create Wed Feb 01 15:34:25 2012 +0200
@@ -291,7 +291,7 @@
## Installer tree
# Customized preseed image name
-INSTALL_NAME="debian-6.0.3-amd64_${GUEST_NAME}"
+INSTALL_NAME="debian-6.0.3-amd64_${NAME}"
# Customized image content
INSTALL_TREE="images/${INSTALL_NAME}"
@@ -316,7 +316,18 @@
INSTALLER_PRESEED_FILE="${INSTALLER_PRESEED_DIR}/${INSTALL_PRESEED_FILE_NAME}"
+## Stage dir, for generating files for INSTALL_PRESEED
+STAGE_ROOT="stage"
+STAGE_DIR="${STAGE_ROOT}/${NAME}"
+log_info "Stage: prepare stage dir"
+
+# root
+[ ! -d ${STAGE_ROOT} ] && cmd mkdir ${STAGE_ROOT}
+
+# host-specific; clean
+[ -d ${STAGE_DIR} ] && cmd rm -r ${STAGE_DIR}
+cmd mkdir ${STAGE_DIR}
## preseed.cfg contents
# List of additional packages to install
@@ -324,7 +335,6 @@
# Script commands to execute
PRESEED_LATE_COMMANDS=( )
-PRESEED_LATE_COMMANDS_END=( )
# Chainload preseed files
PRESEED_INCLUDES=( 'passwords.cfg' 'host.cfg' )
@@ -339,14 +349,14 @@
PRESEED_LATE_COMMANDS=( "${PRESEED_LATE_COMMANDS[@]:-}" "$@" )
}
-# Add command to execute at end
-# XXX: ordering?
-function preseed_late_commands_end () {
- PRESEED_LATE_COMMANDS_END=( "${PRESEED_LATE_COMMANDS_END[@]:-}" "$@" )
-}
+## preseed-files
+# staged files
+# name must match with INSTALL_PRESEED_FILES_DIR
+STAGE_PRESEED_FILES_DIR="${STAGE_DIR}/files"
+log_info "Stage: prepare preseed-files"
+cmd mkdir "${STAGE_PRESEED_FILES_DIR}"
-## preseed-files
# template source trees
PRESEED_FILES_SOURCES=( "${PRESEED_DIR}/files" )
@@ -370,7 +380,7 @@
local src=$1
local dst=$2
local dir=$(dirname $dst)
- local tgt=${PRESEED_FILES_TARGET}
+ local tgt=${STAGE_PRESEED_FILES_DIR}
local tgt_dir="$tgt/$dir"
@@ -381,13 +391,39 @@
cmd cp "$src" "$tgt/$dst"
}
+## preseed-scripts
+STAGE_PRESEED_SCRIPTS_DIR="${STAGE_DIR}/scripts"
+
+cmd mkdir "${STAGE_PRESEED_SCRIPTS_DIR}"
+
+# output into install tree
+INSTALL_PRESEED_SCRIPTS_DIR_NAME="${INSTALL_PRESEED_DIR_NAME}/scripts"
+INSTALL_PRESEED_SCRIPTS_DIR="${INSTALL_TREE}/${INSTALL_PRESEED_SCRIPTS_DIR_NAME}"
+
+# paths within installer runtime
+INSTALLER_PRESEED_SCRIPTS_DIR="${INSTALLER_MOUNT}/${INSTALL_PRESEED_SCRIPTS_DIR_NAME}"
+
+
+# add a preseed script to execute, from stdin
+function preseed_script () {
+ local name=$1
+ local path="${STAGE_PRESEED_SCRIPTS_DIR}/$name"
+
+ log_debug "preseed script: $name"
+
+ # header
+ echo '#!/bin/sh' > $path
+
+ # from stdin
+ cat >> $path
+
+ chmod +x $path
+}
+
### Extra
## Puppet
-PUPPET=
-
if [ $opt_puppet ]; then
log_info "Puppetizing preseed"
- PUPPET=yes
PUPPET_PRESEED_DIR="${PRESEED_DIR}/puppet"
@@ -405,10 +441,6 @@
# add to list of conf files to copy
preseed_files_sources "${PUPPET_PRESEED_DIR}/files"
-fi
-
-# Invoked during image-customizing process
-function puppet_config () {
## Preseed ssl certs?
PUPPET_SOURCE_SSLDIR="${PUPPET_PRESEED_DIR}/ssl"
@@ -434,26 +466,32 @@
# guest cert/pkey
puppet_preseed_ssl_file certs/${FQDN}.pem
puppet_preseed_ssl_file private_keys/${FQDN}.pem
-}
+fi
## Configure GRUB, via preseed/files: /etc/default/grub
# Kernel commandline/grub terminal
# The last console=... for kernel is used as /dev/console, i.e. init output
+log_info "Configure grub / serial console"
if [ $SERIAL_CONSOLE ]; then
BOOT_KERNEL_CONSOLE="console=${SERIAL_CONSOLE} console=tty0"
BOOT_GRUB_TERMINAL="console serial"
- # re-generate grub.cfg
- preseed_late_commands_end "in-target update-grub"
+ # Configure /etc/inittab for serial console
+ preseed_script '11-serial-console' <<END
+ in-target sed -i 's/#T0/T0/' /etc/inittab
+END
- # Configure /etc/inittab for serial console
- preseed_late_commands "in-target sed -i 's/#T0/T0/' /etc/inittab"
else
BOOT_KERNEL_CONSOLE=""
BOOT_GRUB_TERMINAL="console"
fi
+# re-generate grub.cfg
+preseed_script '10-boot-grub' <<END
+ in-target update-grub
+END
+
# Kernel boot args (overrides those generated by installer) - default boot option uses args + args_default
BOOT_KERNEL_ARGS_DEFAULT="quiet"
BOOT_KERNEL_ARGS="${BOOT_KERNEL_CONSOLE}"
@@ -464,6 +502,9 @@
# copy at end of install
preseed_late_commands "cp -rd -- ${INSTALLER_PRESEED_FILES_DIR}/* ${INSTALLER_PRESEED_FILES_TARGET}"
+## Preseed / scripts
+preseed_late_commands "for script in ${INSTALLER_PRESEED_SCRIPTS_DIR}/*; do \$script; done"
+
## preseed.cfg
# Additional files to copy
@@ -473,7 +514,7 @@
PRESEED_INCLUDE=${PRESEED_INCLUDES[@]}
# preseed command execution
-PRESEED_LATE_COMMAND=$(for cmd in "${PRESEED_LATE_COMMANDS[@]}" "${PRESEED_LATE_COMMANDS_END[@]:-}"; do if [ "$cmd" ]; then echo -n "$cmd;" $'\\\n '; fi; done; echo true)
+PRESEED_LATE_COMMAND=$(for cmd in "${PRESEED_LATE_COMMANDS[@]}"; do if [ "$cmd" ]; then echo -n "$cmd;" $'\\\n '; fi; done; echo true)
## Isolinux
@@ -637,6 +678,9 @@
## Expand isolinux
cmd expand_file ${PRESEED_ISOLINUX_FILE} ${INSTALL_ISOLINUX_FILE}
+log_info "Preseed generated: $INSTALL_PRESEED_DIR"
+
+
## Expand preseed-files
log_info "Copy preseed-files..."
@@ -646,16 +690,19 @@
cmd expand_tree $tree ${INSTALL_PRESEED_FILES_DIR}
done
-log_info "Preseed generated: $INSTALL_PRESEED_DIR"
+# Staged files
+# PRESEED_FILES_DIR must be the same name as INSTALL_PRESEED_FILES_DIR
+cmd cp -rv ${STAGE_PRESEED_FILES_DIR}/ ${INSTALL_PRESEED_DIR}/
-
+# debug?
+[ $LOG_DEBUG ] && tree ${INSTALL_PRESEED_FILES_DIR}
-## Modules
-# Puppet
-[ $PUPPET ] && puppet_config
+## Copy preseed scripts
+log_info "Copy preseed-scripts..."
-
+# Staged scripts
+cmd cp -rv "$STAGE_PRESEED_SCRIPTS_DIR" "$INSTALL_PRESEED_SCRIPTS_DIR"
### Create .iso