【问题标题】:Rpmbuild asks for extra dependenciesRpmbuild 要求额外的依赖
【发布时间】:2022-01-06 02:16:15
【问题描述】:

我正在尝试在 Centos 7 上构建 RPM。我正在使用以下 SPEC 文件将 Wildfly 应用程序制作成 RPM。

Name:           wildfly
Version:        16.0.0.Final
Release:        1%{?dist}
Summary:        WildFly Application Server
Group:          System Environment/Daemons
License:        LGPL 2.1           
Source0:        %{name}-%{version}.tar.gz

Requires(pre):  shadow-utils
Requires:   java >= 1.7.0
#Requires:  /etc/init.d/functions
Provides:   wildfly

%undefine _missing_build_ids_terminate_build
%define __arch_install_post QA_SKIP_RPATHS=2 %{__arch_install_post} 
%define __jar_repack 0

%description
WildFly Application Server packaged from the binary distribution.

%prep
%setup -q -n wildfly-%{version}


%install
mkdir -p %{buildroot}/opt/wildfly
cp -R . %{buildroot}/opt/wildfly

mkdir -p %{buildroot}/var/log/wildfly
mkdir -p %{buildroot}/var/run/wildfly

#%post
#alternatives --install /etc/alternatives/wildfly wildfly /opt/wildfly 100

#%postun
#alternatives --remove wildfly /opt/wildfly

%files
%defattr(-,root,root,0755)

%files
%defattr(-,root,root,0755)
%dir /opt/wildfly
/opt/wildfly/appclient
/opt/wildfly/bin
/opt/wildfly/domain
/opt/wildfly/jboss-modules.jar
/opt/wildfly/modules
%attr(-,wildfly,wildfly) /opt/wildfly/standalone
/opt/wildfly/welcome-content
%dir /var/log/wildfly
%dir /var/run/wildfly

%doc /opt/wildfly/copyright.txt
%doc /opt/wildfly/LICENSE.txt
%doc /opt/wildfly/README.txt
%doc /opt/wildfly/docs


%changelog
* Wed Nov  24 2021 
- First version being packaged

在构建时,我注意到它采用了我未在 SPEC 文件中定义的某些依赖项。

Requires: /bin/bash /bin/sh libaio.so.1 libaio.so.1()(64bit) libaio.so.1(LIBAIO_0.1) libaio.so.1(LIBAIO_0.1)(64bit) libaio.so.1(LIBAIO_0.4) libaio.so.1(LIBAIO_0.4)(64bit) libc.so.1()(64bit) libc.so.1(SUNW_0.7)(64bit) libc.so.1(SUNW_0.9)(64bit) libc.so.6 libc.so.6()(64bit) libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1.3) libc.so.6(GLIBC_2.10) libc.so.6(GLIBC_2.10)(64bit) libc.so.6(GLIBC_2.2) libc.so.6(GLIBC_2.2.5)(64bit) libdl.so.1()(64bit) libdl.so.1(SUNW_0.7)(64bit) libdl.so.2 libdl.so.2()(64bit) libdl.so.2(GLIBC_2.0) libdl.so.2(GLIBC_2.1) libdl.so.2(GLIBC_2.2.5)(64bit) libgcc_s.so.1()(64bit) rtld(GNU_HASH) 

所以当我尝试在 Centos 7 机器上安装这个 RPM 时,它会抛出以下错误。

sudo rpm -ivh wildfly-16.0.0.Final-1.el7.x86_64.rpm
error: Failed dependencies:
        libaio.so.1 is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libaio.so.1()(64bit) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libaio.so.1(LIBAIO_0.1) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libaio.so.1(LIBAIO_0.1)(64bit) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libaio.so.1(LIBAIO_0.4) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libaio.so.1(LIBAIO_0.4)(64bit) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libc.so.1()(64bit) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libc.so.1(SUNW_0.7)(64bit) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libc.so.1(SUNW_0.9)(64bit) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libc.so.6 is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libc.so.6(GLIBC_2.0) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libc.so.6(GLIBC_2.1.3) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libc.so.6(GLIBC_2.10) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libc.so.6(GLIBC_2.2) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libdl.so.1()(64bit) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libdl.so.1(SUNW_0.7)(64bit) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libdl.so.2 is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libdl.so.2(GLIBC_2.0) is needed by wildfly-16.0.0.Final-1.el7.x86_64
        libdl.so.2(GLIBC_2.1) is needed by wildfly-16.0.0.Final-1.el7.x86_64

如何解决上述依赖问题。我已经安装了

sudo yum install libaio -y

仍然存在依赖问题。请帮忙。

【问题讨论】:

  • 当应用程序使用库时,它会自动添加为依赖项。见rpm-software-management.github.io/rpm/manual/…章节自动依赖
  • 如何手动安装这些依赖项?没有这些我无法安装 rpm。我搜索了,但我只得到了两个包。 yum install libaio glibc.i686 。在此之后,我也只剩下很少的依赖项了。你能帮帮我吗??
  • libaio.so.1 is needed bywildfly-16.0.0.Final-1.el7.x86_64 libaio.so.1(LIBAIO_0.1) is needed bywildfly-16.0.0.Final-1.el7.x86_64 libaio.so.1(LIBAIO_0.4) is needed bywildfly-16.0.0.Final-1.el7.x86_64 libc.so.1()(64bit) is needed bywildfly-16.0.0.Final-1.el7.x86_64 libc.so.1(SUNW_0.7)(64bit) is needed bywildfly-16.0.0.Final-1.el7.x86_64 libc.so.1(SUNW_0.9)(64bit) is needed bywildfly-16.0.0.Final-1.el7.x86_64 libdl.so.1()(64bit) is needed bywildfly-16.0.0.Final-1.el7.x86_64 libdl.so.1(SUNW_0.7)(64bit) is needed bywildfly-16.0.0.Final-1.el7.x86_64
  • libc.so.1()(64bit) libc.so.1(SUNW_0.7)(64bit) libc.so.1(SUNW_0.9)(64bit) libdl.so.1( )(64bit) libdl.so.1(SUNW_0.7)(64bit) 现在剩下这么多

标签: wildfly rpm rpmbuild rpm-spec


【解决方案1】:

您还需要将libaio.so.1 打包到您的RP​​M 中,并修复RPATH 以找到它。不要使用QA_SKIP_RPATHS,除非你知道自己在做什么——他们在那里是有原因的!

libclibdl 问题意味着您没有使用系统编译器并且安装了自己的工具链;这将是另一个问题。你有什么理由不能使用股票gcc

进一步检查使您看起来像是在尝试制作“精美的 tarball”RPM 而不是使用 rpmbuild 进行实际编译,这可能导致更多问题 - 二进制文件在哪里来自?另一个 CentOS 盒子,还是不同的发行版? SUNW 标签让我特别担心。

【讨论】:

  • 我已经从外部下载了 wildfly 16 tar.gz 并将我的应用程序战争放入其中。所以我使用更新的 tar.gz 作为我的来源。我正在 Gcp 上的 Centos 7 servr 中尝试这个 rpm 构建
  • 如何将 libaio.so.1 打包到我的 rpm 中??如何修复 RPATH ??
猜你喜欢
  • 2014-02-12
  • 2017-08-27
  • 2015-05-09
  • 2019-04-02
  • 2020-12-18
  • 2019-02-27
  • 2020-10-16
  • 1970-01-01
  • 2018-03-06
相关资源
最近更新 更多