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

Anw*_*war 45 aptitude synaptic apt localrepository software-sources

概括

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


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

我已经用我下载的软件包设置了一个本地存储库。当我需要重新安装 Ubuntu 时,我使用它来避免通过 Internet 下载相同的软件包。它是一个基本存储库,使用apt-ftparchive packages . > Packages. 我将其设为受信任的存储库以避免“未经身份验证的存储库”警告。(当您有一个不受信任的存储库,apt或者synaptic尝试通过 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
Run Code Online (Sandbox Code Playgroud)

我的发布文件是这个

    Origin: Local
    Label: Local-Ubuntu
    Description: Local Ubuntu Repository
    Codename: ubuntu-local
    MD5Sum:
     ed43222856d18f389c637ac3d7dd6f85          1043412 Packages
     d41d8cd98f00b204e9800998ecf8427e                0 Sources
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

  
鹦鹉螺擦拭:
  已安装:(无)
  候选人:0.1.1-2
  版本表:
     0.1.1-2 0
        500 个 http://archive.ubuntu.com/ubuntu/precision/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:7d4975cb8f9d497b8f9d

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


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

使用 localhost 没有效果。但“”有但与我的方法没有什么不同

    Package: *
    Pin: origin ""
    Pin-Priority: 1001
Run Code Online (Sandbox Code Playgroud)

我在发布问题之前使用过它们。但是我再次尝试了这个(为了保险起见)。同样的结果。apt-cache policy表明我的本地存储库确实具有最高优先级。但是当我尝试安装时,它说“需要获取 XXX/XXX KB 的存档”。

Anw*_*war 61

简短的回答:

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

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

包裹: *  
销:起源“”  
引脚优先级: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 手册在前 3 段中对此进行了描述!!

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用于决定如果单个包有多个版本,它必须选择哪个版本。(在这个例子中,compiz-fusion-plugins-extra有几个版本。

包裹: *  
销:起源“”  
引脚优先级:1001  

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

换句话说,如果我的本地存储库中有xapps带有版本的包1.0,并且该相同的包xapps存在于具有更高版本的 Precise 存储库中,例如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 精确更新宇宙主多元宇宙受限
deb http://archive.ubuntu.com/ubuntu precision-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 存储库。
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 策略 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/precision/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,它在精确存储库中。尽管精确的人在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 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 磁盘空间。
你想继续[是/否]吗? 

奇怪!!!,它试图降级已经安装的compiz包,以使用新选择的来解决依赖关系(与Oneiric的匹配)compiz-fusion-plugins-extra!!!。

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

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

结论:因此,/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

包裹: *
引脚:origin packages.linuxmint.com
引脚优先级:700

包裹: *
引脚:发布 o=Ubuntu
引脚优先级:500

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


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

我只是想kubuntu-desktop 在 Ubuntu 上安装包来测试 KDE。(我忘记了,我已经使用/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 策略 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/precision/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 策略 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/precision/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

为了解决这个问题,我/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)/精确/主 i386 包
        500 个 http://archive.ubuntu.com/ubuntu/precision/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/ Packages

也再次运行了这个。sudo apt-get install kubuntu-desktop查看下面的输出:

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

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

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

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


参考 1:apt_preference 手册

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

  • 耶稣......我的意思是感谢您解释清楚的答案,但这应该简单得多。为什么在运行 apt-add-repository 时不能分配优先级? (3认同)

归档时间:

查看次数:

41204 次

最近记录:

12 年,1 月 前