安装rpm包到systemd?

我是systemd的新手,并试图将内部应用程序打包为rpm,以便安装在systemd主机(RHEL7)上。

rpm尝试将systemd.service-file: myapp.service放入: / etc / systemd / system

但是,这产生了一个错误,我不明白:

file /etc/systemd from install of myapp-0:1-.i386 conflicts with file from package systemd-219-19.el7.x86_64 file /etc/systemd/system from install of myapp-0:1-.i386 conflicts with file from package systemd-219-19.el7.x86_64 

并且安装中止。

.service-file中与安装相关的内容是:

 [Unit] Description=MyApp After=syslog.target network.target activemq.service Requires=activemq.service [Install] WantedBy=multi-user.target [Service] Type=simple ... 

任何想法可能是什么冲突?

或者如何解决问题?

编辑 :从gradle生成文件添加rpm东西:

 myappRpm { dependsOn build packageName 'myapp' arch I386 os LINUX version buildVersion preInstall file('./deploy/rpm/preinstall') postInstall file('./deploy/rpm/postinstall') preUninstall file('./deploy/rpm/preuninstall') directory('/var/log/myapp', 755) directory('/opt/myapp/app', 755) directory('/opt/myapp/bin', 755) directory('/opt/myapp/config', 755) into '/opt/myapp' from('MyApp/build/libs/MyApp.war') { into '/opt/myapp/app/' fileMode 0755 } from('deploy/systemd/myapp.sh') { into '/opt/myapp/bin/' fileMode 0755 } from('deploy/systemd/myapp.env') { into '/opt/myapp/systemd/' fileMode 0755 } from('deploy/systemd/myapp.service') { into '/etc/systemd/system/' fileMode 0755 } doLast { file("$buildDir/distributions/myapp-${buildVersion}.i386.rpm").renameTo("$buildDir/distributions/myapp.rpm") } } 

每个rpm指定它安装的文件和目录的列表。 两个rpms不能安装相同的文件或目录。 在你的spec文件中 (或者你用来描述你所build立的rpm的文件),你不应该安装/etc/systemd//etc/systemd/system/目录。 在一个spec文件中; 你不应该使用:

 %files /etc/systemd/ 

 %files /etc/systemd/system/* 

(或分别指定每个文件)

编辑

四处寻找你的gradle-plugin; 你应该使用addParentDirs选项:

 from('deploy/systemd/myapp.service') { // Will tell redline-rpm not to auto create directories, which // is sometimes necessary to avoid rpm directory conflicts addParentDirs = false into '/etc/systemd/system/' fileMode 0755 } 

(查看星云gradle插件github页面上的完整用法示例以获取更多信息)