Назад | Перейти на главную страницу

Установка rpm-пакета в systemd?

Я новичок в systemd и пытаюсь получить собственное приложение, упакованное как rpm, для установки на хосте systemd (RHEL7).

Rpm пытается разместить .service-файл systemd: myapp.service в: / и т.д. / 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-файла:

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

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
...

Есть идеи, в чем может быть конфликт?

Или как устранить неполадки?

РЕДАКТИРОВАТЬ: Добавление rpm-материала из файла сборки gradle:

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 указывает список устанавливаемых файлов и каталогов. Две RPM не могут устанавливать одни и те же файлы или каталоги. В твоем файл спецификации (или любой другой файл, который вы используете для описания создаваемых вами оборотов в минуту) вам следует не установить /etc/systemd/ и /etc/systemd/system/ каталоги. В файле спецификации; вы НЕ должны использовать:

%files
/etc/systemd/

но

%files
/etc/systemd/system/*

(или указать каждый файл отдельно)

РЕДАКТИРОВАТЬ

ищите свой 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
}

(посмотрите на полный пример использования на странице github nebula-gradle-plugin для получения дополнительной информации)