NAS QNAP – Eseguire script personalizzati all’avvio del sistema usando un dummy package qpkg

Oltre al metodo già spiegato qui esiste un altro modo per eseguire script personalizzati all'avvio di un NAS QNAP.
Per la verità questo metodo e il precedente non sono affatto interscambiabili, anzi, spesso è utile usarli entrambi perché agiscono in due momenti differenti durante l'avvio del nas. Infatti il primo viene chiamato appena terminato il caricamento del sistema operativo, mentre questo avviene successivamente durante il caricamento dei servizi installati tramite pacchetto .qpkg (cioè tramite l'app center dell'interfaccia web del nas).
Questo secondo metodo ha anche la comoda caratteristica di poter definire in quale momento del caricamento dei servizi .qpkg essere eseguito. Vediamo come si fa.

Come anticipato nel titolo questo sistema prevede la creazione di una finta app o serizio QPKG che viene inserito nel file contenente la lista dei pacchetti installati e che a sua volta, quando il sistema lo legge, esegue l'avvio dei servizi rispettando l'ordine in cui sono stati scritti.
Con questa tecnica è quindi possibile eseguire all'avvio un qualsiasi script facendo credere al NAS di avere installato un pacchetto QPKG dummy che possiamo chiamare come vogliamo, ma che per comodità chiameremo autorun.

Ecco come fare

  1. Editare il file /etc/config/qpkg.conf con un editor come ad esempio vim
    vi /etc/config/qpkg.conf
  2. Si noterà che il file è composto da una serie di sezioni intestate da un titolo tra parentesi quadre di questo tipo: [titolo_app]. Posizionarsi appena prima del titolo della sezione del servizio che vogliamo venga eseguito dopo il nostro autorun, oppure andare alla fine del file se vogliamo venga eseguito per ultimo e aggiungere una nuova sezione [autorun] come questa:
    [autorun]
    Name = autorun
    Version = 0.1
    Author = autore_dummy
    Date = 2017-01-01
    Shell = /share/CACHEDEV1_DATA/.qpkg/autorun/autorun.sh
    Install_Path = /share/CACHEDEV1_DATA/.qpkg/autorun
    Enable = TRUE

    Come è facile intuire il pacchetto di istruzioni della sezione autorun non sono altro che un insieme di variabili che configurano il funzionamento del servizio fittizio autorun.
    In altre parole quello che stiamo facendo è imbrogliare il sistema dicendogli di avviare un servizio dummy dal nome autorun il cui file principale di avvio è definito dalla variabile Shell e che si trova installato dove indicato dala variabile Install_Path.
    È chiaro che i passaggi successivi saranno volti a realizzare fisicamente il servizio fittizio.

    Un paio di note importanti:
    • La direttiva Enable = TRUE serve per abilitare o disabilitare l'esecuzione del pacchetto. Questo ci permette di avere anche la libertà di decidere quando attivare o disattivare l'autorun.
    • Possiamo creare il servizio fittizio in qualsiasi punto del nas, ma è chiaro che è meglio stia in una directory non volatile (come sappiamo i nas della QNAP durante la fase di avvio creano un filesystem composto in parte da partizioni ramdrive e in parte da partizioni dei dischi fissi fisici installati) e la miglior candidata è sempre /share/CACHEDEV1_DATA/.
      Qui è presente la directory nascosta .qpkg/ dove stanno tutti i pacchetti installati tramite l'app center dell'interfaccia web e dato che stiamo pur sempre creando un pacchetto qpkg dummy ritengo che questo sia il posto migliore dove metterlo.
  3. Creare la directory /share/CACHEDEV1_DATA/.qpkg/autorun
    mkdir /share/CACHEDEV1_DATA/.qpkg/autorun
  4. Ed ora in questa directory creiamo il servizio dummy, che banalmente sarà un file di testo eseguibile .sh contenente le direttive bash che più ci faranno comodo.
    Quindi creiamo il file autorun.sh ricordandosi di aggiungere nella prima riga la direttiva #!/bin/sh, ed aggiungiamo tutti i comandi che vogliamo vengano eseguiti all'avvio

     vi /share/CACHEDEV1_DATA/.qpkg/autorun/autorun.sh

    L'aspetto che può avere il file è il seguente:

    #!/bin/sh
    ################################
    # COMANDI ESEGUITI ALL'AVVIO
    ################################
    #Qui i comandi

    Salvare e chiudere il file con la sequenza di pulsanti esc :wq invio (se avete usato vim come editor).

  5. Assegnare al file autorun.sh i permessi di esecuzione
    chmod +x /share/CACHEDEV1_DATA/.qpkg/autorun/autorun.sh

Al successivo riavvio il sistema leggerà il file /etc/config/qpkg.conf e quando arriverà alla sezione [autorun] eseguirà il file /share/CACHEDEV1_DATA/.qpkg/autorun/autorun.sh lanciando tutti i comandi ivi indicati.

5 pensieri riguardo “NAS QNAP – Eseguire script personalizzati all’avvio del sistema usando un dummy package qpkg

  • 4 dicembre 2017 in 20:15
    Permalink

    Sembrerà strano ma dopo il riavvio mi trovo Enable = TRUE in FALSE e ovviamente lo script non si avvia.. Ma possibile che non ci sia un metodo “umano” per far partire un perbacco di script!!!

    Risposta
    • 5 dicembre 2017 in 08:31
      Permalink

      Ciao,
      effettivamente QNAP non ha reso molto semplice questa procedura, anzi nelle ultime release l’hanno pure ulteriormente complicata e hanno pure preteso che lo script di avvio dei pacchetti .qpkg funzioni in un certo modo.
      Lo stato del tuo Dummy Package passa da solo a FALSE perché lo script autorun che chiami non risponde come atteso.
      Ti lascio questo mio script che dovrai mettere al posto del file che viene chiamato nella configurazione descritta nell’articolo, in pratica questo è il file /share/CACHEDEV1_DATA/.qpkg/autorun/autorun.sh
      Questo file ora non esegue più direttamente le azioni che devono partire all’avvio, ma le chiama a sua volta.
      Noterai che ha 3 azioni: start, stop e restart. QNAP le pretende tutte.
      Nella fase di start io avvio 2 script: $QPKG_DIR/autorun_boot.sh e $QPKG_DIR/autorun_start.sh
      Con il primo personalizzo la mia shell, mentre il secondo è quello che contiene la sequenza effettiva di comandi che voglio partano all’avvio.
      Ovviamente puoi tranquillamente togliere ogni riferimento al file $QPKG_DIR/autorun_boot.sh, e se vuoi puoi anche non fare un file esterno e mettere tutti i comandi di avvio nella porzione di codice sotto start, ma chiamare uno script esterno per me è più pulito e lo preferisco.
      QNAP vuole anche la presenza di stop, altrimenti quando riavvii il nas va in blocco e devi spegnerlo e riaccenderlo col pulsante.
      Dallo script puoi notare che nell’azione di stop chiamo un altro file $QPKG_DIR/autorun_stop.sh che nel mio caso contiene funzioni che spengono le VPN, ma in generale andrebbe usato per stoppare eventuali servizi avviati con start. Se non ne hai puoi lasciarlo vuoto.
      Usando questo file puoi interagire col pacchetto dummy da te creato direttamente dalla WEBUI, lo troverai infatti elencato assieme agli altri e potrai stopparlo e avviarlo esattamente come ogni altra app installata.

      Ulteriore precisazione.
      Occhio anche alle variabili dichiarate ad inizio file, noterai che fanno riferimento al file di configurazione del dummy package che è stato descritto nell’articolo e al suo contenuto (infatti il comando /sbin/getcfg $QPKG_NAME legge la configurazione del file /etc/config/qpkg.conf).

      Provalo e se hai dubbi fatti risentire.


      #!/bin/sh

      QPKG_NAME="autorun"
      QPKG_CONF=/etc/config/qpkg.conf
      QPKG_DIR=$(/sbin/getcfg $QPKG_NAME Install_Path -f $QPKG_CONF)
      INSTALL_PATH=$(/sbin/getcfg $QPKG_NAME Install_Path -f $QPKG_CONF)
      ENABLED=$(/sbin/getcfg $QPKG_NAME Enable -u -d FALSE -f $QPKG_CONF)

      _exit()
      {
      /bin/echo -e "Error: $*"
      /bin/echo
      exit 1
      }

      case "$1" in
      start)
      if [ "$ENABLED" = "UNKNOWN" ]; then
      /sbin/setcfg ${QPKG_NAME} Enable TRUE -f ${QPKG_CONF}
      elif [ "$ENABLED" != "TRUE" ]; then
      _exit "${QPKG_NAME} is disabled."
      fi

      /bin/echo "Running autorun_start"
      $QPKG_DIR/autorun_boot.sh
      $QPKG_DIR/autorun_start.sh
      ;;

      stop)
      /bin/echo "Running autorun_stop"
      $QPKG_DIR/autorun_stop.sh
      ;;

      restart)
      $0 stop
      $0 start
      ;;

      *)
      echo "Usage: $0 {start|stop|restart}"
      exit 1
      esac

      exit 0

      Risposta
  • 5 dicembre 2017 in 18:07
    Permalink

    Grazie per l’easustiva risposta. Appena ho un paio di minuti(nel week) provo a seguire le tue indicazioni e ti farò sapere! Grazie ancora

    Risposta
    • 5 dicembre 2017 in 18:45
      Permalink

      Notavo oggi che nelle ultime release del loro OS pare finalmente che QNAP abbia introdotto la possibilità di eseguire script personali all’avvio anche senza l’ausilio di questi “trucchetti”.
      Dai un’occhiata a questa opzione da attivare:
      Pannello di Controllo > Sistema > Hardware > [Tab Generale] > Esegui processi definiti dall’utente durante l’avvio (Visualizza autorun.sh)
      Non ho ancora studiato nel dettaglio come funziona, ma potrebbe finlamente essere la risposta definitiva al problema di eseguire script customizzati all’avvio.

      Saluti

      Risposta
  • 8 dicembre 2017 in 09:10
    Permalink

    Ho appena guardato.. Sembrerebbe proprio quello che mancava e che risolverebbe ogni cosa.. se non che se visualizzo l’sh c’è uno script incomprensibile:
    #!/bin/sh
    fa${EwiHCbahrp}lse${CmaFXavLBWAPpOT}${ukwcPkxCCxRbywZ}
    ${JgwifFOmYo}ty$GquBABxOIWR$”pe
    $’\x74’${XEeNonJhjvbC}est${xVwzqqviP}
    ${vQQVQLftPfGuEjA}tru$BPFlkFHxJBmq$””e
    t${FmYLIZefjqFpUh}${BzPNfLuEN}ype${wpoBsoOvqQKk}
    tes${XTHAxvVNqHXVEh}t
    fa${SWNUJWXt}ls${BrqOQswKQF}e
    $qSLyyZlDsGee$”fa${qoJyEqTvfOzMbUY}lse
    typ${nPoTVBUl}e${MdvwdFi}${vARqK}
    tr${hLrJgXuXfpKydQQ}ue
    ty${xZrcYn}p${OyckDsa}e
    ty${rNoposifo}p${oIYQ}e
    te${NEgefQksHgRxZSt}st
    t${JTFyQlvvhvjMY}ype${jEYjOnC}

    Risposta

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

tredici − 1 =