generic: 6.6: update NVMEM-on-MMC series
[openwrt/openwrt.git] / package / base-files / files / lib / preinit / 80_mount_root
1 # Copyright (C) 2006 OpenWrt.org
2 # Copyright (C) 2010 Vertical Communications
3
4 missing_lines() {
5 local file1 file2 line
6 file1="$1"
7 file2="$2"
8 oIFS="$IFS"
9 IFS=":"
10 while read line; do
11 set -- $line
12 grep -q "^$1:" "$file2" || echo "$*"
13 done < "$file1"
14 IFS="$oIFS"
15 }
16
17 # Rootfs mount options can be passed by declaring in the kernel
18 # cmdline as much options as needed prefixed with "rootfs_mount_options."
19 #
20 # Example:
21 # rootfs_mount_options.compress_algorithm=zstd rootfs_mount_options.noinline_data
22 #
23 compose_rootfs_mount_options() {
24 local mount_options
25 local cmdlinevar
26
27 for cmdlinevar in $(cat /proc/cmdline); do
28 if [ "$cmdlinevar" != "${cmdlinevar#rootfs_mount_options\.}" ]; then
29 append mount_options "${cmdlinevar#rootfs_mount_options\.}"
30 fi
31 done
32
33 echo $mount_options
34 }
35
36 do_mount_root() {
37 mount_root start "$(compose_rootfs_mount_options)"
38 boot_run_hook preinit_mount_root
39 [ -f /sysupgrade.tgz -o -f /tmp/sysupgrade.tar ] && {
40 echo "- config restore -"
41 cp /etc/passwd /etc/group /etc/shadow /tmp
42 cd /
43 [ -f /sysupgrade.tgz ] && tar xzf /sysupgrade.tgz
44 [ -f /tmp/sysupgrade.tar ] && tar xf /tmp/sysupgrade.tar
45 missing_lines /tmp/passwd /etc/passwd >> /etc/passwd
46 missing_lines /tmp/group /etc/group >> /etc/group
47 missing_lines /tmp/shadow /etc/shadow >> /etc/shadow
48 rm /tmp/passwd /tmp/group /tmp/shadow
49 # Prevent configuration corruption on a power loss
50 sync
51 }
52 }
53
54 [ "$INITRAMFS" = "1" ] || boot_hook_add preinit_main do_mount_root