aboutsummaryrefslogtreecommitdiffstats
path: root/main/alpine-conf/0001-setup-bootable-warn-and-fix-kernel-name-change.patch
diff options
context:
space:
mode:
Diffstat (limited to 'main/alpine-conf/0001-setup-bootable-warn-and-fix-kernel-name-change.patch')
-rw-r--r--main/alpine-conf/0001-setup-bootable-warn-and-fix-kernel-name-change.patch169
1 files changed, 169 insertions, 0 deletions
diff --git a/main/alpine-conf/0001-setup-bootable-warn-and-fix-kernel-name-change.patch b/main/alpine-conf/0001-setup-bootable-warn-and-fix-kernel-name-change.patch
new file mode 100644
index 0000000000..11f6bbe0eb
--- /dev/null
+++ b/main/alpine-conf/0001-setup-bootable-warn-and-fix-kernel-name-change.patch
@@ -0,0 +1,169 @@
+From 0cc00b53d8e918699413dbe1ddd1989bb4ddec4a Mon Sep 17 00:00:00 2001
+From: Natanael Copa <ncopa@alpinelinux.org>
+Date: Wed, 15 Jul 2015 15:10:42 +0200
+Subject: [PATCH] setup-bootable: warn and fix kernel name change
+
+---
+ setup-bootable.in | 103 +++++++++++++++++++++++++++++++++++++++++++++++++-----
+ 1 file changed, 94 insertions(+), 9 deletions(-)
+
+diff --git a/setup-bootable.in b/setup-bootable.in
+index 116f776..35a5f73 100644
+--- a/setup-bootable.in
++++ b/setup-bootable.in
+@@ -84,10 +84,87 @@ find_disk_dev() {
+ return 1
+ }
+
++find_syslinux_cfg() {
++ # find where new syslinux.cfg is
++ for i in boot/syslinux/syslinux.cfg syslinux.cfg; do
++ if [ -e "$1"/$i ]; then
++ syslinux_cfg=$i
++ vecho "Found $syslinux_cfg"
++ break
++ fi
++ done
++}
++
++fix_syslinux_kernel() {
++ echo "Fixing $syslinux_cfg: kernel $1 -> $2"
++ sed -i -e "/^\s*[Kk][Ee][Rr][Nn][Ee][Ll]\s/s|$1|$2|" \
++ "$destdir/$syslinux_cfg"
++}
++
++fix_syslinux_initrd() {
++ echo "Fixing $syslinux_cfg: initrd $1 -> $2"
++ sed -i -e "/^\s*[Ii][Nn][Ii][Tt][Rr][Dd]\s/s|$1|$2|" \
++ -e "/^\s*[Aa][Pp][Pp][Ee][Nn][Dd]\s/s|initrd=$1|initrd=$2|" \
++ "$destdir/$syslinux_cfg"
++}
++
++check_syslinux() {
++ if [ -z "$syslinux_cfg" ]; then
++ find_syslinux_cfg "$destdir"
++ fi
++ if [ -z "$syslinux_cfg" ]; then
++ die "Could not find any syslinux.cfg. Aborting"
++ fi
++
++ # kernels
++ for i in $(awk 'tolower($1) == "kernel" {print $2}' "$destdir"/$syslinux_cfg); do
++ k="${destdir%/}/${i#/}"
++ f=${k##*/}
++
++ if [ -e "$k" ] && [ "${f#vmlinuz}" != "$f" ]; then
++ continue
++ fi
++
++ if [ -e "${k%/*}"/vmlinuz-$f ] && [ -n "$fix_syslinux_cfg" ]; then
++ fix_syslinux_kernel "$i" "${i%/*}"/vmlinuz-$f
++ elif ! [ -e "$k" ]; then
++ echo "Warning: $syslinux_cfg: kernel $k was not found"
++ echo " Run $0 -c -f "$destdir" to fix"
++ fi
++ done
++
++ #initramfs
++ initrds=$(awk 'tolower($1) == "initrd" {print $2}' \
++ "$destdir"/$syslinux_cfg)
++ for i in $(awk 'tolower($1) == "append" {print $0}' \
++ "$destdir"/$syslinux_cfg); do
++ case $i in
++ initrd=*) initrds=${i#initrd=};;
++ esac
++ done
++
++ for i in $initrds; do
++ if [ -e "$destdir"/$i ]; then
++ continue
++ fi
++ fname=${i##*/}
++ flavor=${fname%.gz}
++
++ new=${i%/*}/initramfs-$flavor
++ if [ -e "$destdir"/$new ] && [ -n "$fix_syslinux_cfg" ]; then
++ fix_syslinux_initrd "$i" "$new"
++ else
++ echo "Warning: initrd $i was not found. System will likely not boot"
++ echo " Run $0 -f -c "$destdir" to fix"
++ fi
++ done
++}
++
+ usage() {
+ cat <<__EOF__
+ $prog $version
+ usage: $prog [-fhUusv] SOURCE [DEST]
++ $prog -c DIR
+
+ Copy the contents of SOURCE to DEST and make DEST bootable.
+
+@@ -97,19 +174,24 @@ or a device. If DEST is ommitted /media/usb will be used.
+ Options:
+ -f Force overwrite existing files. Will overwrite syslinux.cfg if upgrade.
+ -h Show this help.
++ -k fix kernel and initrd name in syslinux.cfg if needed.
+ -U Replace current alpine_dev in syslinux.cfg with UUID if UUID found.
+ -u Upgrade mode. Keep existing syslinux.cfg and don't run syslinux.
+ -s Force run syslinux, even if upgrade mode.
+ -v Verbose mode. Display whats going on.
+
++ -c Check syslinux.cfg in destination DIR. Use with -f to fix.
++
+ __EOF__
+ exit 1
+ }
+
+-while getopts "fhUusv" opt; do
++while getopts "c:fhkUusv" opt; do
+ case "$opt" in
+- f) force=1;;
++ c) check_syslinux="$OPTARG";;
++ f) force=1; fix_syslinux_cfg=1;;
+ h) usage;;
++ k) fix_syslinux_cfg=1;;
+ U) replace_alpine_dev=1;;
+ u) upgrade=1;;
+ s) syslinux=1;;
+@@ -122,6 +204,11 @@ shift $(($OPTIND - 1))
+ src=${1}
+ dest=${2:-/media/usb}
+
++if [ -n "$check_syslinux" ]; then
++ destdir="$check_syslinux"
++ check_syslinux
++ exit 0
++fi
+
+ [ -z "$src" ] && usage
+
+@@ -235,13 +322,8 @@ elif [ -n "$srcurl" ]; then
+ fi
+
+ # find where new syslinux.cfg is
+-for i in boot/syslinux/syslinux.cfg syslinux.cfg; do
+- if [ -e "$destdir"/.new/$i ]; then
+- syslinux_cfg=$i
+- vecho "Found $syslinux_cfg"
+- break
+- fi
+-done
++find_syslinux_cfg "$destdir"/.new
++
+ # abort early in case unexpected trouble
+ if [ -z "$syslinux_cfg" ]; then
+ die "Could not find any syslinux.cfg on new iso?"
+@@ -288,6 +370,9 @@ if [ -n "$replace_alpine_dev" -o -z "$upgrade" ] && [ -n "$UUID" ]; then
+ "$destdir"/$syslinux_cfg
+ fi
+
++# verify syslinux.cfg
++check_syslinux
++
+ # cleanup
+ [ -z "$keep_old" ] && rm -rf "$destdir"/.old "$destdir"/.new
+
+--
+2.4.5
+