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

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

概括

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


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

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

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

还有真正的问题问题是,apt 或者 synaptic总是从前面提到的源下载包,而不检查本地存储库中是否已经有包。所以,我别无选择,只能将本地源放在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尝试从互联网下载它。但当我将本地存储库放在顶部时,它会从本地存储库安装。

所以,我的问题是 ->“当软件包在本地存储库中可用时,是否可以强制 apt 使用本地存储库,而无需将“本地源”明确放在存储库列表的顶部(例如 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/ 软件包

它表明我的本地存储库具有更高的优先级,尽管它不是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

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


按照 mediageek 的建议使用“”或 localhost 的结果

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

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

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

答案1

简短的回答是:

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

这是文件/etc/apt/preferences,用于apt-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_ - 发布 i386 (20120424)]/ precise main restricted
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)]/ precise main restricted

# 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/preferences,用于apt-get决定当单个包有多个版本时应该选择哪个版本。(在这个例子中,compiz-fusion-plugins-extra有多个版本。)

包裹: *  
引脚:原点“”  
引脚优先级:1001  

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

换句话说,如果我的本地存储库中有xapps一个带有版本的包,并且这个相同的包在 Precise 的存储库中存在更高的版本,比如说,则会优先选择本地存储库中的版本,即版本。1.0xapps2.0apt-get1.0

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

deb http://archive.ubuntu.com/ubuntu 精确主宇宙受限多元宇宙
deb-src http://archive.ubuntu.com/ubuntu 精确宇宙主多元宇宙受限#由软件属性添加
deb http://security.ubuntu.com/ubuntu/ 精确安全宇宙主多元宇宙受限
deb http://archive.ubuntu.com/ubuntu precise-updates 宇宙 主 多元宇宙 受限
deb http://archive.ubuntu.com/ubuntu precise-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-cache 策略 compiz-fusion-plugins-extra
compiz-fusion-插件-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/软件包
     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位于 precises 的存储库中)。尽管 precises 的版本在文件中首先列出sources.list

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

anwar@edubuntu-lenovo:~$ sudo apt-get install compiz-fusion-plugins-extra
正在读取软件包列表...完成
构建依赖关系树       
正在读取状态信息...完成
以下软件包已自动安装并且不再需要:
  x11-应用程序 x11-xfs-实用程序 xinit x11-会话-实用程序 libfs6
使用“apt-get autoremove”来删除它们。
将会安装以下额外的软件包:
  compiz-核心 compiz-插件-默认 compiz-插件-额外
  compiz-插件-main-default libdecoration0 xserver-xorg-core
  xserver-xorg-video-intel
建议的软件包:
  compizconfig-设置管理器 xfonts-100dpi xfonts-75dpi
下列软件包将被删除:
  compiz compiz-gnome compizconfig-后端-gconf edubuntu-桌面
  libcompizconfig0 ubuntu-desktop unity xorg xserver-xorg
  xserver-xorg-input-all xserver-xorg-input-evdev xserver-xorg-input-鼠标
  xserver-xorg-input-synaptics xserver-xorg-input-vmmouse
  xserver-xorg-输入-wacom xserver-xorg-视频-all xserver-xorg-视频-ati
  xserver-xorg-video-cirrus xserver-xorg-video-fbdev xserver-xorg-video-geode
  xserver-xorg-video-mach64 xserver-xorg-video-mga xserver-xorg-video-neomaic
  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-插件-extra compiz-插件-extra
以下软件包将被降级:
  compiz-核心 compiz-插件-默认 compiz-插件-主默认
  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-....)以避免与新的编译冲突。

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

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

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

apt_preference手册中有描述

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

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

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

包裹: *
密码:release o=linuxmint
Pin 优先级:700

包裹: *
密码:origin packages.linuxmint.com
Pin 优先级:700

包裹: *
引脚:release o=Ubuntu
Pin 优先级: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
正在读取软件包列表...完成
构建依赖关系树       
正在读取状态信息...完成
某些软件包无法安装。这可能意味着您有
请求一个不可能的情况,或者如果你正在使用不稳定
发行版中某些必需的软件包尚未创建
或已移出传入。
以下信息可能有助于解决该情况:

以下软件包具有未满足的依赖关系:
 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”和“precise main repository”都有版本号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 policy 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:如何保留安装的特定版本的软件包

相关内容