我有一个 jessie debian 系统(更准确地说是 devuan)。我现在尝试从 jessie-backports 和 jessie-security 版本获取软件包。
但我不明白 apt 在做什么。
这就是我真正想弄清楚的: apt 在这里想告诉我什么?
我知道如何强制升级到 ASCII。我现在还设法强制我的系统使用 jessie-backports;我仍然不知道 apt 在下面的描述中试图告诉我什么。
我想弄清楚 apt 的问题是什么,因为我很确定我将来会看到同样的问题(实际上我只是在另一个系统上做的)。所以无论谁比我更了解 apt,如果你知道:请尝试解释会发生什么......
我首先从 gcc 开始:
# apt-cache policy libgcc1 gcc-4.9-base
libgcc1:
Installed: 1:4.9.2-10
Candidate: 1:4.9.2-10+deb8u1
Version table:
1:6.3.0-18+deb9u1 0
500 http://de.mirror.devuan.org/merged/ ascii/main amd64 Packages
1:4.9.2-10+deb8u1 0
991 http://de.mirror.devuan.org/merged/ jessie-security/main amd64 Packages
*** 1:4.9.2-10 0
600 http://de.mirror.devuan.org/merged/ jessie/main amd64 Packages
100 /var/lib/dpkg/status
gcc-4.9-base:
Installed: 4.9.2-10
Candidate: 4.9.2-10+deb8u1
Version table:
4.9.2-10+deb8u1 0
991 http://de.mirror.devuan.org/merged/ jessie-security/main amd64 Packages
*** 4.9.2-10 0
600 http://de.mirror.devuan.org/merged/ jessie/main amd64 Packages
100 /var/lib/dpkg/status
正如你所看到的,我有一些固定到位。据我了解,我认为“991”意味着只要它是新的就使用这个包。这是我的完整固定配置:
/etc/apt/preferences.d# cat *
Package: *
Pin: release a=jessie-backports
Pin-Priority: 991
Package: *
Pin: release a=jessie-security
Pin-Priority: 991
Package: *
Pin: release a=stable
Pin-Priority: 600
Package: *
Pin: release a=ascii
Pin-Priority: 550
Package: *
Pin: release a=jessie-updates
Pin-Priority: 560
它还接缝了“候选:”行,表明 apt 现在将从“jessie-security”切换到稍新的软件包。
所以第一个惊喜是:
# apt-get install -s gcc-4.9-base
The following packages have unmet dependencies:
libgcc1 : Depends: gcc-4.9-base (= 4.9.2-10) but 4.9.2-10+deb8u1 is to be installed
我认为通过上述固定 apt 会自动从 jessie-security 中引入 libgcc1 ,因此可以解决上述未满足的依赖关系。
这是怎么回事?
下一个问题:
# apt-get install -s libgcc1 gcc-4.9-base
The following packages were automatically installed and are no longer required:
antiword crda cups-pk-helper eclipse-cdt-jni eclipse-platform-data
espeak-data fastjar firebird2.5-common firebird2.5-common-doc
fonts-freefont-ttf fonts-opensymbol gir1.2-atk-1.0 gir1.2-atspi-2.0
gir1.2-freedesktop gir1.2-gdkpixbuf-2.0 gir1.2-glib-2.0
...
搞什么?
这肯定不是真的。显然我完全不明白这里的一些东西。更糟糕:
The following extra packages will be installed:
cpp-4.9 gettext-base lib32gcc1 lib32stdc++6 libatomic1 libegl1-mesa-drivers
libgfortran3 libgomp1 libitm1 libobjc4 libosgi-compendium-java libquadmath0
libsoxr0
Suggested packages:
gcc-4.9-locales libosgi-compendium-java-doc
The following packages will be REMOVED:
adwaita-icon-theme ant ant-optional apt apt-file apt-listchanges
apt-show-versions apt-transport-https apt-utils aptitude aspectj aspell
aspell-de aspell-en astyle build-essential ca-certificates-java chromium
claws-mail claws-mail-i18n claws-mail-pdf-viewer claws-mail-pgpinline
...
所以这个“apt-get install”命令将删除我系统的一半。
我完全不明白这里发生了什么事......
有人可以解释一下吗?
编辑:有人提到我不应该使用混合版本。我不认为这与我的问题有任何关系。但可以肯定的是:我删除了所有 ASCII 源并删除了所有 ASCII 相关的固定,并将我拥有的几个软件包从 ASCII 降级回 JESSIE。所有这些都不会改变一件事:如果我执行
apt-get install -s libgcc1 gcc-4.9-base
apt 报告说它将删除我系统的一半。
为什么 ?
还有问题的第一部分:如果我只使用 apt 为什么不会自动解决对 libgcc1 的依赖
apt-get install -s gcc-4.9-base
答案1
你有一个混合的sources.list:Jessie 和ascii(拉伸)。
从你的文件中删除asciisources.list
从文件中删除以下行preferences
:
Package: *
Pin: release a=ascii
Pin-Priority: 550
跑步 :
apt-get update
apt-get dist-upgrade
什么是未满足的依赖关系?
如果在包安装过程中不满足某些依赖关系,则安装将失败。这libgcc1 (1:6.3.0-18+deb9u1)
取决于gcc-6-base
v= 6.3.0-18+deb9u1 的确切版本。当前安装的版本是6.3.0-18
如何解决未满足的依赖关系?
在您的情况下,将 pin 优先级附加1001
到旧的稳定版本,它将升级/降级您的软件包到 jessie。
Package: *
Pin: release a=jessie-security
Pin-Priority: 1001
Package: *
Pin: release a=stable
Pin-Priority: 1001
Package: *
Pin: release a=jessie-updates
Pin-Priority: 1001
然后升级你的包。
apt-get update
apt-get dist-upgrade
在某些情况下,您应该使用要安装的软件包的确切版本来解决未满足的依赖关系问题:
apt-get install gcc-4.9-base=4.9.2-10+deb8u1
apt-get install libgcc1
为什么很多包会被删除?
apt install 一个包及其依赖项,如果要删除该包,这些包将变得不必要并自动删除。
随着时间的推移,一些自动安装的软件包变得不再需要,因为依赖它们的软件包不再需要。他们可能正在使用同一库的较新版本,或者他们改用其他库,或者他们能够自己完成任务。
要将 devuan 升级到 ascii ,请/etc/apt/sources.list
通过仅添加以下行来编辑:
deb http://pkgmaster.devuan.org/merged ascii main
deb http://pkgmaster.devuan.org/merged ascii-updates main
deb http://pkgmaster.devuan.org/merged ascii-security main
deb http://pkgmaster.devuan.org/merged ascii-backports main
删除/etc/apt/preferences
文件然后运行
apt-get upgrade devuan-keyring
apt-get update
apt-get dist-upgrade