简短的答案:
APT首选项文件/ etc / apt / preferences可用于控制将选择安装哪个版本的软件包。
这是文件/etc/apt/preferences
,apt-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/preferences
,apt-get
用于确定单个Packge的多个版本时必须选择哪个版本。(在此示例中,compiz-fusion-plugins-extra
有多个版本。
包装:*
密码:来源“”
引脚优先级:1001
该文件说apt-get
要从本地存储库安装所有存在于不同存储库中的多个版本的软件包。
换句话说,如果我的本地存储库中有xapps
带有version的软件包1.0
,而xapps
Precise的存储库中存在具有更高版本的同一个软件包,则说2.0
,apt-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/preference
file 设置了首选项)。我有一个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:如何保留特定版本的软件包