将 rpm-package 安装到 systemd?

Rop*_*Rop 4 yum rpm systemd rhel7

我是 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  
Run Code Online (Sandbox Code Playgroud)

并且安装中止。

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

[Unit]
Description=MyApp
After=syslog.target network.target activemq.service
Requires=activemq.service

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
...
Run Code Online (Sandbox Code Playgroud)

知道冲突可能是什么吗?

或者如何解决?

编辑:从 gradle 构建文件添加 rpm-stuff:

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")
    }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*aes 7

每个 rpm 指定它安装的文件和目录的列表。两个 rpm 不能安装相同的文件或目录。在你的spec文件(或任何文件,你用来描述你创建RPM),你应该安装/etc/systemd//etc/systemd/system/目录。在规范文件中;你不应该使用:

%files
/etc/systemd/
Run Code Online (Sandbox Code Playgroud)

%files
/etc/systemd/system/*
Run Code Online (Sandbox Code Playgroud)

(或分别指定每个文件)

编辑

四处寻找您的 gradle 插件;您应该使用以下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
}
Run Code Online (Sandbox Code Playgroud)

(查看nebula-gradle-plugin github 页面上完整使用示例以获取更多信息)