我正在尝试修复apt-get
旧的玩具机器,以便我可以再次安装软件包。
我得到这个之后sudo apt-get install -f
:
$ sudo apt-get install -f
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... failed.
The following packages have unmet dependencies:
avahi-daemon : Depends: upstart-job
Depends: upstart (>= 0.6.7-4) but it is not installed
cron : Depends: upstart-job
dbus : Depends: upstart-job
Depends: upstart (>= 0.6.3-6) but it is not installed
hostname : PreDepends: upstart-job
ifupdown : Depends: upstart-job
initscripts : Depends: upstart but it is not installed
module-init-tools : Depends: upstart-job
mysql-server-5.1 : Depends: upstart-job
Depends: upstart (>= 0.6.7-3) but it is not installed
netbase : Depends: upstart-job
openssh-server : Depends: upstart-job
plymouth : Depends: upstart-job
Depends: mountall (>= 2.0) but it is not installed
Recommends: plymouth-theme-ubuntu-text but it is not installed or
plymouth-theme
procps : Depends: upstart-job
rsyslog : Depends: upstart-job
screen : Depends: upstart-job
udev : Depends: upstart-job
ufw : Depends: upstart-job
ureadahead : Depends: libnih1 (>= 1.0.0) but it is not installed
Depends: upstart (>= 0.6.0) but it is not installed
util-linux : Depends: upstart-job
vsftpd : Depends: upstart-job
x11-common : Depends: upstart-job
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
E: Unable to correct dependencies
但是当我尝试安装时upstart-job
我得到:
$ sudo apt-get install upstart-job
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'upstart' instead of 'upstart-job'
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
plymouth : Depends: mountall (>= 2.0) but it is not going to be installed
Recommends: plymouth-theme-ubuntu-text but it is not going to be installed or
plymouth-theme
upstart : Depends: libnih-dbus1 (>= 1.0.0) but it is not going to be installed
Depends: libnih1 (>= 1.0.0) but it is not going to be installed
Depends: mountall but it is not going to be installed
ureadahead : Depends: libnih1 (>= 1.0.0) but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
更新作品:
$ sudo apt-get update
Hit:1 http://mirrors.linode.com/ubuntu impish InRelease
Get:2 http://mirrors.linode.com/ubuntu impish-updates InRelease [110 kB]
Get:3 http://mirrors.linode.com/ubuntu impish-backports InRelease [101 kB]
Get:4 http://security.ubuntu.com/ubuntu impish-security InRelease [110 kB]
Fetched 321 kB in 1s (498 kB/s)
Reading package lists... Done
由于这是一台玩具机器,除了重新格式化它之外,我还愿意接受激进的方法/想法。
谢谢!
答案1
upstart 是 Ubuntu 的旧 init 系统,已被删除并被 systemd 取代。您没有指定 ubuntu 的版本,但此时它可能已无法修复。
理想的情况是从一个稳定版到下一个稳定版进行一系列发行版升级,直到您最终使用当前的 ubuntu impish,假设机器有足够的资源来运行当前的 ubuntu,我不会尝试跳转到该版本。
在我看来,您尝试将发行版升级到当前的 ubuntu 发行版本,而没有实际正确执行升级过程,这会导致新贵到 systemd 的转换相当无缝地发生。但这是一个巨大的变化。
您必须指定更多详细信息:
- 您开始使用的 Ubuntu 版本
- 您开始使用的桌面
- 最坏的情况是,系统是否运行 Mir?或者是直接的 Xorg?
- 您为创建初始 apt 中断所做的操作,要么是尝试从较新的存储库安装较新的软件包,要么是尝试进行不完整的版本升级,在您的情况下看起来像是后者。
在 Debian 上,我认为你的成功几率相当高,但在 Ubuntu 上则没有那么高,但可能仍然可行。
您的关键是在完成完整转换且没有任何遗留错误之前不要重新启动。
因为您遇到了新贵冲突错误,这表明您在没有实际执行版本升级的情况下更新了存储库,这几乎肯定必须从起始 LTS 版本到下一个 LTS 版本完成,而不是当前版本,这几乎可以肯定如果您尝试跳过任何 LTS 版本,则会失败。
只要让系统保持运行并且不重新启动,您应该能够开始查看软件包,直到不再出现错误,然后您可以开始重建它,但是如果您在任何时候尝试重新启动,您成功的几率就很大将会暴跌。
基本上你必须将系统从 upstart 转换为 systemd,这会很混乱,并且应该留给 ubuntu 版本升级工具。
APT 通常可以处理这种情况,但你必须把所有事情都做对,而且你花费的时间将比直接重新安装大得多,而且不会那么干净,所以这样做的唯一真正原因是学习命令行apt 工具比您今天可能知道的要好得多。
Ubuntu 版本升级工具往往工作得很好,但如果你跳到 lts 版本,它们往往只能可靠地工作,如果它是 LTS 到下一个 LTS 升级,或者最后一个当前点版本到下一个点版本(在 LTS 版本之间,即是的,除非下一个版本也恰好是 LTS 版本)。
关键是要识别何时删除的软件包很重要,以及何时需要手动替换它们。有时,如果您同时替换它们,apt 会更好地解决问题,而其他时候,您必须一次替换它们,或者将两种方法结合起来,以避免冲突。它是高级的 apt-fu,也就是说,需要一些经验,或者在你的情况下更可能是运气,但如果你知道你在做什么以及哪些软件包对于替换至关重要,哪些不是,那么通常会起作用。
您还需要确定哪些软件包被其他软件包替换,哪些软件包不再在 apt 中,哪些软件包可以直接替换。 apt-cache search [package] 是你的朋友。
预计这个过程需要几个小时,这将导致成功或失败,失败只是意味着你安装了一个新的ubuntu并收工,成功意味着你实际上得到了升级的东西并清理了旧的新贵东西,然后切换到 systemd,安装新内核并成功重新启动,尽管此时您可能还必须从 CLI 重新安装桌面。