【问题标题】:Build RPM for Linux CentOS on Windows在 Windows 上为 Linux CentOS 构建 RPM
【发布时间】:2016-08-18 03:32:51
【问题描述】:

我正在尝试使用 Windows 上的 RPM Maven 插件构建一个 RPM,以便在 Linux 机器上进行部署。

正在构建 RPM 的机器的操作系统:Windows 7 Enterprise、Cygwin 2.5.1

安装 RPM 的虚拟机操作系统:CentOS 7

我已经运行了 mvn clean install 命令并且构建成功了。

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 48.273s
[INFO] Finished at: Sun Apr 24 21:08:51 BST 2016
[INFO] Final Memory: 10M/157M
[INFO] ------------------------------------------------------------------------

但是,当我 scp 到服务器并运行 yum install -y Core1337-1.0-1.noarch.rpm

我收到以下错误:

Transaction check error:   package Core1337-1.0-1.noarch is
 intended for a different operating system

以下是从插件的 Pom.XML 文件中截取的 XML。

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.core</groupId>
    <artifactId>Core1337</artifactId>
    <packaging>rpm</packaging>
    <version>1.0</version>
    <name>Core Libz</name>

    <properties>
        <targetOS>i386-linux</targetOS>
        <rpm-base>opt</rpm-base>
        <rpm-path>app</rpm-path>
        <base-dir>core</base-dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
    </dependencies>

    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>rpm-maven-plugin</artifactId>
            <version>2.1.5</version>
            <extensions>true</extensions>
            <configuration>
                <license>GPL (c) 2005, SWWDC</license>
                <distribution>eSQuireDistro</distribution>
                <group>eSQuireDevel</group>
                <requires>
                    <require>at</require>
                    <require>wget</require>
                    <require>tree</require>
                    <require>cronie</require>
                    <require>openssh-server</require>
                </requires>
                <mappings>
                    <mapping>
                        <directory>/${rpm-base}/${rpm-path}/${base-dir}/python</directory>
                        <filemode>744</filemode>
                        <username>root</username>
                        <groupname>root</groupname>
                        <configuration>false</configuration>
                        <directoryIncluded>true</directoryIncluded>
                        <recurseDirectories>true</recurseDirectories>
                        <dependency />
                        <sources>
                            <source>
                                <location>src/main/python</location>
                            </source>
                        </sources>
                    </mapping>
                    <mapping>
                        <directory>/${rpm-base}/${rpm-path}/${base-dir}/scripts</directory>
                        <filemode>744</filemode>
                        <username>root</username>
                        <groupname>root</groupname>
                        <configuration>false</configuration>
                        <directoryIncluded>true</directoryIncluded>
                        <recurseDirectories>true</recurseDirectories>
                        <dependency />
                        <sources>
                            <source>
                                <location>src/main/scripts</location>
                            </source>
                        </sources>
                    </mapping>
                </mappings>
                <preinstallScriptlet>
                    <script>/bin/logger "installing"</script>
                </preinstallScriptlet>
                <postinstallScriptlet>
                    <script>/bin/logger "uninstalling"</script>
                </postinstallScriptlet>
            </configuration>
        </plugin>
    </plugins>

这是生成的 SPEC 文件:

%define __jar_repack 0
Name: Core1337
Version: 1.0
Release: 1
Summary: Core Libz
License: GPL (c) 2005, SWWDC
Distribution: eSQuireDistro
Group: eSQuireDevel
Requires: at
Requires: wget
Requires: tree
Requires: cronie
Requires: openssh-server
autoprov: yes
autoreq: yes
BuildArch: noarch
BuildRoot: /cygdrive/C/Users/ala/workspace/alan/Core/target/rpm/Core1337/buildroot

%description

%install

if [ -d $RPM_BUILD_ROOT ];
then
  mv /cygdrive/C/Users/ala/workspace/alan/Core/target/rpm/Core1337/tmp-buildroot/* $RPM_BUILD_ROOT
else
  mv /cygdrive/C/Users/ala/workspace/alan/Core/target/rpm/Core1337/tmp-buildroot $RPM_BUILD_ROOT
fi

%files

%attr(744,root,root)  "/opt/esquire/core/python/"
%attr(744,root,root)  "/opt/esquire/core/scripts/"

%pre
/bin/logger "installing"

%post
/bin/logger "uninstalling"

如何配置插件以构建带有 linux 标头的 RPM?非常感谢任何帮助!

【问题讨论】:

  • 您的 pom.xml 中的“i386-linux”行非常可疑...
  • mojohaus.org/rpm-maven-plugin/ident-params.html#targetOS 这就是我能找到的所有信息,但我无法获得有关需要插入的值的任何信息
  • 不知道要不要自己填写。 “默认情况下,这将填充到系统属性 os.name。”。我在 linux 上使用 rpmbuild,但我从不自己填写……除非你想生成“noarch”;在这种情况下,您填写“noarch”
  • 是的,我正在尝试使用 Cygwin 在 Windows 上构建它,我可能只需要使用 CentOS 机器。你能解释一下'noarch'吗?这是否意味着它是通用的,不适用于任何架构?对于这种类型的 RPM,我仍然会遇到同样的错误。 - 我只是习惯于在 windows 上构建并将其拖放到服务器上。
  • 是的 noarch 意味着任何架构;例如脚本...

标签: linux windows maven rpm rpmbuild


【解决方案1】:

建筑窗户上的RPM在Linux机器上部署可能很复杂。我建议在将要部署它的同一操作系统上构建 RPMS。

【讨论】:

    【解决方案2】:

    直接使用 rpmbuild 命令,可以使用--target 选项覆盖目标操作系统。

    rpmbuild -bb hello.spec --target x86_64-linux
    

    验证:

    rpm -qp --qf '%{os}\n' hello-1-1.x86_64.rpm 
    linux
    

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2022-12-18
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 2020-06-13
      相关资源
      最近更新 更多