我在 Ubuntu 服务器上通过命令行运行 dpkg update 时收到以下错误,我不知道如何解决它
2019-02-03 06:25:32 INFO: no packages to update
E:Sub-process /usr/bin/dpkg returned an error code (1)
2019-02-03 06:26:01 ERROR: installArchives() failed
2019-02-03 06:26:01 ERROR: Exited with returncode 1.
运行 dpkg -l 时,我看到以下坏包
ii linux-image-4.15.0-42-generic 4.15.0-42.45 amd64 Signed kernel image generic
iF linux-image-4.15.0-43-generic 4.15.0-43.46 amd64 Signed kernel image generic
iF linux-image-4.15.0-44-generic 4.15.0-44.47 amd64 Signed kernel image generic
iF linux-image-4.15.0-45-generic 4.15.0-45.48 amd64 Signed kernel image generic
如果这有用的话,我正在 Ubuntu 18.04 上运行 Plesk 服务器
df 结果
Filesystem Size Used Avail Use% Mounted on
udev 478M 0 478M 0% /dev
tmpfs 99M 716K 98M 1% /run
/dev/vda1 25G 7.2G 17G 30% /
tmpfs 493M 8.0K 493M 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
/dev/sda 25G 14G 11G 57% /mnt/volume_sfo2_01
tmpfs 99M 0 99M 0% /run/user/0
删除软件包
dpkg: error processing package linux-image-4.15.0-45-generic (--remove):
installed linux-image-4.15.0-45-generic package post-removal script subprocess returned error exit status 1
Errors were encountered while processing:
linux-image-4.15.0-43-generic
linux-image-4.15.0-44-generic
linux-image-4.15.0-45-generic
审计输出
# sudo dpkg --audit linux-image-4.15.0-45-generic
The following packages are only half configured, probably due to problems
configuring them the first time. The configuration should be retried using
dpkg --configure <package> or the configure menu option in dselect:
linux-image-4.15.0-45-generic Signed kernel image generic
清除输出
# sudo dpkg --purge linux-image-4.15.0-45-generic
dpkg: dependency problems prevent removal of linux-image-4.15.0-45-generic:
linux-image-virtual depends on linux-image-4.15.0-45-generic.
dpkg: error processing package linux-image-4.15.0-45-generic (--purge):
dependency problems - not removing
Errors were encountered while processing:
linux-image-4.15.0-45-generic
以下是安装后脚本。我检查了提到的目录,它们都存在,但是列出的某些模块缺失,正如您在底部附近的 ls 中看到的那样
cat /var/lib/dpkg/info/linux-image-4.15.0-45-generic.postrm
#!/bin/sh
set -e
version=4.15.0-45-generic
image_path=/boot/vmlinuz-$version
rm -f /lib/modules/$version/.fresh-install
if [ "$1" != upgrade ] && command -v linux-update-symlinks >/dev/null; then
linux-update-symlinks remove $version $image_path
fi
if [ -d /etc/kernel/postrm.d ]; then
# We cannot trigger ourselves as at the end of this we will no longer
# exist and can no longer respond to the trigger. The trigger would
# then become lost. Therefore we clear any pending trigger and apply
# postrm directly.
if [ -f /usr/lib/linux/triggers/$version ]; then
echo "$0 ... removing pending trigger"
rm -f /usr/lib/linux/triggers/$version
rmdir --ignore-fail-on-non-empty /usr/lib/linux/triggers
fi
DEB_MAINT_PARAMS="$*" run-parts --report --exit-on-error --arg=$version \
--arg=$image_path /etc/kernel/postrm.d
fi
if [ "$1" = purge ]; then
for extra_file in modules.dep modules.isapnpmap modules.pcimap \
modules.usbmap modules.parportmap \
modules.generic_string modules.ieee1394map \
modules.ieee1394map modules.pnpbiosmap \
modules.alias modules.ccwmap modules.inputmap \
modules.symbols modules.ofmap \
modules.seriomap modules.\*.bin \
modules.softdep modules.devname; do
eval rm -f /lib/modules/$version/$extra_file
done
rmdir /lib/modules/$version || true
fi
exit 0
root@serv1:~# cd /lib/modules/4.15.0-45-generic
root@serv1:/lib/modules/4.15.0-45-generic# ls
build modules.alias.bin modules.dep.bin modules.symbols
initrd modules.builtin modules.devname modules.symbols.bin
kernel modules.builtin.bin modules.order vdso
modules.alias modules.dep modules.softdep
root@serv1:/lib/modules/4.15.0-45-generic#
答案1
dpkg 列表第二列的“F”表示“已配置一半”。常见原因是“磁盘空间太小”。
检查输出:
sudo df -h | grep -v loop
...并查找高使用率百分比。
我还会尝试一次性删除半配置的包:
sudo apt-get purge linux-image-4.15.0-45-通用 linux-image-4.15.0-44-通用 linux-image-4.15.0-43-通用
留意任何发生的删除停止错误,如果是,则将其包括在上面,然后重新检查df
上面的内容,看看情况是否发生变化。
是否需要做更多事情取决于您的发现。您需要在原始帖子中附加相关的新信息。单击edit
,然后<hr>
在末尾键入 a,并在其后粘贴新信息。
如果上述方法没有帮助,则执行下一步:
sudo dpkg --audit linux-image-4.15.0-45-generic
...并以与上述相同的方式添加输出。
根据结果,以下步骤可能是:
sudo dpkg --purge linux-image-4.15.0-45-generic
...对每个剩余的有问题的包重复相同的操作。
正如我们所见:
“... linux-image-virtual 依赖于 linux-image-4.15.0-45-generic。”
尝试:
sudo apt-get purge linux-image-virtual linux-image-4.15.0-45-generic
仍然是相同的错误:那么,尝试使用 -f (修复)标志稍微加强一下删除尝试:
sudo apt-get -f purge linux-image-virtual
sudo apt-get -f purge linux-image-4.15.0-45-generic
如果这不起作用,那么请尝试使用“较低级别”的 dpkg:
sudo dpkg --remove linux-image-virtual
sudo dpkg --remove linux-image-4.15.0-45-generic
如果其中任何一个错误包可能需要实际清理,请对其他错误包重复此操作。
显然,如果其中之一是正在使用中;并且确实有效;该包不是要尝试删除的包。
此外,通过检查删除后脚本的实际位置(显然它们没有列为软件包的一部分),locate
我得出了以下结论:
cat /var/lib/dpkg/info/linux-image-4.15.0-45-generic.postrm
... 通读该脚本并检查您的文件系统,检查脚本中提到的文件夹是否缺失,或者是否存在其他可能导致故障的奇怪事物。
一般信息:处理与内核相关的软件包
uname -r
# 这将打印当前处于活动状态的内核名称;无法删除!
sudo apt-get purge linux-image-x.x.x.x-generic
# 删除一个内核
sudo update-initramfs -u
# 重新制作启动 ramdisk
sudo update-grub2
# 重新创建启动菜单
最后两个对于恢复启动菜单并使条目在下次重启时真正起作用至关重要。