ubuntu dpkg 依赖问题处理

使用 apt-get 安装软件期间,如果出现意外中断的情况,下次安装时会出现 dpkg 的一系列依赖问题,提示如下 ::

dpkg: error processing parted (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration ...

这时,先尝试能不能通过强制安装解决 ::

sudo apt-get clean
sudo apt-get install -f
sudo apt-get dpkg --configure -a

如果还不行,就需要手工处理一下 dpkg 的安装信息::

sudo mv /etc/lib/dpkg/info /etc/lib/dpkg/info-old
sudo mkdir /etc/lib/dpkg/info
sudo apt-get install -f
sudo dpkg --configure -a

然后把 info-old 里面的安装信息文件复制回去(为安全起见,小心不要删除了 info 的任何文件)

sudo cp -i /etc/lib/dpkg/info-old/* /etc/lib/dpkg/info

确认无问题后,最后删除备份

sudo rm -rf /etc/lib/dpkg/info-old

如果是不小心删除了 info 文件夹,还可以用以下的脚本来自这里进行处理 ::

#!/bin/bash
set -e

# Clean out /var/cache/apt/archives
apt-get clean
# Fill it with all the .debs we need
apt-get --reinstall -dy install $(dpkg --get-selections | grep '[[:space:]]install' | cut -f1)

DIR=$(mktemp -d -t info-XXXXXX)
for deb in /var/cache/apt/archives/*.deb
do
    # Move to working directory
    cd "$DIR"
    # Create DEBIAN directory
    mkdir -p DEBIAN
    # Extract control files
    dpkg-deb -e "$deb"
    # Extract file list, fixing up the leading ./ and turning / into /.
    dpkg-deb -c "$deb" | awk '{print $NF}' | cut -c2- | sed -e 's/^\/$/\/./' > DEBIAN/list
    # Figure out binary package name
    DEB=$(basename "$deb" | cut -d_ -f1)
    # Copy each control file into place
    cd DEBIAN
    for file in *
    do
        cp -a "$file" /var/lib/dpkg/info/"$DEB"."$file"
    done
    # Clean up
    cd ..
    rm -rf DEBIAN
done
rmdir "$DIR"

某些组件可能还有问题,如 x11-common ,那么需要编辑/var/lib/dbkg/status文件,找到开头为 Package: x11-common的软件包描述,删除后重新安装 ::

cp /var/lib/dpkg/status /var/lib/dpkg/status.bak
vi  /var/lib/dbkg/status
# 删除x11-common一段描述
apt-get --reinstall install x11-common