我无法升级 ubuntu,因为有些包被保留了:
au464956@dnaseq1:~$ sudo apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
gcc-5-base gcc-6-base libdatetime-locale-perl libdatetime-timezone-perl
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
我尝试过一些其他的解决方案来解决这个问题,但是都没有成功,包括运行sudo apt-get dist-upgrade
(这仍然会保留这些包)sudo apt install gcc-5-base
或者其他保留的包,这会导致出现一条长消息威胁要删除apt
、libapt-pkg5.0
和 ,libstdc++6
这显然具有太大的破坏性,并且运行sudo apt-get --with-new-pkgs upgrade
。
运行sudo apt-cache policy
保留的软件包会导致:
gcc-5-base:
Installed: 5.4.0-6ubuntu1~16.04.11
Candidate: 5.5.0-12ubuntu8
Version table:
5.5.0-12ubuntu8 500
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 Packages
*** 5.4.0-6ubuntu1~16.04.11 500
500 http://dk.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
100 /var/lib/dpkg/status
5.4.0-6ubuntu1~16.04.10 500
500 http://security.ubuntu.com/ubuntu xenial-security/main amd64 Packages
5.3.1-14ubuntu2 500
500 http://dk.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
gcc-6-base:
Installed: 6.0.1-0ubuntu1
Candidate: 6.4.0-22ubuntu1
Version table:
6.4.0-22ubuntu1 500
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 Packages
*** 6.0.1-0ubuntu1 500
500 http://dk.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
100 /var/lib/dpkg/status
libdatetime-locale-perl:
Installed: 1:1.02-1
Candidate: 1:1.22-1
Version table:
1:1.22-1 500
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe i386 Packages
*** 1:1.02-1 500
500 http://dk.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
500 http://dk.archive.ubuntu.com/ubuntu xenial/universe i386 Packages
100 /var/lib/dpkg/status
libdatetime-timezone-perl:
Installed: 1:1.95-1+2016a
Candidate: 1:2.19-1+2018e
Version table:
1:2.19-1+2018e 500
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu cosmic/universe i386 Packages
*** 1:1.95-1+2016a 500
500 http://dk.archive.ubuntu.com/ubuntu xenial/universe amd64 Packages
500 http://dk.archive.ubuntu.com/ubuntu xenial/universe i386 Packages
100 /var/lib/dpkg/status
更新:输出sudo apt dist-upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
gcc-5-base gcc-6-base libdatetime-locale-perl libdatetime-timezone-perl
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
尝试运行升级的输出sudo do-release-upgrade
:
Checking for a new Ubuntu release
Please install all available updates for your release before upgrading.
答案1
首先备份。下载您想要的 Ubuntu 版本。Ubuntu bionic 是当前最新的 LTS(具有长期支持),而 Ubuntu disco 是当前最新的 STS(短期支持)创建可启动 DVD 或 USB 棒。启动实时会话并测试一切是否正常运行。
我主张全新安装。您的指南描述了从 xenial 到 bionic 的版本升级。这已得到支持。
sudo apt install --reinstall gcc-5-base=5.5.0-12ubuntu8 gcc-6-base=6.4.0-22ubuntu1 libdatetime-locale-perl=1:1.22-1 libdatetime-timezone-perl=1:2.19-1+2018e
这样我们就告诉 apt 我们想要哪个软件包版本。没有错误?sudo dpkg --configure -a && sudo apt -f install
dpkg -l | egrep -v '^ii|rc'
如果所有包裹都完好无损,则用控制。没有输出。
现在,升级过程中删除的软件包将被清除。无需任何手动配置,配置文件将保留在您的系统中。sudo apt purge $(dpkg -l | egrep '^rc' | awk '{print $2}')
查看 /etc/apt/sources.list 中所有条目都指向 cosmic。我从不使用 do-release-upgrade,我更喜欢其他方式。
sudo apt install apt-show-versions
例如,它有助于识别由于名称改变而不再可用的软件包。
apt-show-versions | fgrep 'No available'
如果你想摆脱它们全部。sudo apt purge $(apt-show-vesions | fgrep 'No available' | awk '{print $1}')
笔记:这可能有效,但不保证有效。
答案2
通过添加这个存储库解决了 gcc-5-base 和 gcc-6-base 被保留的直接问题,其灵感来自这个问题:
sudo add-apt-repository ppa:ubuntu-toolchain-r/
sudo apt update
sudo apt upgrade
然后,我清除了其他保留的软件包(perl 软件包),因为这些软件包不会删除任何非必要的软件包,因为我应该能够在版本升级后重新安装它们。
由于其他原因,版本升级失败了,我仍在努力解决,但该问题所涉及的软件包被保留的迫切问题已经得到解决。