| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- # 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
|