Skip to content

Commit

Permalink
Merge pull request #245 from kardapoltsev/wip/startup-order
Browse files Browse the repository at this point in the history
ability to specify java server app start up order in debian implemented
  • Loading branch information
muuki88 committed May 10, 2014
2 parents 1862f04 + bd21d4f commit 6703ba2
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

### BEGIN INIT INFO
# Provides: ${{app_name}}
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Required-Start: ${{start_facilities}}
# Required-Stop: ${{stop_facilities}}
# Default-Start: ${{start_runlevels}}
# Default-Stop: ${{stop_runlevels}}
# Short-Description: ${{descr}}
### END INIT INFO

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,13 +65,20 @@ object JavaServerAppPackaging {
Seq(
linuxJavaAppStartScriptBuilder in Debian := JavaAppStartScript.Debian,
serverLoading := Upstart,

// === Startscript creation ===
linuxScriptReplacements in Debian <++= (requiredStartFacilities in Debian, requiredStopFacilities in Debian, startRunlevels in Debian, stopRunlevels in Debian) apply {
(startFacilities, stopFacilities, startLevels, stopLevels) =>
println("appending replacements")
println("stop fac " + stopFacilities)
Seq("start_runlevels" -> startLevels.mkString(" "), "stop_runlevels" -> stopLevels.mkString(" "),
"start_facilities" -> startFacilities.mkString(" "), "stop_facilities" -> stopFacilities.mkString(" "))
},
linuxStartScriptTemplate in Debian <<= (serverLoading in Debian, sourceDirectory, linuxJavaAppStartScriptBuilder in Debian) map {
(loader, dir, builder) => builder.defaultStartScriptTemplate(loader, dir / "templates" / "start")
},
linuxMakeStartScript in Debian <<= (target in Universal, serverLoading in Debian, linuxScriptReplacements, linuxStartScriptTemplate in Debian, linuxJavaAppStartScriptBuilder in Debian)
linuxMakeStartScript in Debian <<= (target in Universal, serverLoading in Debian, linuxScriptReplacements in Debian, linuxStartScriptTemplate in Debian, linuxJavaAppStartScriptBuilder in Debian)
map { (tmpDir, loader, replacements, template, builder) =>
println(replacements)
makeMaintainerScript(builder.startScript, Some(template))(tmpDir, loader, replacements, builder)
},
linuxPackageMappings in Debian <++= (normalizedName, linuxMakeStartScript in Debian, serverLoading in Debian) map startScriptMapping,
Expand Down
4 changes: 4 additions & 0 deletions src/main/scala/com/typesafe/sbt/packager/linux/Keys.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ trait Keys {
val daemonGroup = SettingKey[String]("daemon-group", "Group to start application daemon")
val daemonShell = SettingKey[String]("daemon-shell", "Shell provided for the daemon user")
val serverLoading = SettingKey[ServerLoader]("server-loader", "Loading system to be used for application start script")
val startRunlevels = SettingKey[Seq[Int]]("start-runlevels", "Sequence of runlevels on which application will start up")
val stopRunlevels = SettingKey[Seq[Int]]("stop-runlevels", "Sequence of runlevels on which application will stop")
val requiredStartFacilities = SettingKey[Seq[String]]("required-start-facilities", "Names of system services that should be provided at application start")
val requiredStopFacilities = SettingKey[Seq[String]]("required-stop-facilities", "Names of system services that should be provided at application stop")
val linuxPackageMappings = TaskKey[Seq[LinuxPackageMapping]]("linux-package-mappings", "File to install location mappings including owner and privileges.")
val linuxPackageSymlinks = TaskKey[Seq[LinuxSymlink]]("linux-package-symlinks", "Symlinks we should produce in the underlying package.")
val generateManPages = TaskKey[Unit]("generate-man-pages", "Shows all the man files in the current project")
Expand Down
11 changes: 8 additions & 3 deletions src/main/scala/com/typesafe/sbt/packager/linux/LinuxPlugin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,20 @@ trait LinuxPlugin extends Plugin {
defaultLinuxLogsLocation := "/var/log",
defaultLinuxConfigLocation := "/etc",

startRunlevels := Seq(2, 3, 4, 5),
stopRunlevels := Seq(0, 1, 6),
requiredStartFacilities := Seq("$remote_fs", "$syslog"),
requiredStopFacilities := Seq("$remote_fs", "$syslog"),
linuxJavaAppStartScriptBuilder := JavaAppStartScript.Debian,
// This one is begging for sbt 0.13 syntax...
linuxScriptReplacements <<= (
maintainer in Linux, packageSummary in Linux, daemonUser in Linux, daemonGroup in Linux, daemonShell in Linux, normalizedName,
sbt.Keys.version, defaultLinuxInstallLocation)
apply { (author, descr, daemonUser, daemonGroup, daemonShell, name, version, installLocation) =>
sbt.Keys.version, defaultLinuxInstallLocation, linuxJavaAppStartScriptBuilder)
apply { (author, descr, daemonUser, daemonGroup, daemonShell, name, version, installLocation, builder) =>
val appDir = installLocation + "/" + name

// TODO Making replacements should be done somewhere else. Maybe TemplateWriter
JavaAppStartScript.Debian.makeReplacements(
builder.makeReplacements(
author = author,
description = descr,
execScript = name,
Expand Down
14 changes: 14 additions & 0 deletions src/sbt-test/debian/sysvinit-deb/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ packageSummary := "Test debian package"
packageDescription := """A fun package description of our software,
with multiple lines."""

requiredStartFacilities := Seq("$test-service")

requiredStartFacilities in Debian := Seq("$test-deb-service")

TaskKey[Unit]("check-control-files") <<= (target, streams) map { (target, out) =>
val header = "#!/bin/sh"
val debian = target / "debian-test-0.1.0" / "DEBIAN"
Expand All @@ -32,3 +36,13 @@ TaskKey[Unit]("check-control-files") <<= (target, streams) map { (target, out) =
out.log.success("Successfully tested systemV control files")
()
}

TaskKey[Unit]("check-startup-script") <<= (target, streams) map { (target, out) =>
val script = IO.read(target / "debian-test-0.1.0" / "etc" / "init.d" / "debian-test")
assert(script.contains("# Default-Start: 2 3 4 5"), "script doesn't contain Default-Start header\n" + script)
assert(script.contains("# Default-Stop: 0 1 6"), "script doesn't contain Default-Stop header\n" + script)
assert(script.contains("# Required-Start: $test-deb-service"), "script doesn't contain Required-Start header\n" + script)
assert(script.contains("# Required-Stop: $remote_fs $syslog"), "script doesn't contain Required-Stop header\n" + script)
out.log.success("Successfully tested systemV start up script")
()
}
1 change: 1 addition & 0 deletions src/sbt-test/debian/sysvinit-deb/test
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ $ exists target/debian-test-0.1.0/etc/default/debian-test
$ exists target/debian-test-0.1.0/etc/init.d/debian-test

> check-control-files
> check-startup-script

0 comments on commit 6703ba2

Please sign in to comment.