Ubuntu Server 18.04 apt-get 失败

Ubuntu Server 18.04 apt-get 失败

我的 Ubuntu Server 18.04 系统虽然可以继续运行,但无法应用任何更新。我不知道我所做的任何系统更改是否是罪魁祸首。

我该怎么做才能解决这个问题?我尝试过自动移除、清除等。

这是典型的输出,但任何 apt 命令都会产生类似的错误:

# apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be REMOVED:
  linux-image-4.15.0-22-generic
The following packages will be upgraded:
  libcephfs2 librados2 ssh-import-id
3 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/3,065 kB of archives.
After this operation, 8,281 kB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 149817 files and directories currently installed.)
Removing linux-image-4.15.0-22-generic (4.15.0-22.24) ...
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-4.15.0-22-generic
/etc/kernel/postrm.d/x-grub-legacy-ec2:
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ...

Could not find /boot/grub/menu.lst file. Would you like /boot/grub/menu.lst generated for you? (y/N) /usr/sbin/update-grub-legacy-ec2: line 1101: read: 
read error: 0: Bad file descriptor
run-parts: /etc/kernel/postrm.d/x-grub-legacy-ec2 exited with return code 1
dpkg: error processing package linux-image-4.15.0-22-generic (--remove):
 installed linux-image-4.15.0-22-generic package post-removal script 
subprocess returned error exit status 1
Errors were encountered while processing:
 linux-image-4.15.0-22-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)

感谢大家的回复。按照以下建议操作。似乎无法通过 apt / dpkg 清理它。以下是输出:

# sudo update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-22-generic
Found initrd image: /boot/initrd.img-4.15.0-22-generic
Found linux image: /boot/vmlinuz-4.15.0-20-generic
Found initrd image: /boot/initrd.img-4.15.0-20-generic
done

# sudo dpkg --purge linux-image-4.15.0-22-generic
dpkg: dependency problems prevent removal of linux-image-4.15.0-22-generic:
 linux-image-generic depends on linux-image-4.15.0-22-generic.
 linux-modules-extra-4.15.0-22-generic depends on linux-image-4.15.0-22-generic | linux-image-unsigned-4.15.0-22-generic; however:
  Package linux-image-4.15.0-22-generic is to be removed.
  Package linux-image-unsigned-4.15.0-22-generic is not installed.

dpkg: error processing package linux-image-4.15.0-22-generic (--purge): 

依赖问题 - 未删除处理时遇到错误:linux-image-4.15.0-22-generic

答案1

我仍然不清楚为什么会遇到此问题,但似乎缺少 grub /boot/grub/menu.lst 文件导致 apt / dpkg 更新失败。所以我创建了一个空文件。

sudo touch /boot/grub/menu.lst
sudo update-grub2

一切顺利。然后继续更新系统:

sudo apt update
sudo apt upgrade
sudo apt autoremove --purge

在此过程中,会有一个警告,提示当前 menu.lst 文件与软件包维护者的版本不同。选择安装软件包维护者的版本的选项,然后其余的更新和清理将成功完成。下次内核升级时会看看进展如何,但问题暂时解决了。

感谢所有提出建议和帮助的人!

答案2

我知道这应该是一条评论,但我没有足够的声誉。
但我想让你知道我有一个类似问题昨天。
如果这个答案对你不起作用,你可以联系@videonauth。他是个非常好的人,帮助我解决了这个问题。
我将从他的回答中复制粘贴希望对你有帮助的部分:

运行更新后,首先删除可移除软件包,以更新正确的软件包档案:

sudo apt update
sudo apt autoremove --purge

这应该会删除到目前为止所有可移动软件包,除了那个设法弄乱的软件包,我们可以通过安装它然后正确地删除它来删除它:

cd /var/cache/apt/archives
sudo dpkg -i linux-modules-4.15.0-22-generic_4.15.0-22.24_amd64.deb
sudo dpkg -r linux-modules-4.15.0-22-generic_4.15.0-22.24_amd64.deb  

(Oussema 的注释:^此命令是基于我的系统架构是 amd64 而使用的。您可以使用以下命令查看您的系统架构uname -a
“i386”、“i486”、“i586”和“i686”以及“athlon”均表示 32 位。“x86_64”表示 64 位(Opteron 或 Athlon-64)。“i686-64”表示 32 位操作,具有 64 位地址空间(采用新内存机制的 Intel 686)。

现在通过运行以下命令清理档案:

sudo apt clean

现在,我们可以在运行完整的更新过程后正确地重新安装软件包:

sudo apt update
sudo apt dist-upgrade

使用以下行:

sudo apt install --reinstall linux-generic

相关内容