Skip to content

Commit 6703ba2

Browse files
committed
Merge pull request #245 from kardapoltsev/wip/startup-order
ability to specify java server app start up order in debian implemented
2 parents 1862f04 + bd21d4f commit 6703ba2

File tree

6 files changed

+40
-9
lines changed

6 files changed

+40
-9
lines changed

src/main/resources/com/typesafe/sbt/packager/archetypes/systemv/start-debian-template

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

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

src/main/scala/com/typesafe/sbt/packager/archetypes/JavaServerApplication.scala

+9-2
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,20 @@ object JavaServerAppPackaging {
6565
Seq(
6666
linuxJavaAppStartScriptBuilder in Debian := JavaAppStartScript.Debian,
6767
serverLoading := Upstart,
68-
6968
// === Startscript creation ===
69+
linuxScriptReplacements in Debian <++= (requiredStartFacilities in Debian, requiredStopFacilities in Debian, startRunlevels in Debian, stopRunlevels in Debian) apply {
70+
(startFacilities, stopFacilities, startLevels, stopLevels) =>
71+
println("appending replacements")
72+
println("stop fac " + stopFacilities)
73+
Seq("start_runlevels" -> startLevels.mkString(" "), "stop_runlevels" -> stopLevels.mkString(" "),
74+
"start_facilities" -> startFacilities.mkString(" "), "stop_facilities" -> stopFacilities.mkString(" "))
75+
},
7076
linuxStartScriptTemplate in Debian <<= (serverLoading in Debian, sourceDirectory, linuxJavaAppStartScriptBuilder in Debian) map {
7177
(loader, dir, builder) => builder.defaultStartScriptTemplate(loader, dir / "templates" / "start")
7278
},
73-
linuxMakeStartScript in Debian <<= (target in Universal, serverLoading in Debian, linuxScriptReplacements, linuxStartScriptTemplate in Debian, linuxJavaAppStartScriptBuilder in Debian)
79+
linuxMakeStartScript in Debian <<= (target in Universal, serverLoading in Debian, linuxScriptReplacements in Debian, linuxStartScriptTemplate in Debian, linuxJavaAppStartScriptBuilder in Debian)
7480
map { (tmpDir, loader, replacements, template, builder) =>
81+
println(replacements)
7582
makeMaintainerScript(builder.startScript, Some(template))(tmpDir, loader, replacements, builder)
7683
},
7784
linuxPackageMappings in Debian <++= (normalizedName, linuxMakeStartScript in Debian, serverLoading in Debian) map startScriptMapping,

src/main/scala/com/typesafe/sbt/packager/linux/Keys.scala

+4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ trait Keys {
1616
val daemonGroup = SettingKey[String]("daemon-group", "Group to start application daemon")
1717
val daemonShell = SettingKey[String]("daemon-shell", "Shell provided for the daemon user")
1818
val serverLoading = SettingKey[ServerLoader]("server-loader", "Loading system to be used for application start script")
19+
val startRunlevels = SettingKey[Seq[Int]]("start-runlevels", "Sequence of runlevels on which application will start up")
20+
val stopRunlevels = SettingKey[Seq[Int]]("stop-runlevels", "Sequence of runlevels on which application will stop")
21+
val requiredStartFacilities = SettingKey[Seq[String]]("required-start-facilities", "Names of system services that should be provided at application start")
22+
val requiredStopFacilities = SettingKey[Seq[String]]("required-stop-facilities", "Names of system services that should be provided at application stop")
1923
val linuxPackageMappings = TaskKey[Seq[LinuxPackageMapping]]("linux-package-mappings", "File to install location mappings including owner and privileges.")
2024
val linuxPackageSymlinks = TaskKey[Seq[LinuxSymlink]]("linux-package-symlinks", "Symlinks we should produce in the underlying package.")
2125
val generateManPages = TaskKey[Unit]("generate-man-pages", "Shows all the man files in the current project")

src/main/scala/com/typesafe/sbt/packager/linux/LinuxPlugin.scala

+8-3
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,20 @@ trait LinuxPlugin extends Plugin {
4141
defaultLinuxLogsLocation := "/var/log",
4242
defaultLinuxConfigLocation := "/etc",
4343

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

5156
// TODO Making replacements should be done somewhere else. Maybe TemplateWriter
52-
JavaAppStartScript.Debian.makeReplacements(
57+
builder.makeReplacements(
5358
author = author,
5459
description = descr,
5560
execScript = name,

src/sbt-test/debian/sysvinit-deb/build.sbt

+14
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ packageSummary := "Test debian package"
2020
packageDescription := """A fun package description of our software,
2121
with multiple lines."""
2222

23+
requiredStartFacilities := Seq("$test-service")
24+
25+
requiredStartFacilities in Debian := Seq("$test-deb-service")
26+
2327
TaskKey[Unit]("check-control-files") <<= (target, streams) map { (target, out) =>
2428
val header = "#!/bin/sh"
2529
val debian = target / "debian-test-0.1.0" / "DEBIAN"
@@ -32,3 +36,13 @@ TaskKey[Unit]("check-control-files") <<= (target, streams) map { (target, out) =
3236
out.log.success("Successfully tested systemV control files")
3337
()
3438
}
39+
40+
TaskKey[Unit]("check-startup-script") <<= (target, streams) map { (target, out) =>
41+
val script = IO.read(target / "debian-test-0.1.0" / "etc" / "init.d" / "debian-test")
42+
assert(script.contains("# Default-Start: 2 3 4 5"), "script doesn't contain Default-Start header\n" + script)
43+
assert(script.contains("# Default-Stop: 0 1 6"), "script doesn't contain Default-Stop header\n" + script)
44+
assert(script.contains("# Required-Start: $test-deb-service"), "script doesn't contain Required-Start header\n" + script)
45+
assert(script.contains("# Required-Stop: $remote_fs $syslog"), "script doesn't contain Required-Stop header\n" + script)
46+
out.log.success("Successfully tested systemV start up script")
47+
()
48+
}

src/sbt-test/debian/sysvinit-deb/test

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ $ exists target/debian-test-0.1.0/etc/default/debian-test
77
$ exists target/debian-test-0.1.0/etc/init.d/debian-test
88

99
> check-control-files
10+
> check-startup-script

0 commit comments

Comments
 (0)