Skip to content

Commit 4b8d664

Browse files
authored
Archimage 4.1 - use Nvidia drivers from host system (#28)
* Update sample-junest.sh, the AppRun and AppImage name * Update sample-next-junest.sh, the AppRun and AppImage name * Update archimage-cli, only the version * Update README.md, comparison between v4 and v4.1, change the core code to use in other Archimages
1 parent a2e1432 commit 4b8d664

File tree

4 files changed

+72
-80
lines changed

4 files changed

+72
-80
lines changed

README.md

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -275,45 +275,44 @@ If you do all this correctly, the package will be even smaller.
275275

276276
------------------------------------------------------------------------
277277
# Hardware Acceleration
278-
If you are an Nvidia user, hardware accelleration is provided by [Conty](https://github.com/Kron4ek/Conty). At first start it will install Nvidia drivers locally to allow the builtin Arch Linux container the use of hardware accelleration.
279-
280-
In this video I'll show how Nvidia drivers are detected by running a v4 Archimage
281-
282-
https://github.com/user-attachments/assets/782dd318-8176-471d-ade2-df2a660e21fc
278+
If you are an Nvidia user, hardware accelleration is provided by [Conty](https://github.com/Kron4ek/Conty). At first start it will copy Nvidia libraries locally to allow the builtin Arch Linux container the use of hardware accelleration.
283279

284280
According to the Conty project, the drivers will be placed in a "Conty" directory located in $HOME/.local/share. If you already use a Conty container or run other Archimages v4 or higher, you will be able to use the same drivers.
285281

286282
The check is enabled in the AppRun, the script inside the AppImage, using the variable `NVIDIA_ON` with a value equal to `1`. To disable it, simply assign a different value to this variable, for example `0`. The creators of the AppImage will be able to decide whether to enable it during the creation of the script, via `archimage-cli`, from version 4 onwards, or they can enable it manually.
287283

284+
- Archimage v4 was able to download a script that used a mini `conty.sh` to compile the Nvidia drivers using the official online installer, and it took a few minutes to complete the process
285+
- Archimage v4.1 instead is able to intercept the drivers installed on the system and copy them locally, taking less than a second
286+
287+
**It is recommended to keep your Archimages up to date with the portion of the code available in new releases.**
288+
288289
<details>
289290
<summary>Click here to see the part of the AppRun that handles Nvidia drivers</summary>
290291

291292
```
292293
[ -z "$NVIDIA_ON" ] && NVIDIA_ON=1
293294
if [ "$NVIDIA_ON" = 1 ]; then
294-
DATADIR="${XDG_DATA_HOME:-$HOME/.local/share}"
295-
CONTY_DIR="${DATADIR}/Conty/overlayfs_shared"
296-
CACHEDIR="${XDG_CACHE_HOME:-$HOME/.cache}"
297-
[ -f /sys/module/nvidia/version ] && nvidia_driver_version="$(cat /sys/module/nvidia/version)"
298-
[ -f "${CONTY_DIR}"/nvidia/current-nvidia-version ] && nvidia_driver_conty="$(cat "${CONTY_DIR}"/nvidia/current-nvidia-version)"
299-
if [ "${nvidia_driver_version}" != "${nvidia_driver_conty}" ]; then
300-
if command -v curl >/dev/null 2>&1; then
301-
if ! curl --output /dev/null --silent --head --fail https://github.com 1>/dev/null; then
302-
notify-send "You are offline, cannot use Nvidia drivers"
303-
else
304-
notify-send "Configuring Nvidia drivers for this AppImage..."
305-
mkdir -p "${CACHEDIR}" && cd "${CACHEDIR}" || exit 1
306-
curl -Ls "https://raw.githubusercontent.com/ivan-hc/ArchImage/main/nvidia-junest.sh" > nvidia-junest.sh
307-
chmod a+x ./nvidia-junest.sh && ./nvidia-junest.sh
308-
fi
309-
else
310-
notify-send "Missing \"curl\" command, cannot use Nvidia drivers"
311-
echo "You need \"curl\" to download this script"
312-
fi
313-
fi
314-
[ -d "${CONTY_DIR}"/up/usr/bin ] && export PATH="${PATH}":"${CONTY_DIR}"/up/usr/bin:"${PATH}"
315-
[ -d "${CONTY_DIR}"/up/usr/lib ] && export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":"${CONTY_DIR}"/up/usr/lib:"${LD_LIBRARY_PATH}"
316-
[ -d "${CONTY_DIR}"/up/usr/share ] && export XDG_DATA_DIRS="${XDG_DATA_DIRS}":"${CONTY_DIR}"/up/usr/share:"${XDG_DATA_DIRS}"
295+
DATADIR="${XDG_DATA_HOME:-$HOME/.local/share}"
296+
CONTY_DIR="${DATADIR}/Conty/overlayfs_shared"
297+
[ -f /sys/module/nvidia/version ] && nvidia_driver_version="$(cat /sys/module/nvidia/version)"
298+
if [ -n "$nvidia_driver_version" ]; then
299+
mkdir -p "${CONTY_DIR}"/nvidia "${CONTY_DIR}"/up/usr/lib "${CONTY_DIR}"/up/usr/share
300+
nvidia_data_dirs="egl glvnd nvidia vulkan"
301+
for d in $nvidia_data_dirs; do [ ! -d "${CONTY_DIR}"/up/usr/share/"$d" ] && ln -s /usr/share/"$d" "${CONTY_DIR}"/up/usr/share/ 2>/dev/null; done
302+
[ ! -f "${CONTY_DIR}"/nvidia/current-nvidia-version ] && echo "${nvidia_driver_version}" > "${CONTY_DIR}"/nvidia/current-nvidia-version
303+
[ -f "${CONTY_DIR}"/nvidia/current-nvidia-version ] && nvidia_driver_conty=$(cat "${CONTY_DIR}"/nvidia/current-nvidia-version)
304+
if [ "${nvidia_driver_version}" != "${nvidia_driver_conty}" ]; then
305+
rm -f "${CONTY_DIR}"/up/usr/lib/*; echo "${nvidia_driver_version}" > "${CONTY_DIR}"/nvidia/current-nvidia-version
306+
fi
307+
/sbin/ldconfig -p > "${CONTY_DIR}"/nvidia/host_libs
308+
grep -i "nvidia\|libcuda" "${CONTY_DIR}"/nvidia/host_libs | cut -d ">" -f 2 > "${CONTY_DIR}"/nvidia/host_nvidia_libs
309+
libnv_paths=$(grep "libnv" "${CONTY_DIR}"/nvidia/host_libs | cut -d ">" -f 2)
310+
for f in $libnv_paths; do strings "${f}" | grep -qi -m 1 "nvidia" && echo "${f}" >> "${CONTY_DIR}"/nvidia/host_nvidia_libs; done
311+
nvidia_libs=$(cat "${CONTY_DIR}"/nvidia/host_nvidia_libs)
312+
for n in $nvidia_libs; do libname=$(echo "$n" | sed 's:.*/::') && [ ! -f "${CONTY_DIR}"/up/usr/lib/"$libname" ] && cp "$n" "${CONTY_DIR}"/up/usr/lib/; done
313+
[ -d "${CONTY_DIR}"/up/usr/lib ] && export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":"${CONTY_DIR}"/up/usr/lib:"${LD_LIBRARY_PATH}"
314+
[ -d "${CONTY_DIR}"/up/usr/share ] && export XDG_DATA_DIRS="${XDG_DATA_DIRS}":"${CONTY_DIR}"/up/usr/share:"${XDG_DATA_DIRS}"
315+
fi
317316
fi
318317
```
319318

@@ -360,9 +359,6 @@ This is a list of the AppImages I've built until I wrote this brief guide:
360359
- AppRun script very minimal and easy to configure;
361360
- all programs for Arch Linux within AppImage's reach, therefore one of the most extensive software parks in the GNU/Linux panorama.
362361

363-
### Disadvantages
364-
- hardware accelleration is provided by [Conty](https://github.com/Kron4ek/Conty), so the first start will install Nvidia drivers locally to allow the builtin Arch Linux container the use of hardware accelleration. This may take seconds or minutes, depending on how fast your internet connection is. The `curl` command must be present.
365-
366362
------------------------------------------------------------------------
367363

368364
# Drafts

archimage-cli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env bash
22

3-
VERSION="4"
3+
VERSION="4.1"
44

55
DIR="$( cd "$( dirname "$0" )" && pwd )"
66
ARCHIMAGE_REPO="https://raw.githubusercontent.com/ivan-hc/ArchImage/main"

sample-junest.sh

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -205,29 +205,27 @@ function _create_AppRun() {
205205
206206
[ -z "$NVIDIA_ON" ] && NVIDIA_ON=0
207207
if [ "$NVIDIA_ON" = 1 ]; then
208-
DATADIR="${XDG_DATA_HOME:-$HOME/.local/share}"
209-
CONTY_DIR="${DATADIR}/Conty/overlayfs_shared"
210-
CACHEDIR="${XDG_CACHE_HOME:-$HOME/.cache}"
211-
[ -f /sys/module/nvidia/version ] && nvidia_driver_version="$(cat /sys/module/nvidia/version)"
212-
[ -f "${CONTY_DIR}"/nvidia/current-nvidia-version ] && nvidia_driver_conty="$(cat "${CONTY_DIR}"/nvidia/current-nvidia-version)"
213-
if [ "${nvidia_driver_version}" != "${nvidia_driver_conty}" ]; then
214-
if command -v curl >/dev/null 2>&1; then
215-
if ! curl --output /dev/null --silent --head --fail https://github.com 1>/dev/null; then
216-
notify-send "You are offline, cannot use Nvidia drivers"
217-
else
218-
notify-send "Configuring Nvidia drivers for this AppImage..."
219-
mkdir -p "${CACHEDIR}" && cd "${CACHEDIR}" || exit 1
220-
curl -Ls "https://raw.githubusercontent.com/ivan-hc/ArchImage/main/nvidia-junest.sh" > nvidia-junest.sh
221-
chmod a+x ./nvidia-junest.sh && ./nvidia-junest.sh
222-
fi
223-
else
224-
notify-send "Missing \"curl\" command, cannot use Nvidia drivers"
225-
echo "You need \"curl\" to download this script"
226-
fi
227-
fi
228-
[ -d "${CONTY_DIR}"/up/usr/bin ] && export PATH="${PATH}":"${CONTY_DIR}"/up/usr/bin:"${PATH}"
229-
[ -d "${CONTY_DIR}"/up/usr/lib ] && export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":"${CONTY_DIR}"/up/usr/lib:"${LD_LIBRARY_PATH}"
230-
[ -d "${CONTY_DIR}"/up/usr/share ] && export XDG_DATA_DIRS="${XDG_DATA_DIRS}":"${CONTY_DIR}"/up/usr/share:"${XDG_DATA_DIRS}"
208+
DATADIR="${XDG_DATA_HOME:-$HOME/.local/share}"
209+
CONTY_DIR="${DATADIR}/Conty/overlayfs_shared"
210+
[ -f /sys/module/nvidia/version ] && nvidia_driver_version="$(cat /sys/module/nvidia/version)"
211+
if [ -n "$nvidia_driver_version" ]; then
212+
mkdir -p "${CONTY_DIR}"/nvidia "${CONTY_DIR}"/up/usr/lib "${CONTY_DIR}"/up/usr/share
213+
nvidia_data_dirs="egl glvnd nvidia vulkan"
214+
for d in $nvidia_data_dirs; do [ ! -d "${CONTY_DIR}"/up/usr/share/"$d" ] && ln -s /usr/share/"$d" "${CONTY_DIR}"/up/usr/share/ 2>/dev/null; done
215+
[ ! -f "${CONTY_DIR}"/nvidia/current-nvidia-version ] && echo "${nvidia_driver_version}" > "${CONTY_DIR}"/nvidia/current-nvidia-version
216+
[ -f "${CONTY_DIR}"/nvidia/current-nvidia-version ] && nvidia_driver_conty=$(cat "${CONTY_DIR}"/nvidia/current-nvidia-version)
217+
if [ "${nvidia_driver_version}" != "${nvidia_driver_conty}" ]; then
218+
rm -f "${CONTY_DIR}"/up/usr/lib/*; echo "${nvidia_driver_version}" > "${CONTY_DIR}"/nvidia/current-nvidia-version
219+
fi
220+
/sbin/ldconfig -p > "${CONTY_DIR}"/nvidia/host_libs
221+
grep -i "nvidia\|libcuda" "${CONTY_DIR}"/nvidia/host_libs | cut -d ">" -f 2 > "${CONTY_DIR}"/nvidia/host_nvidia_libs
222+
libnv_paths=$(grep "libnv" "${CONTY_DIR}"/nvidia/host_libs | cut -d ">" -f 2)
223+
for f in $libnv_paths; do strings "${f}" | grep -qi -m 1 "nvidia" && echo "${f}" >> "${CONTY_DIR}"/nvidia/host_nvidia_libs; done
224+
nvidia_libs=$(cat "${CONTY_DIR}"/nvidia/host_nvidia_libs)
225+
for n in $nvidia_libs; do libname=$(echo "$n" | sed 's:.*/::') && [ ! -f "${CONTY_DIR}"/up/usr/lib/"$libname" ] && cp "$n" "${CONTY_DIR}"/up/usr/lib/; done
226+
[ -d "${CONTY_DIR}"/up/usr/lib ] && export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":"${CONTY_DIR}"/up/usr/lib:"${LD_LIBRARY_PATH}"
227+
[ -d "${CONTY_DIR}"/up/usr/share ] && export XDG_DATA_DIRS="${XDG_DATA_DIRS}":"${CONTY_DIR}"/up/usr/share:"${XDG_DATA_DIRS}"
228+
fi
231229
fi
232230
233231
BINDINGS=""
@@ -552,4 +550,4 @@ if test -f ./*.AppImage; then
552550
rm -R -f ./*archimage*.AppImage
553551
fi
554552
ARCH=x86_64 ./appimagetool --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 20 ./$APP.AppDir
555-
mv ./*AppImage ./"$(cat ./"$APP".AppDir/*.desktop | grep 'Name=' | head -1 | cut -c 6- | sed 's/ /-/g')"_"$VERSION"-archimage4-x86_64.AppImage
553+
mv ./*AppImage ./"$(cat ./"$APP".AppDir/*.desktop | grep 'Name=' | head -1 | cut -c 6- | sed 's/ /-/g')"_"$VERSION"-archimage4.1-x86_64.AppImage

sample-next-junest.sh

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -204,29 +204,27 @@ function _create_AppRun() {
204204
205205
[ -z "$NVIDIA_ON" ] && NVIDIA_ON=0
206206
if [ "$NVIDIA_ON" = 1 ]; then
207-
DATADIR="${XDG_DATA_HOME:-$HOME/.local/share}"
208-
CONTY_DIR="${DATADIR}/Conty/overlayfs_shared"
209-
CACHEDIR="${XDG_CACHE_HOME:-$HOME/.cache}"
210-
[ -f /sys/module/nvidia/version ] && nvidia_driver_version="$(cat /sys/module/nvidia/version)"
211-
[ -f "${CONTY_DIR}"/nvidia/current-nvidia-version ] && nvidia_driver_conty="$(cat "${CONTY_DIR}"/nvidia/current-nvidia-version)"
212-
if [ "${nvidia_driver_version}" != "${nvidia_driver_conty}" ]; then
213-
if command -v curl >/dev/null 2>&1; then
214-
if ! curl --output /dev/null --silent --head --fail https://github.com 1>/dev/null; then
215-
notify-send "You are offline, cannot use Nvidia drivers"
216-
else
217-
notify-send "Configuring Nvidia drivers for this AppImage..."
218-
mkdir -p "${CACHEDIR}" && cd "${CACHEDIR}" || exit 1
219-
curl -Ls "https://raw.githubusercontent.com/ivan-hc/ArchImage/main/nvidia-junest.sh" > nvidia-junest.sh
220-
chmod a+x ./nvidia-junest.sh && ./nvidia-junest.sh
221-
fi
222-
else
223-
notify-send "Missing \"curl\" command, cannot use Nvidia drivers"
224-
echo "You need \"curl\" to download this script"
225-
fi
226-
fi
227-
[ -d "${CONTY_DIR}"/up/usr/bin ] && export PATH="${PATH}":"${CONTY_DIR}"/up/usr/bin:"${PATH}"
228-
[ -d "${CONTY_DIR}"/up/usr/lib ] && export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":"${CONTY_DIR}"/up/usr/lib:"${LD_LIBRARY_PATH}"
229-
[ -d "${CONTY_DIR}"/up/usr/share ] && export XDG_DATA_DIRS="${XDG_DATA_DIRS}":"${CONTY_DIR}"/up/usr/share:"${XDG_DATA_DIRS}"
207+
DATADIR="${XDG_DATA_HOME:-$HOME/.local/share}"
208+
CONTY_DIR="${DATADIR}/Conty/overlayfs_shared"
209+
[ -f /sys/module/nvidia/version ] && nvidia_driver_version="$(cat /sys/module/nvidia/version)"
210+
if [ -n "$nvidia_driver_version" ]; then
211+
mkdir -p "${CONTY_DIR}"/nvidia "${CONTY_DIR}"/up/usr/lib "${CONTY_DIR}"/up/usr/share
212+
nvidia_data_dirs="egl glvnd nvidia vulkan"
213+
for d in $nvidia_data_dirs; do [ ! -d "${CONTY_DIR}"/up/usr/share/"$d" ] && ln -s /usr/share/"$d" "${CONTY_DIR}"/up/usr/share/ 2>/dev/null; done
214+
[ ! -f "${CONTY_DIR}"/nvidia/current-nvidia-version ] && echo "${nvidia_driver_version}" > "${CONTY_DIR}"/nvidia/current-nvidia-version
215+
[ -f "${CONTY_DIR}"/nvidia/current-nvidia-version ] && nvidia_driver_conty=$(cat "${CONTY_DIR}"/nvidia/current-nvidia-version)
216+
if [ "${nvidia_driver_version}" != "${nvidia_driver_conty}" ]; then
217+
rm -f "${CONTY_DIR}"/up/usr/lib/*; echo "${nvidia_driver_version}" > "${CONTY_DIR}"/nvidia/current-nvidia-version
218+
fi
219+
/sbin/ldconfig -p > "${CONTY_DIR}"/nvidia/host_libs
220+
grep -i "nvidia\|libcuda" "${CONTY_DIR}"/nvidia/host_libs | cut -d ">" -f 2 > "${CONTY_DIR}"/nvidia/host_nvidia_libs
221+
libnv_paths=$(grep "libnv" "${CONTY_DIR}"/nvidia/host_libs | cut -d ">" -f 2)
222+
for f in $libnv_paths; do strings "${f}" | grep -qi -m 1 "nvidia" && echo "${f}" >> "${CONTY_DIR}"/nvidia/host_nvidia_libs; done
223+
nvidia_libs=$(cat "${CONTY_DIR}"/nvidia/host_nvidia_libs)
224+
for n in $nvidia_libs; do libname=$(echo "$n" | sed 's:.*/::') && [ ! -f "${CONTY_DIR}"/up/usr/lib/"$libname" ] && cp "$n" "${CONTY_DIR}"/up/usr/lib/; done
225+
[ -d "${CONTY_DIR}"/up/usr/lib ] && export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":"${CONTY_DIR}"/up/usr/lib:"${LD_LIBRARY_PATH}"
226+
[ -d "${CONTY_DIR}"/up/usr/share ] && export XDG_DATA_DIRS="${XDG_DATA_DIRS}":"${CONTY_DIR}"/up/usr/share:"${XDG_DATA_DIRS}"
227+
fi
230228
fi
231229
232230
BINDS=" --dev-bind /dev /dev \
@@ -558,4 +556,4 @@ if test -f ./*.AppImage; then
558556
rm -R -f ./*archimage*.AppImage
559557
fi
560558
ARCH=x86_64 ./appimagetool --comp zstd --mksquashfs-opt -Xcompression-level --mksquashfs-opt 20 ./$APP.AppDir
561-
mv ./*AppImage ./"$(cat ./"$APP".AppDir/*.desktop | grep 'Name=' | head -1 | cut -c 6- | sed 's/ /-/g')"_"$VERSION"-archimage4-x86_64.AppImage
559+
mv ./*AppImage ./"$(cat ./"$APP".AppDir/*.desktop | grep 'Name=' | head -1 | cut -c 6- | sed 's/ /-/g')"_"$VERSION"-archimage4.1-x86_64.AppImage

0 commit comments

Comments
 (0)