summaryrefslogtreecommitdiff
path: root/recipes-core/multitech/overlayfs-init-jffs2/config
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-core/multitech/overlayfs-init-jffs2/config')
-rw-r--r--recipes-core/multitech/overlayfs-init-jffs2/config285
1 files changed, 285 insertions, 0 deletions
diff --git a/recipes-core/multitech/overlayfs-init-jffs2/config b/recipes-core/multitech/overlayfs-init-jffs2/config
new file mode 100644
index 0000000..785f99f
--- /dev/null
+++ b/recipes-core/multitech/overlayfs-init-jffs2/config
@@ -0,0 +1,285 @@
+#!/bin/sh
+
+CONFIG_DIR=/var/config
+RUN_CONF_DIR=/run/config
+
+CONFIG_PARTITION="Config"
+OEM_PARTITION="OEM Config"
+TABLE=$'\n'"$(cat /proc/mtd)"
+if [[ $TABLE =~ [[:space:]]mtd([[:digit:]]+)[^\"]*\"$CONFIG_PARTITION\" ]] ; then
+ CONFIG_MTDC=/dev/mtd${BASH_REMATCH[1]}
+ CONFIG_MTDB=/dev/mtdblock${BASH_REMATCH[1]}
+else
+ echo "Cannot find a ${CONFIG_PARTITION} partition"
+ exit 0
+fi
+if [[ $TABLE =~ [[:space:]]mtd([[:digit:]]+)[^\"]*\"$OEM_PARTITION\" ]] ; then
+ OEM_MTDC=/dev/mtd${BASH_REMATCH[1]}
+ OEM_MTDB=/dev/mtdblock${BASH_REMATCH[1]}
+else
+ echo "Cannot find a ${OEM_PARTITION} partition"
+ exit 0
+fi
+
+CONFIG_DIR=/var/config
+OEM_DIR=/var/oem
+
+FILES="network/interfaces \
+ppp/options \
+ppp/pap-secrets \
+ppp/chap-secrets \
+ppp/peers \
+"
+
+# Files used by bluetooth or wifi.
+BTWIFIFILES="\
+bluetooth/ \
+default/ \
+dnsmasq.d/ \
+hosts \
+hostname \
+hostapd.conf \
+modprobe.d/ \
+wpa_supplicant.conf \
+"
+
+# mts-io driver may not be loaded
+if [[ -L /etc/default/rs9113 ]] || [[ -f /etc/default/rs9113 ]] || [[ -d /opt/rs9113 ]] ; then
+ BTWIFIFILES+="default/rs9113 "
+fi
+
+# File hidden so it is not removed on hardware reset
+WIFITAR=".defaults2.tar.gz"
+
+mount_config() {
+ echo "Mounting ${CONFIG_DIR}"
+ mkdir -p ${CONFIG_DIR}
+ mount ${CONFIG_DIR}
+
+ # Prepare flash for JFFS2 or EXT4 if mount fails
+ if [ $? -ne 0 ]; then
+ echo "Creating ${CONFIG_DIR}"
+ fs=$(mount -fvn ${CONFIG_DIR})
+ if [[ $fs =~ [[:space:]]*(/dev/(...)[^[:space:]]*) ]] ; then
+ if [[ ${BASH_REMATCH[2]} == mmc ]] ; then
+ # One more check for empty
+ mdev="${BASH_REMATCH[1]}"
+ if [[ $(dd if=$mdev count=4 2>/dev/null | tr -d '\0' | wc -c) == 0 ]] ; then
+ mkfs.ext4 -O 64bit ${mdev}
+ fi
+ else
+ flash_erase -j ${CONFIG_MTDC} 0 0
+ fi
+ fi
+ mount ${CONFIG_DIR}
+ fi
+}
+
+mount_oem() {
+ echo "Mounting ${OEM_DIR}"
+ mkdir -p ${OEM_DIR}
+ mount ${OEM_DIR}
+
+ # Prepare flash for JFFS2 or EXT4 if mount fails
+ # Prepare flash for JFFS2 or EXT4 if mount fails
+ if [ $? -ne 0 ]; then
+ echo "Creating ${OEM_DIR}"
+ fs=$(mount -fvn ${OEM_DIR})
+ if [[ $fs =~ [[:space:]]*(/dev/(...)[^[:space:]]*) ]] ; then
+ if [[ ${BASH_REMATCH[2]} == mmc ]] ; then
+ mdev="${BASH_REMATCH[1]}"
+ if [[ $(dd if=$mdev count=4 2>/dev/null | tr -d '\0' | wc -c) == 0 ]] ; then
+ mkfs.ext4 -O 64bit ${mdev}
+ fi
+ else
+ flash_erase -j ${OEM_MTDC} 0 0
+ fi
+ fi
+ mount ${OEM_DIR}
+ fi
+}
+
+# Create symlinks in directory $2
+# that point to non-directory items
+# in directory $1
+# No recursion.
+#
+# /etc/default/rcS must be in the
+# root file system
+#
+function linkdir {
+ from="$1"
+ to="$2"
+ newdir=$(basename "$from")
+ savedir=$(pwd)
+ cd "${from}"
+ for f in * ; do
+ if [[ ${to} == /etc/default ]] && [[ $f == rcS ]] ; then
+ continue
+ fi
+ if [[ $f == \* ]] ; then
+ break
+ fi
+ if ! [[ -d "${to}/${f}" ]] ; then
+ if ! [[ -f ${from}/${f} ]] ; then
+ ln -sf "${from}/${f}" "${to}/${f}"
+ fi
+ else
+ echo Skipping directory "$to/$f"
+ fi
+ done
+ cd "$savedir"
+}
+
+# parameter 1 Input directory
+# parameter 2 Parent of output directory
+#
+# The basename (final component) of parameter 1
+# is created as a directory in the directory
+# of parameter 2.
+function copydir {
+ from="$1"
+ to="$2"
+ newdir=$(basename "$from")
+ if rmdir $from >/dev/null 2>&1 ; then
+ ln -sf "$to/$newdir" "$from"
+ else
+ mkdir "$to/$newdir" >/dev/null 2>&1 || true
+ savedir=$(pwd)
+ cd "$from"
+ for f in * ; do
+ if [[ $f == \* ]] ; then
+ break
+ fi
+ if ! [[ -f "$to/$f" ]] ; then
+ cannon=$(readlink "$to/${newdir}/${f}" 2>/dev/null)
+ # Don't overwrite files in destination.
+ if ! [[ -f ${cannon} ]] ; then
+ cp -a "${f}" "$to/${newdir}/${f}"
+ fi
+ fi
+ done
+ cd "$savedir"
+ fi
+}
+
+case $1 in
+ start)
+ # mount config if not already mounted
+ if ! grep -q " ${CONFIG_DIR} " /proc/mounts; then
+ mount_config
+ else
+ echo "$CONFIG_DIR already mounted"
+ fi
+
+ # mount oem if specified in /etc/fstab and it isn't already mounted
+ if mount -fvn "${OEM_DIR}" ; then
+ if ! grep -q " ${OEM_DIR} " /proc/mounts; then
+ mount_oem
+ else
+ echo "$OEM_DIR already mounted"
+ fi
+ fi
+
+ # Default all config files if requested
+ cd ${CONFIG_DIR}
+ if [ -f force_defaults ]; then
+ echo "Extracting default config files"
+ tar -xf /etc/defaults.tar.gz
+ if [[ -f ${WIFITAR} ]] ; then
+ echo "Extract original wifi related files"
+ tar -xvf ${WIFITAR}
+ fi
+ rm -f force_defaults
+ fi
+
+ # Extract any missing files
+ TARFILES=$(tar -tf /etc/defaults.tar.gz)
+ for file in $TARFILES; do
+ if [ ! -e $file ]; then
+ tar -xvf /etc/defaults.tar.gz $file
+ fi
+ done
+
+ # Create links in /etc
+ for file in $FILES; do
+ if ! [[ -L /etc/$file ]] && ! [[ -d /etc/$file ]] ; then
+ rm -rf /etc/$file
+ ln -sf ${CONFIG_DIR}/$file /etc/$file
+ elif [[ -d /etc/$file ]] ; then
+ # JAK create links in directory.
+ linkdir "${CONFIG_DIR}/${file}" "/etc/${file}"
+ fi
+ done
+
+ # Move bluetooth wifi stuff to config directory.
+ # We don't have factory defaults.
+ ((dobackup=1))
+ for file in ${BTWIFIFILES}; do
+ if [[ -L /etc/$file ]]; then
+ ((dobackup=0))
+ break
+ fi
+ done
+ if ((dobackup==1)) ; then
+ tar -C /etc -czf ${CONFIG_DIR}/${WIFITAR} ${BTWIFIFILES}
+ fi
+
+ # For jffs2, you cannot remove a populated directory in an overlay.
+ # We must copy individual files and create symlinks instead.
+ for file in ${BTWIFIFILES}; do
+ isdir=0
+ # If last character is /, make the CONFIG directory.
+ if [[ ${file: -1} == / ]] ; then
+ isdir=1
+ file=${file%?}
+ if ! [[ -d ${CONFIG_DIR}/$file ]] ; then
+ rm -f ${CONFIG_DIR}/$file 2>/dev/null || true
+ mkdir ${CONFIG_DIR}/$file
+ fi
+ if [[ -d ${file} ]] ; then
+ copydir "/etc/${file}" "${CONFIG_DIR}"
+ fi
+ fi
+
+ if ((isdir == 0)); then
+ dir=$(dirname $file)
+ if [[ $dir != '.' ]] ; then
+ mkdir -p "$dir"
+ fi
+ rm -rf old
+ mkdir old
+ if ! [[ -f $file ]] ; then
+ # Need to preserve old files which is difficult with busybox!
+ if [[ -d $file ]] || [[ -f $file ]] ; then
+ cp --parents -a $file old || true
+ fi
+ (
+ cd /etc
+ if [[ -d $file ]] || [[ -f $file ]] ; then
+ cp --parents -a $file ${CONFIG_DIR} || true
+ fi
+ )
+ (
+ cd old
+ if [[ -d $file ]] || [[ -f $file ]] ; then
+ cp --parents -a $file .. || true
+ fi
+ )
+ rm -rf old
+ fi
+ rm -rf /etc/$file
+ ln -sf ${CONFIG_DIR}/$file /etc/$file
+ else
+ rm -f "/etc/${file}/*"
+ linkdir "${CONFIG_DIR}/${file}" "/etc/${file}"
+ fi
+ done
+ ;;
+
+ *)
+ echo "Usage: $0 {start}"
+ exit 2
+ ;;
+
+esac