On Sun, 27 Feb 2011 11:55:18 -0500
[email protected] wrote:

> interactive_syslinux depends on the syslinux-install_update script that
> is in the Arch Syslinux package.
> ---
>  src/core/libs/lib-blockdevices-filesystems.sh |    3 +-
>  src/core/libs/lib-ui-interactive.sh           |  143 
> ++++++++++++++++++++++++-
>  src/core/procedures/base                      |    1 +
>  3 files changed, 145 insertions(+), 2 deletions(-)
> 
> diff --git a/src/core/libs/lib-blockdevices-filesystems.sh 
> b/src/core/libs/lib-blockdevices-filesystems.sh
> index 5bf181e..cd17c72 100644
> --- a/src/core/libs/lib-blockdevices-filesystems.sh
> +++ b/src/core/libs/lib-blockdevices-filesystems.sh
> @@ -93,7 +93,8 @@ get_possible_fs () {
>       done
>  }
>  
> -supported_bootloaders=('grub')
> +syslinux_supported_fs=('ext2' 'ext3' 'ext4' 'btrfs' 'vfat')
> +supported_bootloaders=('syslinux' 'grub')
>  
>  # procedural code from quickinst functionized and fixed.
>  # there were functions like this in the setup script too, with some subtle 
> differences.  see below
> diff --git a/src/core/libs/lib-ui-interactive.sh 
> b/src/core/libs/lib-ui-interactive.sh
> index be31440..7309f6d 100644
> --- a/src/core/libs/lib-ui-interactive.sh
> +++ b/src/core/libs/lib-ui-interactive.sh
> @@ -2,7 +2,9 @@
>  # A library which allows you to do backend stuff by using user interfaces
>  
>  # Global Variables
> +# Be sure to override these if you have the configuration file elsewhere
>  grubmenu="/boot/grub/menu.lst"
> +syslinuxmenu="/boot/syslinux/syslinux.cfg"
>  
>  # check if a worker has completed successfully. if not -> tell user he must 
> do it + return 1
>  # if ok -> don't warn anything and return 0
> @@ -726,7 +728,8 @@ If any previous configuration you've done until now (like 
> fancy filesystems) req
>       done
>  
>       ask_option no "Choose bootloader" "Which bootloader would you like to 
> use?" optional \
> -     "grub" "GRUB bootloader"
> +     "grub" "GRUB bootloader" \
> +     "syslinux" "Syslinux bootloader (${syslinux_supported_fs[*]})"
>  
>       bootloader=$ANSWER_OPTION
>  
> @@ -858,6 +861,8 @@ interactive_install_bootloader () {
>       if [[ $bootloader = grub ]]; then
>               GRUB_OK=0
>               interactive_grub
> +     elif [[ $bootloader = syslinux ]]; then
> +             interactive_syslinux
>       else
>               show_warning 'No Bootloader' 'You did not select a bootloader. 
> No bootloader will be installed.' && return 0
>       fi
> @@ -1121,11 +1126,147 @@ EOF
>       fi
>  }
>  
> +interactive_syslinux() {
> +     debug FS "starting interactive_syslinux"
> +
> +     # Find and Store the device that has the root filesystem
> +     get_device_with_mount '/' || return 1
> +     PART_ROOT="$ANSWER_DEVICE"
> +
> +     # Gets booot device
> +     get_device_with_mount '/boot'
> +     bootdev="$ANSWER_DEVICE"
> +
> +     # Check to see if /boot or / (root) has a valid FS type and set bootpart
> +     # bootpart == device with /boot dir
> +     if [[ $bootdev ]]; then
> +             filesystem="$(awk '/ \/boot /{print $4}' $TMP_FILESYSTEMS)"
> +             debug FS "$bootdev - FS type: $filesystem"
> +
> +             local bootpart="$bootdev"
> +     else
> +             filesystem="$(awk '/ \/ /{print $4}' $TMP_FILESYSTEMS)"
> +             debug FS "$PART_ROOT - FS type: $filesystem"
> +
> +             local bootpart="$PART_ROOT"
> +     fi
> +
> +     if ! check_is_in "$filesystem" "${syslinux_supported_fs[@]}"; then
> +             show_warning "Invalid FS" "Error: Syslinux does not support 
> $filesystem.\n\nThe following filesystems are supported:\n  
> ${syslinux_supported_fs[@]}"
> +             return 1
> +     fi
> +
> +     # remove default entries by truncating file at our little tag (#-*)
> +     sed -i -e '/#-\*/q' "$syslinuxmenu"
> +
> +     # Generate menu and prompt user to edit it
> +     interactive_bootloader_menu "syslinux" "$syslinuxmenu"
> +
> +     if device_is_raid "$bootpart"; then
> +             debug FS "Software RAID detected"
> +             local onraid=true
> +             # Notify the user or trust the scripts?
> +     fi
> +
> +     debug FS "Installing Syslinux 
> ($var_TARGET_DIR/usr/sbin/syslinux-install_update -i -c /mnt)"
> +     inform "Installing Syslinux..."
> +     if ! "$var_TARGET_DIR/usr/sbin/syslinux-install_update" -i -c /mnt; then
> +             debug FS "FAILED: syslinux-install_update -i -c /mnt failed"
> +             show_warning "FAILED" "syslinux-install_update -i -c /mnt 
> failed"
> +             return 1
> +     fi
> +
> +     if ask_yesno "Set boot flag(s) and install the Syslinux MBR?" yes; then
> +             inform "Setting Boot Flag(s)...\nThis could take a while. 
> Please be patient.\n\n" syslinuxprog
> +             "$var_TARGET_DIR/usr/sbin/syslinux-install_update" -a -c /mnt
> +             rt=$?
> +             case "$rt" in
> +                     0)
> +                             debug FS "Successfully set boot flag(s)"
> +                             ;;
> +                     1)
> +                             debug FS "Failed to set boot flag. Function in 
> syslinux-install_update exited with status $rt"
> +                             notify "Failed to set boot flag. MBR not 
> installed!" && return 1
> +                             ;;
> +                     3)
> +                             debug FS "Failed to set boot flag(s). 
> syslinux-install_update -a exited with status $rt"
> +                             notify "Failed to set boot flag(s)! MBR not 
> installed!" && return 1
> +                             ;;
> +                     *)
> +                             debug FS "Failde to set boot flag(s). 
> syslinux-install_update -a failed with an unkown Error Code - $rt"
> +                             notify "Failed to set boot flag(s). MBR not 
> installed" && return 1
> +                     ;;
> +             esac

It's not clear what the difference is between 1 and 3. ("function in 
syslinux-install_update failed", vs "syslinux-install_update failed" ?)
Also, does the script ever return anything else then 0/1/3?
it seems to me this section can be shorter and simpler.

> +
> +             inform "Installing Syslinux MBR..." syslinuxprog
> +             "$var_TARGET_DIR/usr/sbin/syslinux-install_update" -m -c /mnt
> +             rt=$?
> +             case "$rt" in
> +                     0)
> +                             debug FS "Successfully installed MBR(s)"
> +                             ;;
> +                     1)
> +                             debug FS "Failed install MBR. Function in 
> syslinux-install_update -m exited with status $rt"
> +                             notify "Failed to install the MBR!." && return 1
> +                             ;;
> +                     4)
> +                             debug FS "Failed to install MBR. 
> syslinux-install_update -m exited with status $rt"
> +                             notify "Failed to install MBR!" && return 1
> +                             ;;
> +                     *)
> +                             debug FS "Failed to install MBR. 
> syslinux-install_update -m failed with an unkown Error Code - $rt"
> +                             notify "Failed to install the MBR!" && return 1
> +                     ;;
> +             esac
> +     fi
> +     notify "Syslinux Installation Successful"
> +}

same remark here.

> +
> +generate_syslinux_menu () {
> +     get_kernel_parameters
> +
> +     cat >>$syslinuxmenu <<EOF
> +
> +# (0) Arch Linux
> +LABEL arch
> +    MENU LABEL Arch Linux
> +    LINUX ../vmlinuz26
> +    APPEND $kernel_parameters
> +    INITRD ../kernel26.img
> +
> +# (1) Arch Linux Fallback
> +LABEL archfallback
> +    MENU LABEL Arch Linux Fallback
> +    LINUX ../vmlinuz26
> +    APPEND $kernel_parameters
> +    INITRD ../kernel26-fallback.img
> +
> +# (2) Windows
> +#LABEL windows
> +#COM32 chain.c32
> +#APPEND hd0 0
> +
> +LABEL hdt
> +    MENU LABEL HDT (Hardware Detection Tool)
> +    COM32 hdt.c32
> +
> +LABEL reboot
> +    MENU LABEL Reboot
> +    COM32 reboot.c32
> +
> +LABEL off
> +    MENU LABEL Power Off
> +    COMBOOT poweroff.com
> +EOF
> +}
> +
>  # $1 - Bootloader Name
>  # $2 - Bootloader Configuration Files
>  interactive_bootloader_menu() {
>       if [[ $1 = grub ]]; then
>               generate_grub_menulst
> +     elif [[ $1 = syslinux ]]; then
> +             generate_syslinux_menu
>       fi
>  
>       grep -q '^/dev/mapper' $TMP_FSTAB && local helptext="  /dev/mapper/ 
> users: Pay attention to the kernel line!"
> diff --git a/src/core/procedures/base b/src/core/procedures/base
> index 3ff66b4..bab079b 100644
> --- a/src/core/procedures/base
> +++ b/src/core/procedures/base
> @@ -11,6 +11,7 @@ var_UI_TYPE="cli" # set to cli or dia for dialog
>  var_ARCH=`uname -m` #i686 or x86_64. NOTE: this assumes you want to install 
> the same arch as the installation environment you're using. maybe we could 
> decouple those someday..
>  [ -z "$var_ARCH" ] && die_error "Could not determine your architecture"
>  grubmenu="$var_TARGET_DIR$grubmenu"
> +syslinuxmenu="$var_TARGET_DIR$syslinuxmenu"
>  
>  ###### Phases ( can be overridden by more specific procedures) ######
>  phase_preparation=(\

Reply via email to