丢失/删除的 dpkg(Debian 软件包管理器)。我如何取回它?

Rag*_*u G 8 installation apt dpkg

操作系统:Ubuntu 12.04

不小心删了dpkg。现在,无法安装软件包。所以,需要一个dpkg安装包的安装程序。

ste*_*ver 12

根据您删除的内容,您可以通过从手动下载的.deb文件中提取必要的部分来挽救这种情况。当然,诀窍是找到一种.deb无需工作即可解压缩文件的方法dpkg- 幸运的是这里有一个解决方案

如何在没有命令 dpkg 的情况下提取和安装 .deb?


首先转到packages.ubuntu.com并下载适用.deb于您的操作系统版本和架构的文件,例如

mkdir debroot && cd debroot
wget http://mirrors.kernel.org/ubuntu/pool/main/d/dpkg/dpkg_1.18.4ubuntu1_amd64.deb
Run Code Online (Sandbox Code Playgroud)

现在使用ar代替通常的方式解压缩 deb 文件dpkg -x

ar -x dpkg_1.18.4ubuntu1_amd64.deb
Run Code Online (Sandbox Code Playgroud)

(替换dpkg_1.18.4ubuntu1_amd64.deb为您下载的实际 deb 的名称)。你现在应该有以下内容

control.tar.gz  data.tar.gz  debian-binary  dpkg_1.18.4ubuntu1_amd64.deb
Run Code Online (Sandbox Code Playgroud)

包的文件应位于data.tar.gzso 以在本地提取dpkg二进制文件

tar xf data.tar.gz ./usr/bin/dpkg
Run Code Online (Sandbox Code Playgroud)

如果可行,您应该有一个文件./usr/bin/dpkg ,您可以将其复制到您的/usr/bin目录中

sudo cp ./usr/bin/dpkg /usr/bin/
Run Code Online (Sandbox Code Playgroud)

[请注意,您可以直接相对于/using解压文件,sudo tar -C ...但分两步进行只是感觉更安全一些。]


如果可行,我建议从存储库重新安装整个内容以保持一致性,即

sudo apt-get update
sudo apt-get install --reinstall dpkg
Run Code Online (Sandbox Code Playgroud)

(在较新的系统上,您可以替换apt-getapt)。


j0h*_*j0h 1

从https://launchpad.net/ubuntu/+source/dpkg/下载适合您的版本的 dpkg 软件包 。

提取文件。

cd到 dpkg 源目录的根目录。

./configure
make
sudo make install
Run Code Online (Sandbox Code Playgroud)

./configure如果失败,您可能需要下载一些软件包