我正在尝试从 debian lenny 更新到我的 64 位根服务器上的 squeeze,到目前为止执行以下操作:
- 修改 sources.list
- apt-get 更新
- apt-get 升级
- apt-get 安装 linux-image-2.6-amd64
最后一步导致以下错误输出:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
linux-image-2.6-amd64: Depends: linux-image-2.6.32-5-amd64 but it is not going to be installed
E: Broken packages
更新
这是我的来源列表
deb ftp://mirror.hetzner.de/debian/packages squeeze main contrib non-free
deb ftp://mirror.hetzner.de/debian/security squeeze/updates main contrib non-free
deb http://ftp.de.debian.org/debian squeeze main non-free contrib
deb-src http://ftp.de.debian.org/debian squeeze main non-free contrib
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free
更新2
我也可以跑
aptitude upgrade
但我不确定这是不是个好主意,它表明
....
升级了 74 个软件包,新安装了 111 个,删除了 16 个,还有 0 个未升级。
....
删除以下软件包:libept0 linux-image-2.6-amd64 php5-mysql
安装以下软件包:libsasl2-modules [2.1.23.dfsg1-7 (stable, stable)]
...
更新 3
apt-get -s dist-upgrade 返回:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Failed
The following packages have unmet dependencies:
udev: Breaks: linux-image-2.6-amd64 (< 2.6.28) but 2.6.26+17+lenny1 is to be installed
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
并且 apt-get upgrade 告诉我它阻碍了很多:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages have been kept back:
apache2-mpm-prefork apache2.2-common apt aptitude bash cron diff djvulibre-desktop exim4 exim4-base exim4-config exim4-daemon-light
gettext ghostscript gnupg gpgv grub grub-common imagemagick iproute iptables lftp libapache2-mod-php5 libaprutil1 libcups2
libcupsimage2 libcurl3 libdate-manip-perl libdevmapper1.02.1 libdjvulibre21 libgs8 libgtk2.0-0 libgtk2.0-bin libkrb5-dev libkrb53
libpam-modules libpam-runtime libpango1.0-0 libpango1.0-dev libphp-pclzip libpq5 librsvg2-2 libsasl2-2 libthai-data libthai0
libx11-6 libx11-dev libxcb1 libxcb1-dev libxi6 linux-image-2.6-amd64 lvm2 munin-node openssh-client openssh-server php5-common
php5-gd php5-imagick php5-mysql python python-minimal python2.5 python2.5-minimal rrdtool smartmontools sysv-rc udev
0 upgraded, 0 newly installed, 0 to remove and 67 not upgraded.
然后我想也许有些事情需要搁置,但是
dpkg --get-selections | grep hold
不返回任何内容。
在此之前,我在过去大约 2 年内安装了很多东西,那台机器一直在运行。我记得最近遇到了一些 munin 问题,我需要修改 apt-sources 来检索版本 1.4.7。我可能也在那里得到了一些 squeeze 包?
似乎很奇怪:如果我检查 /etc/debian_version,它会显示:6.0.5
我还读到现在使用 aptitude 不是一个好主意,或者说:不要混合使用 aptidute 和 apt-get。我过去可能也偶尔使用 aptitude。
更新 4
我尝试按照 stew 的说法安装 linux-image-2.6.32-5-amd64,但也失败了
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
linux-image-2.6.32-5-amd64: Depends: linux-base (>= 2.6.32-45) but it is not going to be installed
E: Broken packages
我理解的那个信息对吗?如果我想安装 2.6.32-5,我需要版本 >= 2.6.32-45,那应该怎么做?
更新 5
所以我继续递归,意思是:尝试安装那些依赖项,从而导致:
- Linux 基础
- libuuid-perl
- perlapi-5.10.1
最后一个,无法安装,因为它是一个“虚拟包”
Package perlapi-5.10.1 is a virtual package provided by:
You should explicitly select one to install.
E: Package perlapi-5.10.1 has no installation candidate
我又卡住了。apt-cache search perlapi
刚刚返回了两个包。libperl-apireference-perl 依赖于 perlapi-5.10.1,而 perl-base 声称是最新版本
更新 6
看起来我安装了 perl 5.14.2。如果我没记错的话,它不稳定。据我所知,降级可以解决这个问题,对吗?
所以我从 debian 存档降级到 perl 5.10。apt-get upgrade
现在运行,我很困惑这是否是正确的方法,因为会有很多变化
11 upgraded, 26 newly installed, 76 to remove and 44 not upgraded.
一些要删除的软件包对于我正在做的事情来说很重要,例如 php5-mysql munin munin-common munin-node
这是一个选择然后尝试修复所有这些包/服务的好方法吗?
更新 7
太棒了!我明白了
aptitude install perl
还降级了许多其他软件包。然后运行
apt-get upgrade
不再引起任何问题,我继续
apt-get dist-upgrade
最终顺利完成。
非常感谢,特别是炖菜!
答案1
似乎你一开始建议的升级程序这很棒。我建议坚持这样做,而不是过早地进行 dist-upgrade。此过程是通过在数千个系统上进行测试得出的,我们认为这是您顺利升级的最佳机会。
在这种情况下,当您这样做时,apt-get upgrade
我们预计会有很多软件包被阻止。这是设计使然。我们只想进行最小程度的升级,以便安装新内核和 udev,然后重新启动,然后使用 完成其余的升级dist-upgrade
。
您应该集中精力于这个错误:
linux-image-2.6-amd64: Depends: linux-image-2.6.32-5-amd64 but it is not going to be installed
apt 无法安装 的原因有多种linux-image-2.6.32-5-amd64
。尝试直接使用 来安装apt-get install linux-image-2.6.32-5-amd64
,这样可以找到原因,这样可以安装它,或者会告诉您这个软件包具体出了什么问题。如果这导致另一个软件包出现问题,请对此软件包执行相同操作,尝试直接安装它,直到找到根本原因。成功安装内核后,请按照升级说明继续操作。
执行此操作可能会产生一个不受欢迎的结果,那就是将linux-image-2.6.32-5-amd64
包标记为自动安装。升级完成后,如果您对结果感到满意,您可以运行apt-mark auto linux-image-2.6.32-5-amd64
以将此包标记为自动安装。
显示 6.0.5的原因/etc/debian_version
是你已经更新了软件包base_files
。这并不奇怪。
几年前,aptitude 和 apt-get 混用的问题已在 apt-get 7.0 版中得到解决,您可以随意混合使用它们。事实上,Debian 过去建议使用 aptitude 从一个主要版本升级到另一个主要版本,现在则建议使用 apt-get,因此 Debian 显然建议同时使用两者。对于给定的升级,我们将推荐似乎效果更好的那个。在 lenny->squeeze 升级中,aptitude 往往会“过于费力”地寻找最佳升级路径,而 apt-get 中更简单的依赖关系解析对更多人来说都适用。
答案2
从主版本到另一个版本的升级需要您执行以下操作:
apt-get update
apt-get dist-upgrade
仅此而已。是的,将发行版名称从 替换/etc/apt/sources.list
,例如sed -i -e 's/lenny/squeeze/g' /etc/apt/sources.list
。
但您的错误似乎是使用upgrade
而不是dist-upgrade
。
另外,如果出现问题,您还有备份,对吗?