parametrize packages/include/late_command; add puppet=yes support
authorTero Marttila <terom@fixme.fi>
Fri, 27 Jan 2012 12:07:32 +0200
changeset 14 4154c64c5d69
parent 13 46fdb138420e
child 15 e3893b949972
parametrize packages/include/late_command; add puppet=yes support
pkvlm-create
preseed/isolinux.cfg
preseed/preseed.cfg
--- a/pkvlm-create	Fri Jan 27 10:39:08 2012 +0200
+++ b/pkvlm-create	Fri Jan 27 12:07:32 2012 +0200
@@ -34,7 +34,7 @@
 
 Parameters are given as:
 
-    NAME=value-{FOO}
+    name=value-{FOO}
 
 END
 }
@@ -138,6 +138,7 @@
 define_opt  bridge      br-lan
 define_opt  dns_domain  paivola.fi
 define_opt  ip          
+define_opt  puppet      
 
 log_info "Processing ${#@} parameters:"
 for param in "$@"; do
@@ -155,10 +156,9 @@
     define_opt  ip          $(resolve_name ${opt_name}.${opt_dns_domain})
 fi
 
-
-
-### Preseed content
-## Guest info
+### Virtual machine config
+## libvirt guest info
+# Name
 GUEST_NAME=$opt_name
 
 # Basic params
@@ -180,7 +180,9 @@
 
 # Path to disk block device
 DISK_PATH=/dev/mapper/${DISK_VG}-${DISK_NAME}
-DISK_BUS=$opt_disk_bus
+GUEST_DISK_BUS=$opt_disk_bus
+
+### Preseed content
 GUEST_DISK=$opt_guest_disk
 
 ## Network
@@ -221,7 +223,7 @@
         log_debug "Get user password from shadow: $user"
         getent_user_attr $user shadow 2
     else
-        echo -n "Install target login ($user) " >&2
+        echo -n "Install target login ($USER_NAME) " >&2
         mkpasswd -m sha-512
     fi
 }
@@ -229,11 +231,29 @@
 # XXX: hardcoded
 USER_CREATE='true'
 USER_NAME=$USER
-USER_FULLNAME=$(user_fullname $USER_NAME)
-USER_SHADOW=$(user_shadow $USER_NAME)
-USER_GROUPS=(cdrom sudo adm)
+USER_FULLNAME=$(user_fullname $USER)
+USER_SHADOW=$(user_shadow $USER)
+USER_GROUPS=( cdrom sudo adm )
 
+## Misc
+PACKAGE_INCLUDES=( sudo screen vim )
+PRESEED_LATE_COMMANDS=( )
+PRESEED_INCLUDES=( 'passwords.cfg' 'host.cfg' )
 
+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"  \
+    )
+
+    PACKAGE_INCLUDES=( ${PACKAGE_INCLUDES[@]} ${PUPPET_PACKAGES[@]} )
+    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
@@ -250,19 +270,52 @@
 INSTALL_TREE="images/${INSTALL_NAME}"
 INSTALL_ISO="iso-out/${INSTALL_NAME}.iso"
 
+
 ## Preseed files
 # Preseed output file in install tree
 PRESEED_NAME="preseed.cfg"
 
-# Preseed source template
-PRESEED_TEMPLATE="preseed/${PRESEED_NAME}"
+# Directory containing our source templates
+PRESEED_SOURCE_DIR="preseed"
+
+# Prefix for target files in install tree
+# XXX: not implemented
+#PRESEED_TARGET_PREFIX=""
+
+# Main preseed source template
+PRESEED_TEMPLATE="${PRESEED_SOURCE_DIR}/${PRESEED_NAME}"
+
+# Target path for preseed in install tree
 PRESEED_FILE="${INSTALL_TREE}/${PRESEED_NAME}"
-PRESEED_ISOLINUX="preseed/isolinux.cfg"
-PRESEED_INCLUDES=("preseed/passwords.cfg" "preseed/host.cfg")
+
+# Checksum of target preseed.cfg
 PRESEED_CHECKSUM= # set later
 
+# 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")
+
+# preseed.cfg 'includes' line
+PRESEED_INCLUDE=${PRESEED_INCLUDES[@]}
+
+
+## Isolinux
+# Source for install tree isolinux file
+PRESEED_ISOLINUX="${PRESEED_SOURCE_DIR}/isolinux.cfg"
+
+# XXX: automagics? :)
+#      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=""
+else
+    INSTALL_BOOT_CONSOLE="console=ttyS0"
+fi
+
 # installer boot args
-INSTALL_BOOT_ARGS="auto=true priority=critical preseed/file=/cdrom/${PRESEED_NAME} preseed/file/checksum=${PRESEED_CHECKSUM} -- quiet console=ttyS0"
+INSTALL_BOOT_ARGS="auto=true priority=critical preseed/file=/cdrom/${PRESEED_NAME} preseed/file/checksum=${PRESEED_CHECKSUM} -- quiet ${INSTALL_BOOT_CONSOLE}"
 
 
 
@@ -314,7 +367,7 @@
         LV:     $DISK_NAME
 
     Path:       $DISK_PATH
-    Bus:        $DISK_BUS
+    Bus:        $GUEST_DISK_BUS
 
 Net:
     Hostname:   $NET_HOSTNAME
@@ -388,7 +441,7 @@
 cmd expand_template ${PRESEED_ISOLINUX} ${INSTALL_TREE}/isolinux/isolinux.cfg
 
 # Others
-for file in ${PRESEED_INCLUDES[@]}; do
+for file in ${PRESEED_INCLUDE_FILES[@]}; do
     name=$(basename $file)
 
     cmd expand_template $file ${INSTALL_TREE}/${name}
@@ -427,7 +480,7 @@
             --ram $(expand_MB $GUEST_RAM) --vcpus $GUEST_VCPUS \
             --cdrom "$INSTALL_ISO" \
             --os-variant $GUEST_OS_VARIANT \
-            --disk path=$DISK_PATH,bus=$DISK_BUS \
+            --disk path=$DISK_PATH,bus=$GUEST_DISK_BUS \
             --network bridge:$NET_BRIDGE \
             --vnc \
             --virt-type $LIBVIRT_TYPE \
--- a/preseed/isolinux.cfg	Fri Jan 27 10:39:08 2012 +0200
+++ b/preseed/isolinux.cfg	Fri Jan 27 12:07:32 2012 +0200
@@ -7,7 +7,7 @@
 
 default preseed
 label preseed
-	menu label ^Install (Preseed {GUEST_NAME})
+	menu label ^Install (Preseed {GUEST_NAME}.{NET_DOMAIN})
 	menu default
 	kernel /install.amd/vmlinuz
 
--- a/preseed/preseed.cfg	Fri Jan 27 10:39:08 2012 +0200
+++ b/preseed/preseed.cfg	Fri Jan 27 12:07:32 2012 +0200
@@ -319,7 +319,8 @@
 
 # Individual additional packages to install
 d-i pkgsel/include              string \
-    sudo screen vim
+    {PACKAGE_INCLUDES[*]}
+
 
 # Whether to upgrade packages after debootstrap.
 # Allowed values: none, safe-upgrade, full-upgrade
@@ -399,10 +400,12 @@
 # still a usable /target directory. You can chroot to /target and use it
 # directly, or use the apt-install and in-target commands to easily install
 # packages and run commands in the target system.
-#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh
+d-i preseed/late_command                string  \
+    {PRESEED_LATE_COMMAND}
 
 
 
 
 ### Extra preseed files
-d-i preseed/include                     string passwords.cfg host.cfg
+d-i preseed/include                     string  \
+    {PRESEED_INCLUDE}