使用 yum 安装时忽略依赖关系(Scientific Linux)

使用 yum 安装时忽略依赖关系(Scientific Linux)

如何忽略我尝试yum在 Scientific Linux 中安装的单个软件包的依赖关系? CentOS/RHEL 的答案大概是一样的。

详细地说,我希望获得该实用程序lsb_release,我知道该实用程序将被放入/usr/bin/lsb_release.该命令yum whatprovides /usr/bin/lsb_release告诉我它是redhat-lsb软件包的一部分(针对各自的体系结构),但它们有很多依赖项,包括一些与 X11 相关的依赖项。

因为我只是在lsb_release程序之后,所以我想避免依赖项带来的“crud”。我怎样才能做到这一点?

答案1

根据金发姑娘的回答的提示,我想出了这个小脚本确切地我想要什么,仅此而已。它是在 Scientific Linux 6.3 上编写和测试的,但也可能适用于其他 RHEL 衍生产品。我为脚本命名redhat-lsb.sh(多么缺乏创意)。

#!/usr/bin/env bash
WKPKG=redhat-lsb
WKDIR=$HOME/$WKPKG
[[ -d "$WKDIR" ]] && [[ "x$1" != "x-f" ]] && { echo "ERROR: not removing $WKDIR. Use -f to force it."; exit 1; }
(
    [[ -d "$WKDIR" ]] &&  rm -rf "$WKDIR"
    mkdir "$WKDIR" && \
        cd "$WKDIR" && \
        yumdownloader $WKPKG && \
        cd / && \
        rpm2cpio "$WKDIR"/redhat-lsb-*.$(uname -m).rpm | cpio -idmv
) && rm -rf "$WKDIR"

调用 assudo ./redhat-lsb.shsudo ./redhat-lsb.sh -f(后者将删除工作目录,如果它已经存在)。

其作用是:

  1. 使用文件夹$HOME/redhat-lsb进行工作。
  2. 用于yumdownloader下载包。
  3. 使用 shell 通配符来选择正确的.rpmredhat-lsb-*.$(uname -m).rpm
  4. 更改为,/因为这是我们要安装它的位置
  5. 用于rpm2cpio将其解压到标准输出
  6. cpio捕获它并将其解压到当前目录中(这是需要的步骤sudo
  7. 最后删除工作文件夹

之后,取得了巨大的成功......它可以工作......没有所有依赖项:

$ lsb_release -a
LSB Version:    :core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: Scientific
Description:    Scientific Linux release 6.3 (Carbon)
Release:        6.3
Codename:       Carbon

结果包本身只包含一个静态链接的可执行文件。剩下的就是shell脚本和数据。

答案2

你不能。安装 X 的东西可能没有意义,除非你有少量的存储空间并且每个 MB 都很重要,或者如果它包括整个 DE(它可能没有),因为这可能包括一些你不想要的系统配置。

如果您仍然不想走这条路,您应该能够找到合适的 .rpm (您可以使用 yum 从存储库中获取该 rpm,而无需安装,看这里;我还没有尝试过,不知道依赖关系是否会带来麻烦;最简单的事情可能就是使用rpm查找)。然后,您可以使用rpm2cpiolsb_release 二进制文件解压 rpm并自行安装;首先检查它以ldd lsb_release确保它需要的库可用。您需要的转速中可能还有其他小部分。

网上已经有rpm2cpio的解释了,我就不再重复了。如果您使用mc文件浏览器,您可以使用它来代替 rpm2cpio —— 它可以让您浏览 rpm 的内部,就像浏览 tarball 或 zip 文件一样。

相关内容