Suse Tumbleweed,我想安装tlmgr
,我尝试了sudo zypper install -no-recommends texlive-tlmgr
没有成功,我想知道哪个包包含该命令tlmgr
或等效的文件/usr/bin/tlmgr
。
如何找到包含我需要的命令的已卸载软件包的名称?
Suse Tumbleweed,我想安装tlmgr
,我尝试了sudo zypper install -no-recommends texlive-tlmgr
没有成功,我想知道哪个包包含该命令tlmgr
或等效的文件/usr/bin/tlmgr
。
如何找到包含我需要的命令的已卸载软件包的名称?
当我安装 rpm 包时,有时会报告如下消息:
libc.so.6(GLIBC_2.3)(64bit) is needed by xxx.rpm
我想知道 RPM 如何计算出这一点,以及如何在符号上添加我自己的检查点。
这似乎是 rpmbuild 期间的一个全自动过程,但我对此不确定。
有人知道吗?
查找 rpm 提供的文件很容易
dnf provides *bin/vim
或者
yum whatprovides *bin/vim
如果你安装了 rpm 或 yum..但假设我想知道确切文件的 rpm 内容。例如
grep -ril bin/vim v*
vim-9.0.1572-1.2.ppc64.rpm
太容易了
但我想知道包含 bin/sh 的确切包,怎么办?使用此命令返回也具有 bin/sh 依赖项的包。我想知道提供 bin/sh 作为文件的确切包。
grep -ril bin/sh v*
v4l-conf-3.107-2.10.ppc64.rpm
vacation-1.2.7.1-13.3.ppc64.rpm
vim-9.0.1572-1.2.ppc64.rpm
virt-what-1.25-1.2.ppc64.rpm
vpnc-0.5.3r550-3.12.ppc64.rpm
vsftpd-3.0.5-10.1.ppc64.rpm
这(前一组较长的说明:https: //code.visualstudio.com/docs/setup/linux)展示了如何安装存储库,然后继续进行 dnf。
这个直接的 .rpm ( https://code.visualstudio.com/download ) 信息页面没有说明 dnf 是否会报告更新,或者查找可用更新通知是否是一个手动过程,或者是否“我自己”更新方面。
我无法找到任何线索或文档来说明安装完成后 dnf 检查更新处理可能有何不同,不是通过 dnf -install,而是通过 rpm -i。
我很困惑,因为我还没有足够理解或阅读足够多,dnf check-update 是否会通知我用 rpm -i 安装的软件包需要更新。
提到的第一个版本设置了密钥和存储库。第二个只是 .rpm。我不知道 .rpm 是否能够单独获得 dnf 检查更新结果。不说了,vscode更新频繁。
我有一个.spec
用于安装 rpm 的文件。我在安装后有以下代码片段 (%post scriplet)
%post -n %{package_name}
# Enable the service at boot time
%if %{?suse_version:1}0
/usr/lib/lsb/install_initd %{_initrddir}/%{package_name}
%else
chkconfig --add %{package_name}
%endi
在zypper install package_name
安装后阶段失败并出现以下错误:
/var/tmp/rpm-tmp.Z5R29N: line 2: /usr/lib/1sb/install _initd: No such file or directory
warning: %post (package_name.sles15.x86_64) scriptlet failed, exit status 127
我是 rpm .spec 文件的新手,但此 scriplet 失败,因为/usr/lib/lsb/
SLES 15 SP4 中不存在目录
我的问题是:
/lsb/
程序包以便我可以在 SLES 15 SP4 中创建此路径?我检查过 SLES 15 SP4 是否预装了 lsb-xxx 软件包,但它们在这里不起作用?%if 0%{?sle_version} == 150400 && 0%{?is_opensuse}
// do somthing
%endif
关于 cmake 和 spec 的快速问题。
如果我用这些命令手动编译:
export CFLAGS="-O2 -fpic"
cmake . \
-DCMAKE_CXX_FLAGS:STRING="$CFLAGS" \
-DCMAKE_C_FLAGS:STRING="$CFLAGS" \
-DCMAKE_VERBOSE_MAKEFILE:BOOL="TRUE" \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_MANDIR=/usr/man \
-DSYSCONF_INSTALL_DIR=/etc \
-DUSE_SSL=1 \
-DUSE_KRB5=1
make
make install
一切正常。我想创建一个 rpm,所以我编辑 .spec 文件来构建:
%cmake .
make
问题是:如何将 DMAKE 和 DUSE 标志传递给规范?谢谢
如何根据主机系统上存在的内容为 binutils、gcc 和其他链接到不同库的包创建二进制包(rpm、deb 等)?
在 LFS 项目中,为了将新系统与主机隔离,交叉编译是通过为新系统使用不同的目标三元组来伪造的(此处)。这可以防止包链接到仅存在于主机系统上的库。但是,如果使用类似的方法来构建二进制包,那么这些包肯定会有与构建它们的系统不同的目标三元组。
我阅读了这封电子邮件,其中讨论了构建主机隔离的 gcc。但得出的结论是,像 LFS 那样伪造交叉编译是构建与主机系统隔离的 gcc 的唯一合理方法。
我尝试构建带有 --prefix 和 --with-sysroot 设置为空目录的 binutils,但生成的二进制文件链接到我的主机系统上的 libfl。
编辑:
我认为我最初的解释并不清楚。请允许我举一个更具体的例子:
GNU 的 binutils不依赖于 GNU flex,我可以通过在我的 arch 系统上运行来验证这一点,ldd /usr/bin/ar
我发现它没有链接到libfl.so
. 尽管如此,我仍然在我的主机系统上安装了 flex。现在,我想编译一个 binutils 二进制文件,并将其复制到另一个具有相同架构的系统中。这个新系统没有安装 GNU flex,但这应该无关紧要,因为 binutils 不依赖于 GNU flex。问题是当我在我的主机系统上编译 binutils 时,它链接到libfl.so.2
!我认为这是因为当我构建 binuitls 时,它“注意到”我安装了 flex,所以决定链接到它。我想知道如何编译软件(如 binutils)而不链接到我的主机系统上存在的可选依赖项(如 flex)。二进制包维护者在尝试编译他们的软件时肯定会遇到同样的问题吗?
Binutils 只是这种情况下的一个例子,我真的在寻找一种更通用的方法,包维护者可以使用它来阻止他们的软件链接到主机系统中的可选依赖项。
OracleLinux 8.6 包含 32 位软件包glibc-2.28-189.1.0.1.el8.i686.rpm
。这个包需要glibc-common
的正是那个版本:
$ rpm -qpv --requires glibc-2.28-189.1.0.1.el8.i686.rpm
...
manual: glibc-common = 2.28-189.1.0.1.el8
...
但是,存储库不包含glibc-common-2.28-189.1.0.1.el8.i686.rpm
,仅包含glibc-common-2.28-189.1.0.1.el8.x86_64.rpm
.
64位版本能否glibc-common
满足32位glibc
包的依赖需求?如果是这样,为什么不考虑它noarch
,以及 RPM 依赖解析器如何确定它必须引入 RPM 包的 64 位变体?
或者,是否有提供此版本的存储库glibc-common.i686
?我知道Koji存储glibc-common-2.28-189.el8.i686.rpm
库,但它只提供. 2.28-189.1.0.1.el8