33 lines
		
	
	
		
			936 B
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			936 B
		
	
	
	
		
			Bash
		
	
	
	
#!/hint/ash
 | 
						|
# Copyright (C) 2023  Umorpha Systems
 | 
						|
# SPDX-License-Identifier: AGPL-3.0-or-later
 | 
						|
 | 
						|
# args: errmsg
 | 
						|
umorpha_emergency_shell() {
 | 
						|
	run_hookfunctions 'run_emergencyhook' 'emergency hook' $EMERGENCYHOOKS
 | 
						|
	err "$*"
 | 
						|
	echo "You are now being dropped into an emergency shell."
 | 
						|
	launch_interactive_shell
 | 
						|
	msg "Trying to continue (this will most likely fail) ..."
 | 
						|
}
 | 
						|
 | 
						|
# args: /path/to/newroot
 | 
						|
umorpha_mount_handler() {
 | 
						|
	local newroot="$1"
 | 
						|
 | 
						|
	msg ":: mounting '$root'+'$overlay' on real root"
 | 
						|
	if ! umorpha-mount \
 | 
						|
		--root="$root:$rootfstype:ro${rootflags:+,$rootflags}" \
 | 
						|
		--overlay="$overlay:$overlayfstype:${rwopt:-ro}${overlayflags:+,$overlayrootflags}" \
 | 
						|
		${boot:+--boot="$boot:$bootfstype:${rwopt:-ro}${bootflags:+,$bootflags}"} \
 | 
						|
		--basedir=/run/umorpha-root \
 | 
						|
		--final-mountpoint="$newroot"
 | 
						|
	then
 | 
						|
		umorpha_emergency_shell "Failed to mount base filesystem"
 | 
						|
	fi
 | 
						|
}
 | 
						|
 | 
						|
run_hook() {
 | 
						|
	export mount_handler='umorpha_mount_handler'
 | 
						|
}
 |