8c5841e32b08aa3839beb4359674374cf6e2f31e
[openwrt.git] / package / block-mount / files / 50_determine_usb_root
1 #!/bin/sh
2 # Copyright (C) 2010 Vertical Communications
3 # This is free software, licensed under the GNU General Public License v2.
4 # See /LICENSE for more information.
5
6
7 determine_external_root() {
8         pi_include /lib/functions/extmount.sh
9         pi_include /lib/functions/mount.sh
10
11         local OLD_UCI_CONFIG_DIR="$UCI_CONFIG_DIR"
12         set_jffs_mp
13         determine_root_device
14
15         # extroot requires extroot and fstab config files, therefore 
16         # we assume configuration is incomplete and not to be used if either of them
17         # is missing (for jffs versions of these files on squashfs image)
18         if [ "$jffs" = "/tmp/overlay" ] && [ -r "/tmp/overlay/etc/config/fstab" ]; then
19                 UCI_CONFIG_DIR="/tmp/overlay/etc/config"
20                 ER_IS_SQUASHFS=true
21                 ER_OVERLAY_PREFIX="/tmp/overlay"
22         fi
23
24         # For squashfs on firstboot root_device will be tmpfs for the ramoverlay,
25         # unless there is a saved config, in which case it will be /dev/root,
26         # however in the case of a saved config, it won't be restored until after
27         # this script, so there won't be a config on the first boot after
28         # flashing a squashfs-based filesystem
29         # For ext2, ramdisk, or jffs2 root filesystems root_device is /dev/root
30         # For squashfs after firstboot, root filesystem is /dev/root    
31         # We only use the config from the root or jffs if the root_device is 
32         # /dev/root
33         [ "$root_device" = "/dev/root" ] && {
34                 er_load_modules
35                 [ -n "$extroot_settle_time" ] && [ "$extroot_settle_time" -gt 0 ] && {
36                         sleep $extroot_settle_time
37                 } 
38                 config_load fstab
39                 config_foreach config_mount_by_section mount 1
40                 ER_OVERLAY_ROM="/no-extroot"
41                 
42                 [ "$rootfs_found" = "1" ] && grep -q ' /overlay ' /proc/mounts && { 
43                         pi_extroot_mount_success=true
44                         pi_mount_skip_next=false
45                         ER_OVERLAY_ROM="/overlay"
46                 }
47                 [ "$rootfs_found" = "1" ] && grep -q ' /rom ' /proc/mounts && { 
48                         pi_extroot_mount_success=true
49                         pi_mount_skip_next=false
50                         ER_OVERLAY_ROM="/rom"
51                 }
52         }
53         UCI_CONFIG_DIR="$OLD_UCI_CONFIG_DIR"
54 }
55
56 boot_hook_add preinit_mount_root determine_external_root
57