为我的本地存储库分配最高优先级
摘要
如何使apt-get更喜欢本地存储库包,而不是从官方存储库再次下载相同的包版本? 本地存储库已签名并受信任。 我们已经尝试过优先选择优先权。
原始问题是:“如何在不使用sources.list文件的情况下为本地存储库分配最高优先级”
我已经使用我下载的软件包设置了一个本地存储库 当我需要重新安装我的Ubuntu时,我用它来避免在Internet上下载相同的软件包。 它是一个基本的存储库,使用apt-ftparchive packages . > Packages
创建apt-ftparchive packages . > Packages
apt-ftparchive packages . > Packages
。 我将其设置为可信任的存储库以避免“未经身份validation的存储库”警告。 ( 如果您有不受信任的存储库, apt
或synaptic
尝试通过Internet下载相同的软件包,因为它是受信任的 )。
我一直在使用这个本地存储库至少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
, 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/preferences
, apt-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/preferences
, apt-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:如何保持安装特定版本的软件包