advplyr / audiobookshelf

Self-hosted audiobook and podcast server
https://audiobookshelf.org
GNU General Public License v3.0
6.36k stars 448 forks source link

[Bug]: Updating on debian reinstalls ffmpeg every time, even if already installed and up to date. #633

Open hobesman opened 2 years ago

hobesman commented 2 years ago

Describe the issue

Updating on debian reinstalls ffmpeg every time, even if already installed and up to date.

Steps to reproduce the issue

  1. Install on e.g. Ubuntu (i.e. not using docker)
  2. Update server.
  3. Watch it redownload and reinstall ffmpeg

Audiobookshelf version

2.0.16 and below

How are you running audiobookshelf?

Debian/PPA

ebb-earl-co commented 2 years ago

It looks as if this functionality is the install_ffmpeg function here. It would be relatively simple to check if the version downloaded from https://johnvansickle.com already exists at the specified directory (FFMPEG_INSTALL_DIR="/usr/lib/audiobookshelf-ffmpeg" by default). This would entail extracting the tarball and comparing it to the file on disk which wouldn't take any more time than the process already takes.

There probably is a smarter/better short-circuit for this, but I don't know what it is, or if it's worth it.

HumanG33k commented 1 year ago

a better way for debian package is to use debian package dependency system in order to use system side ffmpeg probably in control file.

also the env var should be update / check to be sure everything is already here.

advplyr commented 1 year ago

With the dependency system how could we make sure that the users existing Ffmpeg install was compiled with the correct libraries?

HumanG33k commented 1 year ago

One option is probably parsing the output of ffmpeg after an apt install ffmpeg : 

ffmpeg version 5.1.2-2 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 12 (Debian 12.2.0-14)
  configuration: --prefix=/usr --extra-version=2 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libglslang --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libsvtav1 --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --disable-sndio --enable-libjxl --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libplacebo --enable-librav1e --enable-shared
  libavutil      57. 28.100 / 57. 28.100
  libavcodec     59. 37.100 / 59. 37.100
  libavformat    59. 27.100 / 59. 27.100
  libavdevice    59.  7.100 / 59.  7.100
  libavfilter     8. 44.100 /  8. 44.100
  libswscale      6.  7.100 /  6.  7.100
  libswresample   4.  7.100 /  4.  7.100
  libpostproc    56.  6.100 / 56.  6.100
Hyper fast Audio and Video encoder