Eseguire Weewx come utente non root
Introduzione
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.