问题描述
我们一直在使用“maven-antrun-plugin version 1.7”来构建 rpm 文件。我们需要将系统从 RHEL6 升级到 RHEL7。开始使用RHEL7后,我们用maven-antrun-plugin构建的rpm文件无法安装。
我们必须在项目中安装许多自定义的 rpm 包。我们安装的第一个包在 /opt/foo 目录下创建文件。当我们稍后要安装其他包时,出现以下错误。
Transaction check error: file /opt/foo from install of abc.x86_64 conflicts with file from package xyz.x86_64**
发生冲突的原因是两个包对同一目录拥有所有权。
我们在RHEL7之前没有遇到过这样的问题,但是RHEL7出现了这个问题。我们要在 /opt/foo 目录下安装多个自定义 rpm 包。有没有办法在没有目录所有权的情况下在同一目录下安装自定义 rpm 包?
我想分享我们的 maven pom.xml 配置。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>rpm</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<mkdir dir="target/rpm"/>
<copy overwrite="true" todir="target/rpm">
<fileset dir="src/main/scripts" includes="pre*.sh,post*.sh"/>
<filterchain>
<replacetokens beginToken="%" endToken="}">
.....
</replacetokens>
</filterchain>
</copy>
<taskdef classname="org.redline_rpm.ant.RedlineTask" classpathref="maven.plugin.classpath" name="rpm"/>
<rpm
description="${project.name}" destination="target/rpm" group="Applications and Services" name="${project.artifactId}" postInstallScript="target/rpm/postInstall.sh" postUninstallScript="target/rpm/postUninstall.sh" preInstallScript="target/rpm/preInstall.sh" preUninstallScript="target/rpm/preUninstall.sh" sourcePackage="${project.artifactId}-${project.version}-1.src.rpm" summary="${project.name}" version="${project.version}">
<conflicts comparison="less" name="${project.artifactId}" version="${project.version}-1"/>
<depends name="xyz"/>
<tarfileset dir="src/main/scripts" filemode="755" group="joe" prefix="/opt/foo/components/" username="joe">
<include name="my_script1.sh"/>
<include name="my_script2.sh"/>
</tarfileset>
</rpm>
</target>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>redline</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
</plugin>
如下图,当我们想把文件放到/opt/foo/components目录下时,所有目录的所有权都改变了,从父目录开始。但我们不想这样做。创建“/opt/foo”目录时,它拥有“zoo:zoo”所有权。我们不想更改父目录的所有权。如何在不更改 Antrun tarfileset 中父目录的所有权的情况下执行此操作?
%dir %attr(0755,joe,joe) "/opt/foo"
%dir %attr(0755,joe) "/opt/foo/components"
%attr(0755,joe) "/opt/foo/components/my_script1.sh"
%attr(0755,joe) "/opt/foo/components/my_script2.sh"
我们期待以下权限规则:
%dir %attr(0755,zoo,zoo) "/opt/foo"
%dir %attr(0755,zoo) "/opt/foo/components"
%attr(0755,joe) "/opt/foo/components/my_script2.sh"
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)