# HG changeset patch # User Tero Marttila # Date 1328103265 -7200 # Node ID 2a5aa20f2651c47a5f1c3654d443595ed1d013b0 # Parent 28dd9159f1adaa5d42338ac9392c078d40bd01bb implement preseed-scripts diff -r 28dd9159f1ad -r 2a5aa20f2651 .hgignore --- 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/ diff -r 28dd9159f1ad -r 2a5aa20f2651 pkvlm-create --- 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' <