我已多次尝试过这个 APT 固定过程但仍然无法让它做我想要的事情。
目前我正在运行 Ubuntu Karmic。我没有设置默认版本,因此 Karmic 的默认优先级为 500。我已将 Ubuntu Lucid 添加到我的源中,并在首选项文件中将其优先级设置为 400。
现在假设我想从 Lucid 安装最新的 Firefox-3.5,据我所知我有两个选择。
1:sudo apt-get 安装 firefox-3.5/lucid
这只会从 Karmic 中提取依赖项,并且通常会失败,因为某些支持包在 Karmic 中没有足够高的版本。
2:sudo apt-get 安装 firefox-3.5 -t lucid
这将从 Lucid 中提取所有必需的依赖项,甚至包括那些可以从 Karmic 中满足的依赖项。
我想要的是第三种选择,即在可以使用 Karmic 的地方使用 Karmic,而在必须使用 Lucid 的地方只使用 Lucid。
现在当然可以通过将选项 1 递归应用于每个未满足的依赖关系来手动完成,但这很快就会变得非常繁琐。
有没有什么方法可以操纵优先级和选项来实现我的目标?
答案1
答案是... 能力。
问题中所述的配置没有问题。但是当“apt-get install firefox-3.5/lucid”抱怨未满足依赖关系时,“aptitude install firefox-3.5/lucid”会抱怨,然后提出纠正问题,在我尝试过的每个例子中,修复都正是我所寻找的行为。
我当前系统上的 Hugin 就是一个很好的例子:
“apt-get install hugin -t lucid”想要安装 27 个软件包,全部来自 Lucid,其中大多数是库。
“apt-get install hugin/lucid” 抱怨 hugin 有未满足的依赖关系
“aptitude install hugin/lucid” 提供安装 Lucid 的 3 个软件包和 Karmic 的其他所有软件包
$ aptitude 安装 hugin/lucid 正在读取软件包列表...完成 构建依赖关系树 正在读取状态信息...完成 初始化包状态...完成 以下包裹已破损: 胡金 将会安装以下新软件包: autopano-sift{a} binfmt-support{a} cli-common{a} enblend{a} enfuse{a} freeglut3{一个} libboost-thread1.38.0{一个} libgdiplus{一个} libglade2.0-cil{一个} libglib2.0-cil{一个} libgtk2.0-cil{一个} libimage-exiftool-perl{一个} libmono-cairo2.0-cil{a} libmono-corlib2.0-cil{a} libmono-i18n-west2.0-cil{a} libmono-security2.0-cil{a} libmono-sharpzip2.84-cil{a} libmono-system2.0-cil{a} libpano13-1{a} libplot2c2{a} mono-2.0-gac{a} mono-gac{a} mono-runtime{a} 升级了 0 个软件包,新安装了 24 个,删除了 0 个,并且未升级 0 个。 需要获取 11.6MB 的档案。解压后将使用 37.1MB。 以下软件包具有未满足的依赖关系: hugin:依赖:hugin-tools (= 2009.2.0+dfsg-2ubuntu1) 但无法安装 以下操作将解决这些依赖关系: 安装以下软件包: hugin-数据 [2009.2.0+dfsg-2ubuntu1 (lucid)] hugin-tools [2009.2.0+dfsg-2ubuntu1 (lucid)] libpano13-bin [2.9.14-2 (karmic、lucid)] 分数为 -17 接受这个解决方案吗?[Y/n/q/?]
答案2
Ubuntu 建议这样做源构建超过固定。例如,首先构建源依赖项:
sudo apt-get build-dep firefox-3.5
然后在你的 karmic 机器上构建清晰的版本:
sudo apt-get -b source -t lucid firefox-3.5
这不完全是你想要的,但也不是那么乏味。