暴力安装celluloid的记录

前言

安装好系统之后,把fcitx5输入法、gstreamer-rtsp、gstreamer-tools等一系列工具安装后,再安装celluloid的时候,发现报错:

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

vernon@pop-os:~/Download/others$ sudo apt install celluloid 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
 libavdevice58 : 依赖: libavcodec58 (= 7:4.4.2-0ubuntu0.22.04.1)
                 依赖: libavfilter7 (= 7:4.4.2-0ubuntu0.22.04.1)
                 依赖: libavformat58 (= 7:4.4.2-0ubuntu0.22.04.1)
                 依赖: libavutil56 (= 7:4.4.2-0ubuntu0.22.04.1) 但是 7:4.4.2-1 正要被安装
 libmpv1 : 依赖: libavfilter7 (>= 7:4.4)
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

celluloid是一个很好用的视频播放工具,可以播放本地视频/rtsp/rtmp等多种视频流,自从我的vlc出问题后,一直用这个进行网络视频流播放。这个工具如果装不上去会对开发造成很大影响。于是又开启了折腾

暴力安装步骤

判断安装不上去的原因是libavdevice58这个库依赖libavcodec58:7:4.4.2-0ubuntu0.22.04.1,试了一下,想直接忽略这个包看能否安装成功,dpkg命令后面加上--ignore-depends,结果如下

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

# 先把celluloid安装包下载下来
$ apt download celluloid

# 会在当前目录下下载celluloid_0.20-2_amd64.deb文件
# 试着用dpkg安装这个包,并加上--ignore-depends
sudo dpkg -i celluloid_0.20-2_amd64.deb --ignore-depends=libavdevice58
dpkg: 错误: 无法访问归档 '--ignore-depends=libavdevice58': 没有那个文件或目录
vernon@pop-os:~/Download/others$ sudo dpkg -i celluloid_0.20-2_amd64.deb --ignore-depends=libavdevice
dpkg: 错误: 无法访问归档 '--ignore-depends=libavdevice': 没有那个文件或目录
vernon@pop-os:~/Download/others$ sudo dpkg -i celluloid_0.20-2_amd64.deb --ignore-depends=libavcodec58
dpkg: 错误: 无法访问归档 '--ignore-depends=libavcodec58': 没有那个文件或目录

既然没法忽略,那就看看deb包里面的内容,,修改其中的依赖属性,看看能否绕过这个依赖。

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

# 将包解开,解包后放到celluloid目录下
$ dpkg -R celluloid_0.20-2_amd64.deb ./celluloid

解压后celluloid目录下会有两个文件夹DEBIAN和usr,查看DEBIAN目录下的control文件如下

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

Package: celluloid
Version: 0.20-2
Architecture: amd64
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
Installed-Size: 1047
Depends: libc6 (>= 2.29), libcairo2 (>= 1.2.4), libepoxy0 (>= 1.0), libglib2.0-0 (>= 2.41.4), libgtk-3-0 (>= 3.22), libmpv1 (>= 0.32), libpango-1.0-0 (>= 1.14.0), libpangocairo-1.0-0 (>= 1.14.0), dconf-gsettings-backend | gsettings-backend
Recommends: youtube-dl
Breaks: gnome-mpv (<< 0.17-1~)
Replaces: gnome-mpv (<< 0.17-1~)
Section: video
Priority: optional
Homepage: https://github.com/celluloid-player/celluloid
Description: simple GTK+ frontend for mpv
 GNOME MPV is a simple GTK+ frontend for mpv. GNOME MPV interacts with mpv via
 the client API exported by libmpv, allowing access to mpv's powerful playback
 capabilities.

直接安装该包会发现就是libmpv1依赖出问题了

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

$ sudo dpkg -i celluloid_0.20-2_amd64.deb 
正在选中未选择的软件包 celluloid。
(正在读取数据库 ... 系统当前共安装有 218814 个文件和目录。)
准备解压 celluloid_0.20-2_amd64.deb  ...
正在解压 celluloid (0.20-2) ...
dpkg: 依赖关系问题使得 celluloid 的配置工作不能继续:
 celluloid 依赖于 libmpv1 (>= 0.32);然而:
  未安装软件包 libmpv1。

dpkg: 处理软件包 celluloid (--install)时出错:
 依赖关系问题 - 仍未被配置
正在处理用于 desktop-file-utils (0.26-1ubuntu3) 的触发器 ...
正在处理用于 gnome-menus (3.36.0-1ubuntu3) 的触发器 ...
正在处理用于 libglib2.0-0:i386 (2.72.4-0ubuntu2.2) 的触发器 ...
正在处理用于 libglib2.0-0:amd64 (2.72.4-0ubuntu2.2) 的触发器 ...
正在处理用于 hicolor-icon-theme (0.17-2) 的触发器 ...
正在处理用于 man-db (2.10.2-1) 的触发器 ...
在处理时有错误发生:
 celluloid

直接用apt安装libmpv1

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

$ sudo apt install libmpv1 
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
您也许需要运行“apt --fix-broken install”来修正上面的错误。
下列软件包有未满足的依赖关系:
 libmpv1 : 依赖: libavdevice58 (>= 7:4.4) 但是它将不会被安装
           依赖: libavfilter7 (>= 7:4.4)
           依赖: liblua5.2-0 (>= 5.2.4) 但是它将不会被安装
           依赖: libmujs1 (>= 1.0.7) 但是它将不会被安装
           依赖: libplacebo192 (>= 4.157.0) 但是它将不会被安装
           依赖: librubberband2 (>= 2.0.0) 但是它将不会被安装
           依赖: libsixel1 (>= 1.10.3) 但是它将不会被安装
           依赖: libzimg2 (>= 0.3.1) 但是它将不会被安装
           推荐: youtube-dl (>= 2014.11.26) 但是它将不会被安装
E: 有未能满足的依赖关系。请尝试不指明软件包的名字来运行“apt --fix-broken install”(也可以指定一个解决办法)

一堆的依赖项不能满足,干脆再次把该包下载下来并解压,查看依赖关系

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

$ apt download libmpv1
获取:1 http://mirrors.ustc.edu.cn/ubuntu jammy/universe amd64 libmpv1 amd64 0.34.1-1ubuntu3 [933 kB]
已下载 933 kB,耗时 0秒 (2,501 kB/s)
$ dpkg-deb -R libmpv1_0.34.1-1ubuntu3_amd64.deb ./libmpv1

查看control,判断问题大致会出在libavdevice58这个包上,于是再次拉取、解包并分析其control

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

$ sudo apt install libavdevice58
下列软件包有未满足的依赖关系:
 libavdevice58 : 依赖: libavcodec58 (= 7:4.4.2-0ubuntu0.22.04.1)
                 依赖: libavfilter7 (= 7:4.4.2-0ubuntu0.22.04.1)
                 依赖: libavformat58 (= 7:4.4.2-0ubuntu0.22.04.1)
                 依赖: libavutil56 (= 7:4.4.2-0ubuntu0.22.04.1) 但是 7:4.4.2-1 正要被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

$ apt download libavdevice58
获取:1 http://mirrors.ustc.edu.cn/ubuntu jammy-security/universe amd64 libavdevice58 amd64 7:4.4.2-0ubuntu0.22.04.1 [87.5 kB]
已下载 87.5 kB,耗时 0秒 (546 kB/s)

$ dpkg-deb -R libavdevice58_7%3a4.4.2-0ubuntu0.22.04.1_amd64.deb ./libavdevice58

修改该包DEBIAN目录下的control,将libavcodec58、libavfilter7、libavformat58、libavutil56中所有=号全部改成>=。修改后应该是这个样子

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

Package: libavdevice58
Source: ffmpeg
Version: 7:4.4.2-0ubuntu0.22.04.1
Architecture: amd64
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Installed-Size: 279
Depends: libasound2 (>= 1.0.16), libavc1394-0 (>= 0.5.3), libavcodec58 (>= 7:4.4.2-0ubuntu0.22.04.1), libavfilter7 (>= 7:4.4.2-0ubuntu0.22.04.1), libavformat58 (>= 7:4.4.2-0ubuntu0.22.04.1), libavutil56 (>= 7:4.4.2-0ubuntu0.22.04.1), libc6 (>= 2.34), libcaca0 (>= 0.99.beta17-1), libcdio-cdda2 (>= 10.2+2.0.0), libcdio-paranoia2 (>= 10.2+2.0.0), libdc1394-25 (>= 2.2.6), libdrm2 (>= 2.4.101), libgl1, libiec61883-0 (>= 1.2.0), libjack-jackd2-0 (>= 1.9.10+20150825) | libjack-0.125, libopenal1 (>= 1.14), libpulse0 (>= 0.99.1), libraw1394-11 (>= 2.1.2), libsdl2-2.0-0 (>= 2.0.12), libsndio7.0 (>= 1.8.1), libx11-6, libxcb-shape0, libxcb-shm0, libxcb-xfixes0, libxcb1, libxext6, libxv1

打包后再安装

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

# 先打包
$ fakeroot dpkg-deb --build ./libavdevice58 libavdevice58.deb
dpkg-deb: 正在 'libavdevice58.deb' 中构建软件包 'libavdevice58'。

# 再次安装
$ sudo dpkg -i libavdevice58.deb
正在选中未选择的软件包 libavdevice58:amd64。
(正在读取数据库 ... 系统当前共安装有 218814 个文件和目录。)
准备解压 libavdevice58.deb  ...
正在解压 libavdevice58:amd64 (7:4.4.2-0ubuntu0.22.04.1) ...
dpkg: 依赖关系问题使得 libavdevice58:amd64 的配置工作不能继续:
 libavdevice58:amd64 依赖于 libavfilter7 (>= 7:4.4.2-0ubuntu0.22.04.1);然而:
  未安装软件包 libavfilter7。

dpkg: 处理软件包 libavdevice58:amd64 (--install)时出错:
 依赖关系问题 - 仍未被配置
正在处理用于 libc-bin (2.35-0ubuntu3.6) 的触发器 ...
在处理时有错误发生:
 libavdevice58:amd64

仍然有问题,提示libavfilter7依赖无法安装。简直要崩溃了,再次顾计重演,下载libavfilter7、解包、判断冲突选项并将control文件中的=改为>=、打包、重新安装,具体过程如下

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

# 下载软件包
$ apt download libavfilter7

# 解包
$ dpkg-deb -R libavfilter7_7%3a4.4.2-0ubuntu0.22.04.1_amd64.deb ./libavfilter7

# 修改control,将相关=号改成>=
$ vim libavfilter7/DEBIAN/control 

# 打包
$ fakeroot dpkg-deb --build ./libavfilter7 libavfilter7.deb

# 安装
$ sudo dpkg -i libavfilter7.deb
正在选中未选择的软件包 libavfilter7:amd64。
(正在读取数据库 ... 系统当前共安装有 218814 个文件和目录。)
准备解压 libavfilter7.deb  ...
正在解压 libavfilter7:amd64 (7:4.4.2-0ubuntu0.22.04.1) ...
dpkg: 依赖关系问题使得 libavfilter7:amd64 的配置工作不能继续:
 libavfilter7:amd64 依赖于 libpocketsphinx3 (>= 0.8.0+real5prealpha+1);然而:
  未安装软件包 libpocketsphinx3。
 libavfilter7:amd64 依赖于 libpostproc55 (>= 7:4.4.2-0ubuntu0.22.04.1);然而:
  未安装软件包 libpostproc55。
 libavfilter7:amd64 依赖于 librubberband2 (>= 2.0.0);然而:
  未安装软件包 librubberband2。
 libavfilter7:amd64 依赖于 libsphinxbase3 (>= 0.8+5prealpha);然而:
  未安装软件包 libsphinxbase3。
 libavfilter7:amd64 依赖于 libvidstab1.1;然而:
  未安装软件包 libvidstab1.1。
 libavfilter7:amd64 依赖于 libzimg2 (>= 0.3.1);然而:
  未安装软件包 libzimg2。

这里提示仍有很多软件不满足,一个个用apt安装就可以了

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

$ sudo apt install libpocketsphinx3 libvidstab1.1 libzimg2 librubberband2 libpostproc55

其中libpostproc55仍然会碰到依赖问题,只有再次重复以上步骤。

一切弄妥帖了以后,就直接可以apt安装celluloid了

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

sudo apt install celluloid
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
将会同时安装下列软件:
  liblua5.2-0 libmpv1 libmujs1 libplacebo192 libsixel1 mpv python3-pycryptodome python3-pyxattr rtmpdump youtube-dl
建议安装:
  libcuda1 python3-pyxattr-dbg python-pyxattr-doc libfribidi-bin | bidiv phantomjs
推荐安装:
  ffmpeg
下列【新】软件包将被安装:
  celluloid liblua5.2-0 libmpv1 libmujs1 libplacebo192 libsixel1 mpv python3-pycryptodome python3-pyxattr rtmpdump youtube-dl
升级了 0 个软件包,新安装了 11 个软件包,要卸载 0 个软件包,有 36 个软件包未被升级。
需要下载 7,169 kB 的归档。
解压缩后会消耗 25.3 MB 的额外空间。
您希望继续执行吗? [Y/n] y

终于安装成功了,心里奔腾着一万个草泥马~~~

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值