为什么从 /etc/yum.repos.d 中删除 repo 后无法重新安装?

为什么从 /etc/yum.repos.d 中删除 repo 后无法重新安装?

我通过从/etc/yum.repos.d使用中删除其文件来删除一个存储库rm -rf。然后我尝试安装相同的存储库,dnf install但它没有显示在/etc/yum.repos.d或当我运行时dnf repolist

我认为该包有可能仍被记忆在dnf缓存中,因此我尝试通过键入来清除缓存

dnf clean expire-cache甚至将--refresh选项传递给dnf install但存储库仍然不显示。

手动删除存储库后如何安装它?

答案1

目前尚不清楚您删除了哪个存储库并尝试使用dnf install ...命令重新安装,但我们只能假设您尝试执行以下操作:

$ sudo dnf install -y http://download1.rpmfusion.org/free/fedora/releases/28/Everything/x86_64/os/Packages/r/rpmfusion-free-release-28-1.noarch.rpm
Fedora 28 - x86_64                                                                                                                               411 kB/s |  60 MB     02:30
Last metadata expiration check: 0:00:00 ago on Mon 23 Jul 2018 02:06:48 AM UTC.
rpmfusion-free-release-28-1.noarch.rpm                                                                                                            40 kB/s |  20 kB     00:00
Dependencies resolved.
...
...
  Preparing        :                                                                                                                                                         1/1
  Installing       : rpmfusion-free-release-28-1.noarch                                                                                                                      1/1
  Verifying        : rpmfusion-free-release-28-1.noarch                                                                                                                      1/1

Installed:
  rpmfusion-free-release.noarch 28-1

Complete!

然后删除 .repo 文件,如下所示:

$ sudo rm /etc/yum.repos.d/rpmfusion-free-updates.repo

然后尝试再次安装:

$ sudo dnf install -y http://download1.rpmfusion.org/free/fedora/releases/28/Everything/x86_64/os/Packages/r/rpmfusion-free-release-28-1.noarch.rpm
RPM Fusion for Fedora 28 - Free                                                                                                                  1.3 MB/s | 754 kB     00:00
Last metadata expiration check: 0:00:00 ago on Mon 23 Jul 2018 02:11:12 AM UTC.
rpmfusion-free-release-28-1.noarch.rpm                                                                                                            57 kB/s |  20 kB     00:00
Package rpmfusion-free-release-28-1.noarch is already installed, skipping.
Dependencies resolved.
Nothing to do.
Complete!

解决方案

为了让事情恢复正常,您需要执行reinstall此 RPM,而不是install.

$ sudo dnf reinstall -y http://download1.rpmfusion.org/free/fedora/releases/28/Everything/x86_64/os/Packages/r/rpmfusion-free-release-28-1.noarch.rpm
Last metadata expiration check: 0:03:11 ago on Mon 23 Jul 2018 02:11:12 AM UTC.
rpmfusion-free-release-28-1.noarch.rpm                                                                                                            44 kB/s |  20 kB     00:00
Dependencies resolved.
...
...
  Preparing        :                                                                                                                                                         1/1
  Reinstalling     : rpmfusion-free-release-28-1.noarch                                                                                                                      1/2
  Erasing          : rpmfusion-free-release-28-1.noarch                                                                                                                      2/2
  Verifying        : rpmfusion-free-release-28-1.noarch                                                                                                                      1/2
  Verifying        : rpmfusion-free-release-28-1.noarch                                                                                                                      2/2

Reinstalled:
  rpmfusion-free-release.noarch 28-1

Complete!

如果我们确认,已删除.repo 文件回来了:

$ ls -l /etc/yum.repos.d/rpmfusion-free-updates.repo
-rw-r--r--. 1 root root 1264 Apr 24 11:27 /etc/yum.repos.d/rpmfusion-free-updates.repo

没有网址?

如果您愿意,您甚至可以在不知道用于设置/安装此存储库的原始 RPM 的 URL 的情况下执行此操作。

检查 RPM 的名称:

$ rpm -qa|grep rpmfus
rpmfusion-free-release-28-1.noarch

dnf reinstall ...然后只使用 RPM 的名称来执行此操作:

$ sudo dnf reinstall -y rpmfusion-free-release
Last metadata expiration check: 0:10:00 ago on Mon 23 Jul 2018 02:11:12 AM UTC.
Dependencies resolved.    
...
...
  Preparing        :                                                                                                                                                         1/1
  Reinstalling     : rpmfusion-free-release-28-1.noarch                                                                                                                      1/2
  Erasing          : rpmfusion-free-release-28-1.noarch                                                                                                                      2/2
  Verifying        : rpmfusion-free-release-28-1.noarch                                                                                                                      1/2
  Verifying        : rpmfusion-free-release-28-1.noarch                                                                                                                      2/2

Reinstalled:
  rpmfusion-free-release.noarch 28-1

Complete!

并检查文件是否已恢复:

$ ls -l /etc/yum.repos.d/rpmfusion-free-updates.repo
-rw-r--r--. 1 root root 1264 Apr 24 11:27 /etc/yum.repos.d/rpmfusion-free-updates.repo

如果我不知道 RPM 的名称怎么办?

如果您处于奇怪的困境中,您无法弄清楚或回忆起使用什么 RPM 来重新安装,那么您仍然没有完全运气不好。

您可以查看从命令中删除的文件history,然后运行此rpm命令以了解 RPM 提供了哪些文件:

$ rpm -qf /etc/yum.repos.d/rpmfusion-free-updates.repo
rpmfusion-free-release-28-1.noarch

然后如上所述使用 RPM 名称重新安装。

如果 RPM 不是通过 DNF 或 YUM 安装的怎么办?

在您的特定情况下,您提到的 RPM 是:geogebra-classic-6.0.477.0-201807062103.i386.rpm,不是包含任何 YUM .repo 文件的 RPM。

$ rpm -qpl geogebra-classic-6.0.477.0-201807062103.i386.rpm  | grep yum
$

在这种情况下,双方都dnf无法yum提供任何帮助,因为双方都不知道重新安装/下载此 RPM 的 URL。这是因为该 RPM 最初可能只是直接下载并安装。

当以这种方式安装 RPM 时,dnf&yum对 URL 视而不见,只是安装您通过本地 HDD 上的文件指示他们执行的任何 RPM。

在这种情况下,您唯一的办法是重新下载有问题的 RPM 并使用dnfyum或手动重新安装rpm

参考

相关内容