Driver Nvidia e compilazione FFmpeg

Se avete problemi con l'installazione e la configurazione di Slackware64 postate qui. Non usate questo forum per argomenti che trattano la Slackware32 o generali... per quelli usate rispettivamente il forum Slackware e Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware64 usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware64, se l'argomento è Slackware32 o generale usate rispettivamente il forum Slackware o Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3797
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Driver Nvidia e compilazione FFmpeg

Messaggio da joe »

Riprendo un argomento che avevo già toccato in qualche passata discussione.

Il mio obiettivo era sfruttare l'accelerazione hardware nel playback dei video.

Avendo una GPU Nvidia GT218 (GeForce 210) molto molto basica qundi e anche vechiotta, ci sono due strade:

- provare coi drivers nouveau:
perché sono aggiornati oltre che aperti ecc ecc. Ho provato seguendo l'apposita guida sul sito nouveau, ma nonostante funzionino bene nella gestione ordinaria dell'interfaccia grafica (e direi anche in frambuffer TTY i caratteri sono più che OK), non si riesce ad ottenere una risposta stabile quando si attiva l'accelerazione hardware in vari player. Sia con mplayer che con mpv, selezionando sia VDPAU che VAAPI, ne esce un comportamento apparentemente ottimo durante la riproduzione (con CPU sotto il 5%, segno che sta lavorando la scheda grafica), ma che alla prima occasione manda l'intero sistema in crash, ad esempio basta premere "q" per chiudere il player e tutto si blocca, non si riesce neanche a riavviare con ctrl+alt+canc per capirci, bisogna proprio togliere corrente.
Per provare questa soluzione ho creato una partizione ad hoc e vi ho installato slackware 15.0 pulita, a 64 bit senza multilib o altro. Purtroppo non sembrano esserci soluzioni, a quanto pare sarebbe proprio un limite del driver nouveau, che comunque per sfruttare l'accelerazione hardware necessita di un pezzo di software proprietario installabile col pacchetto nvidia-firmware (disponibile su SBo), questo pacchetto pesca il firmware dal binario dei drivers nvidia, in versione "325.15". Siccome per la mia GPU i driver proprietari Nvidia sono i "340.108", per scrupolo ho provato a creare il pcchetto del firmware anche a partire da questo binario sperando che fosse maggiormente compatibile con la mia GPU, invece non ci sono stati miglioramenti.
Riassumendo, il driver Nouveau per il momento non è adatto per sfruttare l'accelerazione hardware sulla mia cvecchia GPU su slackware 15.0, creando crash del sistema inaccettabili per l'uso quotidiano.

- utilizzare il driver Nvidia, nel caso della mia GPU il "legacy340".
Con questi si riesce ad ottenere una situazione accettabile, ma c'è un dettaglio, un problemino con FFmpeg che non mi torna. Ne avevamo già parlato...

In pratica il problema ruota intorno alla libreria libOpenCL.so da cui dipende FFmpeg:

Codice: Seleziona tutto

# sbbdep --whoneeds /usr/lib64/libOpenCL.so.1.0.0
sync cache /root/.cache/sbbdep.db
cache up to date

ffmpeg-4.4.1-x86_64-2
Questa libreria fa parte del pacchetto ocl-icd del set ufficiale di slackware. Ma un'altra version della stessa libreria è contenuta nel pacchetto del driver proprietario.

Codice: Seleziona tutto

# slackpkg file-search libOpenCL

[inst] slackware64 : ocl-icd-2.3.1-x86_64-1

Codice: Seleziona tutto

# sbbdep /usr/lib64/libOpenCL.so.1.0.0

check /usr/lib64/libOpenCL.so.1.0.0, 64bit library (libOpenCL.so.1)
 .. from package ocl-icd-2.3.1-x86_64-1
 .. from package nvidia-legacy340-driver-340.108-x86_64-2_SBo
Quindi installando il driver Nvidia, libOpenCL di sistema viene sovrascritto dal corrispondente "proprietario". Come conseguenza pratica, ffmpeg smette di funzionare come dovrebbe e saltano fuori alcuni errori tipo:

Codice: Seleziona tutto

$ ffmpeg -v quiet -codecs|grep '^ \.'
ffmpeg: /usr/lib64/libOpenCL.so.1: no version information available (required by /usr/lib64/libavfilter.so.7)
ffmpeg: /usr/lib64/libOpenCL.so.1: no version information available (required by /usr/lib64/libavfilter.so.7)
ffmpeg: /usr/lib64/libOpenCL.so.1: no version information available (required by /usr/lib64/libavutil.so.56)
ffmpeg: /usr/lib64/libOpenCL.so.1: no version information available (required by /usr/lib64/libavutil.so.56)
Per risolvere il problema, ci sono 2 strade:

si reinstalla il pacchetto "ocl-icd" che va a sovrascrivere nuovamente libOpenCL con la versione di sistema contro cui era stato compilato FFmpeg.
Questo risolve, nel senso che nella pratica l'errore scompare e i vari players riproducono senza troppi problemi sfruttando l'accelerazione hardware VDPAU (che dovrebbe essere il massimo supportato dalla mia GPU).

Però resta qualche dubbio, nel senso che si è messa in piedi una soluzione ibrida, in cui il pacchetto dei drivers proprietari viene modificato facendo lavorare libOpenCL diversa da quella che si aspetterebbe il driver stesso.
Per cui si potrebbe provare anche una seconda strada, ovvero ricompilare FFmpeg in modo che vada a legarsi al libOpenCL del pacchetto Nvidia.
Sembrerebbe semplice, invece la compilazione non va a buon fine, questo è strano perché FFmpeg lamenta proprio qualcosa che non va in libOpenCL.

Intanto per la compilazione ho utilizzato la directory sorgente di ffmpeg presa dal repo ufficiale di slackware64-15.0. E avvio la compilazione come segue.

Codice: Seleziona tutto

# cat ./build.sh
#!/bin/sh

# Copy this into build directory (same of SlackBuild script) and run

x264=yes \
libass=yes \
libaom=yes \
libdav1d=yes \
./ffmpeg.SlackBuild
L'errore che ne salta fuori è il seguente:

Codice: Seleziona tutto

MAN     doc/libswscale.3
MAN     doc/libswresample.3
MAN     doc/libavcodec.3
MAN     doc/libavformat.3
MAN     doc/libavdevice.3
MAN     doc/libavfilter.3
LD      libswscale/libswscale.so.5
LD      libpostproc/libpostproc.so.55
LD      libswresample/libswresample.so.3
LD      libavresample/libavresample.so.4
LD      libavcodec/libavcodec.so.58
LD      libavformat/libavformat.so.58
LD      libavfilter/libavfilter.so.7
LD      libavdevice/libavdevice.so.58
LD      ffmpeg_g
LD      ffplay_g
LD      ffprobe_g
/usr/bin/ld: libavutil/libavutil.so: undefined reference to `clGetExtensionFunctionAddressForPlatform'
/usr/bin/ld: libavutil/libavutil.so: undefined reference to `clGetExtensionFunctionAddressForPlatform'
/usr/bin/ld: libavfilter/libavfilter.so: undefined reference to `clEnqueueFillBuffer'
/usr/bin/ld: libavfilter/libavfilter.so: undefined reference to `clCreateImage'
/usr/bin/ld: libavfilter/libavfilter.socollect2: error: ld returned 1 exit status
: undefined reference to `clEnqueueFillBuffer'
/usr/bin/ldmake: *** [Makefile:124: ffprobe_g] Errore 1
make: *** Attesa per i processi non terminati....
: libavfilter/libavfilter.so: undefined reference to `clCreateImage'
collect2: error: ld returned 1 exit status
make: *** [Makefile:124: ffmpeg_g] Errore 1
/usr/bin/ld: libavutil/libavutil.so: undefined reference to `clGetExtensionFunctionAddressForPlatform'
/usr/bin/ld: libavfilter/libavfilter.so: undefined reference to `clEnqueueFillBuffer'
/usr/bin/ld: libavfilter/libavfilter.so: undefined reference to `clCreateImage'
collect2: error: ld returned 1 exit status
make: *** [Makefile:124: ffplay_g] Errore 1
LD      ffmpeg_g
/usr/bin/ld: libavutil/libavutil.so: undefined reference to `clGetExtensionFunctionAddressForPlatform'
/usr/bin/ld: libavfilter/libavfilter.so: undefined reference to `clEnqueueFillBuffer'
/usr/bin/ld: libavfilter/libavfilter.so: undefined reference to `clCreateImage'
collect2: error: ld returned 1 exit status
make: *** [Makefile:124: ffmpeg_g] Errore 1


Cercando in rete ho trovato qualcosa di molto simile alla mia situazione, anche se lì aggiunge all'operazione il pacchetto cuda-toolkit o qualcosa di simile. Ma dubito che la sua presenza sia risolutiva e considerando che è un malloppo di roba mica da ridere ho preferito chiedere qui prima di tentare con l'installazione di quel pacchetto.
Il link cui mi riferivo comunque è questo:
https://whatdoineed2do.blogspot.com/201 ... clso1.html

Se i warnings di FFmpeg in runtime erano più che comprensibili, questo errore in fase di build non mi è così chiaro.
Può essere che libOpenCL presente nel pacchetto dei drivers Nvidia "legacy340" sia troppo vecchio per poter essere digerito dal nuovo FFmpeg anche in fase di "linking" ?
Vedete qualche possibilità di aggirare questo problema?

Grazie in anticipo!

rik70
Iper Master
Iper Master
Messaggi: 2492
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da rik70 »

A che pro tutto questo?

Quella libreria proprietaria va semplicemente tolta.

https://www.systutorials.com/docs/linux ... libOpenCL/

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3797
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da joe »

Sì ho visto, era che non avevo capito bene come funzionava, in pratica nella realtà, detta male, non è una libreria ma un'interfaccia che va a pescare in /etc/OpenCL/vendors, ecc, come dice il man d'altra parte.
Avevo chiesto anche su LQ e forse sono arrivato ad una conclusione:
https://www.linuxquestions.org/question ... ost6359231

In sintesi volevo accertarmi che alla fine il supporto ad opencl fosse comunque presente sia a livello di supporto nel driver che dei programmi che si vanno a legare allo stesso, ad esempio FFmpeg. Per i dettagli rimando al link sopra. Ho buttato giù anche una patch allo slackbuild, anche se il maintainer non mi aveva più risposto via mail, potrei anche essere finito in un filtro spam, non è da escludere. Ora li su LQ è intervenuto anche Ponce che ha le mani in pasta su SBo, magari riesce a smuovere un po' le acque.
Effettivamente sono driver vecchi, per schede video altrettanto vecchie, ma se si può niente niente migliorare uno script problematico senza troppo sforzo mi pareva un peccato non farlo.

rik70
Iper Master
Iper Master
Messaggi: 2492
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da rik70 »

Esatto.

E' descritto ancora più chiaramente nello slack-desc del pacchetto ocl-icd.

rik70
Iper Master
Iper Master
Messaggi: 2492
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da rik70 »

**
Discorso analogo andrebbe fatto per le librerie OpenGL, che dalla slackware 15 ora passano per libglvnd

E torniamo al discorso già fatto relativo ai pacchetti dei driver proprietari, che andrebbero rivisti/ripensati alla luce di questo

Codice: Seleziona tutto

libglvnd: libglvnd is a vendor-neutral dispatch layer for arbitrating OpenGL
libglvnd: API calls between multiple vendors. It allows multiple drivers from
libglvnd: different vendors to coexist on the same filesystem, and determines
libglvnd: which vendor to dispatch each API call to at runtime.
libglvnd:

Avatar utente
ponce
Iper Master
Iper Master
Messaggi: 3026
Iscritto il: mer 5 mar 2008, 16:45
Nome Cognome: Matteo Bernardini
Slackware: slackware64-current
Kernel: 6.6.16
Desktop: lxde
Località: Pisa
Contatta:

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da ponce »

joe ha scritto:
mar 7 giu 2022, 17:46
Per i dettagli rimando al link sopra. Ho buttato giù anche una patch allo slackbuild, anche se il maintainer non mi aveva più risposto via mail, potrei anche essere finito in un filtro spam, non è da escludere. Ora li su LQ è intervenuto anche Ponce che ha le mani in pasta su SBo, magari riesce a smuovere un po' le acque.
e' bene passare dal maintainer: nel caso non risponda ci vuole qualcun'altro che prenda il suo posto, non possiamo lasciare script non manutenuti...

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3797
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da joe »

Sicuramente, se vuoi fare una prova anche tu contattalo se non sbaglio il maintainer attuale è "Mats B. Tegner", cui avevo inviato una mail a metà del mese scorso (quindi direi che è andata a vuoto...).
Osservavo che il maintainer di tutte le altre versioni dei drivers nvidia, sia quello corrente che i vari legacy è tale "Lenard Spencer".
Perché non proporgli l'ingrato fardello di ammodernare se si riesce anche il legacy340? (Che a quanto pare è proprio l'ultimo rimasto fuori dalla revisione...)

Non so come vi muovete in SBo per queste cose, se c'è una chat o vi riferite ad un gruppo di utenti che gestiscono e assegnano i vari pacchetti ai maintainers...
Io la butto lì come un'idea.
Purtroppo io non sono abbastanza ferrato, come avrete visto vado molto a sentimento, e vedendo gli slackbuilds che ha preparato questo Lenard per gli altri drivers nvidia, sicuramente farebbe un lavoro molto più ben fatto.

Se serve testare i drivers sono sempre disponibile!
Fammi sapere Ponce anche solo per vedere com'è andata a finire...

Avatar utente
ponce
Iper Master
Iper Master
Messaggi: 3026
Iscritto il: mer 5 mar 2008, 16:45
Nome Cognome: Matteo Bernardini
Slackware: slackware64-current
Kernel: 6.6.16
Desktop: lxde
Località: Pisa
Contatta:

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da ponce »

in realta' i maintainer si propongono da soli, noi non assegnamo o proponiamo niente: nel caso specifico dello script in questione chi lo mantiene deve avere anche l'hardware che lo usa, se non ce l'ha non puo' testarlo.
se il maintainer non risponde noi consideriamo che abbia abbandonato lo script e lo rimuoviamo dal repository, se nessun altro nel frattempo si offre spontaneamente di diventare il maintainer.
sarebbe opportuno che tu segnalassi il fatto che il maintainer non risponde sulla mailing list slackbuilds-users, in modo che altri possano leggere la tua segnalazione e magari farsi avanti.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3797
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da joe »

OK fatto.. Vediamo se qualcuno si fa avanti, grazie delle indicazioni! :)

rik70
Iper Master
Iper Master
Messaggi: 2492
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da rik70 »

Io al posto tuo mi manterrei il pacchetto da solo e mi farei avanti su SBo.

Non per altro, ma perché ti serve il relativo software e possiedi l'hardware che lo utilizza.

Sarebbe un'occasione anche per dare una "svecchiata" ai pacchetti dei driver nvidia.

Oramai, come appare evidente anche dai cenni fatti in altre discussioni, con le libglvnd e ocl-icd la parte proprietaria può coesistere nel sistema senza problemi - o almeno in teoria.

Un buon punto di partenza è prendere spunto dai "cugini stretti"(occhio che è un pacchetto diviso in due parti).

Non dovrebbe esserti difficile creare uno SlackBuild partendo da lì, modificando(o riscrivendo) quello esistente.
E non ci credo neanche se lo vedo che non sei in grado di realizzarlo.

Io mi sono permesso di farlo per un puro esercizio "ginnico", ma non mi sogno minimamente di pubblicarlo perché non ho l'hardware per testarlo.

Lascio solo il contenuto del pacchetto(solo 64-bit)una volta installato

Codice: Seleziona tutto

nvidia-legacy340-driver: nvidia-legacy340-driver (Proprietary Binary Nvidia Video Driver)
nvidia-legacy340-driver:
nvidia-legacy340-driver: This is the proprietary binary video driver from nvidia for
nvidia-legacy340-driver: the x.org X server. This package does not include the kernel
nvidia-legacy340-driver: module - it is included in the nvidia-kernel package.
nvidia-legacy340-driver:
nvidia-legacy340-driver: See /usr/doc/nvidia-driver-340.108/README.Slackware
nvidia-legacy340-driver: for more information.
nvidia-legacy340-driver:
nvidia-legacy340-driver:
nvidia-legacy340-driver:
FILE LIST:
./
etc/
etc/OpenCL/
etc/OpenCL/vendors/
etc/OpenCL/vendors/nvidia.icd
etc/ld.so.conf.d/
etc/ld.so.conf.d/00-nvidia.conf
install/
install/doinst.sh
install/slack-desc
usr/
usr/bin/
usr/bin/nvidia-bug-report.sh
usr/bin/nvidia-cuda-mps-control
usr/bin/nvidia-cuda-mps-server
usr/bin/nvidia-debugdump
usr/bin/nvidia-modprobe
usr/bin/nvidia-persistenced
usr/bin/nvidia-settings
usr/bin/nvidia-smi
usr/bin/nvidia-xconfig
usr/doc/
usr/doc/nvidia-legacy340-driver-340.108/
usr/doc/nvidia-legacy340-driver-340.108/LICENSE
usr/doc/nvidia-legacy340-driver-340.108/NVIDIA_Changelog
usr/doc/nvidia-legacy340-driver-340.108/README.Slackware
usr/doc/nvidia-legacy340-driver-340.108/README.txt
usr/doc/nvidia-legacy340-driver-340.108/html/
usr/doc/nvidia-legacy340-driver-340.108/html/acknowledgements.html
usr/doc/nvidia-legacy340-driver-340.108/html/addressingcapabilities.html
usr/doc/nvidia-legacy340-driver-340.108/html/addtlresources.html
usr/doc/nvidia-legacy340-driver-340.108/html/appendices.html
usr/doc/nvidia-legacy340-driver-340.108/html/audiosupport.html
usr/doc/nvidia-legacy340-driver-340.108/html/commonproblems.html
usr/doc/nvidia-legacy340-driver-340.108/html/configlaptop.html
usr/doc/nvidia-legacy340-driver-340.108/html/configmultxscreens.html
usr/doc/nvidia-legacy340-driver-340.108/html/configtvout.html
usr/doc/nvidia-legacy340-driver-340.108/html/configtwinview.html
usr/doc/nvidia-legacy340-driver-340.108/html/depth30.html
usr/doc/nvidia-legacy340-driver-340.108/html/displaydevicenames.html
usr/doc/nvidia-legacy340-driver-340.108/html/dma_issues.html
usr/doc/nvidia-legacy340-driver-340.108/html/dpi.html
usr/doc/nvidia-legacy340-driver-340.108/html/editxconfig.html
usr/doc/nvidia-legacy340-driver-340.108/html/faq.html
usr/doc/nvidia-legacy340-driver-340.108/html/flippingubb.html
usr/doc/nvidia-legacy340-driver-340.108/html/framelock.html
usr/doc/nvidia-legacy340-driver-340.108/html/glxsupport.html
usr/doc/nvidia-legacy340-driver-340.108/html/gpunames.html
usr/doc/nvidia-legacy340-driver-340.108/html/i2c.html
usr/doc/nvidia-legacy340-driver-340.108/html/index.html
usr/doc/nvidia-legacy340-driver-340.108/html/installationandconfiguration.html
usr/doc/nvidia-legacy340-driver-340.108/html/installdriver.html
usr/doc/nvidia-legacy340-driver-340.108/html/installedcomponents.html
usr/doc/nvidia-legacy340-driver-340.108/html/introduction.html
usr/doc/nvidia-legacy340-driver-340.108/html/knownissues.html
usr/doc/nvidia-legacy340-driver-340.108/html/minimumrequirements.html
usr/doc/nvidia-legacy340-driver-340.108/html/newusertips.html
usr/doc/nvidia-legacy340-driver-340.108/html/nvidia-debugdump.html
usr/doc/nvidia-legacy340-driver-340.108/html/nvidia-ml.html
usr/doc/nvidia-legacy340-driver-340.108/html/nvidia-persistenced.html
usr/doc/nvidia-legacy340-driver-340.108/html/nvidia-smi.html
usr/doc/nvidia-legacy340-driver-340.108/html/nvidiasettings.html
usr/doc/nvidia-legacy340-driver-340.108/html/openglenvvariables.html
usr/doc/nvidia-legacy340-driver-340.108/html/optimus.html
usr/doc/nvidia-legacy340-driver-340.108/html/powermanagement.html
usr/doc/nvidia-legacy340-driver-340.108/html/procinterface.html
usr/doc/nvidia-legacy340-driver-340.108/html/profiles.html
usr/doc/nvidia-legacy340-driver-340.108/html/programmingmodes.html
usr/doc/nvidia-legacy340-driver-340.108/html/randr14.html
usr/doc/nvidia-legacy340-driver-340.108/html/sdi.html
usr/doc/nvidia-legacy340-driver-340.108/html/selectdriver.html
usr/doc/nvidia-legacy340-driver-340.108/html/sli.html
usr/doc/nvidia-legacy340-driver-340.108/html/supportedchips.html
usr/doc/nvidia-legacy340-driver-340.108/html/vdpausupport.html
usr/doc/nvidia-legacy340-driver-340.108/html/xcompositeextension.html
usr/doc/nvidia-legacy340-driver-340.108/html/xconfigoptions.html
usr/doc/nvidia-legacy340-driver-340.108/html/xineramaglx.html
usr/doc/nvidia-legacy340-driver-340.108/html/xrandrextension.html
usr/doc/nvidia-legacy340-driver-340.108/nvidia-legacy340-driver.SlackBuild
usr/lib64/
usr/lib64/libnvidia-compiler.so.340.108
usr/lib64/libnvidia-opencl.so.340.108
usr/lib64/nvidia/
usr/lib64/nvidia/libEGL.so.340.108
usr/lib64/nvidia/libGL.so.340.108
usr/lib64/nvidia/libGLESv1_CM.so.340.108
usr/lib64/nvidia/libGLESv2.so.340.108
usr/lib64/nvidia/libcuda.so.340.108
usr/lib64/nvidia/libnvcuvid.so.340.108
usr/lib64/nvidia/libnvidia-cfg.so.340.108
usr/lib64/nvidia/libnvidia-eglcore.so.340.108
usr/lib64/nvidia/libnvidia-encode.so.340.108
usr/lib64/nvidia/libnvidia-fbc.so.340.108
usr/lib64/nvidia/libnvidia-glcore.so.340.108
usr/lib64/nvidia/libnvidia-glsi.so.340.108
usr/lib64/nvidia/libnvidia-ifr.so.340.108
usr/lib64/nvidia/libnvidia-ml.so.340.108
usr/lib64/nvidia/libnvidia-tls.so.340.108
usr/lib64/nvidia/xorg/
usr/lib64/nvidia/xorg/libglx.so.340.108
usr/lib64/vdpau/
usr/lib64/vdpau/libvdpau_nvidia.so.340.108
usr/lib64/xorg/
usr/lib64/xorg/modules/
usr/lib64/xorg/modules/drivers/
usr/lib64/xorg/modules/drivers/nvidia_drv.so
usr/man/
usr/man/man1/
usr/man/man1/nvidia-cuda-mps-control.1.gz
usr/man/man1/nvidia-modprobe.1.gz
usr/man/man1/nvidia-persistenced.1.gz
usr/man/man1/nvidia-settings.1.gz
usr/man/man1/nvidia-smi.1.gz
usr/man/man1/nvidia-xconfig.1.gz
usr/share/
usr/share/X11/
usr/share/X11/xorg.conf.d/
usr/share/X11/xorg.conf.d/10-nvidia-drm-outputclass.conf
usr/share/applications/
usr/share/applications/nvidia-settings.desktop
usr/share/nvidia/
usr/share/nvidia/nvidia-application-profiles-340.108-key-documentation
usr/share/nvidia/nvidia-application-profiles-340.108-rc
usr/share/pixmaps/
usr/share/pixmaps/nvidia-settings.png
e il 'doinst.sh'di risulta

Codice: Seleziona tutto

if [ -x /usr/bin/update-desktop-database ]; then
  /usr/bin/update-desktop-database -q usr/share/applications
fi


( cd usr/lib64 ; rm -rf libnvidia-compiler.so )
( cd usr/lib64 ; ln -sf libnvidia-compiler.so.340.108 libnvidia-compiler.so )
( cd usr/lib64 ; rm -rf libnvidia-opencl.so )
( cd usr/lib64 ; ln -sf libnvidia-opencl.so.1 libnvidia-opencl.so )
( cd usr/lib64 ; rm -rf libnvidia-opencl.so.1 )
( cd usr/lib64 ; ln -sf libnvidia-opencl.so.340.108 libnvidia-opencl.so.1 )
( cd usr/lib64/nvidia ; rm -rf libEGL.so )
( cd usr/lib64/nvidia ; ln -sf libEGL.so.1 libEGL.so )
( cd usr/lib64/nvidia ; rm -rf libEGL.so.1 )
( cd usr/lib64/nvidia ; ln -sf libEGL.so.340.108 libEGL.so.1 )
( cd usr/lib64/nvidia ; rm -rf libGL.so )
( cd usr/lib64/nvidia ; ln -sf libGL.so.1 libGL.so )
( cd usr/lib64/nvidia ; rm -rf libGL.so.1 )
( cd usr/lib64/nvidia ; ln -sf libGL.so.340.108 libGL.so.1 )
( cd usr/lib64/nvidia ; rm -rf libGLESv1_CM.so )
( cd usr/lib64/nvidia ; ln -sf libGLESv1_CM.so.1 libGLESv1_CM.so )
( cd usr/lib64/nvidia ; rm -rf libGLESv1_CM.so.1 )
( cd usr/lib64/nvidia ; ln -sf libGLESv1_CM.so.340.108 libGLESv1_CM.so.1 )
( cd usr/lib64/nvidia ; rm -rf libGLESv2.so )
( cd usr/lib64/nvidia ; ln -sf libGLESv2.so.2 libGLESv2.so )
( cd usr/lib64/nvidia ; rm -rf libGLESv2.so.2 )
( cd usr/lib64/nvidia ; ln -sf libGLESv2.so.340.108 libGLESv2.so.2 )
( cd usr/lib64/nvidia ; rm -rf libcuda.so )
( cd usr/lib64/nvidia ; ln -sf libcuda.so.1 libcuda.so )
( cd usr/lib64/nvidia ; rm -rf libcuda.so.1 )
( cd usr/lib64/nvidia ; ln -sf libcuda.so.340.108 libcuda.so.1 )
( cd usr/lib64/nvidia ; rm -rf libnvcuvid.so )
( cd usr/lib64/nvidia ; ln -sf libnvcuvid.so.1 libnvcuvid.so )
( cd usr/lib64/nvidia ; rm -rf libnvcuvid.so.1 )
( cd usr/lib64/nvidia ; ln -sf libnvcuvid.so.340.108 libnvcuvid.so.1 )
( cd usr/lib64/nvidia ; rm -rf libnvidia-cfg.so )
( cd usr/lib64/nvidia ; ln -sf libnvidia-cfg.so.1 libnvidia-cfg.so )
( cd usr/lib64/nvidia ; rm -rf libnvidia-cfg.so.1 )
( cd usr/lib64/nvidia ; ln -sf libnvidia-cfg.so.340.108 libnvidia-cfg.so.1 )
( cd usr/lib64/nvidia ; rm -rf libnvidia-eglcore.so )
( cd usr/lib64/nvidia ; ln -sf libnvidia-eglcore.so.340.108 libnvidia-eglcore.so )
( cd usr/lib64/nvidia ; rm -rf libnvidia-encode.so )
( cd usr/lib64/nvidia ; ln -sf libnvidia-encode.so.1 libnvidia-encode.so )
( cd usr/lib64/nvidia ; rm -rf libnvidia-encode.so.1 )
( cd usr/lib64/nvidia ; ln -sf libnvidia-encode.so.340.108 libnvidia-encode.so.1 )
( cd usr/lib64/nvidia ; rm -rf libnvidia-fbc.so )
( cd usr/lib64/nvidia ; ln -sf libnvidia-fbc.so.1 libnvidia-fbc.so )
( cd usr/lib64/nvidia ; rm -rf libnvidia-fbc.so.1 )
( cd usr/lib64/nvidia ; ln -sf libnvidia-fbc.so.340.108 libnvidia-fbc.so.1 )
( cd usr/lib64/nvidia ; rm -rf libnvidia-glcore.so )
( cd usr/lib64/nvidia ; ln -sf libnvidia-glcore.so.340.108 libnvidia-glcore.so )
( cd usr/lib64/nvidia ; rm -rf libnvidia-glsi.so )
( cd usr/lib64/nvidia ; ln -sf libnvidia-glsi.so.340.108 libnvidia-glsi.so )
( cd usr/lib64/nvidia ; rm -rf libnvidia-ifr.so )
( cd usr/lib64/nvidia ; ln -sf libnvidia-ifr.so.1 libnvidia-ifr.so )
( cd usr/lib64/nvidia ; rm -rf libnvidia-ifr.so.1 )
( cd usr/lib64/nvidia ; ln -sf libnvidia-ifr.so.340.108 libnvidia-ifr.so.1 )
( cd usr/lib64/nvidia ; rm -rf libnvidia-ml.so )
( cd usr/lib64/nvidia ; ln -sf libnvidia-ml.so.1 libnvidia-ml.so )
( cd usr/lib64/nvidia ; rm -rf libnvidia-ml.so.1 )
( cd usr/lib64/nvidia ; ln -sf libnvidia-ml.so.340.108 libnvidia-ml.so.1 )
( cd usr/lib64/nvidia ; rm -rf libnvidia-tls.so )
( cd usr/lib64/nvidia ; ln -sf libnvidia-tls.so.340.108 libnvidia-tls.so )
( cd usr/lib64/nvidia/xorg ; rm -rf libglx.so )
( cd usr/lib64/nvidia/xorg ; ln -sf libglx.so.340.108 libglx.so )
( cd usr/lib64/nvidia/xorg ; rm -rf libglx.so.1 )
( cd usr/lib64/nvidia/xorg ; ln -sf libglx.so.340.108 libglx.so.1 )
( cd usr/lib64/vdpau ; rm -rf libvdpau_nvidia.so )
( cd usr/lib64/vdpau ; ln -sf libvdpau_nvidia.so.1 libvdpau_nvidia.so )
( cd usr/lib64/vdpau ; rm -rf libvdpau_nvidia.so.1 )
( cd usr/lib64/vdpau ; ln -sf libvdpau_nvidia.so.340.108 libvdpau_nvidia.so.1 )
da cui si dovrebbe capire più o meno tutto della questione, in primis che l'approccio 'nvidia-switch' andrebbe definitivamente accantonato.

Ci saranno sicuramente errori; qui posso solo dire che il pacchetto, una volta installato, non influisce sul corretto funzionamento del sistema.
Ma ciò non è sufficiente, ovviamente.

Quindi lascio a te l'onore e l'onere di portare aventi l'impresa.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3797
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da joe »

Posso provare...
Su LQ ho visto anche altri approcci, ad esempio per il driver legacy390 e anche altri, dove compilano l'installer, in quel caso è open, nel 340 non lo so... ma può darsi sia simile. Poi utilizzano quello per installare un po' tutto specificando però un sacco di "Prefix" se ben ricordo, in modo che non vada a sovrascrivere roba di sistema.
Ad esempio qui viene proposto uno script che evita l'utilizzo dell'odioso nvidia-switch:

https://www.linuxquestions.org/question ... 175713113/

L'escamotage prevede anche l'utilizzo di una direttiva nel file in xorg.conf.d/ che va a specificare dove andare a pescare le librerie GLX nvidia posizionate in un percorso ad hoc ( /usr/lib{,64}/nvidia/xorg), che quindi non va a sovrascrivere roba stock di xorg.

La soluzione sembra sensata, ma non mi convince del tutto per mia ignoranza:
siamo sicuri che poi quelle librerie siano "trovate" da tutti i programmi che ne hanno bisogno?
Può essere che ad esempio quando si compila qualcosa si abbia bisogno di andarsi a collegare proprio quelle librerie e che visto il posizionamento non sia così evidente al programma di build?
Insomma alla fine non c'è il rischio che compilazioni lanciate lisce vadano a legarsi alle librerie stock piuttosto che a quelle nvidia usate da xorg?

Probabilmente non c'è questa eventualità, forse perché le librerie che finiscono lì servono solamente a xorg per scopi che ignoro e che non influiscono su l'integrazione con altri programmi.

L'approccio di Arch sembra più semplice, ma devo rivederlo meglio.
Prima di propormi come maintainer sarebbe meglio ottenere una soluzione in locale, quindi proporla magari in mailing list o su LQ ed eventualmente se qualcuno più esperto di me non ha l'hardware per testarla e prendersi carico del pacchetto allora potrei anche propormi io.

rik70
Iper Master
Iper Master
Messaggi: 2492
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da rik70 »

joe ha scritto:
mer 15 giu 2022, 21:41
Insomma alla fine non c'è il rischio che compilazioni lanciate lisce vadano a legarsi alle librerie stock piuttosto che a quelle nvidia usate da xorg?
Così deve essere. Non devi compilare "contro" le librerie proprietarie, cosa per cui dovresti avere anche gli header proprietari installati nel sistema.
Fosse diversamente, una volta installati il pacchetto dei driver, non dovrebbe più funzionare la distribuzione.

Ad ogni modo, quell'approccio a mio modesto avviso è troppo complicato.
Che senso ha usare l'installer quando nonostante gli 800 flag sei costretto poi a ripulire ciò che in ogni a caso installa e non dovrebbe?

Alla fine della fiera il lavoro sporco lo fa ciò che viene piazzato in /etc - sia la parte opencl che quella ld.conf relativa alle librerie proprietarie - e in '/usr/share/X11/xorg.conf.d/[10-nvidia-drm-outputclass.conf]'per quanto riguarda Xorg. Anche in quest'ultimo caso la soluzione appare più corretta, perché a livello di pacchetto/vendor è lì che dovrebbe "scrivere", mentre /etc/X11/xorg.conf.d andrebbe utilizzato per sovrascrivere le impostazioni di sistema.

Ma queste poi sono solo chiacchiere: bisogna installare e provare. Tanto sulla Slackware il "formattone" risolutivo non è un'opzione e ciò che fai a livello di creazione dei pacchetti è perfettamente controllabile.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3797
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da joe »

Ok, quell'approccio non è certamente banale, resta il fatto che in ogni caso bisogna sapere cosa si va ad installare e sarebbe meglio sapere anche perché e a cosa serve. Se dai un'occhiata allo slackbuild del driver in versione "non legacy":

https://slackbuilds.org/slackbuilds/15. ... SlackBuild

ecco che anche lì l'approccio è quello:
- compilano l'installer da sorgenti
- lanciano l'installer con ennemila flags
- poi vanno a rimuovere e spostare eventuali files che persistono ad essere installati nel posto sbagliato (nonostante i flags)
- l'installer in questo slackbuild sembra non riuscire ad evitare di sporcare il file system neanche durante la creazione del pacchetto, infatti alcuni file vengono proprio posizionati sul sistema in uso e non nella DESTDIR del pacchetto, cioè, dopo uno deve andarsi a cercare i files sparpagliati dall'installer qua e la... no buono.

Se ben ricordo da qualche lettura di anni fa in Arch pacchettizzano utilizzando una modalità denominata "fake root", così al volo non so bene come funziona, ma la cosa sarebbe utile anche in questo caso per assicurarci 2 obiettivi:

1. capire cosa (e dove e con che links) effettivamente va ad installare l'installer "a briglia sciolta" (cioè anche senza ricompilarlo e senza flags, diciamo lanciandolo liscio)

2. non sporcare il sistema durante la creazione del pacchetto

Evidentemente in Arch avranno seguito una procedura simile per giungere al PKGBUILD che di fatto sostituisce all'installer nvidia l'installazione manuale dei files piazzandoli dove richiesto sia dall'organizzazione del sistema che dal corretto funzionamento del driver stesso.

Su Slackware si può copiare sperando che tutto funzioni, ma sarebbe forse il caso di rifare il percorso da zero, perché non si sa mai.
Non è neanche così immediato capire se poi qualcosa non funziona. Ad esempio se io non fossi inciampato nell'errore durante la compilazione di ffmpeg, quando mai mi sarei accorto che libOpenCL.so dava problemi?

Stringendo il discorso:
avete qualche consiglio per capire esattamente cosa vorrebbe fare l'installer nvidia?
Come potrei fare a lanciarlo tipo in "fake root" per vedere quali files/links aggiunge?

rik70
Iper Master
Iper Master
Messaggi: 2492
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da rik70 »

joe ha scritto:
gio 16 giu 2022, 11:50
Come potrei fare a lanciarlo tipo in "fake root" per vedere quali files/links aggiunge?
Esportando le variabili $PKG e $LIBDIRSUFFIX prima di lanciare l'installer?
Controlla lo script nella parte in cui viene invocato 'nvidia-installer' - immagino richieda i privilegi di root.

Avatar utente
joe
Iper Master
Iper Master
Messaggi: 3797
Iscritto il: ven 27 apr 2007, 11:21
Slackware: 15.0
Kernel: 5.15.38
Desktop: dwm

Re: Driver Nvidia e compilazione FFmpeg

Messaggio da joe »

Sì mi servirebbe un modo, che magari c'è ed è anche facile, per poter andare a cercare tipo i files più recenti aggiunti al file system. Perché le variabili in questione non danno la garanzia che qualche altro pezzetto vada a finire fuori dalla dir target.

Forse per fakeroot io intendevo non solo una questione di permessi, ce è quello a cui serve il vero fakeroot se non sbaglio, ma anche installare in una "root" fittizia in modo da ottenere di fatto il contenuto del futuro pacchetto, coi percorsi scelti da nvidia però e non forzati da me.
Tanto per capire cosa fa di suo...

Rispondi