Möjligt att bygga .so-fil i Docker och kopiera till lokalt filsystem?

Permalänk
Medlem

Möjligt att bygga .so-fil i Docker och kopiera till lokalt filsystem?

Tråden kanske egentligen hör hemma mer i Programmeringsdelen av forumet, men kändes rimligt att lägga den här också.

Jag har ett Nvidia RTX3080 där hårdvaruacceleration för video inte fungerar out of the box i Firefox på Kubuntu 24.04. Jag har fått ordning på det med hjälp av https://github.com/elFarto/nvidia-vaapi-driver. Där bygger man en .so-fil som läggs under /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so. Själva installationen från Github-repot har dock en stor mängd dev-dependencies och jag började fundera på om det är möjligt att nyttja Docker för att bygga och sedan kopiera output från bygget till mitt lokala filsystem.

Jag är nybörjare på hur .so-filer och sådant är uppbyggt i Linux, så tänkte kolla om det ens är lönt att försöka bygga i Docker, eller om det måste byggas lokalt för att ens fungera?

Nån mer erfaren inom Linux-programmering som kan ge en hjälpande hand?

Permalänk
Medlem

Absolut går det, använd -v för volume mount där du tar en lokal sökväg och monterar den i docker-containern. När du har kompilerat kan du kopiera den till den monterade volymen så syns den lokal också.

so-filer bryr sig inte alls om den är byggt i en container eller inte. Det enda som kan göra skillnad är vilken libc som används, kör du Alpine kommer den köra musl-libc, kör du Ubuntu (eller nästan vad som helst annat) så har du gnu-libc o.s.v. Så enklast är att köra samma dist och version av dist i containern som utanför (i ditt fall Ubuntu 24.04).

Permalänk
Medlem
Skrivet av dlq84:

Absolut går det, använd -v för volume mount där du tar en lokal sökväg och monterar den i docker-containern. När du har kompilerat kan du kopiera den till den monterade volymen så syns den lokal också.

so-filer bryr sig inte alls om den är byggt i en container eller inte. Det enda som kan göra skillnad är vilken libc som används, kör du Alpine kommer den köra musl-libc, kör du Ubuntu (eller nästan vad som helst annat) så har du gnu-libc o.s.v. Så enklast är att köra samma dist och version av dist i containern som utanför (i ditt fall Ubuntu 24.04).

Tack för hjälpen - jag gör ett försök att bygga det i en container.

Permalänk
Medlem

Kanske något så här?

Dockerfile:

FROM docker.io/library/ubuntu:24.04 RUN apt-get update && apt-get install -y \ meson gstreamer1.0-plugins-bad libffmpeg-nvenc-dev libva-dev libegl-dev \ git \ libgstreamer-plugins-bad1.0-dev \ && apt-get clean && rm -rf /var/lib/apt/lists/* WORKDIR /tmp

Bygge av image samt kompilera drivern:

docker build -t nvidia-vaapi-driver-builder . mkdir -p /tmp/nvidia-vaapi-driver docker run -it --rm -v /tmp/nvidia-vaapi-driver:/tmp/nvidia-vaapi-driver \ -u $(id -u):$(id -g) \ nvidia-vaapi-driver-builder /bin/bash -c "\ git clone https://github.com/elFarto/nvidia-vaapi-driver.git && \ cd nvidia-vaapi-driver && \ meson setup build && \ meson compile -C build" ls -l /tmp/nvidia-vaapi-driver/build/nvidia_drv_video.so

so-filen ligger nu lokalt i /tmp/nvidia-vaapi-driver/build/nvidia_drv_video.so

Permalänk
Medlem
Skrivet av uvry:

Kanske något så här?

Dockerfile:

FROM docker.io/library/ubuntu:24.04 RUN apt-get update && apt-get install -y \ meson gstreamer1.0-plugins-bad libffmpeg-nvenc-dev libva-dev libegl-dev \ git \ libgstreamer-plugins-bad1.0-dev \ && apt-get clean && rm -rf /var/lib/apt/lists/* WORKDIR /tmp

Bygge av image samt kompilera drivern:

docker build -t nvidia-vaapi-driver-builder . mkdir -p /tmp/nvidia-vaapi-driver docker run -it --rm -v /tmp/nvidia-vaapi-driver:/tmp/nvidia-vaapi-driver \ -u $(id -u):$(id -g) \ nvidia-vaapi-driver-builder /bin/bash -c "\ git clone https://github.com/elFarto/nvidia-vaapi-driver.git && \ cd nvidia-vaapi-driver && \ meson setup build && \ meson compile -C build" ls -l /tmp/nvidia-vaapi-driver/build/nvidia_drv_video.so

so-filen ligger nu lokalt i /tmp/nvidia-vaapi-driver/build/nvidia_drv_video.so

Oj, tack så mycket för en bra grund - ska testas så fort jag får tid!