summaryrefslogtreecommitdiff
path: root/recipes-core/multitech/config/config.init
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-core/multitech/config/config.init')
-rw-r--r--recipes-core/multitech/config/config.init220
1 files changed, 163 insertions, 57 deletions
diff --git a/recipes-core/multitech/config/config.init b/recipes-core/multitech/config/config.init
index f60fbfc..2a1e0b5 100644
--- a/recipes-core/multitech/config/config.init
+++ b/recipes-core/multitech/config/config.init
@@ -1,12 +1,27 @@
#!/bin/sh
-CONFIG_MTDC=/dev/mtd6
-CONFIG_MTDB=/dev/mtdblock6
CONFIG_DIR=/var/config
RUN_CONF_DIR=/run/config
-OEM_MTDC=/dev/mtd7
-OEM_MTDB=/dev/mtdblock7
+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 \
@@ -19,11 +34,7 @@ ppp/peers \
# Files used by bluetooth or wifi.
BTWIFIFILES="\
bluetooth/ \
-default/bluetooth \
-default/bt-pan \
-default/dnsmasq \
-default/hostapd \
-default/ifplugd \
+default/ \
dnsmasq.d/ \
hosts \
hostname \
@@ -31,10 +42,6 @@ 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"
@@ -87,6 +94,93 @@ mount_oem() {
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 == volatiles ]] ; then
+ continue
+ fi
+ if [[ $f == \* ]] ; then
+ break
+ fi
+
+ if ! [[ -h ${to}/${f} ]] ; then
+ ln -sf "${from}/${f}" "${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.
+#
+# Any symlinks found are not copied, but instead
+# updated to point to the "to" directory.
+#
+function copydir {
+ from="$1"
+ to="$2"
+ newdir=$(basename "$from")
+ links=()
+ if rmdir $from >/dev/null 2>&1 ; then
+ ln -sf "$to/$newdir" "$from"
+ else
+ mkdir "$to/$newdir" >/dev/null 2>&1 || true
+ if [[ -L $from ]] ; then
+ # If we have a symlink to a directory,
+ # skip copying any files.
+ return 0
+ fi
+ savedir=$(pwd)
+ cd "$from"
+ for f in * ; do
+ if [[ $f == \* ]] ; then
+ break
+ fi
+ if [[ $f == volatiles ]] ; then
+ continue
+ fi
+ if [[ -L ${f} ]] ; then
+ links+=(${f})
+ continue
+ fi
+ if ! [[ -f "$to/$f" ]] ; then
+ cp -a "${f}" "$to/${newdir}/${f}"
+ fi
+ done
+ for l in ${links[*]} ; do
+ mylink=$(readlink "$l")
+ if [[ $(dirname ${mylink}) == ${from} ]] ; then
+ base=$(basename "${mylink}")
+ if [[ $base != $l ]] ; then
+ echo "Writing symlink $to/$base $l"
+ ln -sf $to/${newdir}/$base $l
+ fi
+ fi
+ done
+ cd "$savedir"
+ fi
+}
+
case $1 in
start)
# mount config if not already mounted
@@ -109,28 +203,30 @@ case $1 in
cd ${CONFIG_DIR}
if [ -f force_defaults ]; then
echo "Extracting default config files"
- tar -xvf /etc/defaults.tar.gz
+ tar -xf /etc/defaults.tar.gz
if [[ -f ${WIFITAR} ]] ; then
echo "Extract original wifi related files"
- tar -xvf ${WIFITAR}
+ tar -xf ${WIFITAR}
fi
rm -f force_defaults
fi
# Extract any missing files
- TARFILES=`tar -tf /etc/defaults.tar.gz`
+ TARFILES=$(tar -tf /etc/defaults.tar.gz)
for file in $TARFILES; do
if [ ! -e $file ]; then
- tar -xvf /etc/defaults.tar.gz $file
+ tar -xf /etc/defaults.tar.gz $file
fi
done
# Create links in /etc
for file in $FILES; do
- if [ ! -L /etc/$file ]; then
- echo "Creating link to ${CONFIG_DIR}/$file"
+ 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
@@ -144,52 +240,62 @@ case $1 in
fi
done
if ((dobackup==1)) ; then
+ echo "Creating backup of Config files"
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
- # If last character is /, make the CONFIG directory.
- if [[ ${file: -1} == / ]] ; then
- file=${file%?}
- echo directory $file operations
- if ! [[ -d ${CONFIG_DIR}/$file ]] ; then
- rm -f ${CONFIG_DIR}/$file 2>/dev/null || true
- mkdir ${CONFIG_DIR}/$file
- fi
- fi
- if [[ ! -L /etc/$file ]]; then
- echo "Creating link to ${CONFIG_DIR}/$file"
- dir=$(dirname $file)
- if [[ $dir != '.' ]] ; then
- mkdir -p "$dir"
+ 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
- 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
+ fi
+ rm -rf /etc/$file
+ ln -sf ${CONFIG_DIR}/$file /etc/$file
+ else
+ if ! [[ -L "/etc/${file}" ]] ; then
+ rm -f "/etc/${file}/*"
+ linkdir "${CONFIG_DIR}/${file}" "/etc/${file}"
fi
+ fi
done
-
-
;;
*)