--- 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 \