ASR_BASE
Change-Id: Icf3719cc0afe3eeb3edc7fa80a2eb5199ca9dda1
diff --git a/package/base-files/files/lib/preinit/80_mount_root b/package/base-files/files/lib/preinit/80_mount_root
new file mode 100644
index 0000000..dd79b27
--- /dev/null
+++ b/package/base-files/files/lib/preinit/80_mount_root
@@ -0,0 +1,54 @@
+# 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 "$line"
+ 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