如何忽略我尝试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.sh
或sudo ./redhat-lsb.sh -f
(后者将删除工作目录,如果它已经存在)。
其作用是:
- 使用文件夹
$HOME/redhat-lsb
进行工作。 - 用于
yumdownloader
下载包。 - 使用 shell 通配符来选择正确的
.rpm
:redhat-lsb-*.$(uname -m).rpm
- 更改为,
/
因为这是我们要安装它的位置 - 用于
rpm2cpio
将其解压到标准输出 cpio
捕获它并将其解压到当前目录中(这是需要的步骤sudo
)- 最后删除工作文件夹
之后,取得了巨大的成功......它可以工作......没有所有依赖项:
$ 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查找)。然后,您可以使用rpm2cpio
lsb_release 二进制文件解压 rpm并自行安装;首先检查它以ldd lsb_release
确保它需要的库可用。您需要的转速中可能还有其他小部分。
网上已经有rpm2cpio的解释了,我就不再重复了。如果您使用mc
文件浏览器,您可以使用它来代替 rpm2cpio —— 它可以让您浏览 rpm 的内部,就像浏览 tarball 或 zip 文件一样。