summaryrefslogtreecommitdiff
path: root/libre-testing/syslinux
diff options
context:
space:
mode:
Diffstat (limited to 'libre-testing/syslinux')
-rw-r--r--libre-testing/syslinux/PKGBUILD170
-rw-r--r--libre-testing/syslinux/splash.pngbin0 -> 11984 bytes
-rw-r--r--libre-testing/syslinux/syslinux-6.00-efi-export-kbdmap.patch38
-rw-r--r--libre-testing/syslinux/syslinux-6.00-efi-fix-libcom32.patch45
-rw-r--r--libre-testing/syslinux/syslinux-dont-build-dos-windows-targets.patch12
-rw-r--r--libre-testing/syslinux/syslinux-install_update475
-rw-r--r--libre-testing/syslinux/syslinux.cfg78
-rw-r--r--libre-testing/syslinux/syslinux.install36
8 files changed, 854 insertions, 0 deletions
diff --git a/libre-testing/syslinux/PKGBUILD b/libre-testing/syslinux/PKGBUILD
new file mode 100644
index 000000000..cdc3483d5
--- /dev/null
+++ b/libre-testing/syslinux/PKGBUILD
@@ -0,0 +1,170 @@
+# Maintainer: Tobias Powalowski <tpowa@archlinux.org>
+# Maintainer: Thomas Bächler <thomas@archlinux.org>
+# Contributor: Keshav Padram (the.ridikulus.rat) (aatt) (gemmaeiil) (ddoott) (ccoomm)>
+# Maintainer (Parabola): André Silva <emulatorman@lavabit.com>
+
+pkgname="syslinux"
+pkgver="6.01"
+pkgrel="2"
+arch=('x86_64' 'i686')
+pkgdesc="Collection of boot loaders that boot from FAT, ext2/3/4 and btrfs filesystems, from CDs and via PXE (Parabola rebranded)"
+url="http://syslinux.zytor.com/"
+license=('GPL2')
+options=('!makeflags' '!emptydirs')
+backup=('boot/syslinux/syslinux.cfg'
+ 'boot/syslinux/splash.png')
+makedepends=('python2' 'nasm' 'gnu-efi-libs')
+depends=('perl' 'glibc')
+optdepends=('perl-passwd-md5: For md5pass'
+ 'perl-digest-sha1: For sha1pass'
+ 'mtools: For mkdiskimage and syslinux support'
+ 'gptfdisk: For GPT support'
+ 'util-linux: For isohybrid'
+ 'efibootmgr: For EFI support'
+ 'dosfstools: For EFI support')
+
+install="${pkgname}.install"
+
+source=("https://www.kernel.org/pub/linux/utils/boot/syslinux/${pkgname}-${pkgver}.tar.xz"
+ 'syslinux.cfg'
+ 'syslinux-install_update'
+ 'splash.png')
+
+sha1sums=('d7bc1b188677f77ac2d7060d25491dc29877a9c4'
+ 'a0238479aa2ed0bbd91d879d35bf7fce2600830f'
+ 'b1d915045fe3094f5359df043c53e73a4dc32745'
+ '1be7066848f2d58d67c63436294de5322ca34318')
+
+_build_syslinux_bios() {
+
+ rm -rf "${srcdir}/${pkgname}-${pkgver}-bios/" || true
+ cp -r "${srcdir}/${pkgname}-${pkgver}" "${srcdir}/${pkgname}-${pkgver}-bios"
+ cd "${srcdir}/${pkgname}-${pkgver}-bios/"
+
+ ## Do not try to build syslinux with our default LDFLAGS, it will fail
+ unset LDFLAGS
+
+ make PYTHON="python2" bios
+ make PYTHON="python2" bios installer
+
+}
+
+_build_syslinux_efi64() {
+
+ rm -rf "${srcdir}/${pkgname}-${pkgver}-efi64/" || true
+ cp -r "${srcdir}/${pkgname}-${pkgver}" "${srcdir}/${pkgname}-${pkgver}-efi64"
+ cd "${srcdir}/${pkgname}-${pkgver}-efi64/"
+
+ ## Unset all compiler FLAGS for efi64 build
+ unset CFLAGS
+ unset CPPFLAGS
+ unset CXXFLAGS
+ unset LDFLAGS
+ unset MAKEFLAGS
+
+ make PYTHON="python2" efi64
+ make PYTHON="python2" efi64 installer
+
+}
+
+_build_syslinux_efi32() {
+
+ rm -rf "${srcdir}/${pkgname}-${pkgver}-efi32/" || true
+ cp -r "${srcdir}/${pkgname}-${pkgver}" "${srcdir}/${pkgname}-${pkgver}-efi32"
+ cd "${srcdir}/${pkgname}-${pkgver}-efi32/"
+
+ ## Unset all compiler FLAGS for efi32 build
+ unset CFLAGS
+ unset CPPFLAGS
+ unset CXXFLAGS
+ unset LDFLAGS
+ unset MAKEFLAGS
+
+ make PYTHON="python2" efi32
+ make PYTHON="python2" efi32 installer
+
+}
+
+build() {
+
+ cd "${srcdir}/${pkgname}-${pkgver}/"
+
+ ## Do not try to build the Windows or DOS installers and DIAG files
+ sed 's|diag libinstaller dos win32 win64 dosutil txt|libinstaller txt|g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true
+ sed 's|win32/syslinux.exe win64/syslinux64.exe||g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true
+ sed 's|dosutil/*.com dosutil/*.sys||g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true
+ sed 's|dos/syslinux.com||g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true
+ sed 's|INSTALLSUBDIRS = com32 utils dosutil|INSTALLSUBDIRS = com32 utils|g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true
+ sed 's|install -m 644 -c $(INSTALL_DIAG) $(INSTALLROOT)$(DIAGDIR)|# install -m 644 -c $(INSTALL_DIAG) $(INSTALLROOT)$(DIAGDIR)|g' -i "${srcdir}/${pkgname}-${pkgver}/Makefile" || true
+
+ ## Fix FHS manpage path
+ sed 's|/usr/man|/usr/share/man|g' -i "${srcdir}/${pkgname}-${pkgver}/mk/syslinux.mk" || true
+
+ ## Build syslinux-efi
+ if [[ "${CARCH}" == "x86_64" ]]; then
+ _build_syslinux_efi64
+ fi
+
+ if [[ "${CARCH}" == "i686" ]]; then
+ _build_syslinux_efi32
+ fi
+
+ ## Build syslinux-bios
+ _build_syslinux_bios
+
+}
+
+_package_syslinux_bios() {
+
+ cd "${srcdir}/${pkgname}-${pkgver}-bios/"
+
+ ## Install Syslinux bios
+ make INSTALLROOT="${pkgdir}/" AUXDIR="/usr/lib/syslinux/bios/" bios install
+
+ ## Remove syslinux.exe,syslinux64.exe,syslinux.com and dosutil dir
+ rm "${pkgdir}/usr/lib/syslinux/bios"/syslinux.{com,exe} || true
+ rm "${pkgdir}/usr/lib/syslinux/bios/syslinux64.exe" || true
+ rm -rf "${pkgdir}/usr/lib/syslinux/bios/dosutil/" || true
+
+ ## Remove com32 and diag dirs
+ rm -rf "${pkgdir}/usr/lib/syslinux/bios/diag/" || true
+ rm -rf "${pkgdir}/usr/lib/syslinux/bios/com32/" || true
+
+ ## Move extlinux binary to /usr/bin
+ install -d "${pkgdir}/usr/bin"
+ mv "${pkgdir}/sbin/extlinux" "${pkgdir}/usr/bin/extlinux"
+ rm -rf "${pkgdir}/sbin/"
+
+ ## Install docs
+ install -d "${pkgdir}/usr/share/doc"
+ cp -ar "${srcdir}/${pkgname}-${pkgver}/doc" "${pkgdir}/usr/share/doc/syslinux"
+
+ ## Install the default configuration
+ install -D -m0644 "${srcdir}/syslinux.cfg" "${pkgdir}/boot/syslinux/syslinux.cfg"
+
+ ## Install the installation and update script
+ ## This script is maintained at git://gist.github.com/772138.git
+ ## Script not yet updated for syslinux-efi
+ install -D -m0755 "${srcdir}/syslinux-install_update" "${pkgdir}/usr/bin/syslinux-install_update"
+
+ # Install Parabola splash
+ install -D -m644 "${srcdir}/splash.png" "${pkgdir}/boot/syslinux/splash.png"
+}
+
+package() {
+
+ cd "${srcdir}/${pkgname}-${pkgver}/"
+
+ if [[ "${CARCH}" == "x86_64" ]]; then
+ cd "${srcdir}/${pkgname}-${pkgver}-efi64/"
+ make INSTALLROOT="${pkgdir}/" AUXDIR="/usr/lib/syslinux/" efi64 install
+ fi
+
+ if [[ "${CARCH}" == "i686" ]]; then
+ cd "${srcdir}/${pkgname}-${pkgver}-efi32/"
+ make INSTALLROOT="${pkgdir}/" AUXDIR="/usr/lib/syslinux/" efi32 install
+ fi
+
+ _package_syslinux_bios
+
+}
diff --git a/libre-testing/syslinux/splash.png b/libre-testing/syslinux/splash.png
new file mode 100644
index 000000000..f94067681
--- /dev/null
+++ b/libre-testing/syslinux/splash.png
Binary files differ
diff --git a/libre-testing/syslinux/syslinux-6.00-efi-export-kbdmap.patch b/libre-testing/syslinux/syslinux-6.00-efi-export-kbdmap.patch
new file mode 100644
index 000000000..cbcd9a6da
--- /dev/null
+++ b/libre-testing/syslinux/syslinux-6.00-efi-export-kbdmap.patch
@@ -0,0 +1,38 @@
+From 2a81889c7d680fbe51de63dbbeb4e8c290ec46fa Mon Sep 17 00:00:00 2001
+From: Matt Fleming <matt.fleming@intel.com>
+Date: Fri, 21 Jun 2013 07:14:24 +0000
+Subject: efi: Tag symbols with __export
+
+I missed some symbols previously that are required to be exported when
+loading vesamenu.c32.
+
+Signed-off-by: Matt Fleming <matt.fleming@intel.com>
+---
+diff --git a/efi/main.c b/efi/main.c
+index 51ff9f3..71333a4 100644
+--- a/efi/main.c
++++ b/efi/main.c
+@@ -21,7 +21,7 @@ uint32_t _IdleTimer = 0;
+ char __lowmem_heap[32];
+ uint32_t BIOS_timer_next;
+ uint32_t timer_irq;
+-uint8_t KbdMap[256];
++__export uint8_t KbdMap[256];
+ char aux_seg[256];
+
+ static inline EFI_STATUS
+diff --git a/efi/vesa.c b/efi/vesa.c
+index d259f60..b4a541b 100644
+--- a/efi/vesa.c
++++ b/efi/vesa.c
+@@ -297,7 +297,7 @@ static int efi_vesacon_font_query(uint8_t **font)
+ return cp865_8x16_font_height;
+ }
+
+-int __vesacon_i915resolution(int x, int y)
++__export int __vesacon_i915resolution(int x, int y)
+ {
+ /* We don't support this function */
+ return 1;
+--
+cgit v0.9.2
diff --git a/libre-testing/syslinux/syslinux-6.00-efi-fix-libcom32.patch b/libre-testing/syslinux/syslinux-6.00-efi-fix-libcom32.patch
new file mode 100644
index 000000000..7460cd195
--- /dev/null
+++ b/libre-testing/syslinux/syslinux-6.00-efi-fix-libcom32.patch
@@ -0,0 +1,45 @@
+From 013ef7679a573b3b3454f914f3a7f865991db9f2 Mon Sep 17 00:00:00 2001
+From: Matt Fleming <matt.fleming@intel.com>
+Date: Fri, 21 Jun 2013 07:13:16 +0000
+Subject: efi: Export __bcopyxx_len
+
+We need to provide a __bcopyxx_len symbol for EFI because it's
+referenced in generic code in libcom32.c32. Without this change,
+libcom32.c32 will fail to load under EFI.
+
+Signed-off-by: Matt Fleming <matt.fleming@intel.com>
+---
+diff --git a/core/include/core.h b/core/include/core.h
+index 5736d39..127ac65 100644
+--- a/core/include/core.h
++++ b/core/include/core.h
+@@ -26,6 +26,7 @@ extern char cmd_line[];
+ extern char ConfigFile[];
+ extern char syslinux_banner[];
+ extern char copyright_str[];
++extern unsigned int __bcopyxx_len;
+
+ /*
+ * Mark symbols that are only used by BIOS as __weak until we can move
+@@ -35,7 +36,6 @@ extern char copyright_str[];
+ extern __weak uint16_t BIOSName;
+ extern __weak char KernelName[];
+ extern __weak char StackBuf[];
+-extern __weak unsigned int __bcopyxx_len;
+
+ extern uint8_t KbdMap[256];
+
+diff --git a/efi/main.c b/efi/main.c
+index 438e88c..51ff9f3 100644
+--- a/efi/main.c
++++ b/efi/main.c
+@@ -153,6 +153,7 @@ void pxenv(void)
+ uint16_t BIOS_fbm = 1;
+ far_ptr_t InitStack;
+ far_ptr_t PXEEntry;
++__export unsigned int __bcopyxx_len = 0;
+
+ void gpxe_unload(void)
+ {
+--
+cgit v0.9.2
diff --git a/libre-testing/syslinux/syslinux-dont-build-dos-windows-targets.patch b/libre-testing/syslinux/syslinux-dont-build-dos-windows-targets.patch
new file mode 100644
index 000000000..54151ab87
--- /dev/null
+++ b/libre-testing/syslinux/syslinux-dont-build-dos-windows-targets.patch
@@ -0,0 +1,12 @@
+diff -Nur syslinux-4.02.orig//Makefile syslinux-4.02//Makefile
+--- syslinux-4.02.orig//Makefile 2010-07-21 21:33:13.000000000 +0200
++++ syslinux-4.02//Makefile 2010-07-22 11:14:03.325522937 +0200
+@@ -54,7 +54,7 @@
+ # files that depend only on the B phase, but may have to be regenerated
+ # for "make installer".
+ BSUBDIRS = codepage com32 lzo core memdisk mbr memdump gpxe sample \
+- diag libinstaller dos win32 win64 dosutil txt
++ libinstaller txt
+ ITARGET =
+ IOBJECTS = $(ITARGET) \
+ utils/gethostip utils/isohybrid utils/mkdiskimage \
diff --git a/libre-testing/syslinux/syslinux-install_update b/libre-testing/syslinux/syslinux-install_update
new file mode 100644
index 000000000..c32ccf18a
--- /dev/null
+++ b/libre-testing/syslinux/syslinux-install_update
@@ -0,0 +1,475 @@
+#!/bin/bash
+#
+# Sylinux Installer / Updater Scripts
+# Copyright (C) 2011 Matthew Gyurgyik <pyther@pyther.net>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+#-----------------
+# Exit Codes:
+# 1 - get_boot_device or other function failed
+# 2 - install/update failed
+# 3 - set_active failed
+# 4 - install_mbr failed
+#
+shopt -s nullglob
+
+libpath="/usr/lib/syslinux/bios"
+bootpath="/boot/syslinux"
+extlinux="/usr/bin/extlinux"
+
+core_modules=(ldlinux.c32)
+autoupdate_file=/boot/syslinux/SYSLINUX_AUTOUPDATE
+pciids_file=/usr/share/hwdata/pci.ids
+
+## Helper functions ##
+# Taken from libui-sh
+# $1 needle
+# $2 set (array) haystack
+check_is_in() {
+ local needle="$1" element
+ shift
+ for element; do
+ [[ $element = $needle ]] && return 0
+ done
+ return 1
+}
+
+# return true when blockdevice is an md raid, otherwise return a unset value
+# get all devices that are part of raid device $1
+device_is_raid() {
+ [[ $1 && -f /proc/mdstat ]] || return 1
+ local devmajor=$(stat -c %t "$1")
+ (( devmajor == 9 ))
+}
+
+mdraid_all_slaves() {
+ local slave slaves
+ for slave in /sys/class/block/${1##*/}/slaves/*; do
+ source "$slave/uevent"
+ slaves="$slaves/dev/$DEVNAME "
+ unset DEVNAME
+ done
+ echo $slaves
+}
+
+# Check /sys/block to see if device is partitioned
+# If we have a partitioned block device (sda1) /sys/block/sda1/dev will not exist
+# However, if we have an unpartitioned block device (sda) /sys/block/sda/dev will exist
+dev_is_part() {
+ # $1 - blockdevice
+ local dev=$1
+
+ # If block device uevent file should be found
+ # If a partition is passed in path shouldn't exist
+ if [[ $dev = *cciss* ]]; then
+ [[ -f /sys/block/cciss\!${dev##*/}/dev ]] && return 1
+ elif [[ $dev = *ida* ]]; then
+ [[ -f /sys/block/ida\!${dev##*/}/dev ]] && return 1
+ else
+ [[ -f /sys/block/${dev##*/}/dev ]] && return 1
+ fi
+
+ return 0
+}
+
+# If EFI PART is present in the first 8 bytes then it must be a GPT disk
+device_is_gpt() {
+ local partsig=$(dd if="$1" skip=64 bs=8 count=1 2>/dev/null)
+ [[ $partsig = "EFI PART" ]]
+}
+
+clear_gpt_attr2() {
+ # $1 - Block Device, no partitions
+ local disk=$1
+
+ # Special Exception for cciss controllers
+ if [[ $disk = *cciss* ]]; then
+ for part in /dev/cciss/${disk##*/}*p*; do
+ local partnum="${part##*[[:alpha:]]}"
+ sgdisk "$disk" --attributes="$partnum":clear:2 &>/dev/null
+ done
+ # Smart 2 Controllers
+ elif [[ $disk = *ida* ]]; then
+ for part in /dev/ida/${disk##*/}*p*; do
+ local partnum="${part##*[[:alpha:]]}"
+ sgdisk "$disk" --attributes="$partnum":clear:2 &>/dev/null
+ done
+ else
+ for part in /sys/block/${disk##*/}/${disk##*/}*; do
+ local partnum="${part##*[[:alpha:]]}"
+ sgdisk "$disk" --attributes="$partnum":clear:2 &>/dev/null
+ done
+ fi
+ return 0
+}
+
+usage() {
+cat << EOF
+usage: $0 options
+
+This script will install or upgrade Syslinux
+
+OPTIONS:
+ -h Show this message
+ -i Install Syslinux
+ -u Update Syslinux
+ -a Set Boot flag on boot partiton
+ -m Install Syslinux MBR
+ -s Updates Syslinux if /boot/syslinux/SYSLINUX_AUTOUPDATE exists
+
+ Arguments Required:
+ -c Chroot install (ex: -c /mnt)
+
+Example Usage: syslinux-install_update.sh -i -a -m (install, set boot flag, install mbr)
+ syslinux-install_update.sh -u (update)
+EOF
+}
+
+# Trys to find the partition that /boot resides on
+# This will either be on /boot or / (root)
+getBoot() {
+ if [[ ! -d "$bootpath" ]]; then
+ echo "Could not find $bootpath"
+ echo "Is boot mounted? Is Syslinux installed?"
+ exit 1
+ fi
+
+ syslinux_fs=(ext2 ext3 ext4 btrfs vfat)
+
+ # Use DATA from findmnt see rc.sysint for more info
+ if [[ -f /proc/self/mountinfo ]]; then
+ read rootdev rootfs < <(findmnt -run -t noautofs -o SOURCE,FSTYPE "$CHROOT/")
+ read bootdev bootfs < <(findmnt -run -t noautofs -o SOURCE,FSTYPE "$CHROOT/boot")
+ else
+ echo "Could not find /proc/self/mountinfo"
+ echo "Are you running a kernel greater than 2.6.24?"
+ exit 1
+ fi
+
+ if [[ $bootfs ]]; then
+ if ! check_is_in "$bootfs" "${syslinux_fs[@]}"; then
+ echo "/boot file system is not supported by Syslinux"
+ exit 1
+ fi
+ boot="boot"
+ bootpart="$bootdev"
+ elif [[ $rootfs ]]; then
+ if ! check_is_in "$rootfs" "${syslinux_fs[@]}"; then
+ echo "/ (root) file system is not supported by Syslinux"
+ exit 1
+ fi
+ boot="root"
+ bootpart="$rootdev"
+ else
+ echo "Could not find filesystem on / (root) or /boot."
+ exit 1
+ fi
+}
+
+# We store the partition table type either gpt or mbr in var ptb
+# In rare cases a user could have one raid disk using mbr and another using gpt
+# In such cases we accept that the output may be incomplete
+
+# Calls get_ptb() for $bootpart or for all device in RAID
+declare -A bootdevs
+get_boot_devices() {
+ if device_is_raid "$bootpart"; then
+ slaves=$(mdraid_all_slaves "$bootpart")
+
+ for slave in ${slaves[@]}; do
+ local disk="${slave%%[[:digit:]]*}"
+ device_is_gpt "$disk" && local ptb="GPT" || local ptb="MBR"
+ bootdevs[$slave]="$ptb"
+ done
+ else
+ local disk="${bootpart%%[[:digit:]]*}"
+ device_is_gpt "$disk" && local ptb="GPT" || local ptb="MBR"
+ bootdevs[$bootpart]="$ptb"
+ fi
+}
+
+# Function Assumes the boot partition should be marked as active
+# All other partitions should not have the boot flag set
+set_active() {
+ # If any bootdev is a block device without partitions bail
+ # we want to set the boot flag on partitioned disk
+ for dev in "${!bootdevs[@]}"; do
+ dev_is_part $dev || { echo "$dev - is a block device. Aborting set_active!"; return 1; }
+ done
+
+ # Clear BIOS Bootable Legacy Attribute for GPT drives
+ # In rare cases where a RAID device has slaves on the same block device
+ # Attribute 2 will be cleared for each partition multiple times
+ for dev in "${!bootdevs[@]}"; do
+ local ptb="${bootdevs[$dev]}"
+ if [[ "$ptb" = GPT ]]; then
+ local disk="${dev%%[[:digit:]]*}" #ex: /dev/sda
+ clear_gpt_attr2 "$disk"
+ fi
+ done
+
+ # Set the boot flag on bootdevs (generated from get_boot_devices)
+ for part in "${!bootdevs[@]}"; do
+ local ptb="${bootdevs[$part]}"
+ local partnum="${part##*[[:alpha:]]}"
+ case "$part" in
+ *[[:digit:]]p[[:digit:]]*)
+ local disk="${part%%p$partnum}" # get everything before p1
+ ;;
+ *)
+ local disk="${part%%[[:digit:]]*}"
+ ;;
+ esac
+
+ if [[ "$ptb" = MBR ]]; then
+ if sfdisk "$disk" -A "$partnum" &>/dev/null; then
+ echo "Boot Flag Set - $part"
+ else
+ echo "FAILED to Set the boot flag on $part"
+ exit 3
+ fi
+ elif [[ "$ptb" = GPT ]]; then
+ if sgdisk "$disk" --attributes="$partnum":set:2 &>/dev/null; then
+ echo "Attribute Legacy Bios Bootable Set - $part"
+ else
+ echo "FAILED to set attribute Legacy BIOS Bootable on $part"
+ exit 3
+ fi
+ fi
+ done
+ return 0
+}
+
+install_mbr() {
+ # If any bootdev is a block device without partitions bail
+ # we want to install the mbr to a partitioned disk
+ for dev in "${!bootdevs[@]}"; do
+ dev_is_part "$dev" || { echo "$dev - is a block device. Aborting MBR install"; return 1; }
+ done
+
+ for part in "${!bootdevs[@]}"; do
+ local partnum="${part##*[[:alpha:]]}"
+ case "$part" in
+ *[[:digit:]]p[[:digit:]]*)
+ local disk="${part%%p$partnum}" # get everything before p1
+ ;;
+ *)
+ local disk="${part%%[[:digit:]]*}"
+ ;;
+ esac
+ local ptb="${bootdevs[$part]}"
+
+ # We want to install to the root of the block device
+ # If the device is a partition - ABORT!
+ dev_is_part "$disk" && \
+ { echo "ABORT! MBR installation to partition ($disk)!"; exit 4;}
+
+ if [[ "$ptb" = MBR ]]; then
+ mbrfile="$libpath/mbr.bin"
+ elif [[ "$ptb" = GPT ]]; then
+ mbrfile="$libpath/gptmbr.bin"
+ fi
+
+ if dd bs=440 count=1 conv=notrunc if="$mbrfile" of="$disk" &> /dev/null; then
+ echo "Installed MBR ($mbrfile) to $disk"
+ else
+ echo "Error Installing MBR ($mbrfile) to $disk"
+ exit 4
+ fi
+ done
+ return 0
+}
+
+_install() {
+ # Copy all com32 files to /boot
+ for file in "${libpath}"/*.c32; do
+ file=${file##*/}
+ # Symlink files if /boot resides on the same partition as root
+ if [[ "$boot" = root ]]; then
+ ln -s "${libpath#$CHROOT}/$file" "$bootpath/$file" &> /dev/null
+ elif [[ "$boot" = boot ]]; then
+ cp "$libpath/$file" "$bootpath/$file"
+ fi
+ done
+
+ # Copy / Symlink pci.ids if pci.ids exists on the FS
+ if [[ -f $pciids_file ]]; then
+ if [[ "$boot" = root ]]; then
+ ln -s "$pciids_file" "$bootpath/pci.ids" &> /dev/null
+ elif [[ "$boot" = boot ]]; then
+ cp "$pciids_file" "$bootpath/pci.ids" &> /dev/null
+ fi
+ fi
+
+ if device_is_raid "$bootpart"; then
+ echo "Detected RAID on /boot - installing Syslinux with --raid"
+ "$extlinux" --install "$bootpath" -r > /dev/null 2>&1
+ else
+ "$extlinux" --install "$bootpath" > /dev/null 2>&1
+ fi
+
+ if (( $? )); then
+ echo "Syslinux install failed"
+ exit 2
+ else
+ echo "Syslinux install successful"
+ fi
+
+ touch "$CHROOT/$autoupdate_file"
+}
+
+update() {
+ # Update c32 files in /boot, if /boot is not on same fs
+ if [[ "$boot" = boot ]]; then
+ for file in "$bootpath"/*.c32; do
+ file=${file##*/}
+ cp "$libpath/$file" "$bootpath/$file" &> /dev/null
+ done
+ if [[ -f "$bootpath/pci.ids" ]]; then
+ cp "$pciids_file" "$bootpath/pci.ids" &> /dev/null
+ fi
+ fi
+
+ # Ensure core modules exist and if not install them
+ for file in "${core_modules[@]}"; do
+ if [[ ! -f $bootpath/$file ]]; then
+ if [[ "$boot" = root ]]; then
+ ln -s "${libpath#$CHROOT}/$file" "$bootpath/$file" &> /dev/null
+ elif [[ "$boot" = boot ]]; then
+ cp "$libpath/$file" "$bootpath/$file"
+ fi
+ fi
+ done
+
+ if device_is_raid $bootpart; then
+ echo "Detected RAID on /boot - installing Syslinux with --raid"
+ "$extlinux" --update "$bootpath" -r &> /dev/null
+ else
+ "$extlinux" --update "$bootpath" &> /dev/null
+ fi
+
+ if (($?)); then
+ echo "Syslinux update failed"
+ exit 2
+ else
+ echo "Syslinux update successful"
+ fi
+}
+
+if (( $# == 0 )); then
+ usage
+ exit 1
+fi
+
+while getopts "c:uihmas" opt; do
+ case $opt in
+ c)
+ CHROOT=$(readlink -e "$OPTARG")
+ if [[ -z $CHROOT ]]; then
+ echo "error: chroot path ``$OPTARG does not exist";
+ exit 1
+ fi
+ ;;
+ h)
+ USAGE="True"
+ ;;
+ i)
+ INSTALL="True"
+ ;;
+ u)
+ UPDATE="True"
+ ;;
+ m)
+ MBR="True"
+ ;;
+ a)
+ SET_ACTIVE="True"
+ ;;
+ s)
+ # If AUTOUPDATE_FILE does not exist exit the script
+ if [[ -f $autoupdate_file ]]; then
+ UPDATE="True"
+ else
+ exit 0
+ fi
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+ esac
+done
+
+if [[ $USAGE ]]; then
+ usage
+ exit 0
+fi
+
+# Make sure only root can run our script
+if (( $(id -u) != 0 )); then
+ echo "This script must be run as root" 1>&2
+ exit 1
+fi
+
+# Display Usage Information if both Install and Update are passed
+if [[ $INSTALL && $UPDATE ]]; then
+ usage
+ exit 1
+fi
+
+# If a chroot dir is path set variables to reflect chroot
+if [[ "$CHROOT" ]]; then
+ libpath="$CHROOT$libpath"
+ bootpath="$CHROOT$bootpath"
+ extlinux="$CHROOT$extlinux"
+fi
+
+# Exit if no /boot path exists
+if ( f=("$bootpath"/*); (( ! ${#f[@]} )) ); then
+ echo "Error: $bootpath is empty!"
+ echo "Is /boot mounted?"
+ exit 1
+fi
+
+# Get the boot device if any of these options are passed
+if [[ $INSTALL || $UPDATE || $SET_ACTIVE || $MBR ]]; then
+ getBoot
+fi
+
+# Install or Update
+if [[ $INSTALL ]]; then
+ _install || exit
+elif [[ $UPDATE ]]; then
+ update || exit
+fi
+
+
+# SET_ACTIVE and MBR
+if [[ $SET_ACTIVE ]] || [[ $MBR ]]; then
+ get_boot_devices
+
+ if [[ $SET_ACTIVE ]]; then
+ set_active || exit
+ fi
+
+ if [[ $MBR ]]; then
+ install_mbr || exit
+ fi
+fi
+
+exit 0
+
+# vim: set et sw=4:
diff --git a/libre-testing/syslinux/syslinux.cfg b/libre-testing/syslinux/syslinux.cfg
new file mode 100644
index 000000000..64d6596e3
--- /dev/null
+++ b/libre-testing/syslinux/syslinux.cfg
@@ -0,0 +1,78 @@
+# Config file for Syslinux -
+# /boot/syslinux/syslinux.cfg
+#
+# Comboot modules:
+# * menu.c32 - provides a text menu
+# * vesamenu.c32 - provides a graphical menu
+# * chain.c32 - chainload MBRs, partition boot sectors, Windows bootloaders
+# * hdt.c32 - hardware detection tool
+# * reboot.c32 - reboots the system
+#
+# To Use: Copy the respective files from /usr/lib/syslinux to /boot/syslinux.
+# If /usr and /boot are on the same file system, symlink the files instead
+# of copying them.
+#
+# If you do not use a menu, a 'boot:' prompt will be shown and the system
+# will boot automatically after 5 seconds.
+#
+# Please review the wiki: https://wiki.archlinux.org/index.php/Syslinux
+# The wiki provides further configuration examples
+
+DEFAULT parabola
+PROMPT 0 # Set to 1 if you always want to display the boot: prompt
+TIMEOUT 50
+# You can create syslinux keymaps with the keytab-lilo tool
+#KBDMAP de.ktl
+
+# Menu Configuration
+# Either menu.c32 or vesamenu32.c32 must be copied to /boot/syslinux
+#UI menu.c32
+UI vesamenu.c32
+
+# Refer to http://syslinux.zytor.com/wiki/index.php/Doc/menu
+MENU TITLE Parabola GNU/Linux-libre
+MENU BACKGROUND splash.png
+MENU COLOR border 30;44 #40ffffff #a0000000 std
+MENU COLOR title 1;36;44 #9033ccff #a0000000 std
+MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all
+MENU COLOR unsel 37;44 #50ffffff #a0000000 std
+MENU COLOR help 37;40 #c0ffffff #a0000000 std
+MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std
+MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std
+MENU COLOR msg07 37;40 #90ffffff #a0000000 std
+MENU COLOR tabmsg 31;40 #30ffffff #00000000 std
+
+# boot sections follow
+#
+# TIP: If you want a 1024x768 framebuffer, add "vga=773" to your kernel line.
+#
+#-*
+
+LABEL parabola
+ MENU LABEL Parabola GNU/Linux-libre
+ LINUX ../vmlinuz-linux-libre
+ APPEND root=/dev/sda3 ro
+ INITRD ../initramfs-linux-libre.img
+
+LABEL parabolafallback
+ MENU LABEL Parabola GNU/Linux-libre Fallback
+ LINUX ../vmlinuz-linux-libre
+ APPEND root=/dev/sda3 ro
+ INITRD ../initramfs-linux-libre-fallback.img
+
+# If you want Memtest on syslinux, use this LABEL section to launch it (install the memtest86+ package)
+# LABEL memtest
+# MENU LABEL Memtest86+
+# LINUX ../memtest86+/memtest.bin
+
+LABEL hdt
+ MENU LABEL HDT (Hardware Detection Tool)
+ COM32 hdt.c32
+
+LABEL reboot
+ MENU LABEL Reboot
+ COM32 reboot.c32
+
+LABEL poweroff
+ MENU LABEL Poweroff
+ COM32 poweroff.c32
diff --git a/libre-testing/syslinux/syslinux.install b/libre-testing/syslinux/syslinux.install
new file mode 100644
index 000000000..ac8553a97
--- /dev/null
+++ b/libre-testing/syslinux/syslinux.install
@@ -0,0 +1,36 @@
+post_install() {
+ echo "==> If you want to use syslinux as your BIOS bootloader"
+ echo "==> edit /boot/syslinux/syslinux.cfg and run"
+ echo "==> # /usr/bin/syslinux-install_update -i -a -m"
+ echo "==> to install it."
+
+ cat << EOF
+Syslinux efi64 and efi32 files have been installed at
+/usr/lib/syslinux/{efi64,efi32}/ respectively.
+
+To install, copy /usr/lib/syslinux/efi64 to (ESP)/EFI/syslinux and
+syslinux.cfg to (ESP)/EFI/syslinux/syslinux.cfg and add a boot entry
+using efibootmgr for (ESP)/EFI/syslinux/syslinux.efi
+EOF
+
+}
+
+post_upgrade() {
+ # auto-update syslinux if /boot/syslinux/SYSLINUX_AUTOUPDATE exists
+ /usr/bin/syslinux-install_update -s
+ # update to 5.01 message
+ if [ "$(vercmp $2 5.01)" -lt 0 ]; then
+ echo "If you used syslinux-install_update to install syslinux:"
+ echo "==> If you want to use syslinux with menu and all modules please rerun"
+ echo "==> # /usr/bin/syslinux-install_update -i -a -m"
+ echo ""
+ echo "If you manually installed syslinux:"
+ echo "==> Please copy or symlink all .c32 modules to your /boot/syslinux directory."
+ echo "==> If (/ and /boot on seperate fs):"
+ echo "==> # cp /usr/lib/syslinux/bios/*.c32 /boot/syslinux"
+ echo "==> If (/ and /boot on same fs):"
+ echo "==> # ln -s /usr/lib/syslinux/bios/*.c32 /boot/syslinux"
+ fi
+}
+
+# vim:set ts=2 sw=2 et: