This is an old revision of the document!


USB Autorun

This feature can be used to automatically launch a shell script or perform a software/config update as soon as an USB storage stick has been plugged in. For authentication, a file called autorun.key must exist in the root directory of a FAT16/32 formatted stick. It can be downloaded from that page and holds the SHA256 hash key of the admin password. The file can hold multiple hashes which will be processed line-by-line during authentication which can be used for setting up more systems with different admin passwords. For new devices with an empty password the hash key e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 can be used. The hash keys can be generated by running the command echo -n “<admin-password>” | sha256sum on a Linux system or an Internet hash key generator (search for “sha-256 hash calculator”). Once authentication has succeeded, the system scans for other files in the root directory which can perform the following actions:

  1. For running a script: autorun.sh
  2. For a configuration update: cfg-<SERIALNO>.zip (e.g. cfg-00112B000815.zip), or if not available cfg.zip
  3. For a software update: sw-update.img

Example

autorun.key
# corresponds to password in factory defaults
# as of release 3.8 the password in factory default is an empty string hence the hash is ''echo -n "" | sha256sum''
d6414f06abe9d25df078def16971fc48a0c18fb5da799c141cc8c555683467a7
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
autorun.sh
# This autorun.sh script applies all *.cfg files that are provided on a USB stick
# Make sure autorun.status=1 or the router is set back to factory defaults
# and a file autorun.key with e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 is on the stick as well
 
# $MNTPATH is passed via environment variable but we want to be sure :) 
mountpoint=""
max=60
config="/tmp/myconfig.cfg"
serial=$(cli status system -s | grep SERIAL_NUMBER | cut -d= -f2 | tr -d '"')
for i in `seq 1 $max`
do
    /usr/bin/logger -s -p "local1.notice" -t "autorun" "mount test $i of $max"
    mountpoint=$(mount | grep sda | cut -d" " -f3)
    if [ -n "$mountpoint" ]; then
      /usr/bin/logger -s -p "local1.notice" -t "autorun" "Stick in now mounted on $mountpoint"
      break
    fi
    sleep 1
done
# concatenate common.cfg and individual.cfg on USB stick and save it in temp file.
cat $mountpoint/*.cfg > $config
# apply the whole config in one step
cli update config "file://$config"
/usr/bin/logger -s -p "local1.notice" -t "autorun" "config applied, dumping user config and log on stick for your reference and exiting..."
# write applied config and log back on stick
cat /etc/config/user-config.cfg > $mountpoint/$serial.cfg
tail -n 100 /var/log/messages > $mountpoint/$serial.log
exit 0