为本地存储库分配最高优先级


39

摘要

我该如何使apt-get首选本地存储库软件包,而不是从官方存储库再次下载相同的软件包版本?本地存储库已签名并受信任。我们已经尝试了apt首选项优先级。


最初的问题是:“如何在不使用sources.list文件的情况下为本地存储库分配最高优先级”

我已经使用下载的软件包设置了本地存储库。当我需要重新安装Ubuntu时,我用它来避免通过Internet下载相同的软件包。这是一个基本的存储库,使用创建apt-ftparchive packages . > Packages。我将其设置为受信任的存储库,以避免出现“未经身份验证的存储库”警告。(如果您拥有不受信任的存储库,apt或者synaptic尝试通过Internet下载相同的软件包,则“因为它是受信任的”)。

我已经使用此本地存储库至少一年了。但是我必须始终将本地存储库行放在sources.list文件顶部才能使用此功能。但这很烦人,因为每次重新安装Ubuntu时都必须打开一个终端并在其上进行一些键入,尽管有更好的工具software-properties-gtk。我无法使用此工具,因为它将源代码行放置在`sources.list'的末尾。

真正的问题是,在aptsynaptic总是从前面提到的来源下载一个包,不检查包是否已在当地的仓库中。因此,我别无选择,只能将本地源放置在sources.list终端的顶部(我实际上并不讨厌终端,但是我需要一个解决方案)。

我尝试过这种方法。但这对我没有帮助。

我的首选项文件在 /etc/apt/preferences.d/local-pin-900

    Package: *
    Pin: release o=Local,n=ubuntu-local
    Pin-Priority: 900

我的发行文件是这个

    Origin: Local
    Label: Local-Ubuntu
    Description: Local Ubuntu Repository
    Codename: ubuntu-local
    MD5Sum:
     ed43222856d18f389c637ac3d7dd6f85          1043412 Packages
     d41d8cd98f00b204e9800998ecf8427e                0 Sources

当我启用apt-preference时,会apt-cache policy正确显示首选项,例如,它显示本地存储库具有最高优先级。

但是,当我这样做时sudo apt-get install <package-name>apt尝试从Internet下载它。但是,当我将本地存储库放在顶部时,它是从本地存储库安装的。

因此,我的问题是 ->'当程序包在本地存储库中可用时,是否可以强制使用本地存储库,而无需在我的存储库列表(例如sources.list文件)的顶部显式放置“本地源”? '

编辑:输出apt-cache policy $package_name如下

  
鹦鹉螺擦拭:
  已安装:(无)
  候选人:0.1.1-2
  版本表:
     0.1.1-2 0
        500个http://archive.ubuntu.com/ubuntu/precise/universe i386软件包
        900文件:/ media / Main / Linux-Software / Ubuntu / Precise / Packages

这表明我的本地存储库具有较高的优先级,尽管它不是sources.list文件中第一个存储库。

这是输出 apt-get install nautilus-wipe

正在阅读包装清单...完成
建立依赖树       
正在读取状态信息...完成
将安装以下新软件包:
  鹦鹉螺擦
已升级0个,新安装1个,删除0个,未升级131个。
需要获取30.7 kB的档案。
完成此操作后,将使用150 kB的额外磁盘空间。
'http://archive.ubuntu.com/ubuntu/pool/universe/n/nautilus-wipe/nautilus-wipe_0.1.1-2_i386.deb'nautilus-wipe_0.1.1-2_i386.deb 30730 MD5Sum:7d497b8dfcefe1c0b51a45f3b0466994

尽管我认为它应该对本地文件感到满意,但它仍在尝试从Internet获取文件。


建议使用“”或localhost作为mediageek的结果

使用本地主机无效。但是“”与我的方法没有区别

    Package: *
    Pin: origin ""
    Pin-Priority: 1001

在发布问题之前,我已经使用了它们。但是我再次尝试了这一点(出于安全考虑)。相同的结果。apt-cache policy表明我的本地存储库确实具有最高优先级。但是当我尝试安装时,它说“需要获取XXX / XXX KB的存档”。


您本地存储库中的软件包是否比官方软件包新/相等?
风滚草

是的,当然,我使用apt-get命令进行了验证。它说“ 0 kb,需要下载”。
安瓦尔2012年

您想使用apt-cache policy
风滚草

先前的评论是一个错误。我以为我在另一个问题中给出了这个问题(关于通过本地存储库中的软件中心安装软件)。是的,我已经使用它进行了验证,apt-cache policy并且看到本地存储库具有更高的优先级。但是仍然apt-get尝试从Internet安装它。我认为如果不使用sources.list文件是不可能的。
安瓦尔2012年

我在问是否apt-cache policy显示版本相同
风滚草

Answers:


52

简短的答案:

APT首选项文件/ etc / apt / preferences可用于控制将选择安装哪个版本的软件包

这是文件/etc/apt/preferencesapt-get用于确定单个Packge的多个版本时必须选择哪个版本。这样,来自本地存储库的任何程序包都将优先于其他程序包。

包装:*  
密码:来源“”  
引脚优先级:1001  

这不会控制版本,但是如果两个软件包的版本相同,则使用源首选项。如果您需要为本地仓库中的相同软件包版本分配最高优先级,请在/etc/apt/sources.list文件顶部列出它们>

回答原始问题:

如何在不使用sources.list文件的情况下为本地存储库分配最高优先级?

如果不使用sources.list文件,则无法为本地存储库分配最高优先级。如果要为本地存储库分配最高优先级,则必须将它们放在“ sources.list”的顶部。

该问题的简要答案:

我该如何使apt-get首选本地存储库软件包,而不是从官方存储库再次下载相同的软件包版本?本地存储库已签名并受信任。我们已经尝试了apt首选项优先级。

使用该/etc/apt/sources.list文件,您需要将本地存储库行放在此文件的顶部。像下面的一个。

deb cdrom:[Kubuntu 12.04 LTS _Precise Pangolin_-Release i386(20120424)] /精确的主要限制
deb文件:/ media / Main / Precise-Debs-New /
deb文件:/ media / Main / Linux-Software / Ubuntu / Precise /

deb http://archive.ubuntu.com/ubuntu精确的主宇宙限制多重宇宙
deb-src http://archive.ubuntu.com/ubuntu精确宇宙主多重宇宙限制#由软件属性添加

#deb cdrom:[Xubuntu 12.04 LTS _Precise Pangolin_-Release i386(20120423.1)] /精确的主要多宇宙受限宇宙
#deb cdrom:[Ubuntu 12.04 LTS _Precise Pangolin_-Release i386(20120423)] /精确的主要限制

#deb http://archive.canonical.com/ubuntu精确合作伙伴
#deb-src http://archive.canonical.com/ubuntu精确合作伙伴
#deb http://extras.ubuntu.com/ubuntu精确主体
#deb-src http://extras.ubuntu.com/ubuntu精确主体

是的,“ apt_preference”与选择具有相同版本的软件包实例无关。这里的要点是,您不能通过/etc/apt/preference.deb本地存储库分配最高优先级来使用文件强制从本地存储库中选择/使用文件。该文件(首选项)用于选择特定版本,而不是同一版本的特定实例(.deb文件)。对于后一种情况,您需要使用/etc/apt/sources.list具有上述方法的文件。


说明:

似乎大家都误解了apt_preference目的,apt_preference手册在前三段中对此进行了描述!

APT首选项文件/ etc / apt / preferences可用于控制将选择安装哪个版本的软件包

当sources.list(5)文件包含对多个发行版的引用时(例如,稳定版和测试版),可以使用软件包的多个版本进行安装。APT为每个可用版本分配优先级。受依赖关系约束的影响,apt-get(8)选择安装优先级最高的版本。默认情况下,APT首选项文件会覆盖APT分配给软件包版本的优先级,从而使用户可以控制选择要安装的版本。

最重要的是第三段

当sources.list(5)文件包含对多个源的引用时,可以使用同一包版本的多个实例。在这种情况下,apt-get(8)下载最早在sources.list(5)文件中列出的实例。APT首选项文件不影响实例的选择,仅影响版本的选择

那些斜体是我的

我们来看一个例子:

我有的精确版本compiz-fusion-plugins-extra,但出于演示目的禁用了该版本

这是文件/etc/apt/preferencesapt-get用于确定单个Packge的多个版本时必须选择哪个版本。(在此示例中,compiz-fusion-plugins-extra有多个版本。

包装:*  
密码:来源“”  
引脚优先级:1001  

该文件说apt-get要从本地存储库安装所有存在于不同存储库中的多个版本的软件包。

换句话说,如果我的本地存储库中有xapps带有version的软件包1.0,而xappsPrecise的存储库中存在具有更高版本的同一个软件包,则说2.0apt-get将首选本地存储库中的版本,即version 1.0

这是我的/etc/apt/sources.list档案

deb http://archive.ubuntu.com/ubuntu精确的主宇宙限制多重宇宙
deb-src http://archive.ubuntu.com/ubuntu精确宇宙主多重宇宙限制#由软件属性添加
deb http://security.ubuntu.com/ubuntu/ precision-security Universe主多重宇宙受限
deb http://archive.ubuntu.com/ubuntu精确更新Universe主多重宇宙
deb http://archive.ubuntu.com/ubuntu precision-backports宇宙主多重宇宙受限

#deb http://archive.canonical.com/ubuntu精确合作伙伴
#deb-src http://archive.canonical.com/ubuntu精确合作伙伴
#deb http://extras.ubuntu.com/ubuntu精确主体
#deb-src http://extras.ubuntu.com/ubuntu精确主体


deb文件:/ media / Main / Linux-Software / Ubuntu / Oneiric /#这是oneiric存储库。
deb文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty /
deb文件:/ media / Main / Linux-Software / Ubuntu / Natty / kubuntu /
deb文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty_new /

尽管我已经在文件的前面列出了精确的存储库,但是它不会导致apt-get从该存储库中选择软件包。如手册中所述

APT首选项文件不影响实例的选择,仅影响版本的选择。

因此,命令的输出apt-cache policy compiz-fusion-plugins-extra如下所示

anwar @ edubuntu-lenovo:/ etc / apt $ apt缓存策略compiz-fusion-plugins-extra 
compiz-fusion-plugins-extra:
  已安装:(无)
  候选人:0.9.5.94-0ubuntu1 / **为优先级选择较低的版本** /
  版本表:
     0.9.7.0〜bzr9-0ubuntu6 0
        500个http://archive.ubuntu.com/ubuntu/precise/universe i386软件包
     0.9.5.94-0ubuntu1 0
       1001档案:/ media / Main / Linux-Software / Ubuntu / Oneiric / Packages
     0.9.4-0ubuntu3 0
       1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty /软件包

在这里,候选版本是0.9.5.94-0ubuntu1,(位于本地存储库中),而不是0.9.7.0~bzr9-0ubuntu6 0,位于Precisions的存储库中。尽管精确度在sources.list文件中列在第一位。

将本地存储库设置为最高优先级后apt-get尝试安装的示例运行compiz-fusion-plugins-extra

anwar @ edubuntu-lenovo:〜$ sudo apt-get install compiz-fusion-plugins-extra 
正在阅读包装清单...完成
建立依赖树       
正在读取状态信息...完成
以下软件包是自动安装的,不再需要:
  x11-apps x11-xfs-utils xinit x11-session-utils libfs6
使用“ apt-get autoremove”将其删除。
将安装以下额外的软件包:
  compiz-core compiz-plugins-default默认compiz-plugins-extra
  compiz-plugins-main-default默认为libdecoration0 xserver-xorg-core
  xserver-xorg-video-intel
建议包装:
  compizconfig-settings-manager xfonts-100dpi xfonts-75dpi
以下软件包将被删除:
  compiz compiz-gnome compizconfig-backend-gconf教育版桌面
  libcompizconfig0 ubuntu-desktop统一xorg xserver-xorg
  xserver-xorg-input-所有xserver-xorg-input-evdev xserver-xorg-input-鼠标
  xserver-xorg-input-synaptics xserver-xorg-input-vmmouse
  xserver-xorg-input-wacom xserver-xorg-video-all xserver-xorg-video-ati
  xserver-xorg-video-cirrus xserver-xorg-video-fbdev xserver-xorg-video-geode
  xserver-xorg-video-mach64 xserver-xorg-video-mga xserver-xorg-video-neomagic
  xserver-xorg-video-nouveau xserver-xorg-video-openchrome
  xserver-xorg-video-qxl xserver-xorg-video-r128 xserver-xorg-video-radeon
  xserver-xorg-video-s3 xserver-xorg-video-savage
  xserver-xorg-video-siliconmotion xserver-xorg-video-sis
  xserver-xorg-video-sisusb xserver-xorg-video-tdfx xserver-xorg-video-trident
  xserver-xorg-video-vesa xserver-xorg-video-vmware
将安装以下新软件包:
  compiz-fusion-plugins-extra compiz-plugins-extra
以下软件包将被降级:
  compiz-core compiz-plugins-default compiz-plugins-main-default
  libdecoration0 xserver-xorg-core xserver-xorg-video-intel
已升级0个,新安装2个,降级6个,删除37个,未升级698个。
需要获取0 B / 5,772 kB档案。
执行此操作后,将释放8,294 kB磁盘空间。
您要继续[Y / n]吗? 

奇怪!!!!!!它正在尝试降级已经安装的精确compiz软件包,以解决与新选择的compiz-fusion-plugins-extra!!!的依赖关系(与Oneiric的匹配)。

更为危险的是,它正在尝试删除图形驱动程序包(xserver-xorg -....),以避免与新compes冲突。

(也许,如果我在本地存储库中也有它们,它们可能会安全地降级。但是由于通常安装了这些软件包,所以我没有下载它们,因此不在本地存储库中,因此会出现此结果)

结论:因此,/etc/apt/preferences仅当本地系统中具有完整的存储库时,才建议将其与本地存储库一起使用。

如果许多存储库中存在相同版本的多个实例(.deb文件),该怎么办。

apt_preference手册描述

当sources.list(5)文件包含对多个源的引用时,可以使用同一包版本的多个实例。在这种情况下,apt-get(8)下载最早在sources.list(5)文件中列出的实例。

/etc/apt/preferences文件用例的示例:

强制apt-get选择自定义存储库中可用版本而不是Ubuntu标准版本的示例可能是“ Linux Mint”发行版。他们使用此自定义preference文件。

包装:*
引脚:发布o = linuxmint
密码优先级:700

包装:*
引脚:原始程序包.linuxmint.com
密码优先级:700

包装:*
销:释放o = Ubuntu
密码优先级:500

这有效地使它们在存储库中包含软件包时提供软件包。但是,如果没有它们,他们将使用Ubuntu的标准存储库。


apt-get将本地存储库设置为最高优先级后运行的示例

我只想kubuntu-desktop 在Ubuntu上安装软件包以测试KDE。(我忘记了,我已经使用/etc/apt/preferencefile 设置了首选项)。我有一个kubuntu-12.04-alternate-installer的iso,所以我认为我可以使用它。

(在将iso正确设置为存储库源之后),我运行
sudo apt-get install kubuntu-desktop,然后惊讶地看到下面的输出。

anwar @ edubuntu-lenovo:〜$ sudo apt-get install kubuntu-desktop
正在阅读包装清单...完成
建立依赖树       
正在读取状态信息...完成
无法安装某些软件包。这可能意味着您有
请求不可能的情况,或者您使用的是不稳定情况
分发一些尚未创建的必需软件包
或已移出“收入”。
以下信息可能有助于解决该情况:

以下软件包具有未满足的依赖性:
 kubuntu-desktop:取决于:language-selector-kde,但是不会被安装
                   推荐:amarok,但是它不会被安装
                   推荐:apturl-kde,但是不会被安装
                   推荐:gdebi-kde但它不会被安装
                   推荐:gpgsm但不会被安装
                   推荐:ibus-qt4,但是不会被安装
                   推荐:jockey-kde但它不会被安装
                   推荐:kdegraphics-strigi-plugins,但是不会被安装
                   推荐:kdepim-wizards,但是它不会被安装
                   推荐:kpackagekit但它不会被安装
                   推荐:libreoffice-kde,但是不会被安装
                   推荐:libreoffice-style-oxygen,但是不会被安装
                   推荐:network-manager-pptp-kde但它不会被安装
                   推荐:plasma-widget-facebook,但是它不会被安装
                   推荐:plasma-widget-kimpanel,但是它不会被安装
                   推荐:usb-creator-kde,但是不会被安装
E:无法纠正问题,您拿着破碎的包装。

结果令我感到惊讶。突然我想起来了,我设置了一个偏好设置(用于编写此答案),/etc/apt/preference以便为本地存储库设置最高优先级。

因此,我运行了:apt-cache policy kubuntu-desktop,输出如下:

anwar @ edubuntu-lenovo:〜$ apt-cache策略kubuntu-desktop 
kubuntu桌面:
  已安装:(无)
  候选人:1.222.1kde47〜ppa2
  版本表:
     1.254 0
        500 cdrom:// Kubuntu 12.04 LTS _Precise Pangolin_-版本i386(20120424)/ precise / main i386软件包
        500个http://archive.ubuntu.com/ubuntu/precise/main i386软件包
     1.222.1kde47〜ppa2 0
       1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty /软件包
     1.222.1 0
       1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty /软件包
     1.222 0
       1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / kubuntu /软件包

在此输出中,我们看到“ cdrom”和“精确主存储库”的版本号均为1.254,而本地存储库的版本号为1.222.1kde47〜ppa2,这是较低的版本。尽管它们在sources.list文件中位于本地文件之前,但本地程序包具有优先权。

为了明确地看到apt-get确实是要从本地安装,我运行synaptic并得到了它,这表明Apt系统将1.222.1kde47〜ppa2视为要安装的候选版本。

在此处输入图片说明

apt-cache policy kubuntu-desktop显示相同的东西

anwar @ edubuntu-lenovo:〜$ apt-cache策略kubuntu-desktop
kubuntu桌面:
  已安装:(无)
  候选人:1.222.1kde47〜ppa2
  版本表:
     1.254 0
        500 cdrom:// Kubuntu 12.04 LTS _Precise Pangolin_-版本i386(20120424)/ precise / main i386软件包
        500个http://archive.ubuntu.com/ubuntu/precise/main i386软件包
     1.222.1kde47〜ppa2 0
       1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty /软件包
     1.222.1 0
       1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty /软件包
     1.222 0
       1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / kubuntu /软件包

为了解决这个问题,我通过删除了/etc/apt/preference文件sudo rm /etc/apt/preference

然后再跑一次apt-cache policy kubuntu-desktop。只看到这个预期的输出。

anwar @ edubuntu-lenovo:〜$ sudo rm / etc / apt / preferences
anwar @ edubuntu-lenovo:〜$ sudo apt-cache策略kubuntu-desktop
kubuntu桌面:
  已安装:(无)
  候选人:1.254
  版本表:
     1.254 0
        500 cdrom:// Kubuntu 12.04 LTS _Precise Pangolin_-版本i386(20120424)/ precise / main i386软件包
        500个http://archive.ubuntu.com/ubuntu/precise/main i386软件包
     1.222.1kde47〜ppa2 0
        500文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty /软件包
     1.222.1 0
        500文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty /软件包
     1.222 0
        500文件:/ media / Main / Linux-Software / Ubuntu / Natty / kubuntu /软件包

还再次运行了。sudo apt-get install kubuntu-desktop查看以下输出:

.........删除了不必要的细节.........

0升级,213新安装,0删除和150未升级。
需要获取0 B / 89.6 MB的档案。
此操作后,将使用269 MB的额外磁盘空间。
您要继续[Y / n]吗? 

您可以在此处查看完整结果

然后,我非常确定“解释”部分。


参考1:apt_preference手册

参考2:如何保留特定版本的软件包


1
对于“如果同一版本的多个实例该怎么办”部分,请为其+1。但我只等到本周末结束,也许有人有更好的解释。:)
Savvas Radevic

我应该使用本地存储库添加示例吗?
安瓦尔2012年

耶稣...我的意思是感谢您的解释清楚,但这应该简单得多。为什么在运行apt-add-repository时不能分配优先级?
亚当·普洛彻
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.