【发布时间】: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