需要Libpng12才能在17.10上运行。

Blackmagic Design的Resolve视频编辑器,V14.0.1版本,需要libpng12。不幸的是,新的17.10版本只提供了libpng16。
有没有办法在17.10版本下回退到libpng12?如果有,我该如何获取libpng12 - 当我搜索时,synaptic没有列出它。

1联系Blackmagic并提交一个错误报告。https://www.blackmagicdesign.com/support/ - Panther
不要将过时的软件包安装到系统中,可以将它们放在依赖于闭源二进制文件的旁边,而无需捆绑它们。使用ldd ./path/to/<program>命令显示给定二进制文件将尝试加载的库。将过时的库编译或下载到与二进制文件相邻的位置,或者通过修改环境变量LD_LIBRARY_PATH来包含它们。请注意,任何不是由您维护者的软件包存储库分发的软件都不会从其安全团队获得安全更新;您需要手动更新库,最好每天四次 :) - ThorSummoner
4个回答

在trusty(14.04LTS)和xenial(16.04LTS)版本中,有Ubuntu软件包libpng12-0,但是在17.10版本中没有。您必须向软件制造商(例如Blackmagic Design)询问更新程序和/或安装程序以使用最新的libpng16-16
作为一种解决方法,在安装Blackmagic Design的Resolve视频编辑器之前,您可以从Ubuntu网页上下载并安装Xenial的.deb软件包
安装libpng12 $ wget http://mirrors.kernel.org/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1_amd64.deb $ sudo dpkg -i libpng12-0_1.2.54-1ubuntu1_amd64.deb
注意:从旧版本的发行版安装软件包可能会破坏您的apt安装系统。

从Xenial(16.04LTS)安装libpng12软件包是否安全?

使用较旧发行版本的软件包可能存在风险。这可能会破坏apt安装系统,因为较旧的软件包可能引入对不存在的软件包的依赖关系或替换新版本所需的软件包。请尝试使用与您正在使用的Ubuntu版本相对应的软件包和存储库,即官方Ubuntu存储库和知名的PPA存储库(测试其软件包)。

为了检查安装libpng12是否会破坏apt,我查看了软件包信息

  • libpng12依赖于包含在最新的Ubuntu版本中的libc6 (>= 2.14)zlib1g (>= 1:1.1.4)

    $ apt-cache policy libc6     # 给出了2.24-9ubuntu2.2
    $ apt-cache policy zlib1g    # 给出了1.2.11dfsg-0ubuntu1
    
  • 请注意,没有其他Ubuntu软件包需要一个较新版本的libpng12,因为它不包含在存储库中。最新的程序依赖于libpng16-16,并且这两个库可以共存。

  • 我认为这个软件包很不可能破坏apt
不确定自己在做什么的情况下,请勿尝试安装旧版本发行版的软件包。

你的方向差不多对了,这种方法可能适用于简单的软件包。然而,混合使用来自不同软件源的软件包很可能导致系统损坏,因为存在依赖冲突的问题,而且随着相关软件包数量和复杂性的增加,系统损坏的概率也会增加。此外,通过dpkg安装的软件包只能持续到下一次sudo apt upgrade,你需要将导入的软件包保持在原位。最好的方法是编译libping12并将其安装在例如/usr/local目录中。 - Panther
我同意,这个解决方案并不适用于你可能需要的所有软件包。具体来说,我在最近安装的Ubuntu 17.04上尝试过,在安装libpng12之前已经有了libpng16-16软件包,以回答这个问题。两个库都被安装了。最后我执行了apt-get upgrade命令。目前,我认为软件源中的规则没有将libpng16视为libpng12的最新版本。而libpng12只依赖于libc6(>=2.14)和zlib1g(>=1:1.1.4)。我认为这个libpng12的解决方案可能对使用apt-get update是安全的。 - Jaime
在16.04和17.10之间有很多变化,从不同的软件源混合安装软件包是破坏Ubuntu或更具体地说是apt的众多方式之一。 - Panther
你认为安装一个只依赖于libc6xzlib1g(在17.x中存在)的软件包,与所包含的libpng库无关,并且没有其他软件包依赖它,会破坏apt吗?-- 我认为像WPS和Resolve视频编辑器这样的程序依赖于(旧版)libpng12,它们不会出现问题。最新的Ubuntu程序不依赖于libpng12,而是依赖于libpng16-16。这些应用程序也不会出现问题。-- 对于这个具体的情况,我认为这个解决方案是安全的。 - Jaime
我只是在指出混合使用软件源的潜在危险。我不仅认为这可能会引起问题,而且当你在另一个问题上给出相同建议时,确实发生了问题。充其量,这只是一个临时解决办法。从源代码编译肯定更安全。而长期解决方案是向软件包维护者提交错误报告,你的回答中没有提到这些(风险、破坏apt、编译选项以及提交错误报告的建议)。 - Panther
1在这种情况下,它确实不会破坏Apt。然而,另一个问题是,如果16.04仓库中上传了libpng12的更新版本,你将无法自动获取此更新,尤其是涉及安全问题时更为关键。可以通过将16.04仓库添加到你的源列表中,并使用apt-pinning来解决此问题,以便仅针对libpng12使用它们(将所有其他软件包的优先级设置为<100)。 - fkraiem
@fkraiem,你能写一个更详细的答案来解释一下吗?听起来这是解决这个问题最可靠的方案之一。 - luukvhoudt
@Fleuv 我和可能还有其他人已经在其他地方讨论过apt-pinning,例如这里 - fkraiem
安装libpng12并没有在18.04上破坏apt。 - sziraqui

不要使用二进制包,你可以编译libpng

  • 如果你有想要安装的程序的源代码,你可以使用原始源代码。在安装库之后,你可以使用它来配置和编译其他应用程序。
  • 如果你没有程序的源代码,只有一个.deb安装程序,例如,如果该程序是商业产品,你必须安装一个包以避免安装过程中出现错误。你可以按照下面的说明从源代码创建包。

从官方源代码编译libpng

请注意旧的libpng v1.2.x可能存在许多漏洞。建议使用来自sourceforgegithub的最新的1.2.x版本。这是针对v.1.2.59版本。

  1. 安装编译软件所需的包(如果尚未安装)

    $ sudo apt-get install build-essential
    
  2. 获取并解压源代码

    $ wget https://github.com/glennrp/libpng/archive/v1.2.59.tar.gz
    $ tar xvfz v1.2.59.tar.gz 
    
  3. 编译并安装库

    $ cd libpng-1.2.59/
    $ ./configure
    $ make check
    $ sudo make install
    
注意:安装该库不会像在apt中那样设置对libpng12的依赖关系。您必须使用.deb包来安装它,并支持安装其他依赖于它的.deb文件。要创建相应的.deb包,您可以使用以下说明。
使用Ubuntu软件包的源代码,libpng12-0软件包对应于libpng 1.2.54。Ubuntu有一个定制版本,他们将其命名为1.2.54-1ubuntu1
安装软件编译和创建Ubuntu软件包所需的软件包(如果尚未安装) $ sudo apt-get install build-essential fakeroot dpkg-dev devscripts
使用页面上的.dsc文件下载源代码文件 $ dget -d http://archive.ubuntu.com/ubuntu/pool/main/libp/libpng/libpng_1.2.54-1ubuntu1.dsc
应用由Ubuntu提供的补丁来提取源代码 $ dpkg-source -x libpng_1.2.54-1ubuntu1.dsc
检查软件包的依赖关系 $ cd libpng-1.2.54/ $ dpkg-buildpackage -rfakeroot -b
它显示了未满足的构建依赖关系。在我的情况下...
: dpkg-checkbuilddeps: error: 未满足的构建依赖关系:debhelper(>= 8.1.3)libtool automake autoconf zlib1g-dev
安装依赖项 $ sudo apt-get install debhelper libtool automake autoconf zlib1g-dev
编译 $ fakeroot debian/rules binary
生成的软件包将位于父文件夹中
../libpng12-0_1.2.54-1ubuntu1_amd64.deb ../libpng12-dev_1.2.54-1ubuntu1_amd64.deb ../libpng3_1.2.54-1ubuntu1_amd64.deb
使用生成的软件包 $ cd .. $ sudo dpkg -i libpng12-0_1.2.54-1ubuntu1_amd64.deb
注意:编译和安装旧发行版的软件包就像使用旧发行版的二进制软件包一样危险。所描述的libpng12软件包的编译过程仅使用Ubuntu 17.x存储库中的软件包,并且不会导致错误。我认为使用生成的软件包不会破坏apt

这个来源在我的Ubuntu 18上有效。
sudo echo 'deb http://cz.archive.ubuntu.com/ubuntu trusty main universe' \ > /etc/apt/sources.list.d/extra.list
sudo apt update
sudo apt-get install libpng12-0
sudo rm /etc/apt/sources.list.d/extra.list

在尝试安装打印机驱动程序时,我在这里找到了它here,看起来似乎可以正常工作。

依我之见,从源代码编译会比使用旧版本的软件包更安全。

我能给你的最佳建议是向Blackmagic提交错误报告,他们需要更新依赖项。

https://www.blackmagicdesign.com/support/

前往相关的Ubuntu软件包以确定软件包和上游源代码,然后进行编译。

https://packages.ubuntu.com/xenial/libpng12-0

所以你想要"libpng_1.2.54.orig.tar.xz"。

https://sourceforge.net/projects/libpng/files/libpng12/older-releases/1.2.54/

下载,解压,编译,安装(从下载和解压tar包之后开始)。
cd libpng-1.2.54
./configure --prefix=/usr/local
make
sudo make install

如有需要,再次删除。
#run within libpng-1.2.54 directory
sudo make uninstall

我知道这似乎多了几个步骤,但按照这种方式下载和编译是微不足道的,并且不会破坏apt。

如果您编译原始源代码并执行make install.deb安装程序将无法找到满足libpng-12依赖项的内容。安装程序将失败。-- 如果您可以获得源代码或其他类型的软件安装程序,这个解决方案将起作用。-- 如果您无法获取源代码,您可以为Ubuntu软件包编译源文件,并在安装所需软件之前安装生成的文件。 - Jaime
我已经放弃了这个想法。实际上,这只是一个来自一个有点难以合作的供应商的权宜之计。很可惜,因为这个产品有很多优点。唉...算了,继续前进吧... - Richard Emerson