mount_root: prepare base-files

Signed-off-by: John Crispin <blogic@openwrt.org>

SVN-Revision: 36429
This commit is contained in:
John Crispin
2013-04-25 19:02:32 +00:00
parent 39469dea7f
commit 811d90ff40
33 changed files with 80 additions and 71 deletions

View File

@@ -0,0 +1,10 @@
#!/bin/sh
check_skip() {
if [ "$firstboot_skip_next" = "true" ]; then
return 0
else
return 1
fi
}

View File

@@ -0,0 +1,46 @@
#!/bin/sh
set_mtd_part() {
partname="rootfs_data"
mtdpart="$(find_mtd_part $partname)"
}
set_rom_part() {
rom=$(awk '/squashfs/ {print $2}' /proc/mounts)
}
set_jffs_part() {
jffs=$(awk '/jffs2/ {print $2}' /proc/mounts)
}
determine_mtd_part() {
set_mtd_part
if [ -z "$mtdpart" ]; then
echo "MTD partition not found."
exit 1
fi
}
determine_rom_part() {
check_skip || {
set_rom_part
if [ -z "$rom" ]; then
echo "You do not have a squashfs partition; aborting"
echo "(firstboot cannot be run on jffs2 based firmwares)"
exit 1
fi
}
}
determine_jffs2_part() {
check_skip || {
set_jffs_part
}
}
boot_hook_add switch2jffs determine_mtd_part
boot_hook_add jffs2reset determine_mtd_part
boot_hook_add switch2jffs determine_rom_part
boot_hook_add jffs2reset determine_rom_part
boot_hook_add switch2jffs determine_jffs2_part
boot_hook_add jffs2reset determine_jffs2_part

View File

@@ -0,0 +1,17 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
no_fo_clear_overlay() {
# switch back to squashfs temporarily
pivot /rom /mnt
# get rid of the old overlay
umount -l /mnt
# another umount to get rid of the bind from /tmp/root
umount -l /mnt
}
boot_hook_add no_fo no_fo_clear_overlay

View File

@@ -0,0 +1,12 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
reset_check_for_overlay() {
if grep -qE '(mini_fo|overlay)' /proc/filesystems; then
reset_has_fo=true
fi
}
boot_hook_add jffs2reset reset_check_for_overlay

View File

@@ -0,0 +1,13 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
check_for_overlay() {
if ! grep -qE '(mini_fo|overlay)' /proc/filesystems; then
boot_run_hook no_fo
exit 1
fi
}
boot_hook_add switch2jffs check_for_overlay

View File

@@ -0,0 +1,15 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
no_fo_mount_jffs() {
# initialize jffs2
mount -o noatime "$mtdpart" /overlay -t jffs2 || exit
# workaround to ensure that union can attach properly
sync
ls /overlay >/dev/null
}
boot_hook_add no_fo no_fo_mount_jffs

View File

@@ -0,0 +1,14 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
reset_clear_jffs() {
[ "$reset_has_fo" = "true" ] && {
rm -rf $jffs/* 2>&-
mount -o remount $jffs / 2>&-
exit 0
} || reset_has_fo=false
}
boot_hook_add jffs2reset reset_clear_jffs

View File

@@ -0,0 +1,10 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
skip_if_rootfs_mounted() {
mount -o noatime -t jffs2 "$mtdpart" /rom/overlay || exit
}
boot_hook_add switch2jffs skip_if_rootfs_mounted

View File

@@ -0,0 +1,11 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
no_fo_pivot() {
# switch to the new (empty) jffs2
fopivot /overlay /rom 1
}
boot_hook_add no_fo no_fo_pivot

View File

@@ -0,0 +1,13 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
reset_copy_rom() {
[ "$reset_has_fo" != "true" ] && {
dupe $jffs $rom
exit 0
}
}
boot_hook_add jffs2reset reset_copy_rom

View File

@@ -0,0 +1,15 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
copy_ramoverlay() {
# try to avoid fs changing while copying
mount -o remount,ro none / 2>&-
# copy ramoverlay to jffs2
echo -n "copying files ... "
cp -a /tmp/root/* /rom/overlay 2>&-
echo "done"
}
boot_hook_add switch2jffs copy_ramoverlay

View File

@@ -0,0 +1,14 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
no_fo_copy_ramoverlay() {
# copy ramoverlay to jffs2, must be done after switching
# to the new rootfs to avoid creating opaque directories
echo -n "copying files ... "
cp -a /tmp/root/* / >/dev/null 2>&1
sync
}
boot_hook_add no_fo no_fo_ramoverlay

View File

@@ -0,0 +1,17 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
with_fo_pivot() {
# switch back to squashfs (temporarily)
# and park the ramdisk ontop of /tmp/root
pivot /rom /mnt
mount -o move /mnt /tmp/root
# /overlay is the overlay
# /rom is the readonly
fopivot /overlay /rom
}
boot_hook_add switch2jffs with_fo_pivot

View File

@@ -0,0 +1,13 @@
#!/bin/sh
# Copyright (C) 2006-2010 OpenWrt.org
# Copyright (C) 2010 Vertical Communications
no_fo_cleanup() {
echo "done"
umount -l /overlay
umount -l /tmp/root
exit 0
}
boot_hook_add no_fo no_fo_cleanup

View File

@@ -6,7 +6,7 @@
with_fo_cleanup() {
# try to get rid of /tmp/root
# this will almost always fail
umount /tmp/root 2>&-
umount -l /tmp/root 2>&-
grep -q overlay /proc/filesystems && {
cd /
(