summaryrefslogtreecommitdiff
path: root/recipes-core/multitech/overlayfs-init-ubi
diff options
context:
space:
mode:
authorJohn Klug <john.klug@multitech.com>2021-07-26 19:16:36 -0500
committerJohn Klug <john.klug@multitech.com>2021-07-26 19:16:36 -0500
commit1c434bf038b0f66ee2efb329ef5532a4333452ec (patch)
tree2ed303dbfa38c8b645c0cdd6edffeb2fd89a8f69 /recipes-core/multitech/overlayfs-init-ubi
parent67c32d71418d109a4f49978e9d5e885615771930 (diff)
downloadmeta-mlinux-1c434bf038b0f66ee2efb329ef5532a4333452ec.tar.gz
meta-mlinux-1c434bf038b0f66ee2efb329ef5532a4333452ec.tar.bz2
meta-mlinux-1c434bf038b0f66ee2efb329ef5532a4333452ec.zip
overlayfs is for UBI file systems
Diffstat (limited to 'recipes-core/multitech/overlayfs-init-ubi')
-rw-r--r--recipes-core/multitech/overlayfs-init-ubi/overlayfs.init119
1 files changed, 119 insertions, 0 deletions
diff --git a/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init b/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init
new file mode 100644
index 0000000..72a6217
--- /dev/null
+++ b/recipes-core/multitech/overlayfs-init-ubi/overlayfs.init
@@ -0,0 +1,119 @@
+#!/bin/bash
+# To turn on systemd debug:
+# setenv bootargs "systemd.log_level=debug console=ttymxc0,115200 ubi.mtd=nandubi root=ubi0:rootfs rootfstype=ubifs ro
+# rootflags=chk_data_crc mtdparts=gpmi-nand:4m(nandboot),-(nandubi)"
+
+# Command to erase user data file system
+# Modified for ubifs, secure boot (no U-Boot access)
+
+MNT_USER="/mnt/user"
+OVERLAY="$MNT_USER/overlay"
+WORKDIR="$MNT_USER/work"
+UPPERDIR="$MNT_USER/upper"
+LOWERDIR="/"
+USER_ORIG="$UPPERDIR/orig"
+USER_PARTITION="ubi0:user-data"
+DO_ERASE_USERDATA_FILE="/mnt/user/.persistent/mts_do_erase_userdata"
+DO_CLEAR_USERDATA_FILE="/mnt/user/.persistent/mts_do_clear_userdata"
+
+pid=$$
+prefix="<3>overlayrootfs-generator[${pid}]: "
+loginfo() { echo "${prefix}$@" >/dev/kmsg ; }
+logpipe() { cat <(echo -n "${prefix}") - >/dev/kmsg ; }
+
+mnt_user() {
+ mkdir -p $MNT_USER
+ mount -t ubifs $USER_PARTITION $MNT_USER
+}
+
+fs="/run /dev /proc /sys /sys/kernel/security /dev/shm /dev/pts /run /sys/fs/cgroup /sys/fs/cgroup/unified
+ /sys/fs/cgroup/systemd /sys/fs/cgroup/devices /sys/fs/cgroup/freezer /sys/fs/cgroup/pids /sys/fs/cgroup/memory
+ /dev/mqueue /sys/kernel/debug /tmp /sys/fs/fuse/connections /sys/kernel/config /var/volatile"
+
+my_switch_root() {
+ NEW_ROOT=$1
+ echo mountinfo >&2
+ cat /proc/mounts >&2
+ mount --make-rprivate /
+ for f in $fs ; do
+ mount -o noatime,move --bind $f $NEW_ROOT/$f
+ done
+ /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 [[ -f $DO_CLEAR_USERDATA_FILE ]] || [[ -f $DO_ERASE_USERDATA_FILE ]] ; then
+ do_select_old
+ do_remove_old
+ rm -f $DO_CLEAR_USERDATA_FILE
+ fi
+
+ mkdir -p $UPPERDIR $WORKDIR $OVERLAY $USER_ORIG ${MNT_USER}/.persistent
+ loginfo "Mounting..."
+ set -x
+ mount -o noatime,lowerdir=$LOWERDIR,upperdir=$UPPERDIR,workdir=$WORKDIR,rw -t overlay overlay $OVERLAY
+ loginfo "JAK: What does overlay look like in /proc/mounts?"
+ cat /proc/mounts | grep overlay | logpipe
+
+ mkdir -p ${OVERLAY}/var/persistent
+
+ mount --bind ${MNT_USER}/.persistent ${OVERLAY}/var/persistent
+ loginfo "Switch root to $OVERLAY"
+ my_switch_root $OVERLAY
+ cat /proc/mounts | grep overlay >&2
+ mount -o remount,rw /
+ cat /proc/mounts | grep overlay | logpipe
+ cat /proc/mounts | grep tmp | logpipe
+ umount -l /tmp
+ umount -l /var/volatile
+ cgroupmnts=$(sed -r -e 's/[^[:space:]]*[[:space:]]//' -e 's/[[:space:]]+.*//g' /proc/mounts | grep '^/orig')
+ for mp in ${cgroupmnts} ; do
+ if [[ $mp != /orig ]] ; then
+ umount -l $mp
+ fi
+ done
+}
+
+do_start() {
+ do_rw_mount
+}
+
+case $1 in
+start)
+ do_start
+;;
+*)
+ echo "Usage: $0 {start}"
+;;
+esac