Some advanced uses of your NAS may require you to run custom applications at boot-time. Even though QNAP NAS are Linux-based, you cannot use the usual Linux methods for launching an application at startup: default config files are reset on every startup.
Before firmware 3.8.2, QNAP OS automatically launched a special script (if present) but since this update this trick doesn't work anymore.
Here, you can find the old and new method.
Wymagania
This method consists of declaring a dummy QPKG which launches your script at startup.
(stara) Metoda przez utworzenie pliki autorun.sh w pamięci flash (MTD)
WARNING: this method is DEPRECATED for two reasons:
Ręczna edycja pliku autorun.sh
IMPORTANT: Unmount the mounted flash partition:
editautorun.sh - skrypt otwierający edycję autorun.sh
If you edit this file regularly you can save some time by creating a shell script (e.g. editautorun.sh) to automate the process. You can call the script by either putting it in the environment path, or add its folder to the path or call it by an alias.
The script contents are:
For TS-201 use ...
For TS-109, TS-109P, TS-119, TS-209, TS-209P, TS-219, TS-412, TS-409 (Marvell ARM) use ...
TS-439, TS-509, TS-639, TS-809, TS-809U (x86) use ...
Wydelegowanie pliku autorun.sh do zewnętrznego skryptu
Frequently mounting and editing autorun.sh on the flash could be an annoying task. More important, it may reduce the lifetime of some flash blocks. Flash blocks have limited write/erase cycles, and the mtdblock device driver does little to prevent their wear. Read more on this on the Linux mtd website.
To avoid this, you could configure autorun.sh to launch another script located in the inner drive: in this way there no need to always mount and modify the file inside the flash. but only edit the script file located on your drive.
Create the directory /share/HDA_DATA/.qpkg/autorun and file autorun.sh with:
The autorun.sh located on the flash could be something like this (just two lines that won't need many changes!):
and then edit the file /share/HDA_DATA/.qpkg/autorun/autorun.sh to be used to launch all your startup scripts.
UWAGI!
Oczekiwanie na zaszyfrowane partycje
If your data partition is encrypted, you might have some script that has to wait until the encrypted partition is available. I added a script called waitforenc.sh in my autorun-directory:
And now I'm able to call scripts *after* the encrypted partition is available, without blocking other scripts:
Uruchamianie wszystkich skryptów znajdujących się w określonym katalogu
Place a file called listoffiles.sh in a directory, create a subdirectory called scripts, add listoffiles.sh to your autorun:
Optymalizacja interfejsu sieciowego/sieci
*You can also try different values from SpeedGuide.net
Before firmware 3.8.2, QNAP OS automatically launched a special script (if present) but since this update this trick doesn't work anymore.
Here, you can find the old and new method.
Wymagania
- must be able to remote login via Ssh Login or Telnet Login (e.g. use SSH PuTTY)
- must know how to edit files using nano, vi, or edit via SFTP (e.g. use WinSCP)
This method consists of declaring a dummy QPKG which launches your script at startup.
- Log into your QNAP device using SSH or Telnet, for instance by using Putty
- Edit QPKG config file:
Bash:
vi /etc/config/qpkg.conf
- Declare a new dummy package by adding something like that in this file:
Kod:
[autorun] Name = autorun Version = 0.1 Author = neomilium Date = 2013-05-06 Shell = /share/MD0_DATA/.qpkg/autorun/autorun.sh Install_Path = /share/MD0_DATA/.qpkg/autorun Enable = TRUE
- Create the dummy package directory:
Bash:
mkdir /share/MD0_DATA/.qpkg/autorun
- Create the autorun script with the contents of your choice:
Bash:
vi /share/MD0_DATA/.qpkg/autorun/autorun.sh
- Set the execute bit:
-
Bash:
chmod +x /share/MD0_DATA/.qpkg/autorun/autorun.sh
- Reboot and enjoy!
WARNING: this method is DEPRECATED for two reasons:
- This method implies editing a file on MTD (a flash device) which has a low write cycle limit;
- Since firmware version 3.8.2, this method does not work anymore.
Ręczna edycja pliku autorun.sh
- Log into your QNAP device using SSH or Telnet, for instance by using Putty
- Optional: install nano; use ipkg install nano & edit with nano instead of vi
- TS-201: Mount the config ramblock /dev/mtdblock4:
Bash:
mount -t ext2 /dev/mtdblock4 /tmp/config
- TS-109, TS-109P, TS-110, TS-119, TS-209, TS-209P, TS-219, TS-409 (Marvell ARM), TS-412, TS-419P: Mount the config ramblock /dev/mtdblock5:
Bash:
mount -t ext2 /dev/mtdblock5 /tmp/config
- (TS-219P II: since the new firmware update you maybe have to use ext4 instead of ext2):
Bash:
mount -t ext2 /dev/mtdblock5 /tmp/config
- TS-439, TS-509, TS-639, TS-809, TS-809U (x86): Mount the config ramblock /dev/sdx6:
Bash:
mount -t ext2 /dev/sdx6 /tmp/config
- TS-201: Mount the config ramblock /dev/mtdblock4:
- Create/Edit /tmp/config/autorun.sh either using vi:
Bash:
vi /tmp/config/autorun.sh
- Get vi editor into edit mode: press a
- Edit whatever you need to
- Exit edit mode: press ESC
- Save and exit: press ZZ
- ..or editing it using a desktop PC and e.g. SFTP
Bash:
chmod +x /tmp/config/autorun.sh
Bash:
umount /tmp/config
editautorun.sh - skrypt otwierający edycję autorun.sh
If you edit this file regularly you can save some time by creating a shell script (e.g. editautorun.sh) to automate the process. You can call the script by either putting it in the environment path, or add its folder to the path or call it by an alias.
The script contents are:
For TS-201 use ...
Bash:
mount -t ext2 /dev/mtdblock4 /tmp/configvi /tmp/config/autorun.sh
chmod +x /tmp/config/autorun.sh
echo .
echo "unmounting /tmp/config..."
umount /tmp/config
For TS-109, TS-109P, TS-119, TS-209, TS-209P, TS-219, TS-412, TS-409 (Marvell ARM) use ...
Bash:
mount -t ext2 /dev/mtdblock5 /tmp/config
vi /tmp/config/autorun.sh
chmod +x /tmp/config/autorun.sh
echo .
echo "unmounting /tmp/config..."
umount /tmp/config
TS-439, TS-509, TS-639, TS-809, TS-809U (x86) use ...
Bash:
mount -t ext2 /dev/sdx6 /tmp/config
vi /tmp/config/autorun.sh
chmod +x /tmp/config/autorun.sh
echo .
echo "unmounting /tmp/config..."
umount /tmp/config
Wydelegowanie pliku autorun.sh do zewnętrznego skryptu
Frequently mounting and editing autorun.sh on the flash could be an annoying task. More important, it may reduce the lifetime of some flash blocks. Flash blocks have limited write/erase cycles, and the mtdblock device driver does little to prevent their wear. Read more on this on the Linux mtd website.
To avoid this, you could configure autorun.sh to launch another script located in the inner drive: in this way there no need to always mount and modify the file inside the flash. but only edit the script file located on your drive.
Create the directory /share/HDA_DATA/.qpkg/autorun and file autorun.sh with:
Bash:
mkdir /share/HDA_DATA/.qpkg/autorun
cd /share/HDA_DATA/.qpkg/autorun/
touch autorun.sh
chmod +x autorun.sh
The autorun.sh located on the flash could be something like this (just two lines that won't need many changes!):
Bash:
#!/bin/sh
/share/HDA_DATA/.qpkg/autorun/autorun.sh &
UWAGI!
- Never put any larger files on your flashboot devices and ramdisk; instead, create symbolic links to whatever you want to put there, e.g.:
''Create a link from /usr (which is in ramdisk) to /share/MD0_DATA/jre1.6.0_10 (which is on a hard disk) at the mountpoint /usr/java''Bash:ln -sf /share/MD0_DATA/jre1.6.0_10 /usr/java
- Always use the full system path because locations like /opt/bin or /opt/sbin might not have been exported yet when Autorun.sh is executed, e.g:No good.
Bash:
svnserve -d --listen-port=4000 -r /share/subversion
Bash:/opt/bin/svnserve -d --listen-port=4000 -r /share/subversion
Bash:/bin/ln -sf /opt/bin/ /share/HDA_DATA/opt/bin/
- Many startup scripts in /etc/init.d overwrite their corresponding configuration files in /etc. In this case overwriting the config file using autorun.sh is not enough; we also have to overwrite the startup script itself. Moreover, many startup scripts get excecuted before autorun, such that we also have to restart the service. In this case an autorun.sh may look like this:
Bash:
#!/bin/sh cp /share/MD0_DATA/admin/nfs /etc/init.d/nfscp /share/MD0_DATA/admin/exports /etc /etc/init.d/nfs restart
- On our QNAP TS-879 Pro we were not able to run
Bash:
/opt/bin/rsyncd-acl.sh start
Bash:#!/bin/shlog=/share/MD0_DATA/.qpkg/Optware/var/log/autorundate > $log# removing bogus /opt/bin/rm /opt/nasconfig_fs.img.tgz /opt 2>> $log >> $log/bin/rmdir /opt 2>> $log >> $log# link correct /opt/bin/ln -s /share/MD0_DATA/.qpkg/Optware /opt 2>> $log >> $log# run autorun.sh/opt/etc/autorun.sh 2>> $log >> $log
Bash:mkdir -p /opt/var/log
Bash:#!/bin/sh /opt/bin/rsyncd-acl.sh start
Oczekiwanie na zaszyfrowane partycje
If your data partition is encrypted, you might have some script that has to wait until the encrypted partition is available. I added a script called waitforenc.sh in my autorun-directory:
Bash:
#! /bin/sh
# This script ends after the encrypted filesystem has been mounted.
# The following exits successfully (0) if MD0 is mounted
cat /etc/mtab | grep -q MD0
while [[ $? -ne 0 ]] ; do
sleep 5
cat /etc/mtab | grep -q MD0
done
And now I'm able to call scripts *after* the encrypted partition is available, without blocking other scripts:
Bash:
(./waitforenc.sh; /etc/init.d/ldap_server.sh restart ) &
Uruchamianie wszystkich skryptów znajdujących się w określonym katalogu
Place a file called listoffiles.sh in a directory, create a subdirectory called scripts, add listoffiles.sh to your autorun:
Bash:
#! /bin/sh
# listoffiles.sh
BASEDIR=$(dirname $0)
echo "" > log/userfiles.log
for i in scripts/*.sh ; do
if [[ -x $i ]] ; then
echo -n "$i " >> log/userfiles.log
echo `date` >> log/userfiles.log
$i 2>&1 >> log/userfiles.log
cd $BASEDIR
fi
done
Optymalizacja interfejsu sieciowego/sieci
*You can also try different values from SpeedGuide.net
Bash:
ifconfig eth0 txqueuelen 50000
ifconfig eth1 txqueuelen 50000
echo 1 > /proc/sys/net/ipv4/tcp_rfc1337
echo 2 > /proc/sys/net/ipv4/tcp_frto
echo 2 > /proc/sys/net/ipv4/tcp_frto_response
echo 1 > /proc/sys/net/ipv4/tcp_mtu_probing
echo 1 > /proc/sys/net/ipv4/tcp_window_scaling
echo 1 > /proc/sys/net/ipv4/tcp_workaround_signed_windows
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 0 > /proc/sys/net/ipv4/tcp_tw_recycle
echo 1 > /proc/sys/net/ipv4/tcp_low_latency
echo 1 > /proc/sys/net/ipv4/tcp_ecn
Ostatnio edytowane: