我在服务器上安装的大部分“软件”都需要是最新版本(Java、Tomcat、MySQL-Cluster)。所以我从来没有运气,有预建的 Debian 软件包(在发行版中)可用。因此,所有软件都是从项目网页下载并从源代码构建的。
现在我的问题是,在我的 Debian 系统上安装它们的正确方法是什么?
我的主要问题是,当直接从源代码安装它们时,它们不包含在包管理中(具有 aptitude)。似乎并没有真正建议使用 Checkinstall 并且 equiv 也有缺点。使用 dh_make 和 dpkg-buildpackage 构建我自己的包是处理这个问题的唯一正确方法吗?
如果您总是需要最新版本,您在做什么?
Fah*_*tha 10
想要更新的软件包是任何操作系统上的常见问题。Debian 的发布周期近年来平均为 2 年,所以在这个周期结束时,这可能是一个更紧迫的问题。缓解这种情况的一种方法是在稳定发布周期结束时进行测试,此时下一个版本几乎稳定。从问题中不清楚它是否更一般地谈论稳定和/或不稳定。无论如何,即使运行不稳定,拥有最新版本也可能是一个问题,因为最新版本可能尚未打包。Debian 开发人员/打包人员是志愿者,因此他们可能会感到无聊或忙于其他事情,从而导致软件包枯竭。
为简单和具体起见,我假设接下来的计划是将一个包向后移植到稳定版,但它更广泛地适用。所以,如果我想要一个更新版本的软件,但它不是稳定版,按大致顺序,这就是我要做的。
在Debian Backports 中查找软件包。有时,您可以找到足够新的软件包来满足您的目的。但是,与不稳定或实验性或上游的版本相比,这些软件包通常已经过时。
尝试直接从测试、不稳定或实验中安装包。如果 stable 与您尝试安装的任何版本都没有太大差异,这可能会奏效。如果系统开始尝试从更新的版本安装或升级基本软件包,您就会知道这种方法很糟糕。假设您尝试从不稳定安装,然后
apt-get install packagename/unstable
Run Code Online (Sandbox Code Playgroud)
是第一件事要尝试。对于 apt 的稳定版本,这通常会失败,因为它需要来自不稳定的其他软件包,而这种咒语只会提高packagename
足够高的偏好,以便将其安装在不稳定的环境中。如果您不明白这意味着什么,请离开并阅读man
apt_preferences
。继续从不稳定添加依赖项,确保它没有尝试升级基本包。例如,如果它开始尝试升级 libc6 或 X 或 KDE 或 Gnome,请立即中止。如果尝试从相同的源包升级其他包通常很好,因为它们通常紧密耦合在一起。要查看二进制包依赖的源包,请执行
apt-cache showsrc packagename
Run Code Online (Sandbox Code Playgroud)
由于很多东西都依赖于 GNU C 库 (libc6),这曾经是一个问题。最近,API 似乎已经稳定下来,因此现在无需升级它就更常见了。如果包满足其对稳定版的运行时依赖性,但仍无法正常工作,请提交错误。如果打包人员告诉您这不是错误,那他们就错了。:-)
自己从测试、不稳定或实验中向后移植包。
如上所述,向后移植是一种选择,但与不稳定或实验性或上游的版本相比,这些软件包通常已经过时。
这通常需要递归依赖构建循环类型的东西。您首先需要使用以下命令获取构建依赖项
apt-get build-dep packagename
Run Code Online (Sandbox Code Playgroud)
如果由于其中一个依赖项不够新而失败,则您需要先向后移植该依赖项。这会导致螺旋失控。如果我必须处理超过 2 个级别的递归,我通常会放弃。但是请注意,真正的依赖关系并不一定像所说的那样紧密。旧版本可能有效。打包器通常不会尝试找到可以工作的构建(或实际上是运行时)依赖项的最旧版本。
检查来自相应上游的软件包的可用性。理想情况下,这些将匹配您的分发版本,但您也可以在必要时重建它们。
为比测试/不稳定/实验中的最新软件包更新的软件版本创建软件包。这可能相对具有挑战性,但有时仍然令人惊讶地可行。首先要注意的是,如果您尝试打包 Debian 中已有软件包的更新版本,那么您已经拥有了一个很大的优势,即您可以使用现有的软件包。做就是了
apt-get source packagename
Run Code Online (Sandbox Code Playgroud)
和apt-get
将下载对应的源包,包括Debian的子目录,其中所述包装的生活。此外请注意,如今,这个包通常位于某个版本控制存储库中(git 似乎在 Debian 中很流行),而 stable apt(当前为0.8.10.3)会在您调用
apt-get source
. 你应该看看这个,因为打包者可能拥有比任何发布的包都更新的包版本。例如。
$ apt-get source mercurial
Reading package lists... Done
Building dependency tree
Reading state information... Done
NOTICE: 'mercurial' packaging is maintained in the 'Svn' version control system at:
svn://svn.debian.org/python-apps/packages/mercurial/trunk
Run Code Online (Sandbox Code Playgroud)
或者,您可以简单地使用
apt-cache showsrc mercurial | grep Vcs
Run Code Online (Sandbox Code Playgroud)
列出存储库。
如果包严重过期,您可能需要对
包进行修改,刷新应用的补丁,但这通常仍然是一个很好的起点
。Debian 似乎正在
按照dpkg-source 3.0 (quilt) 格式对quilt上的包管理进行标准化,这有助于补丁更新。
我将用一个真实的例子来结束我是如何向后移植pgf的Debian 包的 。pgf 的最后一个打包版本是 2008 年的 2.00,此后发布了 2.10。请参阅请更新到 pgf (2.10) 的最新稳定版本中的讨论,以及我的后续错误与补丁,pgf:针对 2.0 Debian 包装的补丁。事实证明,pgf 的 Debian 打包非常简单,我只需要在 2.10 打包中更改一行即可使其工作。我最终也平息了所有 lintian 的抱怨,但这完全是可选的。
构建自己的软件包是正确的方法(恕我直言)。根据软件包的 Debian 版本的年龄和变化,这可以像替换软件包描述中源 tarball 的文件名一样简单,在最坏的情况下,您仍然可以将其用作您自己版本的模板。
归档时间: |
|
查看次数: |
4509 次 |
最近记录: |