mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	Add support for configuring rootfs mount options from cmdline. Rootfs mount options can be passed by declaring in the kernel cmdline as much options as needed prefixed with "rootfs_mount_options." An example usage is with rootfs with F2FS filesystem to enable compress_algorithm to reduce flash wear by compressing the files before writing to flash. Example usage: "... rootfs_mount_options.compress_algorithm=zstd ..." To pass multiple options: "... rootfs_mount_options.compress_algorithm=zstd rootfs_mount_options.noinline_data ..." Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# Copyright (C) 2006 OpenWrt.org
 | 
						|
# Copyright (C) 2010 Vertical Communications
 | 
						|
 | 
						|
missing_lines() {
 | 
						|
	local file1 file2 line
 | 
						|
	file1="$1"
 | 
						|
	file2="$2"
 | 
						|
	oIFS="$IFS"
 | 
						|
	IFS=":"
 | 
						|
	while read line; do
 | 
						|
		set -- $line
 | 
						|
		grep -q "^$1:" "$file2" || echo "$*"
 | 
						|
	done < "$file1"
 | 
						|
	IFS="$oIFS"
 | 
						|
}
 | 
						|
 | 
						|
# Rootfs mount options can be passed by declaring in the kernel
 | 
						|
# cmdline as much options as needed prefixed with "rootfs_mount_options."
 | 
						|
#
 | 
						|
# Example:
 | 
						|
# rootfs_mount_options.compress_algorithm=zstd rootfs_mount_options.noinline_data
 | 
						|
#
 | 
						|
compose_rootfs_mount_options() {
 | 
						|
	local mount_options
 | 
						|
	local cmdlinevar
 | 
						|
 | 
						|
	for cmdlinevar in $(cat /proc/cmdline); do
 | 
						|
		if [ "$cmdlinevar" != "${cmdlinevar#rootfs_mount_options\.}" ]; then
 | 
						|
			append mount_options "${cmdlinevar#rootfs_mount_options\.}"
 | 
						|
		fi
 | 
						|
	done
 | 
						|
 | 
						|
	echo $mount_options
 | 
						|
}
 | 
						|
 | 
						|
do_mount_root() {
 | 
						|
	mount_root start "$(compose_rootfs_mount_options)"
 | 
						|
	boot_run_hook preinit_mount_root
 | 
						|
	[ -f /sysupgrade.tgz -o -f /tmp/sysupgrade.tar ] && {
 | 
						|
		echo "- config restore -"
 | 
						|
		cp /etc/passwd /etc/group /etc/shadow /tmp
 | 
						|
		cd /
 | 
						|
		[ -f /sysupgrade.tgz ] && tar xzf /sysupgrade.tgz
 | 
						|
		[ -f /tmp/sysupgrade.tar ] && tar xf /tmp/sysupgrade.tar
 | 
						|
		missing_lines /tmp/passwd /etc/passwd >> /etc/passwd
 | 
						|
		missing_lines /tmp/group /etc/group >> /etc/group
 | 
						|
		missing_lines /tmp/shadow /etc/shadow >> /etc/shadow
 | 
						|
		rm /tmp/passwd /tmp/group /tmp/shadow
 | 
						|
		# Prevent configuration corruption on a power loss
 | 
						|
		sync
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
[ "$INITRAMFS" = "1" ] || boot_hook_add preinit_main do_mount_root
 |