长话短说:在尝试配置 CPAN 时,我犯了一个非常荒谬的愚蠢错误,导致我有两个半版本的 Perl,两者都缺少重要的包。特别是,这些半版本不具备使 apt-get 或 CPAN 正常工作所需的功能,而这通常是我认为获取包来完成 Perl 的方式。
目前,我能想到解决这个问题的唯一方法依赖于我碰巧有一个我没有弄乱的 Debian 虚拟机(因此没有严重损坏的 Perl),所以理论上我可以删除这两半从我的主机上安装 Perl 版本,然后从虚拟机粘贴工作 Perl 的副本。对于这种事情还有其他合理的方法吗?
答案1
Debian 中的 Perl 分为几个部分。其中一个部分(perl-base
程序包)是“基本”程序包集合的一部分。 Debian 将这些基本软件包定义为“将始终安装在 Debian 系统上”。包可以假定它们可用,即使它们没有声明任何形式的依赖关系。如果你删除其中之一,那么事情很可能会变得非常糟糕。因此,如果您尝试这样做,系统会大声抱怨,并要求您通过逐字输入短语、标点符号和其他内容dpkg
来确认是否要破坏系统。Yes, do as I say!
切勿这样做;您将使系统处于一种极不可能自行恢复的状态。
如果你这样做了,那么你的系统现在就坏了。不过,不要绝望;仍然可以修复它。
- 首先,运行
dpkg -l perl-base
以确认您确实丢失了perl-base
包裹。如果该命令的输出ii
在包含 的行上以 开头perl-base
,那么这不是问题,您会遇到不同的问题。在这种情况下,发布尝试运行某些 apt 命令时收到的确切错误消息。否则调试就变成了水晶球问题。 - 下载
perl-base
适用于您正在运行的 Debian 版本的软件包。 - 接下来,运行
ar x perl-base*deb
.这将在当前工作目录中创建三个文件:debian-binary
、data.tar.gz
和control.tar.gz
.注意:data.tar.gz 也可以是 data.tar.xz。如果您的系统上没有ar
安装,您可以在不同的系统上运行此步骤,并将生成的文件复制到损坏的机器上(任何类似 UNIX 的机器都可以工作,不必是 debian 机器)。 - tarball
data
包含该包想要放入文件系统的文件。使用以下命令将其解压到正确的位置:tar xvaf data.tar.* -C /
。钻头-C /
是这里的重要部分;它告诉tar
相对于文件系统的根目录解压。 - 一旦您到达这里,丢失的文件就会回到您的系统上,并且
dpkg
将apt
再次工作。然而,你还没有完成;此时,文件就在那里,但是由于您“安装”的方式perl-base
,dpkg
会认为它不在那里并且可能开始做奇怪的事情。因此,有必要通过运行“再次”安装它dpkg -i perl-base*deb
。
现在一切都应该修复了。下次,如果dpkg
告诉您输入该短语,请明智地说“不”;-)