Per impostazione predefinita, Weewx viene eseguito come root. Questa guida illustra come eseguire Weewx come utente non root, usando script init in stile "rc". Un modo alternativo, solitamente più semplice, è usare i "file unit" di systemd.
-
• Crea l'account utente da utilizzare per eseguire Weewx, se non è già stato fatto
shell sudo useradd wxuser
-
• Concedi all'utente l'accesso seriale/usb con una regola "udev". Ci sono molti modi per farlo, ma il seguente di solito funziona per un dispositivo USB. Innanzitutto, individua l'ID del fornitore e del dispositivo utilizzando il comando lsusb:
/home/weewx$ lsusb Bus 001 Device 002: ID 8087:8000 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 002 Device 005: ID 8087:07dc Intel Corp. Bluetooth wireless interface <b>Bus 002 Device 003: ID 10c4:ea60 Silicon Labs CP210x UART Bridge</b> Bus 002 Device 004: ID 413c:2010 Dell Computer Corp. Keyboard Bus 002 Device 002: ID 413c:1003 Dell Computer Corp. Keyboard Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Da questo, possiamo identificare che la stazione meteo si trova sul bus 2, dispositivo 5, l'ID fornitore è 10c4e l'id prodotto è ea60.
-
• Crea il file delle regole di sviluppo:
/etc/udev/rules.d/weewx.rules
con i seguenti contenuti:
ini SUBSYSTEM=="usb", ATTR{idVendor}=="10c4", ATTR{idProduct}=="ea60", MODE="0664", GROUP="wxuser"
Ciò dice a udev di cercare una combinazione fornitore/ID prodotto 10cr/ea60. Quando lo trova, imposta la sua modalità di lettura/scrittura su 0664e lo assegna al gruppo utenti wxuser. Ciò consentirà all'utente wxuser di accedervi.
I passaggi successivi dipendono dal fatto che tu abbia utilizzato il metodo di installazione setup.py o un programma di installazione del pacchetto Debian per installare Weewx.
INSTALLATO CON SETUP.PY
Ciò presuppone che Weewx sia stato installato usando il setup.py in /home/weewx e che funzioni correttamente quando viene eseguito come utente root.
-
• Ferma Weewx se è in esecuzione:
sudo /etc/init.d/weewx stop
-
• Nel file dello script di avvio, /etc/init.d/weewx, specificare l'utente e una posizione per il file ID processo (PID) in cui l'utente dispone dei privilegi di scrittura, ad esempio:
WEEWX_USER=wxuser:wxuser PIDFILE=/home/weewx/run/$NAME.pid
-
• Creare la directory in cui risiederà il file PID
sudo mkdir /home/weewx/run
-
• Assegna all'utente la proprietà di tutti i file Weewx:
sudo chown -R wxuser:wxuser /home/weewx
-
• Avvia Weewx:
sudo /etc/init.d/weewx start
INSTALLATO CON PACCHETTO DEBIAN
Ciò presuppone che Weewx sia stato installato utilizzando un programma di installazione dei pacchetti, ad esempio:
apt install weewx
-
• Innanzitutto, verifica se weewxd è stato effettivamente avviato da uno script rc e se è in esecuzione utilizzando il comando systemd systemctl:
sudo systemctl status weewx
L'output del comando status dovrebbe mostrarti, sotto "Loaded:", da dove è stato caricato/etc/init.d/weewx
-
• Ferma Weewx se è in esecuzione:
sudo /etc/init.d/weewx stop
-
• Invece di modificare direttamente lo script di avvio (e rischiare di perdere le modifiche a ogni aggiornamento), sovrascriviamo i parametri creando un file /etc/default/weewx (se non esiste già), in cui specifichiamo l'utente e una posizione per il file con l'ID processo (PID). Per esempio:
ini WEEWX_USER=wxuser:wxuser WEEWX_PID=/tmp/weewx.pid
In questo esempio, inseriamo l'ID del processo in /tmp/weewx.pid. Quasi ogni posto funzionerà, a condizione che l'utente wxuser abbia il permesso di scrittura.
-
• Assegna all'utente la proprietà di tutti i file DB SQLite
sudo chown -R wxuser:wxuser /var/lib/weewx
-
• Assegna all'utente la proprietà di dove andranno i file HTML:
sudo chown -R wxuser:wxuser /var/www/html/weewx
-
• Avvia Weewx e controlla lo stato
/etc/init.d/weewx start /etc/init.d/weewx status
DEBIAN 10 E SUCCESSIVI
Con l'aggiornamento a Buster il sistema è stato modificato in modo tale che i file pid di proprietà di utenti non root non siano attendibili e non è possibile arrestare o riavviare il servizio weewx. La soluzione è modificare lo script init /etc/init.d/weewx. Nelle funzioni do_stop() e do_restart(), modifica gli argomenti del comando start-stop-daemon. Ad esempio, modifica la funzione do_stop() in modo che invece di start-stop-daemon --stop --pidfile $PIDFILE legga start-stop-daemon --stop --pidfile $PIDFILE --user $WEEWX_USER e allo stesso modo per la funzione do_restart().
C'è un'ulteriore complessità: il parametro --user non può assumere la forma di user:group quindi il modo più semplice è rimuovere la parte ":wxuser" dalla definizione di WEEWX_USER in /etc/default/weewx. Questo non sarà un problema se il nome del gruppo è quello predefinito per l'utente Weewx, poiché il gruppo predefinito viene applicato automaticamente. Se hai bisogno di un gruppo diverso, modifica lo script init.d di conseguenza con un parametro WEEWX_GROUP adatto.