mirror of
				https://gitlab.alpinelinux.org/alpine/aports.git
				synced 2025-10-31 00:12:05 +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
 | |
| 
 |