Vorbedingung:
Das QPKG Optware muss installiert sein ...
Was ist für eigenes Startup/Shutdown zu realisieren?
Ich denke 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.
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 test
case "$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 1 esac
exit 0
6. Anlegen vom rcS_admin 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.sh QPKG_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 ;; esac done
7. Anlegen vom rcK_admin 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/rcK.d # executing them in numerical order. # # 20100915, AP modify this for own rcK scrips (kill/shutdown) # # this version is spezial ! parm1 must be the QPKD_DIR build in Optware.sh QPKG_DIR=$1 #echo "[rcK_admin] exec own StopScripts in $QPKG_DIR/etc/rcK.d/"
for i in $QPKG_DIR/etc/rcK.d/K??* ;do
# Ignore dangling symlinks (if any). #[ ! -f "$i" ] && continue
echo "[rcS_admin] exec own StopScript $i" case "$i" in *.sh) # Source shell script for speed. ( trap - INT QUIT TSTP set stop . $i ) ;; *) # No sh extension, so fork subprocess. $i stop ;; esac done
8. Symbolischen link unter rcS.d anlegen (unter /share/HDA_DATA/.qpkg/Optware/etc/rcS.d/ )
cd ../rcS.d ln -s ../init.d/test.sh ./S10test
9. Symbolischen link unter rcK.d anlegen (unter /share/HDA_DATA/.qpkg/Optware/etc/rcK.d/ )
cd ../rcK.d ln -s ../init.d/test.sh ./K90test
10. Modifikation des Scripts 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 so hervorgehoben.
#!/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
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.
Obendrein sind hier, zu dem Zeitpunkt der Aufrufe, die Pfade und Funtionen der Optwareinstallation schon vorhanden.
Falls jemandem noch etwas auffällt ... Bitte bei mir melden!
| 2010-11-09, ap |
Korrektur der ln Parameterreihenfolge für die Erzeugung der symbolischen Links unter rcS.d und rcK.d Danke an Toem! |
| 2010-09-21, ap |
Korrektur der Link Ziele |
|