blob: 4da621783de9367785d25d6615cbf27225318777 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#!/bin/bash
MNT_USER="/mnt/user"
OVERLAY="$MNT_USER/overlay"
WORKDIR="$MNT_USER/work"
UPPERDIR="$MNT_USER/upper"
LOWERDIR="/"
USER_ORIG="$UPPERDIR/orig"
USER_PARTITION="/dev/mtdblock9"
DO_ERASE_USERDATA_FILE="/mnt/user/.persistent/mts_do_erase_userdata"
loginfo() { logger -s -t overlayfs "info: $@" 1>&2 ; }
mnt_user() {
mkdir -p $MNT_USER
mount -t jffs2 $USER_PARTITION $MNT_USER
}
switch_root() {
NEW_ROOT=$1
mount -o noatime,move --bind /run $NEW_ROOT/run
mount -o noatime,move --bind /dev $NEW_ROOT/dev
mount -o noatime,move --bind /proc $NEW_ROOT/proc
mount -o noatime,move --bind /sys $NEW_ROOT/sys
/sbin/pivot_root $NEW_ROOT $NEW_ROOT/orig
}
# remove old hidden and non-hidden files and folders
do_remove_old() {
shopt -s dotglob
rm -rf $MNT_USER/*.old
shopt -u dotglob
}
# select files for deletion
do_select_old() {
if [[ -f $DO_ERASE_USERDATA_FILE ]]; then
# when "erase user data" is requested - mark all hidden and non-hidden files for deletion
shopt -s dotglob
trap "shopt -u dotglob" RETURN
loginfo "Erasing user data"
else
# when "clear user data" is requested - mark all non-hidden files for deletion
loginfo "Clearing user data"
fi
for FILE_PATH in "$MNT_USER"/*; do
FILE_NAME=$(basename "$FILE_PATH")
# rename all files and folders that exist in /mnt/user
mv "$FILE_PATH" "$MNT_USER/$FILE_NAME.old"
done
}
do_rw_mount() {
loginfo "Starting RW overlayfs"
mount -t tmpfs inittemp /mnt
mnt_user
do_remove_old
if u-boot printenv default_reset_f; then
do_select_old
do_remove_old
u-boot setenv default_reset_f
fi
mkdir -p $UPPERDIR $WORKDIR $OVERLAY $USER_ORIG ${MNT_USER}/.persistent
loginfo "Mounting..."
mount -o noatime,lowerdir=$LOWERDIR,upperdir=$UPPERDIR,workdir=$WORKDIR -t overlay overlay $OVERLAY
mkdir -p ${OVERLAY}/var/persistent
mount --bind ${MNT_USER}/.persistent ${OVERLAY}/var/persistent
switch_root $OVERLAY
}
do_start() {
do_rw_mount
}
case $1 in
start)
do_start
;;
*)
echo "Usage: $0 {start}"
;;
esac
|