由于互联网连接速度的限制,我更喜欢离线安装软件包。我通常从安装了相同操作系统的系统中获取所需的软件包。但是,当我以这种方式安装程序时,我的系统上通常会出现损坏的软件包,这些软件包无法通过以下方式修复:
sudo apt-get update
sudo apt-get install -f
有时最后一个命令想要从我的系统中删除 grub 或一些明显必不可少的软件包!或者在执行最后一条命令后我无法安装某些程序,例如:
The following packages have unmet dependencies:
mysql-client : Depends: mysql-client-5.5 but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
我应该如何解决这些问题?如果安装过程不顺利,有没有什么办法可以在安装程序之前保存系统状态并将系统恢复到以前的状态?有没有办法在不依赖包管理器的情况下手动修复此类问题?
我希望在 Ubuntu 中可以安装彼此隔离的程序,就像在 Windows 中一样。
首先,您提到 Windows 不是这种情况。你实际上错了 - 在 Windows 中,软件的依赖项也需要下载。
现在你的问题。尝试从离线状态安装所有你需要的包的问题是你没有办法修复依赖性问题。
apt
他们所做的是提取所有依赖项的列表,确定需要安装哪些依赖项,然后尝试安装它们。如果它无法安装依赖项,则会失败。你举
mysql-client
个例子。这是一个metapackage,因为它指的是其他包,并且不包含任何真正的可执行文件。它也依赖于特定版本,mysql-client
需要下载它们。使用离线盒子没有真正的方法可以避免这种情况。避免此问题的唯一真正方法是将您的盒子实际连接到具有 Debian 镜像或互联网访问的网络,并设置防火墙规则以限制出站流量仅到达更新服务器。
你没有说你如何安装你下载的包。如果您只是
.deb
从其他系统获取文件,那么我敢打赌您使用dpkg --install
的是直接安装.deb
。正如您现在已经发现的那样,
dpkg
无法解决和处理依赖性问题apt
。“回滚”更改的一种方法是使用
apt-get
删除您尝试安装的软件包。您可以尝试的一件事是dpkg-offline(免责声明:我写的)。在您的在线系统上,为您在离线系统上的 Ubuntu 版本获取一个 ISO。运行
dpkg-offline
指示要安装的包。它将apt-get
用于下载包及其所有依赖项,并为您提供一个带有一些帮助脚本的压缩包,以便在离线系统上运行。它将为这些包添加一个“离线”存储库,这样您就可以使用apt-get
并让它解决依赖关系。