314 INSTALLER_MOUNT="/cdrom" |
314 INSTALLER_MOUNT="/cdrom" |
315 INSTALLER_PRESEED_DIR="${INSTALLER_MOUNT}/${INSTALL_PRESEED_DIR_NAME}" |
315 INSTALLER_PRESEED_DIR="${INSTALLER_MOUNT}/${INSTALL_PRESEED_DIR_NAME}" |
316 INSTALLER_PRESEED_FILE="${INSTALLER_PRESEED_DIR}/${INSTALL_PRESEED_FILE_NAME}" |
316 INSTALLER_PRESEED_FILE="${INSTALLER_PRESEED_DIR}/${INSTALL_PRESEED_FILE_NAME}" |
317 |
317 |
318 |
318 |
319 |
319 ## Stage dir, for generating files for INSTALL_PRESEED |
|
320 STAGE_ROOT="stage" |
|
321 STAGE_DIR="${STAGE_ROOT}/${NAME}" |
|
322 |
|
323 log_info "Stage: prepare stage dir" |
|
324 |
|
325 # root |
|
326 [ ! -d ${STAGE_ROOT} ] && cmd mkdir ${STAGE_ROOT} |
|
327 |
|
328 # host-specific; clean |
|
329 [ -d ${STAGE_DIR} ] && cmd rm -r ${STAGE_DIR} |
|
330 cmd mkdir ${STAGE_DIR} |
320 |
331 |
321 ## preseed.cfg contents |
332 ## preseed.cfg contents |
322 # List of additional packages to install |
333 # List of additional packages to install |
323 PRESEED_PACKAGES=( sudo screen vim ) |
334 PRESEED_PACKAGES=( sudo screen vim ) |
324 |
335 |
325 # Script commands to execute |
336 # Script commands to execute |
326 PRESEED_LATE_COMMANDS=( ) |
337 PRESEED_LATE_COMMANDS=( ) |
327 PRESEED_LATE_COMMANDS_END=( ) |
|
328 |
338 |
329 # Chainload preseed files |
339 # Chainload preseed files |
330 PRESEED_INCLUDES=( 'passwords.cfg' 'host.cfg' ) |
340 PRESEED_INCLUDES=( 'passwords.cfg' 'host.cfg' ) |
331 |
341 |
332 # Add packages to preseed install |
342 # Add packages to preseed install |
337 # Add command to execute |
347 # Add command to execute |
338 function preseed_late_commands () { |
348 function preseed_late_commands () { |
339 PRESEED_LATE_COMMANDS=( "${PRESEED_LATE_COMMANDS[@]:-}" "$@" ) |
349 PRESEED_LATE_COMMANDS=( "${PRESEED_LATE_COMMANDS[@]:-}" "$@" ) |
340 } |
350 } |
341 |
351 |
342 # Add command to execute at end |
|
343 # XXX: ordering? |
|
344 function preseed_late_commands_end () { |
|
345 PRESEED_LATE_COMMANDS_END=( "${PRESEED_LATE_COMMANDS_END[@]:-}" "$@" ) |
|
346 } |
|
347 |
|
348 |
|
349 ## preseed-files |
352 ## preseed-files |
|
353 # staged files |
|
354 # name must match with INSTALL_PRESEED_FILES_DIR |
|
355 STAGE_PRESEED_FILES_DIR="${STAGE_DIR}/files" |
|
356 |
|
357 log_info "Stage: prepare preseed-files" |
|
358 cmd mkdir "${STAGE_PRESEED_FILES_DIR}" |
|
359 |
350 # template source trees |
360 # template source trees |
351 PRESEED_FILES_SOURCES=( "${PRESEED_DIR}/files" ) |
361 PRESEED_FILES_SOURCES=( "${PRESEED_DIR}/files" ) |
352 |
362 |
353 # template output into install tree |
363 # template output into install tree |
354 INSTALL_PRESEED_FILES_DIR_NAME="${INSTALL_PRESEED_DIR_NAME}/files" |
364 INSTALL_PRESEED_FILES_DIR_NAME="${INSTALL_PRESEED_DIR_NAME}/files" |
368 # if dst is a dir, it must end in / |
378 # if dst is a dir, it must end in / |
369 function preseed_file () { |
379 function preseed_file () { |
370 local src=$1 |
380 local src=$1 |
371 local dst=$2 |
381 local dst=$2 |
372 local dir=$(dirname $dst) |
382 local dir=$(dirname $dst) |
373 local tgt=${PRESEED_FILES_TARGET} |
383 local tgt=${STAGE_PRESEED_FILES_DIR} |
374 |
384 |
375 local tgt_dir="$tgt/$dir" |
385 local tgt_dir="$tgt/$dir" |
376 |
386 |
377 if [ ! -d "$tgt_dir" ]; then |
387 if [ ! -d "$tgt_dir" ]; then |
378 cmd mkdir -p "$tgt_dir" |
388 cmd mkdir -p "$tgt_dir" |
379 fi |
389 fi |
380 |
390 |
381 cmd cp "$src" "$tgt/$dst" |
391 cmd cp "$src" "$tgt/$dst" |
382 } |
392 } |
383 |
393 |
|
394 ## preseed-scripts |
|
395 STAGE_PRESEED_SCRIPTS_DIR="${STAGE_DIR}/scripts" |
|
396 |
|
397 cmd mkdir "${STAGE_PRESEED_SCRIPTS_DIR}" |
|
398 |
|
399 # output into install tree |
|
400 INSTALL_PRESEED_SCRIPTS_DIR_NAME="${INSTALL_PRESEED_DIR_NAME}/scripts" |
|
401 INSTALL_PRESEED_SCRIPTS_DIR="${INSTALL_TREE}/${INSTALL_PRESEED_SCRIPTS_DIR_NAME}" |
|
402 |
|
403 # paths within installer runtime |
|
404 INSTALLER_PRESEED_SCRIPTS_DIR="${INSTALLER_MOUNT}/${INSTALL_PRESEED_SCRIPTS_DIR_NAME}" |
|
405 |
|
406 |
|
407 # add a preseed script to execute, from stdin |
|
408 function preseed_script () { |
|
409 local name=$1 |
|
410 local path="${STAGE_PRESEED_SCRIPTS_DIR}/$name" |
|
411 |
|
412 log_debug "preseed script: $name" |
|
413 |
|
414 # header |
|
415 echo '#!/bin/sh' > $path |
|
416 |
|
417 # from stdin |
|
418 cat >> $path |
|
419 |
|
420 chmod +x $path |
|
421 } |
|
422 |
384 ### Extra |
423 ### Extra |
385 ## Puppet |
424 ## Puppet |
386 PUPPET= |
|
387 |
|
388 if [ $opt_puppet ]; then |
425 if [ $opt_puppet ]; then |
389 log_info "Puppetizing preseed" |
426 log_info "Puppetizing preseed" |
390 PUPPET=yes |
|
391 |
427 |
392 PUPPET_PRESEED_DIR="${PRESEED_DIR}/puppet" |
428 PUPPET_PRESEED_DIR="${PRESEED_DIR}/puppet" |
393 |
429 |
394 ## Packages |
430 ## Packages |
395 preseed_packages puppet |
431 preseed_packages puppet |
432 puppet_preseed_ssl_file certs/ca.pem |
464 puppet_preseed_ssl_file certs/ca.pem |
433 |
465 |
434 # guest cert/pkey |
466 # guest cert/pkey |
435 puppet_preseed_ssl_file certs/${FQDN}.pem |
467 puppet_preseed_ssl_file certs/${FQDN}.pem |
436 puppet_preseed_ssl_file private_keys/${FQDN}.pem |
468 puppet_preseed_ssl_file private_keys/${FQDN}.pem |
437 } |
469 fi |
438 |
470 |
439 ## Configure GRUB, via preseed/files: /etc/default/grub |
471 ## Configure GRUB, via preseed/files: /etc/default/grub |
440 # Kernel commandline/grub terminal |
472 # Kernel commandline/grub terminal |
441 # The last console=... for kernel is used as /dev/console, i.e. init output |
473 # The last console=... for kernel is used as /dev/console, i.e. init output |
|
474 log_info "Configure grub / serial console" |
442 |
475 |
443 if [ $SERIAL_CONSOLE ]; then |
476 if [ $SERIAL_CONSOLE ]; then |
444 BOOT_KERNEL_CONSOLE="console=${SERIAL_CONSOLE} console=tty0" |
477 BOOT_KERNEL_CONSOLE="console=${SERIAL_CONSOLE} console=tty0" |
445 BOOT_GRUB_TERMINAL="console serial" |
478 BOOT_GRUB_TERMINAL="console serial" |
446 |
479 |
447 # re-generate grub.cfg |
|
448 preseed_late_commands_end "in-target update-grub" |
|
449 |
|
450 # Configure /etc/inittab for serial console |
480 # Configure /etc/inittab for serial console |
451 preseed_late_commands "in-target sed -i 's/#T0/T0/' /etc/inittab" |
481 preseed_script '11-serial-console' <<END |
|
482 in-target sed -i 's/#T0/T0/' /etc/inittab |
|
483 END |
|
484 |
452 else |
485 else |
453 BOOT_KERNEL_CONSOLE="" |
486 BOOT_KERNEL_CONSOLE="" |
454 BOOT_GRUB_TERMINAL="console" |
487 BOOT_GRUB_TERMINAL="console" |
455 fi |
488 fi |
456 |
489 |
|
490 # re-generate grub.cfg |
|
491 preseed_script '10-boot-grub' <<END |
|
492 in-target update-grub |
|
493 END |
|
494 |
457 # Kernel boot args (overrides those generated by installer) - default boot option uses args + args_default |
495 # Kernel boot args (overrides those generated by installer) - default boot option uses args + args_default |
458 BOOT_KERNEL_ARGS_DEFAULT="quiet" |
496 BOOT_KERNEL_ARGS_DEFAULT="quiet" |
459 BOOT_KERNEL_ARGS="${BOOT_KERNEL_CONSOLE}" |
497 BOOT_KERNEL_ARGS="${BOOT_KERNEL_CONSOLE}" |
460 |
498 |
461 ### Postprocess preseed data |
499 ### Postprocess preseed data |
462 ## Preseed / config files |
500 ## Preseed / config files |
463 |
501 |
464 # copy at end of install |
502 # copy at end of install |
465 preseed_late_commands "cp -rd -- ${INSTALLER_PRESEED_FILES_DIR}/* ${INSTALLER_PRESEED_FILES_TARGET}" |
503 preseed_late_commands "cp -rd -- ${INSTALLER_PRESEED_FILES_DIR}/* ${INSTALLER_PRESEED_FILES_TARGET}" |
466 |
504 |
|
505 ## Preseed / scripts |
|
506 preseed_late_commands "for script in ${INSTALLER_PRESEED_SCRIPTS_DIR}/*; do \$script; done" |
|
507 |
467 ## preseed.cfg |
508 ## preseed.cfg |
468 |
509 |
469 # Additional files to copy |
510 # Additional files to copy |
470 PRESEED_INCLUDE_FILES=( $(for preseed in ${PRESEED_INCLUDES[@]}; do echo "${PRESEED_DIR}/${preseed}"; done) ) |
511 PRESEED_INCLUDE_FILES=( $(for preseed in ${PRESEED_INCLUDES[@]}; do echo "${PRESEED_DIR}/${preseed}"; done) ) |
471 |
512 |
472 # preseed.cfg 'includes' line |
513 # preseed.cfg 'includes' line |
473 PRESEED_INCLUDE=${PRESEED_INCLUDES[@]} |
514 PRESEED_INCLUDE=${PRESEED_INCLUDES[@]} |
474 |
515 |
475 # preseed command execution |
516 # preseed command execution |
476 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) |
517 PRESEED_LATE_COMMAND=$(for cmd in "${PRESEED_LATE_COMMANDS[@]}"; do if [ "$cmd" ]; then echo -n "$cmd;" $'\\\n '; fi; done; echo true) |
477 |
518 |
478 |
519 |
479 ## Isolinux |
520 ## Isolinux |
480 # Automagics for serial boot :) |
521 # Automagics for serial boot :) |
481 # virt-install assumes we have an X $DISPLAY if given --vnc |
522 # virt-install assumes we have an X $DISPLAY if given --vnc |
635 done |
676 done |
636 |
677 |
637 ## Expand isolinux |
678 ## Expand isolinux |
638 cmd expand_file ${PRESEED_ISOLINUX_FILE} ${INSTALL_ISOLINUX_FILE} |
679 cmd expand_file ${PRESEED_ISOLINUX_FILE} ${INSTALL_ISOLINUX_FILE} |
639 |
680 |
|
681 log_info "Preseed generated: $INSTALL_PRESEED_DIR" |
|
682 |
|
683 |
640 ## Expand preseed-files |
684 ## Expand preseed-files |
641 log_info "Copy preseed-files..." |
685 log_info "Copy preseed-files..." |
642 |
686 |
643 for tree in "${PRESEED_FILES_SOURCES[@]}"; do |
687 for tree in "${PRESEED_FILES_SOURCES[@]}"; do |
644 log_info "preseed-files: $tree" |
688 log_info "preseed-files: $tree" |
645 |
689 |
646 cmd expand_tree $tree ${INSTALL_PRESEED_FILES_DIR} |
690 cmd expand_tree $tree ${INSTALL_PRESEED_FILES_DIR} |
647 done |
691 done |
648 |
692 |
649 log_info "Preseed generated: $INSTALL_PRESEED_DIR" |
693 # Staged files |
650 |
694 # PRESEED_FILES_DIR must be the same name as INSTALL_PRESEED_FILES_DIR |
651 |
695 cmd cp -rv ${STAGE_PRESEED_FILES_DIR}/ ${INSTALL_PRESEED_DIR}/ |
652 |
696 |
653 |
697 # debug? |
654 ## Modules |
698 [ $LOG_DEBUG ] && tree ${INSTALL_PRESEED_FILES_DIR} |
655 # Puppet |
699 |
656 [ $PUPPET ] && puppet_config |
700 |
657 |
701 ## Copy preseed scripts |
658 |
702 log_info "Copy preseed-scripts..." |
|
703 |
|
704 # Staged scripts |
|
705 cmd cp -rv "$STAGE_PRESEED_SCRIPTS_DIR" "$INSTALL_PRESEED_SCRIPTS_DIR" |
659 |
706 |
660 |
707 |
661 ### Create .iso |
708 ### Create .iso |
662 log_info "Generate ISO..." |
709 log_info "Generate ISO..." |
663 |
710 |