如何在 Ubuntu 中安装和纠正依赖问题

[ad_1]

什么是依赖?

依赖项被定义为程序正常工作所需的文件、组件或软件包。 我们安装的几乎每个软件包都依赖于另一段代码或软件才能按预期工作。 因为 Linux 的总体主题一直是让一个程序做一件特定的事情,并且把它做好,所以许多软件标题利用其他软件来正确运行。

介绍

让我们回顾一下什么是依赖项以及为什么需要它们。 当我们安装软件时,我们都曾在某个时候或另一个时候看到过来自我们系统的关于“缺少依赖项”的消息。 此错误表示软件包的某个必需部分已过时、不可用或丢失。 当我们在 Ubuntu 上遇到这些问题时,让我们回顾一下如何解决这些问题。

安装依赖

Ubuntu 使用 apt(或高级软件包工具)进行软件包管理。 大多数情况下,每当您在 Ubuntu 上看到安装某些东西时,您都会看到使用的 apt-get 命令。 apt-get 的主要任务是从具有安全、经过身份验证的软件源的存储库中检索信息和包,用于安装、升级和/或删除包及其依赖项。

这是 apt-get 的语法:

[email protected]:~# apt-get [options] command

或者

[email protected]:~# apt-get [options] install|remove pkg1 [pkg2 ...]

或者

[email protected]:~# apt-get [options] source pkg1 [pkg2 ...]

现在我们知道了 apt-get 是什么以及它的语法应该是什么样子,让我们来看看一些最常用的 apt-get 命令,我们将解释它们如何操作依赖项。

安装软件

所以假设我们想在我们的服务器上安装 Python。 首先,我们需要安装一个 libpython2.7-minimal 包/依赖项。 我们可以运行此命令来完成此操作。

[email protected]:~# apt-get install libpython2.7-minimal

我们将得到一个输出,表明包本身已被找到、解包和配置。 连同有关该包将占用的磁盘空间的信息。 如果我们缺少两个依赖项,那么我们可以运行这样的命令来安装这些包。

[email protected]:~# [email protected]:~# apt-get install libpython2.7-minimal libpython-stdlib:amd64

现在我们可以使用几乎相同的命令安装 python:

[email protected]:~# apt-get install python

删除软件

如果我们想移除这个依赖,我们可以运行以下命令。

[email protected]:~# apt-get remove libpython2.7-minimal

这将删除 libpython2.7-minimal 包以及它具有的所有相关依赖项。

更新软件

如果您想在任何时候更新服务器上的所有系统包,我们只需运行此命令即可。 此命令更新我们所有的软件,包括任何依赖项。

[email protected]:~# apt-get update

或者

[email protected]:~# apt-get upgrade

第二个命令将列出它想要安装/更新的所有软件包,并在继续安装之前提示我们是或否选项。 使用此命令,我们确保满足所有依赖项。

列出软件

如果你想列出所有可用的包,我们可以使用这个命令。

[email protected]:~# apt-cache pkgnames

我们提到这个命令是因为它引导我们进入下一节专门关于依赖的部分。 此命令将向我们显示可用于安装的大量软件包列表。 现在,假设我们要安装 libslang2 包,但不确定哪些依赖项需要与该包一起安装,哪些不需要。 我们甚至可能不知道我们需要哪些。 幸运的是,Linux 通过使用 showpkg 标志提供了这个选项。 我们可以运行此命令来查看需要哪些依赖项。

[email protected]:~# apt-cache showpkg libslang2

所以,如果我们不确定我们需要哪些依赖项,我们可以简单地运行 showpkg 子命令来获取我们需要的信息。

清理依赖项

如果你想清理一些有时会占用我们宝贵磁盘空间的杂物,我们可以使用以下命令来释放额外的磁盘空间。

[email protected]:~# apt-get clean
[email protected]:~# apt-get autoclean

这些命令会以与 CentOS 上的 yum clean 和 yum cleanall 命令相同的方式为我们完成工作。

clean 标志从 /var/cache 中的本地存储库中删除所有 .deb 文件,除了锁定文件。

autoclean 标志还会从本地存储库中删除所有 .deb 文件,但与 clean 标志不同的是,它仅删除无法再下载的过时包。

未满足的依赖项错误

几乎每个 Ubuntu 用户都看到过错误“以下软件包存在未满足的依赖关系问题”。 在这种情况下,失败几乎总是与 apt 包管理器有关,而不是与正在安装的软件有关。 幸运的是,有多种选择可以纠正这种情况。 我们将研究解决这个问题的几种方法。

备份配置文件

首先,与任何系统修改一样,必须备份我们的配置。 我们这样做是为了确保出现任何其他问题,我们可以恢复为恢复系统文件所做的更改。

[email protected]:~# cp /etc/apt/sources.list /etc/apt/sources.list.bak
[email protected]:~# cp /var/lib/dpkg/status /var/lib/dpkg/status.bak

选项

当这些依赖错误发生时,我们有多种选择可以尝试解决这个问题。

  • 启用所有存储库
  • 更新软件
  • 升级软件
  • 清理包依赖
  • 清理缓存的包
  • 删除“保留”或“保留”包
  • 将 -f 标志与 install 子命令一起使用
  • 使用 build-dep 命令
  • 测试安装包
  • 重新安装软件
  • 删除 PPA

使用 Apt-mark 列出包

顺便说一句,当使用 apt-mark showauto 命令时,它会打印将自动添加到新行的每个包的列表。 如果给出了包名称,则只会显示将自动安装的那些包。 我们提到这一点,所以我们可以记下应该与软件一起安装的软件包。

[email protected]:~# apt-mark showauto softwarename

选项 1:启用所有 Ubuntu 存储库。

使用此选项将允许从更广泛的软件和依赖项中提取。 然后,一旦更新,我们可以尝试重新安装软件。

[email protected]:~# add-apt-repository "deb https://archive.ubuntu.com/ubuntu $(lsb_release -sc) main universe restricted multiverse"
[email protected]:~# apt-get update

选项 2:更新软件

上述命令完成后,我们可以尝试再次更新包。 尝试更新软件应该是我们的第一道防线。

[email protected]:~# apt-get update softwarename

选项 3:升级软件

接下来,我们可以显示需要升级的包,然后尝试升级软件。

[email protected]:~# apt-get -u && apt-get upgrade

选项 4:清理包依赖项

损坏的软件包数据库或损坏或未正确安装的软件包可能会导致此问题。 此选项使用 autoremove 标志来解决此问题。

[email protected]:~# apt-get autoremove

此命令将仅删除存储库中不再存在的过时或不必要的包。

选项 5:清理缓存包

此命令将清理下载包的本地存储库。 然后,尝试重新安装软件。

[email protected]:~# apt-get clean

选项 6:删除“保留”或“保留”包

要定位被搁置或被搁置的软件,我们可以使用 apt-mark 命令。 获得该信息后,我们可以使用删除和试运行标志来准确查看将要删除的内容。 然后,尝试重新安装软件。

[email protected]:~# apt-mark showhold
[email protected]:~# apt-get remove –dry-run softwarename

选项 7:使用 -f 标志

根据 apt-get 手册页,使用 -f(或 –fix-broken)参数将允许 apt-get 命令尝试纠正损坏的依赖项问题。 使用 -f 时不要在命令中使用包名。

-f, –fix-broken
使固定; 尝试更正具有破坏依赖关系的系统。 此选项与 install/remove 一起使用时,可以省略任何包以允许 APT 推断出可能的解决方案。 如果指定了包,则这些包必须完全纠正问题。
第一次运行 APT 时,有时需要该选项; APT 本身不允许系统上存在损坏的包依赖项。 系统的依赖结构可能会损坏到需要手动干预(这通常意味着使用 dselect(1) 或 dpkg –remove 来消除一些有问题的包)。
在某些情况下,将此选项与 -m 一起使用可能会产生错误。 配置项:APT::Get::Fix-Broken。

https://ss64.com/bash/apt-get.html

[email protected]:~# apt-get install -f
[email protected]:~# dpkg --configure -a
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
[email protected]:~#

如果您看到 0 升级消息,则表示此命令已失败。 不过,我们还没有完成。 让我们尝试再次发出命令。

[email protected]:~# apt-get install -f

选项 8:使用 Build-dep 命令

使用此子命令,我们可以安装“softwarename”的所有依赖项。 然后,我们可以尝试单独重新安装软件依赖项。

[email protected]:~# apt-get build-dep packagename

选项 9:测试安装包

–dry-run 标志向我们展示了 apt-get 在不实际安装软件包的情况下会安装什么。 这对上述命令很有用。 它有时也可以在软件安装之前显示相关性错误。

[email protected]:~# apt-get install --dry-run softwarename

选项 10:重新安装软件

某些依赖问题和冲突出现了 apt 无法解决的问题。 发生这种情况时,apt 会将这些包保存在“等待”状态。 这意味着它们不会被完全安装。 删除这些软件包可能会解决问题并可能有助于解决原始问题。 apt-get purge 命令将从我们的系统中删除程序、所有相关的配置文件以及任何插件或设置。

[email protected]:~# apt-get -u dist-upgrade 
[email protected]:~# apt-get --reinstall softwarename

如果输出显示任何包处于“暂停”状态,我们可以继续尝试删除它们。 该命令完成后,运行此命令以

[email protected]:~# apt-get -o Debug::pkgProblemResolver=yes dist-upgrade
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

现在通过每次执行 dist-upgrade 一次删除一个保留的软件包,直到没有更多保留的软件包。 之后,尝试重新安装您的软件包。 确保实施 –dry-run 选项,以便随时了解后果:

[email protected]:~# apt-get remove -dry-run package-name
[email protected]:~# apt-get remove package-name
[email protected]:~# apt-get install package-name

选项 11:删除旧的 PPA

以下命令删除包、PPA 和相关的依赖项。

[email protected]:~# apt-get autoremove -purge PACKAGENAME
[email protected]:~# apt-get install ppa-purge
[email protected]:~# add-apt-repository -remove ppa:someppa/ppa
[email protected]:~# apt-get autoclean

最后,我们可以得出结论,apt-get 管理依赖项的方式与 yum 相同。 我们可以使用 install 子命令安装依赖项,我们可以使用 remove 子命令删除它,使用 upgrade 子命令更新它,等等。

如果您正在使用 Ubuntu 并正在寻找管理依赖项和软件包的最佳方式,那么 apt-get 是一种不错的选择。 它优于dpkg,并且更加人性化。

如果您对此仍有问题,请致电 800.580.4985,或打开 聊天 或立即与我们联系,与我们知识渊博、经验丰富的 Linux 管理员之一交谈!

[ad_2]

Related Posts