我是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页面上的完整用法示例以获取更多信息)