diff --git a/srcpkgs/u-boot-menu/files/extlinux.default b/srcpkgs/u-boot-menu/files/extlinux.default new file mode 100644 index 00000000000..e02d310cf3e --- /dev/null +++ b/srcpkgs/u-boot-menu/files/extlinux.default @@ -0,0 +1,3 @@ +TIMEOUT=10 +CMDLINE="" +DTBPATH="" diff --git a/srcpkgs/u-boot-menu/files/kernel.d/extlinux b/srcpkgs/u-boot-menu/files/kernel.d/extlinux new file mode 100644 index 00000000000..8b052af9499 --- /dev/null +++ b/srcpkgs/u-boot-menu/files/kernel.d/extlinux @@ -0,0 +1,63 @@ +#!/bin/sh + +header() { + echo "TIMEOUT ${TIMEOUT}" > ${OUTFILE} + echo "DEFAULT entry0" >> ${OUTFILE} + echo "MENU TITLE Boot menu" >> ${OUTFILE} +} + +get_bootpath() { + echo ${1} | sed "s#${BOOTPART}/#/#" +} + +add_kernel() { + ver=${1} + kernel=$(get_bootpath "/boot/vmlinux-${ver}") + initrd=$(get_bootpath "/boot/initramfs-${ver}.img") + fdt=$(get_bootpath "/boot/dtbs/dtbs-${ver}/${DTBPATH}") + cmdline="${CMDLINE}" + + echo "LABEL entry${ENTRY}" >> ${OUTFILE} + echo "\tMENU LABEL Void Linux Version ${ver}" >> ${OUTFILE} + echo "\tLINUX ${kernel}" >> ${OUTFILE} + if [ -e "${BOOTPART}/${initrd}" ]; then + echo "\tINITRD ${initrd}" >> ${OUTFILE} + fi + if [ -n "${DTBPATH}" ] && [ -e "${BOOTPART}/${fdt}" ]; then + echo "\tFDT ${fdt}" >> ${OUTFILE} + fi + if [ -n "${cmdline}" ]; then + echo "\tAPPEND ${cmdline}" >> ${OUTFILE} + fi + ENTRY=$(expr ${ENTRY} + 1) +} + +main() { + if [ ! -d /boot/extlinux ]; then + rm ${OUTFILE} + exit 0 + fi + + if [ -e ${CONF} ]; then + . ${CONF} + fi + + if [ -z "${CMDLINE}" ]; then + CMDLINE=$(cat /proc/cmdline) + fi + + header + + for kernel in $(ls /boot/vmlinu[xz]-* | sort -rV); do + ver=$(echo ${kernel} | sed "s#/boot/vmlinu[xz]-\(.*\)#\\1#") + echo "Add kernel ${ver}" + add_kernel ${ver} + done + mv ${OUTFILE} /boot/extlinux/extlinux.conf +} + +CONF=/etc/default/extlinux +OUTFILE=$(mktemp) +BOOTPART=$(df -P /boot | tail -1 | awk '{ print $6 }') +ENTRY=0 +main diff --git a/srcpkgs/u-boot-menu/template b/srcpkgs/u-boot-menu/template new file mode 100644 index 00000000000..7f8cef268f6 --- /dev/null +++ b/srcpkgs/u-boot-menu/template @@ -0,0 +1,18 @@ +# Template file for 'u-boot-menu' +pkgname=u-boot-menu +version=0.1 +revision=1 +noarch=yes +conf_files="/etc/default/extlinux" +short_desc="Create an u-boot menu with currently available kernels" +maintainer="Remi Pommarel " +license="Public domain" +homepage="https://www.voidlinux.org" + +do_install() { + vinstall ${FILESDIR}/extlinux.default 644 etc/default extlinux + vinstall ${FILESDIR}/kernel.d/extlinux 750 \ + etc/kernel.d/post-install 60-extlinux + vinstall ${FILESDIR}/kernel.d/extlinux 750 \ + etc/kernel.d/post-remove 60-extlinux +}