从 debian:packageBin for Play 2.4.2 App 创建的 SystemD 的 .deb 没有创建日志的权限
.deb for SystemD created from debian:packageBin for Play 2.4.2 App Does Not Have Permisison to Create Log
sbt debian:packageBin
创建的 SystemD 安装脚本如何设置 webapp 写入 PID /var/run
或子目录的权限?
只有 root 有权在 /var/run
中创建 pid
文件或创建包含 pid
文件的目录,如 /var/run/myWebApp/
。 debian:packageBin
任务导致 webapp 运行 作为一个特殊的 user:group
从 webapp 的名称创建。如果像 /var/run/myWebApp
这样创建目录,myWebApp
组需要写权限,但我看不出有什么方法可以自动实现。我错过了什么吗?
这是我的一些配置文件:
dist/conf/application.ini
:
-Dpidfile.path=/var/run/webapp2/webapp2.pid
conf/application.conf
:
# This seems redundant ... should it be removed?
pidfile.path = /var/run/webapp2/pid
pidfile.path = ${?pidfile.path}
debian.sbt
:
import com.typesafe.sbt.packager.archetypes.ServerLoader.{Systemd, SystemV, Upstart}
import com.typesafe.sbt.SbtNativePackager.autoImport._
lazy val root = (project in file(".")).enablePlugins(PlayScala, DebianPlugin)
enablePlugins(JavaAppPackaging)
enablePlugins(JDebPackaging)
enablePlugins(JavaServerAppPackaging)
serverLoading in Debian := Systemd
maintainer in Linux := "Mike Slinn <mslinn@mslinn.com>"
packageSummary in Linux := "myWebApp blah blah"
packageDescription := "myWebApp blah blah"
daemonUser in Linux := normalizedName.value // user which will execute the application, resolves to "myWebApp"
daemonGroup in Linux := (daemonUser in Linux).value // group which will execute the application, resolves to "myWebApp"
更新:
Play manages its own pid.。我无法让 ${{app_name}}
展开,所以我硬编码了 myWebApp
。
sbt-native-packager docs 说 pid 应该放在 /var/run/myWebApp
中,日志应该放在 /var/log/myWebApp
中。
/var/run
具有权限 777 与 /run
具有权限 775 的符号链接;两者都属于 root:root
。因此,非根进程可以写入 /var/run
的唯一方法是在 /var/run
下创建具有适当权限的目录。例如,postgres:postgres
有权写入 /var/run/postgres
:
$ ls -adlF /var/run/postgresql
drwxrwsr-x 3 postgres postgres 120 Aug 28 01:17 /var/run/postgresql/
这就是 Play 文档显示将 pid 放入 /var/run
应该起作用的方式,但这对我不起作用。
这里是解决方案,放在debian.sbt
:
linuxPackageMappings += packageTemplateMapping(s"/var/run/${name.value}/")() withUser name.value withGroup name.value
不需要 conf/application.conf
中的额外条目。
sbt debian:packageBin
创建的 SystemD 安装脚本如何设置 webapp 写入 PID /var/run
或子目录的权限?
只有 root 有权在 /var/run
中创建 pid
文件或创建包含 pid
文件的目录,如 /var/run/myWebApp/
。 debian:packageBin
任务导致 webapp 运行 作为一个特殊的 user:group
从 webapp 的名称创建。如果像 /var/run/myWebApp
这样创建目录,myWebApp
组需要写权限,但我看不出有什么方法可以自动实现。我错过了什么吗?
这是我的一些配置文件:
dist/conf/application.ini
:
-Dpidfile.path=/var/run/webapp2/webapp2.pid
conf/application.conf
:
# This seems redundant ... should it be removed?
pidfile.path = /var/run/webapp2/pid
pidfile.path = ${?pidfile.path}
debian.sbt
:
import com.typesafe.sbt.packager.archetypes.ServerLoader.{Systemd, SystemV, Upstart}
import com.typesafe.sbt.SbtNativePackager.autoImport._
lazy val root = (project in file(".")).enablePlugins(PlayScala, DebianPlugin)
enablePlugins(JavaAppPackaging)
enablePlugins(JDebPackaging)
enablePlugins(JavaServerAppPackaging)
serverLoading in Debian := Systemd
maintainer in Linux := "Mike Slinn <mslinn@mslinn.com>"
packageSummary in Linux := "myWebApp blah blah"
packageDescription := "myWebApp blah blah"
daemonUser in Linux := normalizedName.value // user which will execute the application, resolves to "myWebApp"
daemonGroup in Linux := (daemonUser in Linux).value // group which will execute the application, resolves to "myWebApp"
更新:
Play manages its own pid.。我无法让 ${{app_name}}
展开,所以我硬编码了 myWebApp
。
sbt-native-packager docs 说 pid 应该放在 /var/run/myWebApp
中,日志应该放在 /var/log/myWebApp
中。
/var/run
具有权限 777 与 /run
具有权限 775 的符号链接;两者都属于 root:root
。因此,非根进程可以写入 /var/run
的唯一方法是在 /var/run
下创建具有适当权限的目录。例如,postgres:postgres
有权写入 /var/run/postgres
:
$ ls -adlF /var/run/postgresql
drwxrwsr-x 3 postgres postgres 120 Aug 28 01:17 /var/run/postgresql/
这就是 Play 文档显示将 pid 放入 /var/run
应该起作用的方式,但这对我不起作用。
这里是解决方案,放在debian.sbt
:
linuxPackageMappings += packageTemplateMapping(s"/var/run/${name.value}/")() withUser name.value withGroup name.value
不需要 conf/application.conf
中的额外条目。