implement preseed-files
authorTero Marttila <terom@fixme.fi>
Fri, 27 Jan 2012 14:41:02 +0200
changeset 15 e3893b949972
parent 14 4154c64c5d69
child 16 d74646c0b5dd
implement preseed-files
pkvlm-create
preseed/files/etc/default/puppet
preseed/files/etc/puppet/puppet.conf
preseed/preseed.cfg
scripts/lib.sh
--- a/pkvlm-create	Fri Jan 27 12:07:32 2012 +0200
+++ b/pkvlm-create	Fri Jan 27 14:41:02 2012 +0200
@@ -139,6 +139,7 @@
 define_opt  dns_domain  paivola.fi
 define_opt  ip          
 define_opt  puppet      
+define_opt  puppet_master   puppet
 
 log_info "Processing ${#@} parameters:"
 for param in "$@"; do
@@ -240,21 +241,26 @@
 PRESEED_LATE_COMMANDS=( )
 PRESEED_INCLUDES=( 'passwords.cfg' 'host.cfg' )
 
+
+### Extra
+## Puppet
 if [ $opt_puppet ]; then
     log_info "Puppetizing preseed"
 
     PUPPET_PACKAGES=( puppet )
     PUPPET_COMMANDS=( \
-        "in-target sed -i 's/START=no/START=yes/' /etc/default/puppet"  \
+#        "in-target sed -i 's/START=no/START=yes/' /etc/default/puppet"  \
+#        "echo '[agent]\nserver = ${opt_puppet_master}\n' >> /etc/puppet/puppet.conf" \
     )
 
+    # XXX: we use files in preseed/files/..., should modularize those
+
+    PUPPET_MASTER="${opt_puppet_master}"
+
     PACKAGE_INCLUDES=( ${PACKAGE_INCLUDES[@]} ${PUPPET_PACKAGES[@]} )
-    PRESEED_LATE_COMMANDS=( ${PRESEED_LATE_COMMANDS[@]:-} ${PUPPET_COMMANDS[@]} )
+    PRESEED_LATE_COMMANDS=( "${PRESEED_LATE_COMMANDS[@]:-}" "${PUPPET_COMMANDS[@]:-}" )
 fi
 
-# full commands
-PRESEED_LATE_COMMAND=$(IFS=$'; \\\n\t' echo "${PRESEED_LATE_COMMANDS[@]}")
-
 ### Installer setup
 ## Installation image
 # Original Debian Installer image (iso)
@@ -270,7 +276,6 @@
 INSTALL_TREE="images/${INSTALL_NAME}"
 INSTALL_ISO="iso-out/${INSTALL_NAME}.iso"
 
-
 ## Preseed files
 # Preseed output file in install tree
 PRESEED_NAME="preseed.cfg"
@@ -278,6 +283,9 @@
 # Directory containing our source templates
 PRESEED_SOURCE_DIR="preseed"
 
+# Mount path of preseed target in installer
+PRESEED_MOUNT="/cdrom"
+
 # Prefix for target files in install tree
 # XXX: not implemented
 #PRESEED_TARGET_PREFIX=""
@@ -291,6 +299,18 @@
 # Checksum of target preseed.cfg
 PRESEED_CHECKSUM= # set later
 
+## Configs
+CONF_FILES_SOURCE='preseed/files'
+CONF_FILES_TARGET_NAME='preseed-files'
+CONF_FILES_TARGET="${INSTALL_TREE}/${CONF_FILES_TARGET_NAME}"
+CONF_FILES_CP_SRC="${PRESEED_MOUNT}/${CONF_FILES_TARGET_NAME}"
+CONF_FILES_CP_DST='/target'
+
+PRESEED_LATE_COMMANDS=( "${PRESEED_LATE_COMMANDS[@]:-}" \
+    "cp -rd -- ${CONF_FILES_CP_SRC}/* ${CONF_FILES_CP_DST}"  \
+)
+
+
 # Additional files to copy
 PRESEED_INCLUDE_FILES=( $(for preseed in ${PRESEED_INCLUDES[@]}; do echo "${PRESEED_SOURCE_DIR}/${preseed}"; done) )
 #PRESEED_INCLUDE_FILES=("preseed/passwords.cfg" "preseed/host.cfg")
@@ -298,6 +318,9 @@
 # preseed.cfg 'includes' line
 PRESEED_INCLUDE=${PRESEED_INCLUDES[@]}
 
+# preseed command execution
+PRESEED_LATE_COMMAND=$(for cmd in "${PRESEED_LATE_COMMANDS[@]}"; do if [ "$cmd" ]; then echo -n "$cmd;" $'\\\n    '; fi; done; echo true)
+
 
 ## Isolinux
 # Source for install tree isolinux file
@@ -315,7 +338,7 @@
 fi
 
 # installer boot args
-INSTALL_BOOT_ARGS="auto=true priority=critical preseed/file=/cdrom/${PRESEED_NAME} preseed/file/checksum=${PRESEED_CHECKSUM} -- quiet ${INSTALL_BOOT_CONSOLE}"
+INSTALL_BOOT_ARGS="auto=true priority=critical preseed/file=${PRESEED_MOUNT}/${PRESEED_NAME} preseed/file/checksum=${PRESEED_CHECKSUM} -- quiet ${INSTALL_BOOT_CONSOLE}"
 
 
 
@@ -449,6 +472,10 @@
 
 log_info "Preseed generated: $PRESEED_FILE"
 
+# Files
+log_info "Copy preseed-files"...
+cmd expand_tree ${CONF_FILES_SOURCE} ${CONF_FILES_TARGET}
+
 ## Create .iso
 [ -f ${INSTALL_ISO} ] && cmd rm -f ${INSTALL_ISO}
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/preseed/files/etc/default/puppet	Fri Jan 27 14:41:02 2012 +0200
@@ -0,0 +1,7 @@
+# Defaults for puppet - sourced by /etc/init.d/puppet
+
+# Start puppet on boot?
+START=yes
+
+# Startup options
+DAEMON_OPTS=""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/preseed/files/etc/puppet/puppet.conf	Fri Jan 27 14:41:02 2012 +0200
@@ -0,0 +1,11 @@
+[main]
+logdir=/var/log/puppet
+vardir=/var/lib/puppet
+ssldir=/var/lib/puppet/ssl
+rundir=/var/run/puppet
+factpath=$vardir/lib/facter
+templatedir=$confdir/templates
+
+[agent]
+server = {PUPPET_MASTER}
+
--- a/preseed/preseed.cfg	Fri Jan 27 12:07:32 2012 +0200
+++ b/preseed/preseed.cfg	Fri Jan 27 14:41:02 2012 +0200
@@ -404,8 +404,6 @@
     {PRESEED_LATE_COMMAND}
 
 
-
-
 ### Extra preseed files
 d-i preseed/include                     string  \
     {PRESEED_INCLUDE}
--- a/scripts/lib.sh	Fri Jan 27 12:07:32 2012 +0200
+++ b/scripts/lib.sh	Fri Jan 27 14:41:02 2012 +0200
@@ -157,6 +157,15 @@
     done < $tpl > $out
 }
 
+function expand_file () {
+    local src=$1
+    local dst=$2
+
+    log_info "expand: file $src -> $dst"
+
+    cmd expand_template $src $dst
+}
+
 # Recursive expand_template files from src -> dst
 # XXX: not used
 function expand_tree () {
@@ -164,20 +173,26 @@
     local dst=$2
     local filter=${3:-'*'}
 
+    log_info "expand: tree $src/$filter -> $dst"
+
+    [ ! -d $dst ] && cmd mkdir $dst
+
     for path in ${src}/${filter}; do
         local name=$(basename $path)
         local target=$dst/$name
 
+        log_debug "expand_tree: $src: path=$path, name=$name, target=$target"
+
         if [ -d $path ]; then
-            log_debug "expand_tree: $path -> $target"
-            expand_tree $path $target $filter
+            log_debug "expand_tree: $src: tree $name -> $target"
+            expand_tree $path $target "$filter"
 
         elif [ -f $path ]; then
-            log_debug "expand_file: $path -> $target"
+            log_debug "expand_tree: $src: file $name -> $target"
             expand_file $path $target
 
         else
-            log_warn "ignore weird file: $path"
+            log_warn "expand_tree: $src: ignore $name"
 
         fi
     done