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

摘要

如何使apt-get更喜欢本地存储库包,而不是从官方存储库再次下载相同的包版本? 本地存储库已签名并受信任。 我们已经尝试过优先选择优先权。


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

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

我一直在使用这个本地存储库至少1年。 但我必须始终将我的本地存储库行放在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 apt尝试从Internet下载它。 但是当我将local-repo放在顶部时,它会从本地存储库安装。

所以, 我的问题是 – >’当包在本地存储库中可用时,是否有可能强制使用本地存储库,而没有明确地将“本地源”放在我的存储库列表的顶部(例如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'naverlus-wipe_0.1.1-2_i386.deb 30730 MD5Sum:7d497b8dfcefe1c0b51a45f3b0466994

它仍然试图从互联网上获取文件,但我认为应该对本地文件感到高兴。


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

使用localhost无效。 但“”与我的方法有所不同

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

我在发布问题之前使用过它们。 但我再试一次(为了潮汐)。 同样的结果。 apt-cache policy显示我的本地存储库确实具有最高优先级。 但当我试图安装时,它说“需要获取XXX / XXX KB的存档”。

简短的回答:

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

这是文件/etc/apt/preferencesapt-get用来决定,如果有一个包的许多版本,它必须选择哪个版本。 有了这个,来自本地存储库的任何包都将优先于其他包。

套餐:*  
别针:原产地“”  
引脚优先:1001  

这不会控制版本,但如果两个包具有相同的版本,则不会控制源首选项。 如果您需要为本地存储库中的相同软件包版本指定最高优先级,请将它们列在/etc/apt/sources.list文件的顶部>

回答原始问题:

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

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

这个问题的总结答案:

如何使apt-get更喜欢本地存储库包,而不是从官方存储库再次下载相同的包版本? 本地存储库已签名并受信任。 我们已经尝试过优先选择优先权。

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

 deb cdrom:[Kubuntu 12.04 LTS _Precise Pangolin_  - 发布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精确的宇宙主要多元宇宙限制#Added由软件属性

 #deb cdrom:[Xubuntu 12.04 LTS _Precise Pangolin_  - 发布i386(20120423.1)] /精确主要多元宇宙限制宇宙
 #deb cdrom:[Ubuntu 12.04 LTS _Precise Pangolin_  - 发布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手册在前3段中描述了这个!

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

当sources.list(5)文件包含对多个分发的引用(例如,stable和testing)时,可以安装多个版本的软件包。 APT为每个可用版本分配优先级。 根据依赖性约束,apt-get(8)选择具有最高安装优先级的版本。 APT首选项文件会覆盖默认情况下APT分配给软件包版本的优先级,从而使用户可以控制选择安装哪个版本。

而非常重要的是第三段

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

那些斜体是我的

让我们看一个例子:

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

这是文件/etc/apt/preferencesapt-get用来决定,如果有一个包的许多版本,它必须选择哪个版本。 (在这个例子中, compiz-fusion-plugins-extra有几个版本。

套餐:*  
别针:原产地“”  
引脚优先:1001  

此文件说apt-get从本地存储库安装,以便在不同的存储库中存在多个版本的所有软件包。

换句话说,如果我的本地存储库中包含xapps版本1.0 ,并且相同的软件包xapps存在于具有更高版本的Precise存储库中,比如2.0 ,则apt-get将更喜欢本地存储库中的版本,即版本1.0

这是我的/etc/apt/sources.list文件

 deb http://archive.ubuntu.com/ubuntu精确的主要宇宙限制多元宇宙
 deb-src http://archive.ubuntu.com/ubuntu精确的宇宙主要多元宇宙限制#Added由软件属性
 deb http://security.ubuntu.com/ubuntu/ exact-security universe主要多元宇宙限制
 deb http://archive.ubuntu.com/ubuntu精确更新宇宙主要多元宇宙限制
 deb http://archive.ubuntu.com/ubuntu exact-backports universe主要多元宇宙限制

 #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 / #this是oneiric repository。
 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-cache policy compiz-fusion-plugins-extra 
 Compiz的融合 - 插件 - 额外的:
  已安装:(无)
  候选人: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 / Packages

这里,候选版本是0.9.5.94-0ubuntu1 (位于本地存储库中),而不是0.9.7.0~bzr9-0ubuntu6 0 ,它位于precises的存储库中。 虽然precises的一个列在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 - 英特尔
推荐套餐:
   compizconfig-settings-manager xfonts-100dpi xfonts-75dpi
以下包将被删除:
   compiz compiz-gnome compizconfig-backend-gconf edubuntu-desktop
   libcompizconfig0 ubuntu-desktop unity xorg xserver-xorg
   xserver-xorg-input-all xserver-xorg-input-evdev xserver-xorg-input-mouse
   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-fusion-plugins-extra !!!来降级已安装的精确compiz包以解决依赖关系(与Oneiric的匹配)。

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

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

结论 :因此,如果在本地系统中有完整的存储库,则建议仅使用/etc/apt/preferences与本地存储库一起使用。

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

这是apt_preference手册所描述的

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

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

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

套餐:*
 Pin:释放o = linuxmint
引脚优先:700

套餐:*
 Pin:origin packages.linuxmint.com
引脚优先:700

套餐:*
 Pin:释放o = Ubuntu
引脚优先:500

这有效地使他们在他们的存储库中拥有包时提供包。 但如果他们没有,他们会使用Ubuntu的标准存储库。


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

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

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


 anwar @ edubuntu-lenovo:〜$ sudo apt-get install kubuntu-desktop
阅读包裹清单......完成
构建依赖树       
阅读国家信息......完成
某些软件包无法安装。 这可能意味着你有
请求一个不可能的情况或如果您使用不稳定
尚未创建某些必需包的分发
或被移出Incoming。
以下信息可能有助于解决此问题:

以下包具有未满足的依赖项:
  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 policy kubuntu-desktop 
 Kubuntu的桌面:
  已安装:(无)
  候选人:1.222.1kde47~ppa2
  版本表:
      1.254 0
         500 cdrom:// Kubuntu 12.04 LTS _Precise Pangolin_  - 发布i386(20120424)/精确/主i386封装
         500 http://archive.ubuntu.com/ubuntu/ exact / main i386包
      1.222.1kde47~ppa2 0
        1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
      1.222.1 0
        1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
      1.222 0
        1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / kubuntu / Packages

在此输出中,我们看到“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 policy kubuntu-desktop
 Kubuntu的桌面:
  已安装:(无)
  候选人:1.222.1kde47~ppa2
  版本表:
      1.254 0
         500 cdrom:// Kubuntu 12.04 LTS _Precise Pangolin_  - 发布i386(20120424)/精确/主i386封装
         500 http://archive.ubuntu.com/ubuntu/ exact / main i386包
      1.222.1kde47~ppa2 0
        1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
      1.222.1 0
        1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / natty / Packages
      1.222 0
        1001文件:/ media / Main / Linux-Software / Ubuntu / Natty / kubuntu / Packages

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

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

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

还跑了这个。 sudo apt-get install kubuntu-desktop查看下面的输出:

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

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

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

然后我非常肯定解释部分。


参考1:apt_preference手册

参考2:如何保持安装特定版本的软件包