--- a/pkvlm-create Fri Jan 27 14:41:02 2012 +0200
+++ b/pkvlm-create Mon Jan 30 11:21:26 2012 +0200
@@ -140,6 +140,7 @@
define_opt ip
define_opt puppet
define_opt puppet_master puppet
+define_opt serial_console
log_info "Processing ${#@} parameters:"
for param in "$@"; do
@@ -183,6 +184,15 @@
DISK_PATH=/dev/mapper/${DISK_VG}-${DISK_NAME}
GUEST_DISK_BUS=$opt_disk_bus
+## Serial
+# Serial console?
+# XXX: hardcoded as ttyS0
+case x"$opt_serial_console" in
+# xtty*) SERIAL_CONSOLE="$opt_serial_console" ;;
+ x) SERIAL_CONSOLE= ;;
+ x*) SERIAL_CONSOLE="ttyS0" ;;
+esac
+
### Preseed content
GUEST_DISK=$opt_guest_disk
@@ -239,8 +249,18 @@
## Misc
PACKAGE_INCLUDES=( sudo screen vim )
PRESEED_LATE_COMMANDS=( )
+PRESEED_LATE_COMMANDS_END=( )
PRESEED_INCLUDES=( 'passwords.cfg' 'host.cfg' )
+function preseed_late_commands () {
+ PRESEED_LATE_COMMANDS=( "${PRESEED_LATE_COMMANDS[@]:-}" "$@" )
+}
+
+# XXX: ordering?
+function preseed_late_commands_end () {
+ PRESEED_LATE_COMMANDS_END=( "${PRESEED_LATE_COMMANDS_END[@]:-}" "$@" )
+}
+
### Extra
## Puppet
@@ -258,9 +278,33 @@
PUPPET_MASTER="${opt_puppet_master}"
PACKAGE_INCLUDES=( ${PACKAGE_INCLUDES[@]} ${PUPPET_PACKAGES[@]} )
- PRESEED_LATE_COMMANDS=( "${PRESEED_LATE_COMMANDS[@]:-}" "${PUPPET_COMMANDS[@]:-}" )
+
+ [ "${PUPPET_COMMANDS[@]:-}" ] && preseed_late_commands "${PUPPET_COMMANDS[@]}"
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
+
+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_late_commands "in-target sed -i 's/#T0/T0/' /etc/inittab"
+else
+ BOOT_KERNEL_CONSOLE=""
+ BOOT_GRUB_TERMINAL="console"
+fi
+
+# 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}"
+
+
### Installer setup
## Installation image
# Original Debian Installer image (iso)
@@ -300,16 +344,20 @@
PRESEED_CHECKSUM= # set later
## Configs
+
+# template source
CONF_FILES_SOURCE='preseed/files'
+
+# template output into install tree
CONF_FILES_TARGET_NAME='preseed-files'
CONF_FILES_TARGET="${INSTALL_TREE}/${CONF_FILES_TARGET_NAME}"
+
+# paths within installer runtime
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}" \
-)
-
+# copy at end of install
+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) )
@@ -319,28 +367,26 @@
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)
+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)
## Isolinux
# Source for install tree isolinux file
PRESEED_ISOLINUX="${PRESEED_SOURCE_DIR}/isolinux.cfg"
-# XXX: automagics? :)
+# Automagics for serial boot :)
# 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
+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=${PRESEED_MOUNT}/${PRESEED_NAME} preseed/file/checksum=${PRESEED_CHECKSUM} -- quiet ${INSTALL_BOOT_CONSOLE}"
-
-
+# isolinux installer boot args
+INSTALL_BOOT_ARGS="auto=true priority=critical preseed/file=${PRESEED_MOUNT}/${PRESEED_NAME} preseed/file/checksum=${PRESEED_CHECKSUM} -- ${INSTALL_BOOT_CONSOLE} quiet"
### External progs
## Bootable .iso for Debian isolinux-based installer CDs
@@ -382,6 +428,11 @@
Disk: $GUEST_DISK
+Boot:
+ Serial console: $SERIAL_CONSOLE
+ Grub terminal: $BOOT_GRUB_TERMINAL
+ Kernel args: $BOOT_KERNEL_ARGS ($BOOT_KERNEL_ARGS_DEFAULT)
+
Disk:
Method: LVM
Size: $DISK_SIZE
@@ -509,9 +560,9 @@
--os-variant $GUEST_OS_VARIANT \
--disk path=$DISK_PATH,bus=$GUEST_DISK_BUS \
--network bridge:$NET_BRIDGE \
- --vnc \
--virt-type $LIBVIRT_TYPE \
--accelerate --hvm \
+ --vnc \
--serial pty
fi
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/preseed/files/etc/default/grub Mon Jan 30 11:21:26 2012 +0200
@@ -0,0 +1,31 @@
+# If you change this file, run 'update-grub' afterwards to update
+# /boot/grub/grub.cfg.
+
+GRUB_DEFAULT=0
+GRUB_TIMEOUT=5
+GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
+GRUB_CMDLINE_LINUX_DEFAULT="{BOOT_KERNEL_ARGS_DEFAULT}"
+GRUB_CMDLINE_LINUX="{BOOT_KERNEL_ARGS}"
+
+# Uncomment to enable BadRAM filtering, modify to suit your needs
+# This works with Linux (no patch required) and with any kernel that obtains
+# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
+#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
+
+# Uncomment to disable graphical terminal (grub-pc only)
+GRUB_TERMINAL="{BOOT_GRUB_TERMINAL}"
+GRUB_SERIAL_COMMAND="serial"
+
+# The resolution used on graphical terminal
+# note that you can use only modes which your graphic card supports via VBE
+# you can see them in real GRUB with the command `vbeinfo'
+#GRUB_GFXMODE=640x480
+
+# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
+#GRUB_DISABLE_LINUX_UUID=true
+
+# Uncomment to disable generation of recovery mode menu entries
+#GRUB_DISABLE_LINUX_RECOVERY="true"
+
+# Uncomment to get a beep at grub start
+#GRUB_INIT_TUNE="480 440 1"