Easy Audio Setup: installazione guidata di sistemi audio HQ

Pagina 20 di 44
prima
... 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ... ultimo
Visualizzazione dei risultati da 191 a 200 su 433
  1. #191
    pebibyte L'avatar di marcoc1712
    Registrato
    Jan 2013
    Messaggi
    5,254
    configurazione

    Predefinito

    Originariamente inviato da antonellocaroli
    Di quale script parli?

    init.d/squeezelite?

    se ti riferisce a questo...si é sempre consigliato sudo service squeezelite restart che se c´é un errore di sintassi abortisce....

    l´errore di sintassi nasce solo se si pasticcia con il file di configurazione...se si lascia come lo imposta lo script di Paolo...non ci sono errori...
    quindi non dovrebbe succedere a nessuno...credo
    a. mi riuslta sia lo stesso script, comunque io uso service squeezelite restart da su, al momento e NON ABORTISCE, che sarebbe forse preferibile.

    b. No, se metti un nome di file sbagliato o un altro parametro sbagliato nello script, hai lo stesso risultato.

    c. Mi risulta che etc/default sia lì per essere editato manualmente, anche easetup lo cita.

    Un qualsiasi pezzo di software è pensato per fare determinate cose in determinate circostanze, ma non basta. Almeno il 50% del costo di realizzazione del singolo componente è nel gestire le 'eccezioni', cioè le situazioni impreviste e nel'organizzare ed eseguire i relativi test. Dare per scontato che l'input sia esattamente nel formato che ci si aspetta e privo di errori è un errore grave, ammissibile in un prototipo alfa test, ma non in un software stabile distribuito in produzione.
    Ciao, Marco.

    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
    — E. F. Schumacher (mis-attributed to A. Einstein)
    ________________________________________________________________________________
    Autore della patch R2 per Squeezelite e del plugin C-3PO. note libere
    Logitech media Server 7.9 > miniPc + squeezelite-R2 / SB+ > "Lu Scalmentu" NOS R2R DAC by TubeOne/ AudioResearch DAC 1-20 >
    Klimo Merlino Gold TPS > DIS Interconnect > Kent Gold > Reference > Monitor Audio Studio 20 SE

  2. #192
    tebibyte
    Registrato
    Aug 2011
    Età
    50
    Messaggi
    2,928
    configurazione

    Predefinito

    Il fatto che si puó editare é giusto...ma se lo incasini....

    non so a cosa fai riferimento...

    comunque una cosa forse non é chiara...

    Lo script di Paolo non é un software...lo script una volta lanciato e fatto quello che deve fare non interagisce piú in nessun modo ne con l´utente ne con il S.O.

    LO script non fa altro che automatizzare alcune operazione che altrimenti devi fare a mano:

    Ottimizazzioni di alcune parti del sistema operativo
    installare alcune utility
    scaricare e installare squeezelite/LMS
    editare il file di configurazione di squeezelite (in base alle risposte che dai durante l´esecuzione)

    finite ste operazioni é morto!!!

    con il resto non c entra niente...sono parti integranti di linux...init.d, service, ecc

  3. #193
    pebibyte L'avatar di marcoc1712
    Registrato
    Jan 2013
    Messaggi
    5,254
    configurazione

    Predefinito

    Originariamente inviato da antonellocaroli
    Il fatto che si puó editare é giusto...ma se lo incasini....

    non so a cosa fai riferimento...

    comunque una cosa forse non é chiara...

    Lo script di Paolo non é un software...lo script una volta lanciato e fatto quello che deve fare non interagisce piú in nessun modo ne con l´utente ne con il S.O.

    LO script non fa altro che automatizzare alcune operazione che altrimenti devi fare a mano:

    Ottimizazzioni di alcune parti del sistema operativo
    installare alcune utility
    scaricare e installare squeezelite/LMS
    editare il file di configurazione di squeezelite (in base alle risposte che dai durante l´esecuzione)

    finite ste operazioni é morto!!!

    con il resto non c entra niente...sono parti integranti di linux...init.d, service, ecc
    Io parlo dello script /etc/init.d/squeezelite, non di easetup, che in questo caso non centra nulla (se non che lo installa).

    Se io incasino il file di input è giusto che il programma si fermi, meglio se mi avvisa, ma proseguire come se nulla fosse è sbagliato.

    Esame di informatica 1:

    il candidato presenti un'applicazione per l'inserimento di alcuni dati.
    il prof si avvicina al terminale e batte le mani sulla tastiera. Se il programma emette gli opportuni messaggi di errore, 30, se abortisce 18 se continua l'esecuzione bocciato.

    E' software qualsiasi file che contenga una procedura destinata ad essere eseguita da un elaboratore, non conta il linguaggio usato
    Ciao, Marco.

    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
    — E. F. Schumacher (mis-attributed to A. Einstein)
    ________________________________________________________________________________
    Autore della patch R2 per Squeezelite e del plugin C-3PO. note libere
    Logitech media Server 7.9 > miniPc + squeezelite-R2 / SB+ > "Lu Scalmentu" NOS R2R DAC by TubeOne/ AudioResearch DAC 1-20 >
    Klimo Merlino Gold TPS > DIS Interconnect > Kent Gold > Reference > Monitor Audio Studio 20 SE

  4. #194
    tebibyte L'avatar di bigtube
    Registrato
    May 2012
    Località
    cagliari
    Età
    69
    Messaggi
    2,258
    configurazione

    Predefinito

    Originariamente inviato da marcoc1712
    Aspetta almeno di aver finito il mio dac, saràanche fuori moda ed obsoleto, ma a me interessa!
    E chi sta parlando del tuo DAC.....e nemmeno di cio' che realizzo per me stesso....in queste cose non devo convincere nessuno tranne me.

    Ancora mi chiedo cosa ci sia di difficile a installarsi su una pendrive Debian o Voyage e poi far partire l'installatore easetup.sh.....se per giunta
    puoi ottenere una prestazione da primato assoluto e non doversi sorbire le amenita' propietarie a senso unico facendo piu' o meno le stesse cose,
    massacrando il senso dell'open source.....ahhh gia' ma se è propietario è meglio....fa' tutto lui....forse....forse assemblando cose create da altri per il bene di tutti
    di cui ci si appropria antropoligicamente parlando
    player1:thin client+voyage - player2:futros450+Debian > Usb Transport: I2soverUSB + DAC (6x1704+I/V a tubi) - Attenuatore passivo Lightspeed
    Ampli finale: OTL 6C33 - MyRef Fremen Ed. - Diff.: Diapason Adamantes II - Guida LMS+Squeezelite - B

  5. #195
    tebibyte L'avatar di UnixMan
    Registrato
    Sep 2013
    Messaggi
    2,529
    configurazione

    Predefinito

    Originariamente inviato da marcoc1712
    a. mi riuslta sia lo stesso script, comunque io uso service squeezelite restart da su, al momento e NON ABORTISCE, che sarebbe forse preferibile.
    non dipende dall'Init script (che è banale) ma, casomai, proprio da squeezelite.

    Lo script in questione è questo, ed è banale:
    codice:
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          squeezelite
    # Required-Start:    $network $remote_fs
    # Required-Stop:     $remote_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Lightweight headless Squeezebox emulator
    # Description:       Lightweight headless streaming audio player for Logitech's
    #                    Squeezebox audio server (including R2 C-3PO support mod)
    ### END INIT INFO
    
    # Author: Chris Boot <debian@bootc.net>
    
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    DESC="Squeezebox client"
    NAME=squeezelite
    DAEMON=/usr/bin/${NAME}-R2
    PIDFILE=/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    
    # Exit if the package is not installed
    [ -x "$DAEMON" ] || exit 0
    
    # Read configuration variable file if it is present
    [ -r /etc/default/$NAME ] && . /etc/default/$NAME
    
    # Load the VERBOSE setting and other rcS variables
    . /lib/init/vars.sh
    
    # Define LSB log_* functions.
    . /lib/lsb/init-functions
    
    #
    # Function that starts the daemon/service
    #
    do_start()
    {
            DAEMON_ARGS=""
    
            # add squeezelite name if set
            if [ -n "$SL_NAME" ]; then
                    DAEMON_ARGS="${DAEMON_ARGS} -n ${SL_NAME}"
            fi
    
            # add souncard setting if set
            if [ -n "$SL_SOUNDCARD" ]; then
                    DAEMON_ARGS="${DAEMON_ARGS} -o ${SL_SOUNDCARD}"
            fi
    
            # add squeezebox server ip address if set
            if [ -n "$SB_SERVER_IP" ]; then
                    DAEMON_ARGS="${DAEMON_ARGS} -s ${SB_SERVER_IP}"
            fi
    
            # add any other options given by the user
            if [ -n "$SB_EXTRA_ARGS" ]; then
                    DAEMON_ARGS="${DAEMON_ARGS} ${SB_EXTRA_ARGS}"
            fi
    
            # Return
            #   0 if daemon has been started
            #   1 if daemon was already running
            #   2 if daemon could not be started
            start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \
                    --test > /dev/null || return 1
            start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \
                    --background --make-pidfile -- $DAEMON_ARGS || return 2
    }
    
    #
    # Function that stops the daemon/service
    #
    do_stop()
    {
            # Return
            #   0 if daemon has been stopped
            #   1 if daemon was already stopped
            #   2 if daemon could not be stopped
            #   other if a failure occurred
            start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
                    --pidfile $PIDFILE --exec $DAEMON
    }
    
    case "$1" in
      start)
            [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
            do_start; RET=$?
            case $RET in
                    0|1) [ "$VERBOSE" != no ] && log_end_msg 0; exit 0 ;;
                    *) [ "$VERBOSE" != no ] && log_end_msg 1; exit 1 ;;
            esac
            ;;
      stop)
            [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
            do_stop; RET=$?
            case $RET in
                    0|1) [ "$VERBOSE" != no ] && log_end_msg 0; exit 0 ;;
                    *) [ "$VERBOSE" != no ] && log_end_msg 1; exit 1 ;;
            esac
            ;;
      status)
            status_of_proc "$DAEMON" "$NAME"
            ;;
      restart|force-reload)
            log_daemon_msg "Restarting $DESC" "$NAME"
            do_stop; RET=$?
            case $RET in
              0|1)
                    do_start; RET=$?
                    case $RET in
                            0) log_end_msg 0; exit 0 ;;
                            1) log_end_msg 1; exit 1 ;; # Old process is still running
                            *) log_end_msg 1; exit 1 ;; # Failed to start
                    esac
                    ;;
              *)
                    # Failed to stop
                    log_end_msg 1; exit 1
                    ;;
            esac
            ;;
      *)
            echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
            exit 3
            ;;
    esac
    come puoi vedere, non fa altro che "assemblare" la riga di comando (mettendo in fila i contenuti delle varie variabili) ed eseguirla. L'unica cosa che verifica è se le varie variabili sono definite o meno. Se lo sono ne aggiunge il contenuto alla riga di comando, altrimenti passa oltre. Non fa alcun controllo sulla correttezza dei parametri: non è compito suo.

    È l'eseguibile di squeezelite che fa il parse della propria riga di comando; è a quello che spetta il compito di rilevare eventuali inconsistenze e, nel caso, uscire con un errore (che poi verrebbe rilevato dallo script).

    È altresì evidente che quello script non può (ri)avviare squeezelite senza parametri in caso di errori nel file di configurazione.

    Apparentemente è proprio lo stesso squeezelite che, almeno in quel caso, interpreta male la sua riga di comando e parte lo stesso (con parametri sbagliati). A meno che... non è che per caso hai qualche residuo di prove precedenti? Tipo che ti sei dimenticato di togliere un comando di avvio che avevi inserito a mano in /etc/rc.local o che so io?
    Ultima modifica di UnixMan : 15-02-2016 a 19:16
    Ciao, Paolo.

    «Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»

  6. #196
    pebibyte L'avatar di marcoc1712
    Registrato
    Jan 2013
    Messaggi
    5,254
    configurazione

    Predefinito

    Originariamente inviato da UnixMan
    non dipende dall'Init script (che è banale) ma, casomai, proprio da squeezelite.

    Lo script in questione è questo, ed è banale:
    codice:
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          squeezelite
    # Required-Start:    $network $remote_fs
    # Required-Stop:     $remote_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Lightweight headless Squeezebox emulator
    # Description:       Lightweight headless streaming audio player for Logitech's
    #                    Squeezebox audio server (including R2 C-3PO support mod)
    ### END INIT INFO
    
    # Author: Chris Boot <debian@bootc.net>
    
    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    DESC="Squeezebox client"
    NAME=squeezelite
    DAEMON=/usr/bin/${NAME}-R2
    PIDFILE=/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    
    # Exit if the package is not installed
    [ -x "$DAEMON" ] || exit 0
    
    # Read configuration variable file if it is present
    [ -r /etc/default/$NAME ] && . /etc/default/$NAME
    
    # Load the VERBOSE setting and other rcS variables
    . /lib/init/vars.sh
    
    # Define LSB log_* functions.
    . /lib/lsb/init-functions
    
    #
    # Function that starts the daemon/service
    #
    do_start()
    {
            DAEMON_ARGS=""
    
            # add squeezelite name if set
            if [ -n "$SL_NAME" ]; then
                    DAEMON_ARGS="${DAEMON_ARGS} -n ${SL_NAME}"
            fi
    
            # add souncard setting if set
            if [ -n "$SL_SOUNDCARD" ]; then
                    DAEMON_ARGS="${DAEMON_ARGS} -o ${SL_SOUNDCARD}"
            fi
    
            # add squeezebox server ip address if set
            if [ -n "$SB_SERVER_IP" ]; then
                    DAEMON_ARGS="${DAEMON_ARGS} -s ${SB_SERVER_IP}"
            fi
    
            # add any other options given by the user
            if [ -n "$SB_EXTRA_ARGS" ]; then
                    DAEMON_ARGS="${DAEMON_ARGS} ${SB_EXTRA_ARGS}"
            fi
    
            # Return
            #   0 if daemon has been started
            #   1 if daemon was already running
            #   2 if daemon could not be started
            start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \
                    --test > /dev/null || return 1
            start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON \
                    --background --make-pidfile -- $DAEMON_ARGS || return 2
    }
    
    #
    # Function that stops the daemon/service
    #
    do_stop()
    {
            # Return
            #   0 if daemon has been stopped
            #   1 if daemon was already stopped
            #   2 if daemon could not be stopped
            #   other if a failure occurred
            start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
                    --pidfile $PIDFILE --exec $DAEMON
    }
    
    case "$1" in
      start)
            [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
            do_start; RET=$?
            case $RET in
                    0|1) [ "$VERBOSE" != no ] && log_end_msg 0; exit 0 ;;
                    *) [ "$VERBOSE" != no ] && log_end_msg 1; exit 1 ;;
            esac
            ;;
      stop)
            [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
            do_stop; RET=$?
            case $RET in
                    0|1) [ "$VERBOSE" != no ] && log_end_msg 0; exit 0 ;;
                    *) [ "$VERBOSE" != no ] && log_end_msg 1; exit 1 ;;
            esac
            ;;
      status)
            status_of_proc "$DAEMON" "$NAME"
            ;;
      restart|force-reload)
            log_daemon_msg "Restarting $DESC" "$NAME"
            do_stop; RET=$?
            case $RET in
              0|1)
                    do_start; RET=$?
                    case $RET in
                            0) log_end_msg 0; exit 0 ;;
                            1) log_end_msg 1; exit 1 ;; # Old process is still running
                            *) log_end_msg 1; exit 1 ;; # Failed to start
                    esac
                    ;;
              *)
                    # Failed to stop
                    log_end_msg 1; exit 1
                    ;;
            esac
            ;;
      *)
            echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
            exit 3
            ;;
    esac
    come puoi vedere, non fa altro che "assemblare" la riga di comando (mettendo in fila i contenuti delle varie variabili) ed eseguirla. L'unica cosa che verifica è se le varie variabili sono definite o meno. Se lo sono ne aggiunge il contenuto alla riga di comando, altrimenti passa oltre. Non fa alcun controllo sulla correttezza dei parametri: non è compito suo.

    È l'eseguibile di squeezelite che fa il parse della propria riga di comando; è a quello che spetta il compito di rilevare eventuali inconsistenze e, nel caso, uscire con un errore (che poi verrebbe rilevato dallo script).

    È altresì evidente che quello script non può (ri)avviare squeezelite senza parametri in caso di errori nel file di configurazione.

    Apparentemente è proprio lo stesso squeezelite che, almeno in quel caso, interpreta male la sua riga di comando e parte lo stesso (con parametri sbagliati). A meno che... non è che per caso hai qualche residuo di prove precedenti? Tipo che ti sei dimenticato di togliere un comando di avvio che avevi inserito a mano in /etc/rc.local o che so io?
    No, lo script 'prova' a leggere le variabili, se c'è un errore (non di contenuto applicativo, ma di sintassi, ovvio) le scarta e procede senza considerarle. Questo è l'errore.

    Nessuno chiede allo script di interpretare valori applicativi, ma solo che per qualsiasi motivo non riesce ad interpretare quanto legge lo segnali invece di considerarlo nullo e proseguire.

    L'errore nel merito era mio, che scrivevo male la riga (problema di quote nei files) , ma me ne sono accorto solo andando a vedere nelle informazioni di processo come era stato lanciato squeezelite, un bella segnalazione del tipo ERROR invalid Option text o simile avrebbe aiutato e non ne staremmo nemmeno a discutere.

    Quanto scrivi su squeezelite o altro non centra nulla, a squeezelite non è mai arrivata la riga sbagliata, è stato lanciato senza riga... questo è il punto!
    Ciao, Marco.

    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
    — E. F. Schumacher (mis-attributed to A. Einstein)
    ________________________________________________________________________________
    Autore della patch R2 per Squeezelite e del plugin C-3PO. note libere
    Logitech media Server 7.9 > miniPc + squeezelite-R2 / SB+ > "Lu Scalmentu" NOS R2R DAC by TubeOne/ AudioResearch DAC 1-20 >
    Klimo Merlino Gold TPS > DIS Interconnect > Kent Gold > Reference > Monitor Audio Studio 20 SE

  7. #197
    pebibyte L'avatar di marcoc1712
    Registrato
    Jan 2013
    Messaggi
    5,254
    configurazione

    Predefinito

    Spulciando in vecchi THD sul forum squeezebox, ho trovato questo:

    HOWTO: Install squeezelite for logitech media server on Debian Squeeze as a service.

    Usa una versione diversa dello script init.d, che comprente la possibilità di farlo eseguire con user specifico diverso da root, il che eliminerebbe buona parte di problemi riscontrati con la web gui ed a mio avviso sarebbe anche più corretto in generale. Certo, bisogna poi configurare correttamente i diritti di accesso alle risorse per l'utente in oggetto, che potrebbe essere lo stesso 'impersonato' dal web server...
    Ultima modifica di marcoc1712 : 16-02-2016 a 19:35
    Ciao, Marco.

    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
    — E. F. Schumacher (mis-attributed to A. Einstein)
    ________________________________________________________________________________
    Autore della patch R2 per Squeezelite e del plugin C-3PO. note libere
    Logitech media Server 7.9 > miniPc + squeezelite-R2 / SB+ > "Lu Scalmentu" NOS R2R DAC by TubeOne/ AudioResearch DAC 1-20 >
    Klimo Merlino Gold TPS > DIS Interconnect > Kent Gold > Reference > Monitor Audio Studio 20 SE

  8. #198
    gibibyte L'avatar di DacPassion
    Registrato
    Jul 2014
    Messaggi
    1,250

    Predefinito

    Mi chiedevo: sarebbe facilmente implementabile per la macchina lato player il boot da ram?
    Oltre alla curiosità di verificare se porti miglioramenti sul suono trovo "simpatica" la possibilità di poter spegnere bruscamente il tutto togliendo di colpo l'alimentazione ...magari in vista di una implementazione in un dac (anche se con più telai) con unico pulsante di accensione o usando una sorta di trigger
    Clearaudio Emotion + Satisfy + Grado Gold1 > Phono D3A DIY
    Futro S450 + Daphile / Amanero + Buffalo 2 (trident) uscita a TU Cinemag 15/15B DIY / Jlsounds + Lector Digicode TDA1541 S1
    Monoblocchi D3A 2A3 (electrolytich free!!) DIY / Coral Beta8 in BLH DIY

  9. #199
    tebibyte L'avatar di UnixMan
    Registrato
    Sep 2013
    Messaggi
    2,529
    configurazione

    Predefinito

    Originariamente inviato da marcoc1712
    No, lo script 'prova' a leggere le variabili, se c'è un errore (non di contenuto applicativo, ma di sintassi, ovvio) le scarta e procede senza considerarle. Questo è l'errore.
    Il file di configurazione è a tutti gli effetti uno shell script di per sé stesso, che viene "incluso" dallo script principale con il comando "source". Cosa che è perfettamente equivalente a copiare il contenuto del file di configurazione direttamente all'interno dell'Init script. Ovvio che se introduci un errore di sintassi (della shell) ottieni risultati imprevisti (ed imprevedibili).

    Questo non è nulla di "strano" o di specifico per il caso di squeezelite: è il metodo standard con cui vengono gestiti quel tipo di files di configurazione, ed è adottato pressoché universalmente da tutti i servizi che ne hanno bisogno.

    Se c'è un errore grossolano nel file di configurazione... è un problema dell'amministratore di sistema, non dello script: “chi è causa del suo mal, pianga se stesso”.

    È parte integrante della filosofia stessa di Unix: il sistema presuppone che l'utente, ed ancor più l'amministratore di sistema, sappia sempre esattamente ciò che fa ed agisca quindi con prudenza, attenzione e cognizione di causa. Non è previsto che il sistema faccia nulla che possa limitarne la libertà di azione o imporre vincoli o controlli superflui. Neanche per tentare di impedirgli di fare stupidaggini!

    Ad es., in una riga di quel file "di configurazione" potresti anche scriverci "rm -rf /" e quel comando verrebbe eseguito senza battere ciglio. Con i privilegi di root. Azzerando in un sol colpo l'intero sistema e quant'altro conteneva!

    Potresti pensare che ciò sia stupido, ma non lo è affatto. Tutt'altro. Perché ti offre la massima libertà di azione, permettendoti di fare qualsiasi cosa tu abbia necessità di fare. Incluso cose nuove e completamente diverse da quelle previste o immaginate in precedenza. Cosa che potrebbe risultare molto più difficile se non impossibile fare se tutto fosse già stato preordinato e vincolato secondo quanto previsto da chi ha creato il sistema (o un particolare pezzo del sistema).

    Per dire, anziché limitarsi ad introdurre una banale configurazione "statica", definendo a priori le variabili previste, in quel "file di configurazione" potresti anche metterci invece tutto il codice necessario per identificare la scheda audio e quant'altro necessario e definire tali variabili automaticamente, in modo dinamico (ad es. banalmente per cambiare automaticamente configurazione se è collegato il dispositivo X piuttosto che quello Y). Oppure eseguire particolari operazioni preliminari, ad es. inizializzare o caricare il firmware di un dispositivo audio che non verrebbe gestito diversamente, ecc. Qualunque cosa tu voglia che sia eseguito ogni qual volta viene chiamato quel particolare Init script. Non ci sono limiti a ciò che puoi fare.

    Il tutto senza la benché minima modifica al setup standard, quindi senza avere problemi in caso di aggiornamento di quel pacchetto (o dell'intero sistema), ecc.

    Originariamente inviato da marcoc1712
    Nessuno chiede allo script di interpretare valori applicativi, ma solo che per qualsiasi motivo non riesce ad interpretare quanto legge lo segnali invece di considerarlo nullo e proseguire.
    non è che "lo considera nullo": se c'è un errore di sintassi (di shell) nella definizione della variabile è proprio quella variabile che viene definita con un valore diverso da quello che si sarebbe voluto o che non viene definita affatto. In generale lo script "chiamante" non ha modo di sapere se c'è un errore.

    L'unica cosa che si potrebbe fare è cercare di "intercettare" eventuali errori grossolani dicendo alla shell di reagire in qualche modo se un qualsiasi comando (all'interno del file di configurazione) ritorna un exit status diverso da zero.

    Ad es. si potrebbe aggiungere "set -e" subito prima di fare il source del file di configurazione (e poi disabilitare nuovamente tale opzione con "set +e" subito dopo). In questo modo in caso di errori lo script esce immediatamente ed il servizio non viene avviato.

    Per azioni "più complicate" (come far scrivere un messaggio di errore) si potrebbe invece fare qualcosa del genere:
    codice:
    # this will trap any errors or commands with non-zero exit status by calling function catch_errors()
    trap catch_errors ERR;
    
    #
    # ... do something
    #  
    
    function catch_errors() {
       #
       # do whatever on errors ...
       #
       echo "script aborted, because of errors";
       exit 1;
    }
    Ma non basterebbe. In qualche caso potrebbe anche capitare che l'errore sintattico sia tale per cui la shell non rileva alcun errore e la variabile viene effettivamente definita, ma è "vuota". Ad es., poni che nel file di configurazione ci sia scritto qualcosa del genere:
    codice:
    SB_EXTRA_ARGS= #"-h -C 1 -a 100:3:$bit_depth:1 -b 65536:65536 -r $ratesRange -u vIE:32::64:98"
    c'è più di un errore evidente, ma per la shell va tutto bene: dal suo punto di vista si tratta di una sequenza di DUE cose distinte: la dichiarazione della variabile $SL_SOUNDCARD (cui è assegnato un valore nullo, "empty string") seguita da un commento. Cosa perfettamente lecita. Ergo nessun errore rilevato, e variabile definita (ma vuota). Squeezelite verrebbe avviato senza alcun parametro aggiuntivo anche in presenza dei check di cui sopra.

    Dici tu: OK, basta aggiungere un altro check: non limitiamoci a verificare che la variabile sia definita, ma controlliamo anche che "non sia vuota". Sorvoliamo sul fatto che questo (così come il resto...) violerebbe tutte le convenzioni e vediamo cosa succederebbe in un caso appena diverso, questo:
    codice:
    SB_EXTRA_ARGS=#"-h -C 1 -a 100:3:$bit_depth:1 -b 65536:65536 -r $ratesRange -u vIE:32::64:98"
    notato la differenza? è uguale a prima, solo che adesso non c'è nessuno spazio tra '=' e '#'. Anche in questo caso, per la shell va tutto bene: non ci sono errori, e la variabile viene definita. Con quale valore? Ovviamente, questo:
    codice:
    #-h -C 1 -a 200:6::1 -b 65536:65536 -r -u vIE:32::64:98
    ora questa variabile verrà utilizzata per costruire la riga di comando di squeezelite, che sarà qualcosa del genere:
    codice:
    /usr/bin/squeezelite [altre_opzioni] #-h -C 1 -a 200:6::1 -b 65536:65536 -r -u vIE:32::64:98
    e cosa succede quando viene eseguita? ovviamente, che tutto ciò che segue '#' viene considerato un commento e quindi ignorato (ed ancora una volta SL verrebbe avviato ugualmente, senza opzioni e senza errori).

    In definitiva avremmo aggiunto un bel po' di complicazioni e di codice superfluo, deviato dalle convenzioni, introdotto innumerevoli limitazioni e vincoli non necessari a ciò che si può fare nel file "di configurazione" e, nonostante tutto, siamo ancora punto e a capo: non abbiamo risolto il (tuo) problema.

    D'altro canto, nulla di nuovo sotto al sole. Idiot proof systems cannot be made: Nothing is foolproof to a sufficiently talented fool.

    Per giunta, mai dimenticare il principio di Shaw: “Build a system that even a fool can use, and only a fool will want to use it”.

    Qual è allora la soluzione? KISS. Lasciare che le cose siano semplici! Non cercare di "riparare" ciò che non è rotto. Non cambiare ciò che è stato fatto e funziona bene fin dal 1970 o giù di lì. Imparare invece a seguire le regole del gioco.

    Fare sempre una sola modifica alla volta. Prestare attenzione a ciò che si fa. Verificare ciò che si è fatto. Se ciò nonostante si ottiene un risultato diverso da quello atteso, dare per scontato che si è commesso un errore. Il sistema ha sempre ragione: noi sbagliamo, lui no. Se abbiamo seguito la prima regola e quindi modificato una sola cosa, sappiamo già esattamente dove guardare per trovarlo.

    Originariamente inviato da marcoc1712
    Spulciando in vecchi THD sul forum squeezebox, ho trovato questo:

    HOWTO: Install squeezelite for logitech media server on Debian Squeeze as a service.

    Usa una versione diversa dello script init.d, che comprente la possibilità di farlo eseguire con user specifico diverso da root, il che eliminerebbe buona parte di problemi riscontrati con la web gui ed a mio avviso sarebbe anche più corretto in generale.
    ad essere eseguito da un utente diverso è solo il processo di squeezelite avviato dall'Init script. Ma l'Init script stesso devi sempre (ed anzi a maggior ragione) eseguirlo come root!

    Comunque, come detto questa è una cosa che ho in mente di fare per una prossima versione dei pacchetti (ma non è così banale: non basta aggiungere due righe all'Init script, bisogna anche prevedere la creazione/eliminazione dell'utente quando si installa/rimuove il pacchetto, gestire i permessi di files e directories coninvolte, ecc... altrimenti lo avrei già fatto fin dal principio).

    Per giunta, l'init script semplificato indicato in quel post non prevede l'uso di un file di configurazione "esterno": per cambiare la configurazione dovresti modificare direttamente lo script stesso! Il che significa che, se aggiorni il pacchetto (installi una versione aggiornata), l'Init script viene sovrascritto e ti perdi la configurazione. Per chi eventualmente usi "falcon" forse potrebbe anche essere un problema minore, ma per tutti gli altri è -come minimo- una bella seccatura.

    Originariamente inviato da DacPassion
    Mi chiedevo: sarebbe facilmente implementabile per la macchina lato player il boot da ram?
    fare il "boot da ram" mi pare cosa alquanto improbabile...

    ...magari volevi dire "caricare l'intero sistema in ram" e lavorare lì, senza accedere ai dischi.

    Cosa che senza dubbio si può fare, sia partendo da un file-system (o una "immagine") su un disco locale che facendo il boot da rete (sistema "diskless", completamente privo di memoria di massa locale). Di soluzioni del genere ce ne sono già a bizzeffe; per non dover reinventare la ruota basta seguire le orme di chi lo ha già fatto. Vedi ad es. il link che avevo postato tempo addietro (in altro topic, mi pare), dove si parla di un modo per includere un intero sistema all'interno del "Init RAM disk" del kernel.

    Oppure, più banalmente, basarsi su uno dei sistemi simili già esistenti, vedi ad es.: List of Linux distributions that run from RAM

    Originariamente inviato da DacPassion
    ...magari in vista di una implementazione in un dac (anche se con più telai) con unico pulsante di accensione o usando una sorta di trigger
    per fare questo non è necessario evitare lo shutdown del sistema e spegnere brutalmente tutto. Basta "rivoltare" il problema, utilizzando il pulsante di accensione/spegnimento del sistema e le relative linee di controllo sulla M/B per comandare l'alimentazione generale. Come in un comune PC ben configurato: quando pigi il bottone si accende tutto, quando lo pigi di nuovo parte lo shutdown. Che alla fine spegne tutto.
    Ultima modifica di UnixMan : 17-02-2016 a 18:58
    Ciao, Paolo.

    «Se tu hai una mela, e io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee.»

  10. #200
    pebibyte L'avatar di marcoc1712
    Registrato
    Jan 2013
    Messaggi
    5,254
    configurazione

    Predefinito

    Originariamente inviato da UnixMan
    Il file di configurazione è a tutti gli effetti uno shell script di per sé stesso, che viene "incluso" dallo script principale con il comando "source". Cosa che è perfettamente equivalente a copiare il contenuto del file di configurazione direttamente all'interno dell'Init script. Ovvio che se introduci un errore di sintassi (della shell) ottieni risultati imprevisti (ed imprevedibili).

    Questo non è nulla di "strano" o di specifico per il caso di squeezelite: è il metodo standard con cui vengono gestiti quel tipo di files di configurazione, ed è adottato pressoché universalmente da tutti i servizi che ne hanno bisogno.

    Se c'è un errore grossolano nel file di configurazione... è un problema dell'amministratore di sistema, non dello script: “chi è causa del suo mal, pianga se stesso”.

    È parte integrante della filosofia stessa di Unix: il sistema presuppone che l'utente, ed ancor più l'amministratore di sistema, sappia sempre esattamente ciò che fa ed agisca quindi con prudenza, attenzione e cognizione di causa. Non è previsto che il sistema faccia nulla che possa limitarne la libertà di azione o imporre vincoli o controlli superflui. Neanche per tentare di impedirgli di fare stupidaggini!

    Ad es., in una riga di quel file "di configurazione" potresti anche scriverci "rm -rf /" e quel comando verrebbe eseguito senza battere ciglio. Con i privilegi di root. Azzerando in un sol colpo l'intero sistema e quant'altro conteneva!

    Potresti pensare che ciò sia stupido, ma non lo è affatto. Tutt'altro. Perché ti offre la massima libertà di azione, permettendoti di fare qualsiasi cosa tu abbia necessità di fare. Incluso cose nuove e completamente diverse da quelle previste o immaginate in precedenza. Cosa che potrebbe risultare molto più difficile se non impossibile fare se tutto fosse già stato preordinato e vincolato secondo quanto previsto da chi ha creato il sistema (o un particolare pezzo del sistema).

    Per dire, anziché limitarsi ad introdurre una banale configurazione "statica", definendo a priori le variabili previste, in quel "file di configurazione" potresti anche metterci invece tutto il codice necessario per identificare la scheda audio e quant'altro necessario e definire tali variabili automaticamente, in modo dinamico (ad es. banalmente per cambiare automaticamente configurazione se è collegato il dispositivo X piuttosto che quello Y). Oppure eseguire particolari operazioni preliminari, ad es. inizializzare o caricare il firmware di un dispositivo audio che non verrebbe gestito diversamente, ecc. Qualunque cosa tu voglia che sia eseguito ogni qual volta viene chiamato quel particolare Init script. Non ci sono limiti a ciò che puoi fare.

    Il tutto senza la benché minima modifica al setup standard, quindi senza avere problemi in caso di aggiornamento di quel pacchetto (o dell'intero sistema), ecc.


    non è che "lo considera nullo": se c'è un errore di sintassi (di shell) nella definizione della variabile è proprio quella variabile che viene definita "male" o non viene definita affatto. In generale lo script "chiamante" non ha modo di sapere se c'è un errore.

    L'unica cosa che si potrebbe fare è cercare di "intercettare" eventuali errori grossolani dicendo alla shell di reagire in qualche modo se un qualsiasi comando (all'interno del file di configurazione) ritorna un exit status diverso da zero.

    Ad es. si potrebbe aggiungere "set -e" subito prima di fare il source del file di configurazione (e poi disabilitare nuovamente tale opzione con "set +e" subito dopo). In questo modo in caso di errori lo script esce immediatamente ed il servizio non viene avviato.

    Per azioni "più complicate" (come far scrivere un messaggio di errore) si potrebbe invece fare qualcosa del genere:
    codice:
    # this will trap any errors or commands with non-zero exit status by calling function catch_errors()
    trap catch_errors ERR;
    
    #
    # ... do something
    #  
    
    function catch_errors() {
       #
       # do whatever on errors ...
       #
       echo "script aborted, because of errors";
       exit 1;
    }
    Ma non basterebbe. In qualche caso potrebbe anche capitare che l'errore sintattico sia tale per cui la shell non rileva alcun errore e la variabile viene effettivamente definita, ma è "vuota". Ad es., poni che nel file di configurazione ci sia scritto qualcosa del genere:
    codice:
    SB_EXTRA_ARGS= #"-h -C 1 -a 100:3:$bit_depth:1 -b 65536:65536 -r $ratesRange -u vIE:32::64:98"
    c'è più di un errore evidente, ma per la shell va tutto bene: dal suo punto di vista si tratta di una sequenza di DUE cose distinte: la dichiarazione della variabile $SL_SOUNDCARD (cui è assegnato un valore nullo, "empty string") seguita da un commento. Cosa perfettamente lecita. Ergo nessun errore rilevato, e variabile definita (ma vuota). Squeezelite verrebbe avviato senza alcun parametro aggiuntivo anche in presenza dei check di cui sopra.

    Dici tu: OK, basta aggiungere un altro check: non limitiamoci a verificare che la variabile sia definita, ma controlliamo anche che "non sia vuota". Sorvoliamo sul fatto che questo (così come il resto...) violerebbe tutte le convenzioni e vediamo cosa succederebbe in un caso appena diverso, questo:
    codice:
    SB_EXTRA_ARGS=#"-h -C 1 -a 100:3:$bit_depth:1 -b 65536:65536 -r $ratesRange -u vIE:32::64:98"
    notato la differenza? è uguale a prima, solo che adesso non c'è nessuno spazio tra '=' e '#'. Anche in questo caso, per la shell va tutto bene: non ci sono errori, e la variabile viene definita. Con quale valore? Ovviamente, questo:
    codice:
    #-h -C 1 -a 200:6::1 -b 65536:65536 -r -u vIE:32::64:98
    ora questa variabile verrà utilizzata per costruire la riga di comando di squeezelite, che sarà qualcosa del genere:
    codice:
    /usr/bin/squeezelite [altre_opzioni] #-h -C 1 -a 200:6::1 -b 65536:65536 -r -u vIE:32::64:98
    e cosa succede quando viene eseguita? ovviamente, che tutto ciò che segue '#' viene considerato un commento e quindi ignorato (ed ancora una volta SL verrebbe avviato ugualmente, senza opzioni e senza errori).

    In definitiva avremmo aggiunto un bel po' di complicazioni e di codice superfluo, deviato dalle convenzioni, introdotto innumerevoli limitazioni e vincoli non necessari a ciò che si può fare nel file "di configurazione" e, nonostante tutto, siamo ancora punto e a capo: non abbiamo risolto il (tuo) problema.

    D'altro canto, nulla di nuovo sotto al sole. Idiot proof systems cannot be made: Nothing is foolproof to a sufficiently talented fool.

    Per giunta, mai dimenticare il principio di Shaw: “Build a system that even a fool can use, and only a fool will want to use it”.

    Qual è allora la soluzione? KISS. Lasciare che le cose siano semplici! Non cercare di "riparare" ciò che non è rotto. Non cambiare ciò che è stato fatto e funziona bene fin dal 1970 o giù di lì. Imparare invece a seguire le regole del gioco.

    Fare sempre una sola modifica alla volta. Prestare attenzione a ciò che si fa. Verificare ciò che si è fatto. Se ciò nonostante si ottiene un risultato diverso da quello atteso, dare per scontato che abbiamo commesso un errore. Il sistema ha sempre ragione: noi sbagliamo, lui no. Se abbiamo seguito la prima regola e quindi modificato una sola cosa, sappiamo già esattamente dove guardare per trovarlo.


    ad essere eseguito da un utente diverso è solo il processo di squeezelite avviato dall'Init script. Ma l'Init script stesso devi sempre (ed anzi a maggior ragione) eseguirlo come root!

    Comunque, come detto questa è una cosa che ho in mente di fare per una prossima versione dei pacchetti (ma non è così banale: non basta aggiungere due righe all'Init script, bisogna anche prevedere la creazione/eliminazione dell'utente quando si installa/rimuove il pacchetto, gestire i permessi di files e directories coninvolte, ecc... altrimenti lo avrei fatto fin dal principio).

    Per giunta, l'init script semplificato indicato in quel post non prevede l'uso di un file di configurazione "esterno": per cambiare la configurazione dovresti modificare direttamente lo script stesso! Il che significa che, se aggiorni il pacchetto (installi una versione aggiornata), l'Init script viene sovrascritto e ti perdi la configurazione. Per chi eventualmente usi "falcon" forse potrebbe anche essere un problema minore, ma per tutti gli altri è -come minimo- una bella seccatura.


    fare il "boot da ram" mi pare cosa alquanto improbabile...

    ...magari volevi dire "caricare l'intero sistema in ram" e lavorare lì, senza accedere ai dischi.

    Cosa che senza dubbio si può fare, sia partendo da un file-system (o una "immagine") su un disco locale che facendo il boot da rete (sistema "diskless", completamente privo di memoria di massa locale). Di soluzioni del genere ce ne sono già a bizzeffe; per non dover reinventare la ruota basta seguire le orme di chi lo ha già fatto...

    Vedi ad es. il link che avevo postato tempo addietro (in altro topic, mi pare), dove si parla di un modo per includere un intero sistema all'interno del "Init RAM disk" del kernel.


    per fare questo non è necessario evitare lo shutdown del sistema e spegnere brutalmente tutto. Basta "rivoltare" il problema, utilizzando il pulsante di accensione/spegnimento del sistema e le relative linee di controllo sulla M/B per comandare l'alimentazione generale. Come in un comune PC ben configurato: quando pigi il bottone si accende tutto, quando lo pigi di nuovo parte lo shutdown. Che alla fine spegne tutto.
    Bah, guarda, francamente dubito sia cosi e ti assicuro che in un contesto di sistemi applicativi un comportamento simile giustifica una causa per danni da parte del cliente. Il concetto che l'utente sa quello che fa, se fosse applicato dai normali mezzi di tutti i giorni, nella vita reale, risolverebbe in un mese il problema della sovrapopolazione mondiale. Il paradigma ad oggetti dice qualcosa di abbastanza diverso, ma già, è stato inventato dopo il 1970...
    Ciao, Marco.

    "Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius -- and a lot of courage -- to move in the opposite direction."
    — E. F. Schumacher (mis-attributed to A. Einstein)
    ________________________________________________________________________________
    Autore della patch R2 per Squeezelite e del plugin C-3PO. note libere
    Logitech media Server 7.9 > miniPc + squeezelite-R2 / SB+ > "Lu Scalmentu" NOS R2R DAC by TubeOne/ AudioResearch DAC 1-20 >
    Klimo Merlino Gold TPS > DIS Interconnect > Kent Gold > Reference > Monitor Audio Studio 20 SE

Pagina 20 di 44
prima
... 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ... ultimo

Informazioni Thread

Users Browsing this Thread

Ci sono attualmente 1 utenti che stanno visualizzando questa discussione. (0 utenti e 1 ospiti)

Regole d'invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
nexthardware.com - © 2002-2022