无法计算升级,发生了什么事?

我正在运行sudo update-manager -d并开始升级过程。我选择了升级选项,当管理器进入设置新软件通道时,它抛出了一个错误。
无法计算升级
在计算升级时发生了一个无法解决的问题。
可能的原因有: * 升级到Ubuntu的预发布版本 * 运行当前的预发布版本的Ubuntu * 使用Ubuntu未提供的非官方软件包
如果以上都不适用,请使用终端中的命令'ubuntu-bug ubuntu-release-upgrader-core'报告此错误。
我已经禁用了所有非官方和第三方软件包,我没有运行预发布版本,因为我使用的是13.04版本,我正在尝试更新到beta 2版本,这不是一个预发布版本。在提交错误报告之前,由于这个问题同时发生在我的两台系统上,我想弄清楚是否还有其他人遇到了同样的问题。 编辑:添加了评论的输出。
$ sudo dpkg -l | grep -w "rc"`
rc google-chrome-beta 31.0.1650.16-1 amd64 The web browser from Google
ii sysv-rc 2.88dsf-13.10ubuntu15 all System-V-like runlevel change mechanism

$ cat /etc/apt/sources.list

deb http://dk.archive.ubuntu.com/ubuntu/ raring main restricted
deb-src http://dk.archive.ubuntu.com/ubuntu/ raring main restricted

deb http://dk.archive.ubuntu.com/ubuntu/ raring-updates main restricted
deb-src http://dk.archive.ubuntu.com/ubuntu/ raring-updates main restricted

deb http://dk.archive.ubuntu.com/ubuntu/ raring universe
deb-src http://dk.archive.ubuntu.com/ubuntu/ raring universe
deb http://dk.archive.ubuntu.com/ubuntu/ raring-updates universe
deb-src http://dk.archive.ubuntu.com/ubuntu/ raring-updates universe

deb http://dk.archive.ubuntu.com/ubuntu/ raring multiverse
deb-src http://dk.archive.ubuntu.com/ubuntu/ raring multiverse
deb http://dk.archive.ubuntu.com/ubuntu/ raring-updates multiverse
deb-src http://dk.archive.ubuntu.com/ubuntu/ raring-updates multiverse

deb http://security.ubuntu.com/ubuntu raring-security main restricted
deb-src http://security.ubuntu.com/ubuntu raring-security main restricted
deb http://security.ubuntu.com/ubuntu raring-security universe
deb-src http://security.ubuntu.com/ubuntu raring-security universe
deb http://security.ubuntu.com/ubuntu raring-security multiverse
deb-src http://security.ubuntu.com/ubuntu raring-security multiverse

deb http://extras.ubuntu.com/ubuntu raring main
deb-src http://extras.ubuntu.com/ubuntu raring main
deb http://dk.archive.ubuntu.com/ubuntu/ raring-proposed multiverse universe restricted main

$ lsb_release -c
Codename:   raring

$ sudo apt-get -y install aptitude && \
      sudo rename 's/\.list$/.list.disable/' /etc/apt/sources.list.d/*.list && \
      sudo aptitude update && \
      aptitude search '?narrow(?installed, !?archive(raring))'`

i   dropbox                       - cloud synchronization engine - CLI and Nautilus extension                      
i   google-chrome-stable          - The web browser from Google                                                    
i   google-talkplugin             - Google Talk Plugin                                                             
i   libdrm-intel1                 - Userspace interface to intel-specific kernel DRM services -- runtime           
i   libdrm-nouveau2               - Userspace interface to nouveau-specific kernel DRM services -- runtime         
i   libdrm-radeon1                - Userspace interface to radeon-specific kernel DRM services -- runtime          
i   libdrm2                       - Userspace interface to kernel DRM services -- runtime                          
i   libegl1-mesa                  - free implementation of the EGL API -- runtime                                  
i   libegl1-mesa-drivers          - free implementation of the EGL API -- hardware drivers                         
i   libgbm1                       - generic buffer management API -- runtime                                       
i   libgl1-mesa-dri               - free implementation of the OpenGL API -- DRI modules                           
i   libgl1-mesa-glx               - free implementation of the OpenGL API -- GLX runtime                           
i   libglapi-mesa                 - free implementation of the GL API -- shared library                            
i A libgles2-mesa                 - free implementation of the OpenGL|ES 2.x API -- runtime                        
i   libllvm3.3                    - Low-Level Virtual Machine (LLVM), runtime library                              
i   libopenvg1-mesa               - free implementation of the OpenVG API -- runtime                               
i   libxatracker1                 - X acceleration library -- runtime                                              
i   nodejs                        - Node.js event-based server-side javascript engine                              
id  nvidia-persistenced           - Load the NVIDIA kernel driver and create device files                          
id  nvidia-settings-331           - Tool for configuring the NVIDIA graphics driver                                
i   simplescreenrecorder          - A feature-rich screen recorder that supports X11 and OpenGL.                   
i A simplescreenrecorder-lib      - A feature-rich screen recorder that supports X11 and OpenGL.                   
i   sublime-text                  - Sublime Text is a sophisticated text editor for code, markup and prose         
i   vokoscreen                    - easy to use screencast creator                                                 
i   xserver-common                - common files used by various X servers                                         
i   xserver-xorg-core             - Xorg X server - core server                                                    
i   xserver-xorg-input-synaptics  - Synaptics TouchPad driver for X.Org server                                     
i   xserver-xorg-video-ati        - X.Org X server -- AMD/ATI display driver wrapper                               
i   xserver-xorg-video-cirrus     - X.Org X server -- Cirrus display driver                                        
i   xserver-xorg-video-intel      - X.Org X server -- Intel i8xx, i9xx display driver                              
i   xserver-xorg-video-mach64     - X.Org X server -- ATI Mach64 display driver                                    
i   xserver-xorg-video-nouveau    - X.Org X server -- Nouveau display driver                                       
i   xserver-xorg-video-r128       - X.Org X server -- ATI r128 display driver                                      
i   xserver-xorg-video-radeon     - X.Org X server -- AMD/ATI Radeon display driver                                
i   xserver-xorg-video-vmware     - X.Org X server -- VMware display driver        

看起来这是由于不适当的视频驱动程序引起的。 - topless
运行此命令并在编辑后将输出贴在您的答案中:sudo dpkg -l | grep -w "rc" - Saurav Kumar
@Braiam 我已经添加了你要求的输出,apt-get check正在构建依赖树和读取状态信息...完成,而dpkg没有输出。 - topless
你能做以下操作吗:sudo apt-get -y install aptitude && sudo rename 's/\.list$/.list.disable/' /etc/apt/sources.list.d/*.list && sudo aptitude update && aptitude search '?narrow(?installed, !?archive(raring))' 并将结果粘贴过来吗?第一条命令将安装aptitude,第二条命令将禁用所有PPA,第三条命令将更新您的列表,第四条命令将列出所有不来自存储库的软件包。 - Braiam
10个回答

我成功的方法是移除所有损坏的软件包,因为它们会阻止升级。
首先找出哪些软件包是损坏的:
grep Broken /var/log/dist-upgrade/apt.log

然后将它们移除:
sudo apt-get remove <packages to remove>

升级过程中,有些可能会被重新安装,而其他的你可能需要自己重新安装。

6看起来我有一长串损坏的xserver-xorg-video-*软件包。我不太确定,但我觉得如果我开始删除它们,我的系统会崩溃。你成功地删除了它们吗?是哪些软件包给你带来了麻烦? - topless
2我不得不删除相同的内容。当升级完成时,“好”的版本重新出现了。我的升级非常成功。 - DaShaun
1我也遇到了xserver-xorg-video-*软件包的相同问题。你是如何删除它们的?使用sudo apt-get remove xserver-xorg-video-*命令吗?我在这里有一个问题(链接),其中包含更多详细信息。 - modulitos
3这正是我所做的“sudo apt-get remove xserver-xorg-video-*”。 - DaShaun
3对我来说,这显示了大约25个损坏的软件包,其中许多看起来像是系统软件包。而另一方面,Jake的回答只显示了一个出问题的软件包。卸载它后,我就可以顺利进行升级了。 - Zoltán
1请注意,您可能不需要删除所有损坏的软件包来进行升级。我的大部分损坏的软件包都是gnuplot的变体。因此,我使用了aptitude search gnuplot命令来查看我安装了哪个版本(它是gnuplot-x11),然后将其清除。在此之后运行update-manager命令,列出了一个更新的gnuplot软件包,我随后安装了它。再次运行update-manager命令,出现了关于texmaker的问题。同样,使用aptitude搜索我安装了哪个texmaker软件包,然后将其删除。再次运行update-manager命令,这次我可以开始无错误的升级过程了。 - Dennis
19grep Broken grep Broken /var/log/dist-upgrade/apt.log 给我返回了700多行。肯定不能全部删除。 - pasha.zhukov
有时候查看日志的末尾也能帮助解决问题,因为有时一个损坏的软件包会一直尝试安装,而它是基于一个没有损坏的软件包的。这种情况曾经发生在安装postgresql-9.x-postgis和相关脚本时。出现了一些奇怪的gdal依赖不一致性问题,涉及到libgdal和libspatialite,导致这些依赖项反复卸载和安装。 - Efren
对我来说,问题出在boost和ROS软件包上。将它们移除后,现在我的系统可以正常升级了。 - VarunAgrawal
2使用这种方法绝对不需要删除所有显示为损坏的内容。我只需要删除libopenblas和wine1.8,就能使升级继续进行。即使升级开始正常工作,你仍会在apt.log中看到"Broken"条目。 - David Baucum
我只需要移除python2.7-minimal。 - Malachi Bazar
这是错误的答案;仅仅在“Broken”中搜索会找到数百个无法移除的关键系统软件包。Jake的答案是正确的。 - MRule
我从故障列表中移除了gnome-shellubuntu-desktop软件包。这就足够启动do-release-upgrade -d了。 - rosch
1我开始一个一个地移除它们,突然间出现了这个命令: sudo do-release-upgrade 找不到。看起来Ubuntu升级依赖于Python? - Nathan B

在您的系统升级失败后,请检查文件/var/log/dist-upgrade/main.log
我找到了该行:
2013-10-17 15:00:30,543 ERROR Dist-upgrade failed: 'The package 'xubuntu-desktop' is marked for removal but it is in the removal blacklist.'

我手动删除了xubuntu-desktop。然后升级顺利进行。

2有没有办法我保留这个软件包并进行更新?我安装了postgresql-9.2,不想将其删除。 - Abdulsattar Mohammed
1升级完成后,您可以重新安装它。 - ImaginaryRobots
在我移除了唯一的错误后,当我再次运行do-release-upgrade时,出现了第二个不同的错误,所以我不得不手动移除这个错误。如果你运气不好的话,可能需要多次这样操作。另外,也有可能其他方法,比如_hold_或_broken_也会显示这些错误,但我没有尝试过。 - northern-bradley
Postgres 似乎是阻碍我的东西。感谢 @AbdulsattarMohammed 指出这一点! - jocull

这里也有类似的问题。在之前的帖子中指出,"main.log"文件中的最后几行是:
2013-10-17 23:44:38,233 DEBUG blacklist expr 'unity$' matches 'unity'
2013-10-17 23:44:38,233 DEBUG The package 'unity' is marked for removal but it's in the removal blacklist
2013-10-17 23:44:43,585 ERROR Dist-upgrade failed: 'The package 'unity' is marked for removal but it is in the removal blacklist.'
2013-10-17 23:44:43,586 DEBUG abort called
2013-10-17 23:44:43,592 DEBUG openCache()
2013-10-17 23:44:43,592 DEBUG failed to SystemUnLock() (E:Not locked) 
2013-10-17 23:44:46,786 DEBUG /openCache(), new cache size 41453
2013-10-17 23:44:46,786 DEBUG enabling apt cron job

手动卸载了Unity,现在升级正在进行中。不太确定最初是什么原因导致了这个问题,以及这是否真的是一个好的“解决方案”,但我想在更新完成后就知道了?!?

在我的情况下,问题是由一个处于“保持”状态的软件包引起的。将其恢复到“安装”状态解决了这个问题。

将软件包置于保持状态或移除的一种可能方法是使用dpkg。首先,获取所有软件包的当前状态,并将其保存到一个文件中:

dpkg --get-selections > myselection

然后,你编辑文件并将install替换为hold,或者反之。最后,你设置新的选择:
sudo dpkg --set-selections < myselection
sudo apt-get update
sudo apt-get upgrade

其他方法在如何阻止软件包升级?中有详细描述。

1为什么不告诉我们你是怎么做到的呢?这不是一个完整的答案,试着描述一下你的步骤。你是如何找到那个包并采取行动的? - topless
2你如何查找处于保留状态的包裹? - Dennis
1@Dennis 使用 apt-mark showhold 命令 - Pablo Bianchi

如果您正在使用专有的AMD/ATI fglrx视频驱动程序,删除fglrx软件包和xorg视频驱动程序可能会解决此问题。
sudo apt-get remove fglrx fglrx-amdcccle-updates
sudo apt-get remove xserver-xorg-video-ati:amd64

在我的情况下,我安装了来自xorg-edgers PPA的fglrx驱动程序,移除这些软件包后解决了我的升级问题。一旦升级完成,您可以重新设置专有驱动程序的过程。

这就是对我有效的方法! - Nick Grealy
在执行这个操作后,我的系统上仍然保留着fglrx-core。其他人可能也需要将其移除。 - Michael Hoffmann

看起来有一种简单的方法,只需要在每个软件包名称后面添加/raring,就像这样:
sudo apt-get install dropbox/raring google-chrome-stable/raring google-talkplugin/raring libdrm-intel1/raring libdrm-nouveau2/raring libdrm-radeon1/raring libdrm2/raring libegl1-mesa/raring libegl1-mesa-drivers/raring libgbm1/raring libgl1-mesa-dri/raring libgl1-mesa-glx/raring libglapi-mesa/raring libllvm3.3/raring libopenvg1-mesa/raring libxatracker1/raring nodejsnvidia-persistencednvidia-settings-331/raring simplescreenrecorder/raring sublime-text/raring vokoscreen/raring xserver-common/raring xserver-xorg-core/raring xserver-xorg-input-synaptics/raring xserver-xorg-video-ati/raring xserver-xorg-video-cirrus/raring xserver-xorg-video-intel/raring xserver-xorg-video-mach64/raring xserver-xorg-video-nouveau/raring xserver-xorg-video-r128/raring xserver-xorg-video-radeon/raring xserver-xorg-video-vmware/raring

如果它不起作用,那么尝试下面的方法。
那是可以预料的,您有几个关键安装包不是来自Ubuntu软件源。您应该逐个降级它们(我还没有找到一种有效的方法来做到这一点),然后尝试升级。我将以一个为例:
$ apt-cache policy libdrm2
libdrm2:
  Installed: 2.4.43-0ubuntu1.1
  Candidate: 2.4.43-0ubuntu1.1
  Version table:
 *** 2.4.43-0ubuntu1.1 0
        100 /var/lib/dpkg/status
     2.4.43-0ubuntu1 0
        500 http://archive.ubuntu.com/ubuntu/ raring/main amd64 Packages

在你的情况下,应该出现类似这样的内容。你应该注意到具有url的版本,在这种情况下是2.4.43-0ubuntu1,它具有http://archive.ubuntu.com/ubuntu/,将这对值以<package>=<version>的格式保存在文本文件中,供以后使用。
如果你看到类似以下的内容:
fluxgui:
  Installed: 1.1.8
  Candidate: 1.1.8
  Version table:
 *** 1.1.8 0
        100 /var/lib/dpkg/status

如果注意到某个没有URL的通知,那么可以将该包删除。
sudo apt-get remove fluxgui

然后你完成你的列表应该是这样的:

libdrm2=2.4.43-0ubuntu1 libdrm2=2.4.43-0ubuntu1 libdrm2=2.4.43-0ubuntu1 libdrm2=2.4.43-0ubuntu1 libdrm2=2.4.43-0ubuntu1 libdrm2=2.4.43-0ubuntu1

(再举个例子,但你可能有个主意)
一旦你完成了列表,输入sudo apt-get -f install并粘贴你的完整列表,所以它应该是这样的:
sudo apt-get -f install libdrm2=2.4.43-0ubuntu1 libdrm2=2.4.43-0ubuntu1 libdrm2=2.4.43-0ubuntu1 libdrm2=2.4.43-0ubuntu1 libdrm2=2.4.43-0ubuntu1 libdrm2=2.4.43-0ubuntu1

如果你想要更快地完成,你可以使用 apt-cache policy libdrm2 libgbm1 命令加上多个软件包的名称。

嗯,第一种方法并没有解决问题,今天我会有时间逐个按照你建议的步骤来检查。如果能提供还原第一次更改的命令就好了,因为现在无法实际进行apt-get update。 - topless
如果第一个命令失败了,那就意味着什么都没做。如果 apt-get update 不起作用,那就表示另外一种情况。 - Braiam
在执行apt-get update命令时,我遇到了这样的错误:N: 忽略目录'/etc/apt/sources.list.d/'中的文件'xorg-edgers-ppa-raring.list.disable',因为它具有无效的文件扩展名。 - topless
这是一条信息/警告,可以被忽略,并且是预期的,因为我们不希望出现 PPA 的干扰。 - Braiam
在我的回答中,我将包括一种“高效的方法”来逐个删除软件包。这只是我从各个地方收集到的所有提示的集合。 - nyxee

我遇到了同样的问题,但很容易通过在终端中运行以下命令来解决:
sudo apt-get remove
sudo apt-get autoremove

6sudo apt-get remove没有任何作用。 - guntbert
啊,但它确实列出了可以通过自动删除来移除的软件包。:) 我的方法虽然有些疯狂,但却是有条理的。 - seyDoggy
1sudo apt-get autoremove 也是这样。 - guntbert
1+1 - 我必须运行 sudo apt-get autoremove - Nick Grealy
谢谢!Autoremove解决了我的问题。原来我有数百个残留的损坏/无法使用的过去失败安装的文件。 - Faruk D.

我按照上述几个答案的建议进行了尝试,试图使升级工作起来,但没有不涉及删除损坏软件包的方法奏效。我有 144 个损坏的软件包,这似乎完全不可行。我逐个删除它们,并在每次删除后尝试更新。在随机选择的 3 个软件包(perl-base、gnuplot、gnuplot-11)被删除后,更新成功了。(从 14.04 升级到 16.04)。


关于这个答案,对我来说还有一个更好的变体:我找到了一个自动化脚本,可以在有太多损坏软件包时进行删除。解决方案在这里找到。

remove.sh脚本:

#!/bin/bash
apt update
apt upgrade
cat /var/log/dist-upgrade/apt.log | egrep -o "^Broken\s[a-z:\.0-9-]*" | sed 's/Broken //' | sed 's/:amd64//' > packages.txt
sort -u packages.txt > packages_sorted.txt
while read line; do
        apt remove -y $line 
done < packages_sorted.txt
apt autoremove -y && sudo apt autoclean -y
echo "Done"
apt install -f
dpkg --configure -a


运行:
sudo ./remove.sh

然后像往常一样执行sudo do-release-upgrade
如果需要,可以从packages_sorted.txt文件中重新安装已删除的软件包,或者以自动化方式进行重新安装:

reinstall.sh脚本:

#!/bin/bash
while read line; do
        apt install -y $line 
done < packages_sorted.txt
echo "Done"

附言:然而升级有问题,所以被迫从USB重新安装。 - Aleksey Kontsevich
很不幸的是,对我来说,这个操作清除了太多东西。对我来说,“损坏”的软件包似乎是可以安全删除的,但不幸的是,我从一个正常工作的状态变成了无法使用终端、编辑器或右键重新安装的状态。如果你尝试这个操作,请不要关闭你的终端窗口。 - Squeeto Na

我之前已经回答过这个问题了,如果你在发问之前在这里进行了简单的搜索,就能找到答案。
sudo mv /etc/apt/sources.list.d/ /etc/apt/sources.list.d.bak; sudo sed -i 's/raring/saucy/g' /etc/apt/sources.list; sudo apt-get update; sudo apt-get upgrade -y; sudo apt-get dist-upgrade -y; sudo apt-get install -f; sudo aptitude upgrade -y; sudo aptitude dist-upgrade -y; sudo mv /etc/apt/sources.list.d.bak /etc/apt/sources.list.d; sudo sed -i 's/raring/saucy/g' /etc/apt/sources.list.d/*; sudo apt-get update; sudo apt-get upgrade -y; sudo apt-get dist-upgrade -y; sudo apt-get install ubuntu-desktop -y

完成,解决了所有问题。

2请不要随便给出这种回答。这样的做法如果不小心处理,可能会带来潜在的危险。 - Braiam
其实不是的。一点都不危险。你认为它危险只是因为你对它了解不多。我以前已经运行过很多次,并且和很多人一起使用过。如果你真正阅读了整个命令,你会发现我已经考虑到了所有可能的问题。用户只需要观察命令的输出即可。Ubuntu 13.10在升级方面存在很多问题,但这个命令可以一次性地解决所有问题,非常方便。我建议你查阅一下关于“do-release-upgrade”如何工作的文档,因为这个命令恰恰就是做这个的。 - mmstick
1@mmstick,你可以详细说明一下你的长命令以及它解决的问题,只要涉及到实际问题和解决方法。我看到你多次调用了apt-get upgrade和其他命令,也许你可以逐行拆分并解释你的过程以及为什么它有效。我没有试验高风险、不可逆转的命令的奢侈条件。不过还是感谢你的努力。我们都在这里学习。 - topless
@mmstick,我在寻找你的答案,你之前提到过而且看起来是回答了我的问题,所以在粗鲁地回复我和Braiam之前,你本可以再仔细一点。 - topless
@topless:不好意思,我刚回答了很多跟你类似的问题,早在13.10发布之前的一周就有了,所以你的问题并不算太早。 - mmstick
@topless。它做它该做的事情,将sources.list更改为saucy,移动PPA以避免干扰升级,正常升级,分发升级,aptitude升级/dist-upgrade/install -f以解决任何其他依赖项和错误,将PPA放回并将其转换为saucy,尝试使用这些PPA进行升级,并安装ubuntu-desktop以引入Ubuntu的任何新添加内容。简单易懂。您不应该对您没有正确理解的答案进行投票否决。 - mmstick
2@mmstick,别偷懒了,修改一下你的回答,让它更完整,以备将来参考。很高兴你早早地做出了贡献,但我第一次遇到这个问题是在升级到13.10版本时。 - topless
那么,这是一个有效的解决方案吗?我有很多损坏的软件包,主要是来自libboost-*xserver-xorg-video-*,我不确定仅仅删除这些软件包然后升级是否足够。我应该运行这个脚本吗?它做了什么?我的问题在这里:链接 - modulitos
这是一个完全有效的解决方案。它有100%的成功率,而默认的升级脚本就不能保证同样的结果。对于你的新情况,你可能需要进行一些修改,我会在帖子中提供。 - mmstick