#!/bin/sh # Usage: modload [force] [ -d "/tmp/flash" -a "$1" != "force" ] && exit 0 . /etc/init.d/loglibrc log() { while IFS='\n' read -r line; do [ -z "$line" ] && continue loglib_console "MODLOAD" "$line" echo "$line" >> /var/log/mod_load.log done } MODFILE=/var/flash/freetz newmod() { echo -n "Creating $MODFILE ... " mkdir -p /tmp/flash tar -cf $MODFILE -C /tmp flash echo 'done.' } # Symlink files (of specific type) into the /mod tree # $1 - file type (as in the shell command 'test') # $2..n - files to symlink (absolute paths are expected) lnmod() { local test="$1" file shift for file in "$@"; do if [ "$test" "$file" -a ! -e "/mod${file}" ]; then ln -s "$file" "/mod${file}" fi done } mod_load() { echo -n 'Loading env ... ' # store 'clean' environment env - /bin/sh -c 'VERBOSE_RC_CONF=n; . /etc/init.d/rc.conf; unset PWD; env' | sed -re 's/^([^=]+)=(.*)$/export \1='"'\2'"/ > /var/env.mod.rcconf # overwrite AVM's version - why? #ln -sf env.mod.rcconf /var/env.cache # include with paths and lang ( echo "export PATH='/mod/sbin:/mod/bin:/mod/usr/sbin:/mod/usr/bin:/mod/etc/init.d:$PATH'" echo "export LD_LIBRARY_PATH='/mod/lib:/mod/usr/lib'" grep "^export LANG=" /var/env.mod.rcconf grep "^export CONFIG_ENVIRONMENT_PATH=" /var/env.mod.rcconf ) > /var/env.mod.daemon echo "done." echo -n 'Loading flash ... ' HEAD="$(head -c2 $MODFILE 2>/dev/null)" if [ -n "$HEAD" ]; then [ "$HEAD" == "$(echo -ne '\x1F\x8B')" ] && COMP='z' if cat $MODFILE | tar -x$COMP -C /tmp/ 2>/dev/null; then echo "done." else echo "failed." newmod fi else echo 'does not exist.' newmod fi [ -d /tmp/flash/mod ] || mkdir -p /tmp/flash/mod echo -n 'Loading users ... ' /usr/bin/modusers load echo 'done.' echo -n 'Loading hosts ... ' /usr/bin/modhosts load echo 'done.' echo -n 'Loading config ... ' for pkg in $(cat /mod/etc/static.pkg 2>/dev/null) avm; do [ -e "/mod/pkg/$pkg" ] || ln -s / "/mod/pkg/$pkg" lnmod -d "/etc/default.$pkg" lnmod -d "/usr/lib/cgi-bin/$pkg" lnmod -x "/usr/lib/cgi-bin/$pkg.cgi" lnmod -x "/etc/init.d/rc.$pkg" lnmod -x $(ls /etc/init.d/rc.$pkg.* 2>/dev/null) [ -r "/mod/etc/default.$pkg/$pkg.cfg" ] && /usr/bin/modconf load "$pkg" done /usr/bin/modconf load avm echo 'done.' echo -n 'Loading modules ... ' for MODULE in fat vfat mbcache ext2 jbd ext3 crc16 jbd2 ext4 reiserfs nls_utf8 hfsplus ipv6; do [ -e /lib/modules/$(uname -r)/kernel/*/*/${MODULE}.ko ] && modprobe $MODULE done if [ -r /tmp/flash/mod/modules ]; then grep -v "^ *#" /tmp/flash/mod/modules | while read -r module; do [ -n "$module" ] && modprobe ${module%.ko} done fi echo 'done.' } mod_load 2>&1 | log exit 0