[arch-releng] [PATCH 2/3] Provides Syslinux as a possible bootloader

Dieter Plaetinck dieter at plaetinck.be
Mon Feb 21 16:00:36 EST 2011


Provide.
Not provides.

btw something is messed up. some of my complaints on your patch 3 are taken care of in patch 2
so you fixed them in patch 2 but redid the issues in patch 3?
maybe you should merge patch 2 and 3

On Sun, 20 Feb 2011 23:09:36 -0500
pyther at pyther.net wrote:

> interactive_syslinux depends on the syslinux-install_update script that
> is in the Arch Syslinux package.
> ---
>  src/core/libs/lib-blockdevices-filesystems.sh |    1 +
>  src/core/libs/lib-ui-interactive.sh           |  159 +++++++++++++++++++++++--
>  src/core/procedures/base                      |    1 +
>  3 files changed, 153 insertions(+), 8 deletions(-)
> 
> diff --git a/src/core/libs/lib-blockdevices-filesystems.sh b/src/core/libs/lib-blockdevices-filesystems.sh
> index ac749a3..0ba2070 100644
> --- a/src/core/libs/lib-blockdevices-filesystems.sh
> +++ b/src/core/libs/lib-blockdevices-filesystems.sh
> @@ -76,6 +76,7 @@ fs_on[dm_crypt]=${fs_on_dm_crypt[@]}
>  fs_mountable=(ext2 ext3 ext4 nilfs2 xfs jfs vfat reiserfs)
>  fs_label_mandatory=('lvm-vg' 'lvm-lv' 'dm_crypt')
>  fs_label_optional=('swap' 'ext2' 'ext3' 'ext4' 'reiserfs' 'nilfs2' 'xfs' 'jfs' 'vfat')
> +syslinux_supported_fs=('ext2' 'ext3' 'ext4' 'btrfs' 'vfat')
>  
>  # list needed packages per filesystem
>  declare -A filesystem_pkg=(["lvm-pv"]="lvm2" ["xfs"]="xfsprogs" ["jfs"]="jfsutils" ["reiserfs"]="reiserfsprogs" ["nilfs2"]="nilfs-utils" ["vfat"]="dosfstools" ["dm_crypt"]="cryptsetup" ["btrfs"]=btrfs-progs-unstable)
> diff --git a/src/core/libs/lib-ui-interactive.sh b/src/core/libs/lib-ui-interactive.sh
> index 85a3a5f..16a9600 100644
> --- a/src/core/libs/lib-ui-interactive.sh
> +++ b/src/core/libs/lib-ui-interactive.sh
> @@ -3,6 +3,7 @@
>  
>  # Global Variables
>  grubmenu="/boot/grub/menu.lst" # be sure to override this if you have it somewhere else
> +syslinuxmenu="/boot/syslinux/syslinux.cfg"

the comment on the grubmenu lines applies to both variables.

>  
>  		DEVS="$(findblockdevices '_ ')"
>  		if [ "$DEVS" = " " ]; then
> @@ -1111,12 +1116,150 @@ EOF
>  	fi
>  }
>  
> -interactive_bootloader_menu() {
> -	# $1 - Bootloader Name
> -	# $2 - Bootloader Configuration Files
> +interactive_syslinux() {
> +	# Check if Syslinux in installed
> +	[[ ! -f "$var_TARGET_DIR/sbin/extlinux" ]] && show_warning "No Syslinux?" "Error: Couldn't find $var_TARGET_DIR/sbin/extlinux. Is SYSLINUX installed?" && return 1
> +
> +	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 [[ $1 = GRUB ]]; then
> +	if ! check_is_in "$filesystem" "${syslinux_supported_fs[@]}"; then
> +		show_warning "Invalid FS" "Error: Syslinux only supports EXT2/3/4, BTRFS, and VFAT"
leverage ${syslinux_supported_fs[@]} in the warning
> +		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/lib/syslinux/syslinux-install_update)"
> +	inform "Installing Syslinux..."
> +	if ! "$var_TARGET_DIR/usr/lib/syslinux/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/lib/syslinux/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
> +
> +		inform "Installing Syslinux MBR..." syslinuxprog
> +		"$var_TARGET_DIR/usr/lib/syslinux/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"
> +}
> +
> +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



More information about the arch-releng mailing list