mirror of
				https://gitlab.alpinelinux.org/alpine/aports.git
				synced 2025-11-04 02:11:39 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			213 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			213 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/sh
 | 
						|
 | 
						|
version=
 | 
						|
default=0
 | 
						|
timeout=5
 | 
						|
verbose=0
 | 
						|
 | 
						|
conf=/boot/extlinux.conf
 | 
						|
myconf=/etc/update-extlinux.conf
 | 
						|
 | 
						|
# read in extlinux settings
 | 
						|
if [ -f "$myconf" ]; then
 | 
						|
	. $myconf
 | 
						|
fi
 | 
						|
 | 
						|
everbose() {
 | 
						|
	if [ "$verbose" = "0" ]; then
 | 
						|
		return
 | 
						|
	fi
 | 
						|
 | 
						|
	echo $*
 | 
						|
}
 | 
						|
 | 
						|
ewarn() {
 | 
						|
	echo "WARNING:" $@ >&2
 | 
						|
}
 | 
						|
 | 
						|
eerror() {
 | 
						|
	echo "ERROR:" $@ >&2
 | 
						|
	return 1
 | 
						|
}
 | 
						|
 | 
						|
everbose "Updating extlinux configuration."
 | 
						|
 | 
						|
if [ "x$root" = "x" ]; then
 | 
						|
	ewarn "Root device is not specified in $myconf."
 | 
						|
	blkid_export=$(blkid -o export /dev/root)
 | 
						|
	if [ -n "$blkid_export" ]; then
 | 
						|
		export $blkid_export
 | 
						|
	fi
 | 
						|
	if [ -z "$UUID" ]; then
 | 
						|
		# try parse /proc/mount for mounted /
 | 
						|
		dev=$(awk '$2 == "/" {dev=$1} END {print dev}' /proc/mounts)
 | 
						|
		if [ -n "$dev" ]; then
 | 
						|
			blkid_export=$(blkid -o export $dev)
 | 
						|
			if [ -n "$blkid_export" ]; then
 | 
						|
				export "$blkid_export"
 | 
						|
			fi
 | 
						|
		fi
 | 
						|
	fi
 | 
						|
	if [ -z "$UUID" ]; then
 | 
						|
		if [ -z "$dev" ]; then
 | 
						|
			eerror "Failed to detect root device"
 | 
						|
			exit 1
 | 
						|
		else
 | 
						|
			root=$dev
 | 
						|
		fi
 | 
						|
	else
 | 
						|
		root=UUID=$UUID
 | 
						|
	fi
 | 
						|
	everbose "Root device is: $root"
 | 
						|
fi
 | 
						|
 | 
						|
rtimeout=$((${timeout}\*10))
 | 
						|
syslinux_menu=menu.c32
 | 
						|
menu_hidden=
 | 
						|
 | 
						|
# vesa menu has been requested?
 | 
						|
if [ "$vesa_menu" = "1" ]; then
 | 
						|
	syslinux_menu=vesamenu.c32
 | 
						|
fi
 | 
						|
 | 
						|
umask 0022
 | 
						|
rm -f $conf.new
 | 
						|
echo "# Generated by update-extlinux $version" > $conf.new
 | 
						|
echo "DEFAULT $syslinux_menu" >> $conf.new
 | 
						|
echo "PROMPT 0" >> $conf.new
 | 
						|
echo "MENU TITLE Alpine/$(uname -s) Boot Menu" >> $conf.new
 | 
						|
if [ "$hidden" = "1" ]; then
 | 
						|
	echo "MENU HIDDEN" >> $conf.new
 | 
						|
fi
 | 
						|
echo "MENU AUTOBOOT Alpine will be booted automatically in # seconds." >> $conf.new
 | 
						|
echo "TIMEOUT $rtimeout" >> $conf.new
 | 
						|
 | 
						|
lst=0
 | 
						|
if [ -f "/boot/xen.gz" ]; then
 | 
						|
	for kernel in $(find /boot -name "vmlinuz-*" -type f); do
 | 
						|
		tag=$(basename $kernel | cut -b9-)
 | 
						|
		everbose "Found Xen hypervisor: /boot/xen.gz, kernel: $kernel"
 | 
						|
 | 
						|
		if [ -f "/boot/initramfs-$tag" ]; then
 | 
						|
			everbose "Found initramfs: /boot/initramfs-$tag"
 | 
						|
			initramfs="initramfs-$tag"
 | 
						|
		else
 | 
						|
			initramfs=
 | 
						|
		fi
 | 
						|
		label=xen-$(grep -w -l $tag /usr/share/kernel/*/kernel.release \
 | 
						|
				| cut -d/ -f5)
 | 
						|
		if [ "$label" = "xen-" ]; then
 | 
						|
			label=xen-$lst
 | 
						|
		fi
 | 
						|
 | 
						|
		echo "LABEL $label" >> $conf.new
 | 
						|
		if [ "$label" = "$default" ]; then
 | 
						|
			echo "  MENU DEFAULT" >> $conf.new
 | 
						|
		fi
 | 
						|
		echo "  MENU LABEL Xen + Linux $tag" >> $conf.new
 | 
						|
		echo "  COM32 mboot.c32" >> $conf.new
 | 
						|
		echo "  APPEND xen.gz $xen_opts --- $(basename $kernel) root=$root modules=${modules}${TYPE:+,$TYPE} $default_kernel_opts --- $initramfs" >> $conf.new
 | 
						|
		echo "" >> $conf.new
 | 
						|
		lst=$(($lst + 1))
 | 
						|
	done
 | 
						|
fi
 | 
						|
 | 
						|
for kernel in $(find /boot -name "vmlinuz-*" -type f); do
 | 
						|
	tag=$(basename $kernel | cut -b9-)
 | 
						|
	everbose "Found kernel: $kernel"
 | 
						|
	label=$(grep -w -l $tag /usr/share/kernel/*/kernel.release | cut -d/ -f5)
 | 
						|
	if [ -z "$label" ]; then
 | 
						|
		label=$lst
 | 
						|
	fi
 | 
						|
	echo "LABEL $label" >> $conf.new
 | 
						|
	if [ "$label" = "$default" ]; then
 | 
						|
		echo "  MENU DEFAULT" >> $conf.new
 | 
						|
	fi
 | 
						|
	echo "  MENU LABEL Linux $tag" >> $conf.new
 | 
						|
	echo "  LINUX $(basename $kernel)" >> $conf.new
 | 
						|
	if [ -f "/boot/initramfs-$tag" ]; then
 | 
						|
		everbose "Found initramfs: /boot/initramfs-$tag"
 | 
						|
		echo "  INITRD initramfs-$tag" >> $conf.new
 | 
						|
	fi
 | 
						|
	echo "  APPEND root=$root modules=${modules}${TYPE:+,$TYPE} $default_kernel_opts" >> $conf.new
 | 
						|
	echo "" >> $conf.new
 | 
						|
	lst=$(($lst + 1))
 | 
						|
done
 | 
						|
 | 
						|
if [ -n "$password" ]; then
 | 
						|
	echo "NOESCAPE 1" >> $conf.new
 | 
						|
	echo "MENU MASTER PASSWD $password" >> $conf.new
 | 
						|
	echo "" >> $conf.new
 | 
						|
	chmod o-r $conf.new
 | 
						|
fi
 | 
						|
 | 
						|
everbose "$lst entries found."
 | 
						|
 | 
						|
for entry in /etc/update-extlinux.d/*; do
 | 
						|
	[ -f "$entry" ] && { cat $entry; echo ""; } >> $conf.new
 | 
						|
done
 | 
						|
 | 
						|
echo "MENU SEPARATOR" >> $conf.new
 | 
						|
echo "" >> $conf.new
 | 
						|
 | 
						|
if [ -f "/boot/hdt.c32" ]; then
 | 
						|
	everbose "Found Hardware Detection Tool: /boot/hdt.c32"
 | 
						|
	echo "LABEL hdt" >> $conf.new
 | 
						|
	echo "  MENU LABEL Hardware info" >> $conf.new
 | 
						|
	if [ -n "$password" ]; then
 | 
						|
		echo "  MENU PASSWD" >> $conf.new
 | 
						|
	fi
 | 
						|
	echo "  COM32 hdt.c32" >> $conf.new
 | 
						|
	if [ -f "/boot/memtest" ]; then
 | 
						|
		everbose "Found memtest86+: /boot/memtest"
 | 
						|
		echo "  APPEND memtest=memtest" >> $conf.new
 | 
						|
	fi
 | 
						|
	echo "" >> $conf.new
 | 
						|
elif [ -f "/boot/memtest" ]; then
 | 
						|
	everbose "Found memtest86+: /boot/memtest"
 | 
						|
	echo "LABEL memtest" >> $conf.new
 | 
						|
	echo "  MENU LABEL Memtest86+" >> $conf.new
 | 
						|
        echo "  KERNEL memtest" >> $conf.new
 | 
						|
	echo "" >> $conf.new
 | 
						|
fi
 | 
						|
 | 
						|
for i in reboot poweroff; do
 | 
						|
	[ -f "/boot/$i.c32" ] || continue
 | 
						|
	everbose "Found $i"
 | 
						|
	# make first char capital
 | 
						|
	cap=$( echo $i | awk '{sub(".", substr(toupper($0),1,1), $0); print}' )
 | 
						|
	echo "LABEL $i" >> $conf.new
 | 
						|
	echo "  MENU LABEL $cap" >> $conf.new
 | 
						|
        echo "  COM32 $i.c32" >> $conf.new
 | 
						|
	echo "" >> $conf.new
 | 
						|
done
 | 
						|
 | 
						|
if cmp -s $conf.new $conf; then
 | 
						|
	everbose "Configuration unchanged."
 | 
						|
	rm $conf.new
 | 
						|
fi
 | 
						|
 | 
						|
if [ "$overwrite" != "1" ]; then
 | 
						|
	exit 0
 | 
						|
elif [ -f "$conf.new" ]; then
 | 
						|
	# keep a backup just in case
 | 
						|
	if [ -f "$conf" ]; then
 | 
						|
		mv $conf $conf.old
 | 
						|
	fi
 | 
						|
 | 
						|
	mv $conf.new $conf
 | 
						|
fi
 | 
						|
 | 
						|
everbose "Installing libutil.c32 libcom32.c32 mboot.c32 menu.c32 vesamenu.c32 to /boot."
 | 
						|
cp /usr/share/syslinux/libutil.c32 \
 | 
						|
	/usr/share/syslinux/libcom32.c32 \
 | 
						|
	/usr/share/syslinux/mboot.c32 \
 | 
						|
	/usr/share/syslinux/menu.c32 \
 | 
						|
	/usr/share/syslinux/vesamenu.c32 \
 | 
						|
	/boot
 | 
						|
 | 
						|
case "$(stat -f -c '%T' /boot)" in
 | 
						|
ext*) extlinux --update /boot;;
 | 
						|
esac
 | 
						|
 |