Checkinstall不会全局安装软件包

我正在尝试从源代码编译ffmpeg,并创建deb包,以便全局安装ffmpeg,并能够使用dpkg -r命令卸载它。
以下是我的命令。
# Installing FFmpeg
cd ~/ffmpeg_sources
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="$HOME/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$HOME/ffmpeg_build/include" \
  --extra-ldflags="-L$HOME/ffmpeg_build/lib" \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libtheora \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree
PATH="$HOME/bin:$PATH" make
sudo checkinstall --pkgname=ffmpeg --pkgversion="5:$(date +%Y%m%d%H%M)-git" --backup=no \
  --deldoc=yes --fstrans=no --default
hash -r

一切都成功编译,deb包也已创建,但当我尝试使用ffmpeg时出现问题。
ffmpeg: command not found

这意味着ffmpeg仍未安装在$PATH目录中。

我的命令有什么问题?


1你在哪里找到安装的指导方式? - Anwar
运行 whereis ffmpeg 来获取它的当前位置 - George Udosen
我按照这个教程 https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu 进行操作。 - bkdaaqra
使用checkinstall来使该软件包在全球范围内可用 - bkdaaqra
2个回答

你提到的教程没有使用checkinstall,因为它不会将任何东西安装到系统中:它会将编译后的二进制文件“本地安装”到执行编译操作的用户的~/bin目录中。它这样做有多种原因:避免了软件包管理系统的复杂性,避免了对系统目录的干扰,使得更新已编译的ffmpeg更加容易,对于共享服务器用户来说,它避免了需要root/superuser权限(假设依赖可用),并且避免了与官方软件仓库中的ffmpeg软件包冲突。
一些使您编译的ffmpeg在全局范围内对所有用户可执行的方法:

将其移动到/usr/local/bin

这很简单:
sudo mv ~/bin/{ffmpeg,ffprobe,ffplay} /usr/local/bin

缺点是它不会集成到软件包管理系统中,但这并不是什么大问题,因为撤销操作很简单。
要"卸载":
sudo rm /usr/local/bin/{ffmpeg,ffprobe,ffplay}

使用checkinstall

如果你想使用checkinstall来安装编译好的ffmpeg二进制文件,以便将其整合到软件包管理系统中,并使任何用户都能执行它:

cd ~/bin
sudo checkinstall --pkgname=ffmpeg --pkgversion="8:$(date +%Y%m%d%H%M)-git" --default install -Dm755 ffmpeg /usr/local/bin/ffmpeg

这假设ffmpeg二进制文件位于~/bin目录中,如果您按照教程正确操作的话,它就会在那里。
或者,您可以在配置ffmpeg时删除--prefix="$HOME/ffmpeg_build"--bindir="$HOME/bin",然后运行PATH="$HOME/bin:$PATH" make,最后根据您的问题从新运行checkinstall命令,如果您想安装其他所有内容(库、文档、ffplayffprobe),而不仅仅是ffmpeg二进制文件。

我按照这些说明(https://help.ubuntu.com/community/CheckInstall)进行操作,但对于如何告诉checkinstall要将哪个文件夹添加到PATH仍然不是百分之百清楚(我使用`./configure && make && sudo checkinstall编译了BRLCAD 7.28,最终的二进制目录是/usr/brlcad/dev-7.28.0/bin/`)。 - nmz787
@nmz787 我建议您将此作为一个新问题提出。 - llogan
看起来和楼主的"这就意味着ffmpeg仍未安装在$PATH目录中"没有什么不同,这是正确的。 - nmz787
@nmz787 OP遵循指南,将FFmpeg可执行文件“安装”到'~/bin'中,目的已在上述原因中提及。答案中'scheckinstall'命令所做的只是将其安装到'/usr/local/bin',唯一的目的是:1)将其集成到包管理系统中;2)按OP要求使'ffmpeg'对所有用户都可访问。这是一种迂回的做法,因为他们本来可以不使用自定义的'--prefix'和'--extra-*'选项进行编译,然后正常运行'scheckinstall'。 - llogan
@nmz787 尝试使用 checkinstall 来解决 BRLCAD 的奇怪前缀似乎是一个 XY 问题。我对 BRLCAD 或为什么它安装到 /usr/brlcad/dev-7.28.0/bin/ 一无所知,但使用 checkinstall 更改这个不是正确的工具,因为应该通过 configure/cmake 步骤来完成。这就是为什么我建议您提出一个新问题的原因。 - llogan
啊,我明白了,你没有提到更改./configure选项,那些是标准的吗(我在原帖中看到了--bindir="$HOME/bin")?如果是的话,请在你的回答中加上 :) - nmz787
@nmz787 使用--bindir="$HOME/bin"不是"标准"做法。在FFmpeg Wiki中使用它是出于与您的问题无关的特定原因。 - llogan

对我来说很有效,我正在为Git 2.18创建deb软件包

命令:

cd git_2.18.1(解压的文件夹) ./configure --bindir=/usr/local/bin && make sudo checkinstall

创建了一个名为git_2.18.1-1_amd64.deb的软件包,安装路径为/usr/local/bin