Centos7的Maven Antrun自定义RPM创建 - 冲突问题

问题描述

我们一直在使用“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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...