From 1c434bf038b0f66ee2efb329ef5532a4333452ec Mon Sep 17 00:00:00 2001 From: John Klug Date: Mon, 26 Jul 2021 19:16:36 -0500 Subject: overlayfs is for UBI file systems --- .../multitech/overlayfs-init-ubi/overlayfs.init | 119 +++++++++++++++++++++ recipes-core/multitech/overlayfs-init-ubi_0.1.bb | 22 ++++ .../multitech/overlayfs-init/overlayfs.init | 119 --------------------- recipes-core/multitech/overlayfs-init_0.1.bb | 22 ---- 4 files changed, 141 insertions(+), 141 deletions(-) create mode 100644 recipes-core/multitech/overlayfs-init-ubi/overlayfs.init create mode 100644 recipes-core/multitech/overlayfs-init-ubi_0.1.bb delete mode 100644 recipes-core/multitech/overlayfs-init/overlayfs.init delete mode 100644 recipes-core/multitech/overlayfs-init_0.1.bb (limited to 'recipes-core/multitech') 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 diff --git a/recipes-core/multitech/overlayfs-init-ubi_0.1.bb b/recipes-core/multitech/overlayfs-init-ubi_0.1.bb new file mode 100644 index 0000000..a14ed2e --- /dev/null +++ b/recipes-core/multitech/overlayfs-init-ubi_0.1.bb @@ -0,0 +1,22 @@ +DESCRIPTION = "OverlayFS init" +HOMEPAGE = "http://www.multitech.com/" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" +PACKAGE_ARCH = "all" +PR = "r5" +RDEPENDS_${PN} += "bash" + +SRC_URI = " \ + file://overlayfs.init \ +" + +inherit allarch +inherit update-rc.d + +INITSCRIPT_NAME = "overlayfs" +INITSCRIPT_PARAMS = "start 01 S ." + +do_install() { + install -d ${D}/${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/overlayfs.init ${D}/${sysconfdir}/init.d/overlayfs +} diff --git a/recipes-core/multitech/overlayfs-init/overlayfs.init b/recipes-core/multitech/overlayfs-init/overlayfs.init deleted file mode 100644 index 72a6217..0000000 --- a/recipes-core/multitech/overlayfs-init/overlayfs.init +++ /dev/null @@ -1,119 +0,0 @@ -#!/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 diff --git a/recipes-core/multitech/overlayfs-init_0.1.bb b/recipes-core/multitech/overlayfs-init_0.1.bb deleted file mode 100644 index a14ed2e..0000000 --- a/recipes-core/multitech/overlayfs-init_0.1.bb +++ /dev/null @@ -1,22 +0,0 @@ -DESCRIPTION = "OverlayFS init" -HOMEPAGE = "http://www.multitech.com/" -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" -PACKAGE_ARCH = "all" -PR = "r5" -RDEPENDS_${PN} += "bash" - -SRC_URI = " \ - file://overlayfs.init \ -" - -inherit allarch -inherit update-rc.d - -INITSCRIPT_NAME = "overlayfs" -INITSCRIPT_PARAMS = "start 01 S ." - -do_install() { - install -d ${D}/${sysconfdir}/init.d - install -m 0755 ${WORKDIR}/overlayfs.init ${D}/${sysconfdir}/init.d/overlayfs -} -- cgit v1.2.3