8e549190ba
Extroot works fine when the target device is specified by a path. It fails however if the device is specified by UUID (the target partition gets mounted much later by hotplug hooks). This is because the blkid command is no longer compiled into BusyBox (since changeset [1]) so it's unavailable for the preinit phase. The closest bug report I was able to find is [2], although the reporting person mentions that /tmp/overlay-disabled showed up which wasn't there in my case. This patch sets PATH and LD_LIBRARY_PATH environment variables so that the blkid command installed on the target device can be used by that particular preinit script. [1] https://dev.openwrt.org/changeset/26245 [2] https://dev.openwrt.org/ticket/10653 Signed-off-by: Jaroslaw Swierczynski <jarek1701@gmail.com> SVN-Revision: 32567
66 lines
2.2 KiB
Bash
66 lines
2.2 KiB
Bash
#!/bin/sh
|
|
# Copyright (C) 2010 Vertical Communications
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
# See /LICENSE for more information.
|
|
|
|
|
|
determine_external_root() {
|
|
pi_include /lib/functions/extmount.sh
|
|
pi_include /lib/functions/mount.sh
|
|
|
|
local OLD_UCI_CONFIG_DIR="$UCI_CONFIG_DIR"
|
|
local OLD_PATH="$PATH"
|
|
local OLD_LD_LIBRARY_PATH="$LD_LIBRARY_PATH"
|
|
set_jffs_mp
|
|
determine_root_device
|
|
|
|
# extroot requires extroot and fstab config files, therefore
|
|
# we assume configuration is incomplete and not to be used if either of them
|
|
# is missing (for jffs versions of these files on squashfs image)
|
|
if [ "$jffs" = "/tmp/overlay" ] && [ -r "/tmp/overlay/etc/config/fstab" ]; then
|
|
UCI_CONFIG_DIR="/tmp/overlay/etc/config"
|
|
ER_IS_SQUASHFS=true
|
|
ER_OVERLAY_PREFIX="/tmp/overlay"
|
|
PATH=$ER_OVERLAY_PREFIX/sbin:$PATH
|
|
LD_LIBRARY_PATH=$ER_OVERLAY_PREFIX/usr/lib:$LD_LIBRARY_PATH
|
|
export PATH LD_LIBRARY_PATH
|
|
fi
|
|
|
|
# For squashfs on firstboot root_device will be tmpfs for the ramoverlay,
|
|
# unless there is a saved config, in which case it will be /dev/root,
|
|
# however in the case of a saved config, it won't be restored until after
|
|
# this script, so there won't be a config on the first boot after
|
|
# flashing a squashfs-based filesystem
|
|
# For ext2, ramdisk, or jffs2 root filesystems root_device is /dev/root
|
|
# For squashfs after firstboot, root filesystem is /dev/root
|
|
# We only use the config from the root or jffs if the root_device is
|
|
# /dev/root
|
|
[ "$root_device" = "/dev/root" ] && {
|
|
er_load_modules
|
|
[ -n "$extroot_settle_time" ] && [ "$extroot_settle_time" -gt 0 ] && {
|
|
sleep $extroot_settle_time
|
|
}
|
|
config_load fstab
|
|
config_foreach config_mount_by_section mount 1
|
|
ER_OVERLAY_ROM="/no-extroot"
|
|
|
|
[ "$rootfs_found" = "1" ] && grep -q ' /overlay ' /proc/mounts && {
|
|
pi_extroot_mount_success=true
|
|
pi_mount_skip_next=false
|
|
ER_OVERLAY_ROM="/overlay"
|
|
}
|
|
[ "$rootfs_found" = "1" ] && grep -q ' /rom ' /proc/mounts && {
|
|
pi_extroot_mount_success=true
|
|
pi_mount_skip_next=false
|
|
ER_OVERLAY_ROM="/rom"
|
|
}
|
|
}
|
|
UCI_CONFIG_DIR="$OLD_UCI_CONFIG_DIR"
|
|
PATH="$OLD_PATH"
|
|
LD_LIBRARY_PATH="$OLD_LD_LIBRARY_PATH"
|
|
export PATH LD_LIBRARY_PATH
|
|
}
|
|
|
|
boot_hook_add preinit_mount_root determine_external_root
|
|
|