Newsgroup: it.comp.os.linux.iniziare
Titolo: nvidia-persistenced.service

Uso Solus, il driver nvidia funziona però dopo l'avvio risulta 
~ $ systemctl status
● solus
State: degraded
 
causa la mancata attivazione di questo nvidia-persistenced.service
che tra parentesi non mi è del tutto chiaro a cosa serva e se serva (non 
ho un power9 se ve lo chiedete).
Comunque se da utente do
nvidia-persistenced.service
mi chiede la password di root e parte e tutto si risolve.
Da quel credo di intuire (dopo vari maneggi) si tratta di un problema di 
permessi, del tipo nvidia-persistenced ha il suo utente e gruppo il resto 
nvdia ecc è root e probabilmente nvidia-peresitenced in fase di 
spegnimento accensione non può scrivere-cancellare da qualche parte  
tipo /var/run/nvidia-persistenced.
Però alla fine della fiera sono io che posso fare qualcosa o è il 
pacchetto nvidia da sistemare in fase di compilazione?

 systemctl status ● solus State: degraded
]zac[

Il Sun, 16 Jul 2023 17:56:13 -0000 (UTC), Giuseppe Della Bianca ha
scritto:

Si lo avevo già letto, insieme a uno su Arch, ma tutto fa pensare che sia 
un problemadel pacchetto pià che qualcosa che devo fare io, perchè pare 
sia corretto che sia corretto che nvidia persistenced abbia un suo utente, 
però dopo in fase di accensione e o spegnimento non riesce a scrivere e 
operare correttamente.
 
~ $ id nvidia-persistenced`
`uid=143(nvidia-persistenced) gid=143(nvidia-persistenced) 
gruppi=143(nvidia-persistenced) `
`~ $ ls -l /dev/nvidia*`
`crw-rw-rw- 1 root root 195, 0 15 lug 17.50 /dev/nvidia0`
`crw-rw-rw- 1 root root 195, 255 15 lug 17.50 /dev/nvidiactl`
`crw-rw-rw- 1 root root 195, 254 15 lug 17.50 /dev/nvidia-modeset`
`crw-rw-rw- 1 root root 237, 0 15 lug 17.50 /dev/nvidia-uvm`
`crw-rw-rw- 1 root root 237, 1 15 lug 17.50`
`/dev/nvidia-uvm-tools /dev/nvidia-caps:`
 
Scrivono qui
https://man.archlinux.org/man/extra/nvidia-utils/nvidia-persistenced.1.en
 
"The daemon does not require root privileges to run, and may safely be run 
as an unprivileged user, given that its runtime directory, /var/run/
nvidia-persistenced, is created for and owned by that user prior to 
starting the daemon. nvidia-persistenced also requires read and write 
access to the NVIDIA character device files. If the permissions of the 
device files have been altered through any of the NVreg_DeviceFileUID, 
NVreg_DeviceFile_GID, or NVreg_DeviceFileMode NVIDIA kernel module 
options, nvidia-persistenced will need to run as a suitable user.
 
If the daemon is started with root privileges, the --user option may be 
used instead to indicate that the daemon should drop its privileges and 
run as the specified user after setting up its runtime directory. Using 
this option may cause the daemon to be unable to remove the /var/run/
nvidia-persistenced directory when it is killed, if the specified user 
does not have write permissions to /var/run. In this case, directory 
removal should be handled by a post-execution script. See the sample init 
scripts provided in /usr/share/doc/NVIDIA_GLX-1.0/sample/nvidia-
persistenced-init.tar.bz2 for examples of this behavior.
 
The daemon indirectly utilizes nvidia-modprobe via the nvidia-cfg library 
to load the NVIDIA kernel module and create the NVIDIA character device 
files after the daemon has dropped its root privileges, if it had any to 
begin with. If nvidia-modprobe is not installed, the daemon may not be 
able to start properly if it is not run with root privileges."
 
e da quel che mi sembra di capire a riconferma
 
~ $ journalctl
....
`ug 15 18:37:32 solus nvidia-persistenced[13610]: Verbose syslog 
connection opened
lug 15 18:37:32 solus nvidia-persistenced[13610]: Failed to create 
directory /var/run/nvidia-persistenced: Permission denied
lug 15 18:37:32 solus nvidia-persistenced[13610]: Directory /var/run/
nvidia-persistenced will not be removed on exit
lug 15 18:37:32 solus nvidia-persistenced[13610]: Unable to access /var/
run/nvidia-persistenced: No such file or directory
lug 15 18:37:32 solus nvidia-persistenced[13610]: Shutdown (13610)
 

 nvidia-persistenced[13610]: Shutdown (13610)
 
OK non è power9 ma a me sembra di capire che il servizio c'è a prescindere 
anche negli altri sistemi.
 
Quello che mi sembra di aver capito è quanto segue, all'avvio non parte 
perché trova questo:
$ ls -l  /var/run/nvidia-persistenced
totale 4
-rw-r--r-- 1 nvidia-persistenced nvidia-persistenced 6 22 lug 12.34 
nvidia-persistenced.pid
srwxrwxrwx 1 nvidia-persistenced nvidia-persistenced 0 22 lug 12.34 socket
fabio@solus ~ $ cat  /var/run/nvidia-persistenced/nvidia-persistenced.pid 
50290
 
In uno dei seguenti modi:
- sudo systemctl daemon-reload
- sudo systemctl restart nvidia-persistenced.service
- sudo systemctl stop nvidia-persistenced.service   +   sudo /usr/bin/
nvidia-persistenced -user=nvidia-persistenced
 
lo riavvio. La cosa importante è che in tutti i casi succede questo:
~ $ systemctl stop nvidia-persistenced.service
~ $ ls -l  /var/run/nvidia-persistenced
ls: impossibile accedere a '/var/run/nvidia-persistenced': File o 
directory non esistente
 
Cioè si cancella la su menzionata directory. Evidentemente come anche 
scritto da qualche parte nella documentazione che ho già postato allo 
spegnimento non si cancella la citata directory. 
 
Quindi come fare? Servirebbe un systemctl stop nvidia-persistenced.service 
allo spegnimento, che poi mi par strano non ci sia qualcosa del genere, 
sebbene ci sia quel discorso dell'utente diverso che non ho capito, root 
dovrebbe prevalere...
 
 

Il Sat, 22 Jul 2023 10:54:56 -0000 (UTC), Fabio ha scritto:
Scuate riposto il messaggio perché mi ha perso il layout e non si capiva niente.
 
OK non è power9 ma a me sembra di capire che il servizio c'è a prescindere
anche negli altri sistemi.
 
Anche qui quello che mi sembra di aver capito è quanto segue, all'avvio non parte
perché trova questo:
 
$ ls -l  /var/run/nvidia-persistenced totale 4 -rw-r--r-- 1
nvidia-persistenced nvidia-persistenced 6 22 lug 12.34
nvidia-persistenced.pid srwxrwxrwx 1 nvidia-persistenced
nvidia-persistenced 0 22 lug 12.34 socket 
~ $ cat 
/var/run/nvidia-persistenced/nvidia-persistenced.pid 50290
 
In uno dei seguenti modi:
- sudo systemctl daemon-reload - sudo systemctl restart
- nvidia-persistenced.service - sudo systemctl stop
- nvidia-persistenced.service   +   sudo /usr/bin/ nvidia-persistenced


 Scuate riposto il messaggio perché mi ha perso il layout e non si capiva niente.
idem...devo aver sbagliato qualcosa...
 

 dovrebbe prevalere...
Cioè la cartella var/run/nvidia-persistenced e i files in essa contenuti sono già dell'utente nvidia-persistenced, quindi un processo o quello che è "/usr/bin/nvidia-persistenced -user=nvidia-persistenced" dovrebbe essere in grado di cancellare la cartella allo spegnimento senza altre aggiunte, invece evidentemente non lo fa.

 pare sia corretto che sia corretto che nvidia persistenced abbia un suo
]zac[
 
Non conosco il caso e non sono in grado di simularlo.
 
Se non ritieni di dover sistemare i permessi di accesso, dovrai aspettare 
se e quando qualcuno lo farà.

Il Sat, 22 Jul 2023 15:24:08 -0000 (UTC), Giuseppe Della Bianca ha
scritto:

A lasciarmi perplesso è il fatto che nell'esempio da te citato /dev/invidia* 
hanno come gruppo video, nel mio caso root, dovrei aggiungere a nvidia-persistenced
 il gruppo root... o forse video, aggiungendo anche video a /dev/nvidia* 
(sempre che si possa non lo so)
 


Ho provato ad aggiungere il gruppo videonv a /dev/invidia* e  nvidia-persistenced, 
il che ha consentito un riavvio col sistema funzionante, ma solo uno, infatti al riavvio 
/dev/invidia* avevano riacquisito il gruppo root e perso videonv. Viceversa ho provato
 ad aggiungere a nvidia-persistenced il gruppo root, ma non funziona, daltronde  il  
gruppo root non ha diritto di scrittura su /var/run.
Si tratta quindi di avviare un processo da root che cancella la cartella /var/run/nvidia-persistenced 
(come mi sembra suggerisca nvidia) o all'avvio da root automaticamente lanciare 
systemctl restart nvidia-persistenced.service.
Due cose che non so fare.


Insomma credo di aver risolto. ho modificato il file 
/etc/systemd/system/multi-user.target.wants/nvidia-persistenced.service
Cambiando la voce Wants che prima era syslog.target:
"
[Unit]
Description=NVIDIA Persistence Daemon
Wants=runlevel5.target
 
[Service]
Type=forking
ExecStart=/usr/bin/nvidia-persistenced --user nvidia-persistenced
ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced
 
[Install]
WantedBy=multi-user.target
"
 
Credo che ci sia qualcosa che dovrei capire riguardo alla voce finale 
[Install]
WantedBy=multi-user.target
che al momento mi è un po' oscura e potenzialmente potrebbe rovinarmi la festa :P

 che al momento mi è un po' oscura e potenzialmente potrebbe rovinarmi la festa :P
No, continua a non funzionare, funziona solo al primo riavvio, ai successivi il problema si ripresenta.


Alla fine ho risolto veramente così: nuvo file /etc/systemd/system/my-nvpersistenced.service
con il restart a tempo che sembra essere l'unica cosa che funziona:
 
[Unit]
Description=NVIDIA Persistence Daemon riavvio
 
[Service]
Type=oneshot
ExecStartPre=/bin/sleep 60
ExecStart=/usr/bin/systemctl restart nvidia-persistenced.service
 
[Install]
 

 sembra essere l'unica cosa che funziona:
]zac[
 
Hai risolto quindi sei apposto, ma se ti è utile, ti faccio un esempio 
personale.
 
Per verificare i problemi di avvio di un servizio di condivisione di 
directory, e quindi verificare i problemi di avvio delle unità di systemd, 
ho usato alcuni sui strumenti, per esempio
 
systemd-analyze plot > boot.png .
 
In questo modo si può cercare di capire quale unità è necessario che si 
avvii prima, e che si è avviata prima mettendo il ritardo.
 
Bisogna tenere conto che non sempre l'avvio dell'unità corrisponde al 
pieno funzionamento del servizio fornito dall'unità stessa.
Per esempio i problemi erano nell'attivazione effettiva del servizio DNS, 
e l'unico modo diretto di risolvere, è stato creare una unità apposita che 
prova a fare un 'ping nomeservercerto', e lo attende.
 
Nella configurazione di questa unità ho inserito
 
[Unit]
..........
After=network-online.target
Before=knockd.service nfs-server.service
..........
 
quindi l'unità apposita si avvia dopo che i servizi di rete sono stati 
attivati, e le unità knockd e nfs-server prima di avviarsi attendono che 
l'unità apposita sia avviata.
 
In questo modo si può evitare di modificare o duplicare (e non bisogna 
gestire eventuali variazioni che vengano fatte), le configurazioni di 
sistema, le cose installate, ecc. .

 sistema, le cose installate, ecc. .
 
Comando spettacolare anche graficamente, ma molto utile insieme 
agli altri suggerimenti, anche per fare nuove prove, grazie mille.