Mir sind in diesem Forum die Diskussionen über die Verwendung des autorun.sh aufgefallen.
Diese Technik hat für mich den gravierenden Nachteil, dass die so gestarteten Prozesse beim herunterfahren der NAS nicht ordentlich beendet werden.
Vorbemerkung:
ZitatWas mir dabei nicht mehr transparent ist, da bei mir Installiert, ist die Frage ob dafür das QPKG Optware istalliert sein muss ... Ich denke ja ...
Was ist für eigenes Startup/Shutdown zu realisieren?
Nicht sehr viel!
Mit den im Folgenden beschriebenen Schritten und etwas Linux KnowHow ist eine Übertragung auf die eigene QNAP möglich.
Getestet ist es auf meiner QNAP TS-419P.
In den folgenden Schritten wird das vorgehen beschrieben
1. Anmelden über eine SSH Konsole auf der QNAP
2. Bestimmen wo sich das Optware Verzeichnis befindet
cd /etc/init.d
ls -l Optware.sh
lrwxrwxrwx 1 admin administ 40 Sep 15 08:31 Optware.sh -> /share/HDA_DATA/.qpkg/Optware/Optware.sh*
Das Optware Basisverzeichnis ist bei mir also /share/HDA_DATA/.qpkg/Optware/
3. Anlegen von benötigten Verzeichnissen
cd /share/HDA_DATA/.qpkg/Optware/
cd etc
mkdir rcS.d
mkdir rcK.d
(ggf. anlegen von init.d falls nicht vorhanden bei mir ist es vorhanden!: prüfen mit ls init.d anlegen mit mkdir init.d)
4. Wechsel in das init.d Verzeichnis (unter /share/HDA_DATA/.qpkg/Optware/etc )
cd init.d
5. Anlegen eines Start/Stop scriptes (unter /share/HDA_DATA/.qpkg/Optware/etc/init.d )
(Anlegen eines Testscripts mit dem folgenden Aufbau und speichern unter test.sh)
#!/bin/sh## 20100915, AP test.sh own init.d script## Scrip to start / stop testcase "$1" in start) echo "[$1] Starting ..." /sbin/log_tool -a "TEST started" -t 0 -u SYSTEM -m LOCAL ;; stop) echo "[$1] Shutting down ..." /sbin/log_tool -a "TEST shutdown" -t 0 -u SYSTEM -m LOCAL ;; restart) $0 stop $0 start ;; *) echo "Usage: $1 {start|stop|restart}" exit 1esacexit 0
6. Anlegen vom rcS_admin script mit dem folgenden Inhalt (unter /share/HDA_DATA/.qpkg/Optware)
#!/bin/sh# Start all init scripts in /share/HDA_DATA/.qpkg/Optware/etc/rcS.d# executing them in numerical order.## 20100915, AP modify this for own rcS scrips## this version is spezial ! parm1 must be the QPKD_DIR build in Optware.shQPKG_DIR=$1#echo "[rcS_admin] exec own StartScripts in $QPKG_DIR/etc/rcS.d/"for i in $QPKG_DIR/etc/rcS.d/S??* ;do # Ignore dangling symlinks (if any). #[ ! -f "$i" ] && continue echo "[rcS_admin] exec own StartScript $i" case "$i" in *.sh) # Source shell script for speed. ( trap - INT QUIT TSTP set start . $i ) ;; *) # No sh extension, so fork subprocess. $i start ;; esacdone
7. Anlegen vom rcK script mit dem folgenden Inhalt (unter /share/HDA_DATA/.qpkg/Optware/etc/init.d/)
#!/bin/sh# Start all init scripts in /share/HDA_DATA/.qpkg/Optware/etc/rcS.d# executing them in numerical order.## 20100915, AP modify this for own rcS scrips## this version is spezial ! parm1 must be the QPKD_DIR build in Optware.shQPKG_DIR=$1#echo "[rcS_admin] exec own StartScripts in $QPKG_DIR/etc/rcS.d/"for i in $QPKG_DIR/etc/rcS.d/S??* ;do # Ignore dangling symlinks (if any). #[ ! -f "$i" ] && continue echo "[rcS_admin] exec own StartScript $i" case "$i" in *.sh) # Source shell script for speed. ( trap - INT QUIT TSTP set start . $i ) ;; *) # No sh extension, so fork subprocess. $i start ;; esacdone
8. Symbolischen link unter rcS.d anlegen (unter /share/HDA_DATA/.qpkg/Optware/etc/rcS.d/ )
cd ../rcS.d
ln -s ./S10test ../init.d/test.sh
9. Symbolischen link unter rcK.d anlegen (unter /share/HDA_DATA/.qpkg/Optware/etc/rcK.d/ )
cd ../rcK.d
ln -s ./K90test ../init.d/test.sh
10. Modikation des Scriptes Optware.sh unter (unter /share/HDA_DATA/.qpkg/Optware/)
Dieses ist das Optware.sh Script so wie es auf meiner QNAP TS-419P gespeichert ist.
Die Änderungen an dem Script habe ich durch die Bemerkung: "# 20100915, AP" gemarkt.
#!/bin/sh
RETVAL=0
QPKG_NAME="Optware"
_exit()
{
/bin/echo -e "Error: $*"
/bin/echo
exit 1
}
# Determine BASE installation location according to smb.conf
BASE=
publicdir=`/sbin/getcfg Public path -f /etc/config/smb.conf`
if [ ! -z $publicdir ] && [ -d $publicdir ];then
publicdirp1=`/bin/echo $publicdir | /bin/cut -d "/" -f 2`
publicdirp2=`/bin/echo $publicdir | /bin/cut -d "/" -f 3`
publicdirp3=`/bin/echo $publicdir | /bin/cut -d "/" -f 4`
if [ ! -z $publicdirp1 ] && [ ! -z $publicdirp2 ] && [ ! -z $publicdirp3 ]; then
[ -d "/${publicdirp1}/${publicdirp2}/Public" ] && BASE="/${publicdirp1}/${publicdirp2}"
fi
fi
# Determine BASE installation location by checking where the Public folder is.
if [ -z $BASE ]; then
for datadirtest in /share/HDA_DATA /share/HDB_DATA /share/HDC_DATA /share/HDD_DATA /share/MD0_DATA; do
[ -d $datadirtest/Public ] && BASE="/${publicdirp1}/${publicdirp2}"
done
fi
if [ -z $BASE ] ; then
echo "The Public share not found."
_exit 1
fi
QPKG_DIR=${BASE}/.qpkg/Optware
case "$1" in
start)
if [ `/sbin/getcfg ${QPKG_NAME} Enable -u -d FALSE -f /etc/config/qpkg.conf` = UNKNOWN ]; then
/sbin/setcfg ${QPKG_NAME} Enable TRUE -f /etc/config/qpkg.conf
elif [ `/sbin/getcfg ${QPKG_NAME} Enable -u -d FALSE -f /etc/config/qpkg.conf` != TRUE ]; then
_exit "${QPKG_NAME} is disabled."
fi
/bin/echo "Enable Optware/ipkg"
# sym-link $QPKG_DIR to /opt
/bin/rm -rf /opt
/bin/ln -sf $QPKG_DIR /opt
# adding Ipkg apps into system path ...
/bin/cat /etc/profile | /bin/grep "PATH" | /bin/grep "/opt/bin" 1>>/dev/null 2>>/dev/null
[ $? -ne 0 ] && /bin/echo "export PATH=$PATH":/opt/bin:/opt/sbin >> /etc/profile
# 20100915, AP Patch for own rcS
/bin/echo "Exec own ... $QPKG_DIR/etc/init.d/rcS"
$QPKG_DIR/etc/init.d/rcS_admin $QPKG_DIR
;;
stop)
/bin/echo "Disable Optware/ipkg"
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
/bin/sync
/bin/sleep 1
# 20100915, AP Patch for own rcK
/bin/echo "Exec own ... $QPKG_DIR/etc/init.d/rcK"
$QPKG_DIR/etc/init.d/rcK_admin $QPKG_DIR
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit $RETVAL
Alles anzeigen
Die Dateiatribute sollten so aussehen:
-rwxr-xr-x 1 admin administ 707 Sep 15 06:21 ./init.d/rcK_admin
-rwxr-xr-x 1 admin administ 695 Sep 15 06:21 ./init.d/rcS_admin
-rwxr-xr-x 1 admin administ 304 Sep 15 06:39 ./init.d/test.sh
lrwxrwxrwx 1 admin administ 22 Sep 15 08:07 ./rcK.d/K90test -> ../init.d/test.sh
lrwxrwxrwx 1 admin administ 22 Sep 15 08:06 ./rcS.d/S10test -> ../init.d/test.sh
Fazit:
Mit diesen Modifikationen können nun eigene Startup und Shutdown Proceduren eingebunden werden.
Der Vorteil dieser Variante ist, dass bei dem SchutDown die Prozesse sauber beendet werden können und so Fehler(-meldungen) bei dem nächsten Start vermieden werden.