我启动了一个预安装的操作系统,其中包含以下 sources.list 文件:
deb http://archive.ubuntu.com/ubuntu natty main
deb http://ro.archive.ubuntu.com/ubuntu/ oneiric universe
deb-src http://ro.archive.ubuntu.com/ubuntu/ oneiric universe
deb http://ro.archive.ubuntu.com/ubuntu/ oneiric-updates universe
deb-src http://ro.archive.ubuntu.com/ubuntu/ oneiric-updates universe
我正在尝试将其升级到:
###### Ubuntu Main Repos
deb http://ro.archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse
deb-src http://ro.archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse
###### Ubuntu Update Repos
deb http://ro.archive.ubuntu.com/ubuntu/ precise-security main restricted universe multiverse
deb http://ro.archive.ubuntu.com/ubuntu/ precise-updates main restricted universe multiverse
deb-src http://ro.archive.ubuntu.com/ubuntu/ precise-security main restricted universe multiverse
deb-src http://ro.archive.ubuntu.com/ubuntu/ precise-updates main restricted universe multiverse
但是当我尝试运行 apt-get upgrade 时,它给出了以下信息:
root@syrius:/etc/apt# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
libc-dev-bin : Depends: libc6 (> 2.15) but 2.13-20ubuntu5.2 is installed
libc6 : Depends: libc-bin (= 2.13-20ubuntu5.2)
libc6-dev : Depends: libc6 (= 2.15-0ubuntu10.4) but 2.13-20ubuntu5.2 is installed
libnih-dbus1 : Depends: libnih1 (= 1.0.3-4ubuntu9.1) but 1.0.3-4ubuntu2 is installed
E: Unmet dependencies. Try using -f.
如果我尝试运行 apt-get -f install,我会收到以下消息:
root@syrius:/etc/apt# apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
nagios-images nagios3-core nagios3-cgi nagios3-common
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
libc6 libnih1
Suggested packages:
glibc-doc
The following packages will be upgraded:
libc6 libnih1
2 upgraded, 0 newly installed, 0 to remove and 611 not upgraded.
4 not fully installed or removed.
Need to get 0 B/4708 kB of archives.
After this operation, 58.4 kB of additional disk space will be used.
Do you want to continue [Y/n]? y
locale: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by locale)
locale: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by locale)
debconf: DbDriver "config": could not open /var/cache/debconf/config.dat
(Reading database ... 121436 files and directories currently installed.)
Preparing to replace libc6 2.13-20ubuntu5.2 (using .../libc6_2.15-0ubuntu10.4_amd64.deb) ...
locale: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.15' not found (required by locale)
locale: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by locale)
debconf: DbDriver "config": could not open /var/cache/debconf/config.dat
dpkg: error processing /var/cache/apt/archives/libc6_2.15-0ubuntu10.4_amd64.deb (--unpack):
subprocess new pre-installation script returned error exit status 1
Errors were encountered while processing:
/var/cache/apt/archives/libc6_2.15-0ubuntu10.4_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
我无法承担重新安装服务器的后果。有人能帮我修复它吗?
提前致谢。
9 月 8 日更新:
root@localhost:/etc/apt# cat /etc/debian_version
wheezy/sid
root@localhost:/etc/apt# lsb_release -ac
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 11.10
Release: 11.10
Codename: oneiric
root@localhost:/etc/apt# cat /etc/issue.net
Ubuntu 11.1
更新来源列表回到
deb http://old-releases.ubuntu.com/ubuntu natty main
deb http://old-releases.ubuntu.com/ubuntu/ oneiric universe
deb-src http://old-releases.ubuntu.com/ubuntu/ oneiric universe
deb http://old-releases.ubuntu.com/ubuntu/ oneiric-updates universe
deb-src http://old-releases.ubuntu.com/ubuntu/ oneiric-updates universe
冉: http://pastebin.com/3Z2GZ347 (@admins:我没有发布链接的声誉 => apt-get update 有链接,甚至在标签中它们也被考虑在内)
仍然无法消除此错误。我应该自己创建固定文件吗?
答案1
您似乎正在尝试通过手动编辑sources.list
和运行apt-get
命令将 Ubuntu 从一个版本升级到另一个版本。请不要这样做,尤其是当你需要成功升级而无需重新安装时。该技术是升级Debian系统(虽然不是完全按照你的方式),但它既不受支持,也不太可能适用于Ubuntu系统。
幸运的是,当您尝试升级时似乎没有发生什么大事。因此您的系统可能没有损坏,并且可能仍可以以正确的方式升级。
从一个 Ubuntu 版本升级到另一个版本的正确方法是运行sudo do-release-upgrade
。但是,对于你的情况,有些事情必须先处理好。
考虑进行备份。
如果你不愿意重新安装,你应该先备份。
如果您只是希望避免重新安装,那么您应该重新安装,因为您的系统可能会出现一些问题,而您在使用它执行某些重要任务时才会发现这些问题(见下文)。
但如果您希望避免重新安装(但愿意这样做)和如果该系统不会用于任何重要的事情,那么是否先进行完整备份将取决于是否值得您花费额外的精力进行备份,以避免重新安装的麻烦。
从头开始重新安装确实不费力。但备份也相当简单。
(一旦你将服务器用于某些重要目的,然后在尝试升级到后续版本之前进行备份并定期进行备份通常是一个非常好的主意。)
修复sources.list
以代表当前安装的系统。
第一的,编辑/etc/apt/sources.list
回正确的描述当前已安装系统。
如何做到这一点有点不清楚,因为不清楚什么系统当前已安装。是 Natty 还是 Oneiric?预先存在的sources.list
文件不一致(即错误的)。如果您知道它实际上是哪个版本,那就太好了——让所有版本代号都sources.list
指向该版本。
否则,你必须自己想办法。如果你展示的不是满的 sources.list
文件,请提供。它应该适合你的问题,或者你可以使用http://paste.ubuntu.com。
运行lsb_release -a
通常会告诉您当前安装的版本。但是如果文件不一致sources.list
,则所有赌注都无效——如果提供所用文件的软件包lsb_release
来自与系统中安装的其他软件包不同的 Ubuntu 版本,则系统可能实际上没有运行 Ubuntu 报告的版本lsb_release
。或者它可能没有运行任何单一明确定义的 Ubuntu 版本。
因此——我知道你不想听到这个:除非你自己引入了 Precise/Oneiric 不一致,否则你真的应该重新安装,特别是如果你想使用此服务器对于任何重要的事情来说都是如此,不可预测的随机故障将会成为一个问题。
但是,如果你真的想,我们可以尝试处理这种情况。当然,即使一切看起来都取得了巨大的成功,我们仍然无法知道是否有严重错误会导致以后出现问题。当你从别人那里得到一台服务器,而它的配置却一团糟时,通常就会出现这种情况。
libc6
是一个非常重要的软件包。(即使它没有出现在您运行的某些命令的输出中,我也会提到它。)您可以使用另一种启发式方法来找出实际安装的 Ubuntu 版本,即检查软件包的版本libc6
(apt-cache policy libc6
)并查看它对应的 Ubuntu 版本。(如果它不一定是最新的,使用它在网上搜索通常是找出答案的最佳方法,但您可以对照此处的版本信息。
一旦你弄清楚了当前安装的系统实际上是什么 - 并且随时可以寻求更多帮助和/或在你的问题中发布更多可能与之相关的信息 - 那么编辑sources.list
并将所有版本代号更改为该版本的代号。
因此,如果您确定当前系统是 11.04,则每个natty
、oneiric
、precise
或任何其他版本代号都将更改为 ,如果您确定当前系统是 11.10,则将更改为 。natty
oneiric
使用old-releases
存储库。
现在你已经修复了版本文件中的信息sources.list
,你必须更改下载服务器在其中old-releases.ubuntu.com
。这是必要的,因为 Natty 和 Oneiric 都是终止使用版本(精确并不重要,但达到精确是一个好的目标我仍然建议考虑全新安装。
有关如何切换old-releases
服务器的详细信息,请参阅:
但实际上您只是要替换服务器 URL 中的主机名(介于和之间的sources.list
部分)。http://
/
old-releases.ubuntu.com
尽可能在当前版本内更新系统。
如果您的系统在尝试升级到下一个版本之前尽可能地在其自身版本中完成升级,则升级可能更有可能成功。
尝试安装更新的另一个好处是,如果失败,它可能会揭示有关问题的信息,而这些问题比在尝试升级到其他版本时发现的问题更容易修复。
因此,运行:
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get dist-upgrade
请dist-upgrade
注意不是尝试升级到新版本。(在 Debian 中,您可以编辑sources.list
文件并运行apt-get dist-upgrade
。但这不是 Debian;这在 Ubuntu 中通常不起作用。)
但它可能会提示你安装新的软件包或删除现有的软件包。(这是区别upgrade
和之间dist-upgrade
。)因此要小心——在按下 之前请注意它在询问什么y。
尝试升级到下一个版本。
仅支持(并且仅可能有效)Ubuntu 版本之间的升级:
- 从一个(普通或 LTS)版本到下一个版本。
- 从LTS 版本到下一个 LTS 版本。
11.04 和 11.10 都不是 LTS 版本。因此 11.04 Natty 只能升级到 11.10 Oneiric,而 11.10 Oneric 只能升级到 12.04 LTS Precise。
所以,如果您的系统是 Natty 而不是 Oneiric,那么您需要执行两次。
要尝试升级,请运行:
sudo do-release-upgrade
就是这样。无需手动编辑配置文件。
do-release-upgrade
如果出现未安装该实用程序的异常情况,您可以使用以下命令进行安装:
sudo apt-get install update-manager-core
(在 12.10 Quantal 及更高版本中,它由ubuntu-release-upgrader-core
,以防有人使用最新版本的程序时想知道为什么update-manager-core
是错误的包裹。
如果你有问题,请随意编辑你的问题或发布新问题(取决于它们是否与该问题的主题相关 - 它们大概当然,其他对此有问题的人应该发布或编辑他们的您自己的问题。您也可以对此答案发表评论,以便我了解问题并尝试提供帮助。
如果有效的话, 那很好:
如果您刚刚从 Oneiric 升级到 Precise,那么您就完成了!
如果您刚刚从 Natty 升级到 Oneiric,请
do-release-upgrade
重试。但首先,我建议您:- 重启。(
sudo reboot
)将使用内核等新软件。您可以在升级前排除故障,下一次升级将在完全运行升级版本的系统上进行从。 - 最好是执行上一个主要步骤(“在当前版本中更新系统”),然后升级,就像以前一样。
- 重启。(
答案2
总结:永远不要修改你的sources.list
文件来升级 Ubuntu。有辅助工具可以实现这一点(update-manager、do-release-upgrade 等)。Ubuntu 不像 Debian 那样是滚动发布。在 Debian 中,您只需更改目标版本即可从一个版本切换到下一个版本,而在 Ubuntu 中则不行。现在您的系统既不是这个版本也不是那个版本,必须采用以下解决方案:
好的,由于 Eliah 的回答似乎太长且太复杂,让我们尝试直接回答:
让我们检查一下你的 Ubuntu 版本:
$ cat /etc/debian_version natty $ lsb_release -ac natty $ cat /etc/issue.net natty $ cat /etc/debian_version natty
当运行每个以 开头的命令时,
$
返回natty
,则您的版本为natty
,如果它返回oneiric
,则您的版本为 ,oneiric
如果返回 的混合natty
,oneiric
那么最安全的选择是您的系统是natty
。一旦确定你的版本,请运行以下命令:
UBUNTU_VERSION="natty"
您应该将
natty
这里替换为上次测试的结果!让我们停用旧的 sources.list:
sudo rename 's/\.list$/\.list\.disable/' /etc/apt/sources.list.d/*.list sudo mv /etc/apt/sources.list /etc/apt/sources.list.old
现在让我们创建好的 sources.list
sudo sh -c "echo 'deb http://old-releases.ubuntu.com/ubuntu' $UBUNTU_VERSION 'main universe multiverse restricted' >> /etc/apt/sources.list" sudo sh -c "echo 'deb http://old-releases.ubuntu.com/ubuntu' $UBUNTU_VERSION'-updates main universe multiverse restricted' >> /etc/apt/sources.list"
让我们降级所有不属于我们 Linux 版本的升级软件包
sudo sh -c "echo 'Package: *' >> /etc/apt/preferences.d/pinning" sudo sh -c "echo 'Pin: release a='$UBUNTU_VERSION" >> /etc/apt/preferences.d/pinning" sudo sh -c "echo 'Pin-Priority: 1990' >> /etc/apt/preferences.d/pinning" sudo apt-get update sudo apt-get -f upgrade sudo apt-get -t $UBUNTU_VERSION upgrade
现在我们安装并运行升级助手:
sudo apt-get upgrade sudo apt-get -y install update-manager-core sudo rm /etc/apt/preferences.d/pinning sudo do-release-upgrade -m server
只有最后一条命令需要您的提示。请对除第一个命令之外的每个命令进行复制粘贴,其中指定您的 Ubuntu 版本。