Я новичок в 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 для получения дополнительной информации)