# HG changeset patch # User Tero Marttila # Date 1327915286 -7200 # Node ID d74646c0b5dd33d96e338cd6a18d66c4df9f400d # Parent e3893b94997235953aae51178b459b1f45957d39 bootstrap serial console (grub, kernel args, inittab) diff -r e3893b949972 -r d74646c0b5dd pkvlm-create --- 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 diff -r e3893b949972 -r d74646c0b5dd preseed/files/etc/default/grub --- /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"