From 1648dbed55a050d1fa7e6eb72dce1d7e5aecf9df Mon Sep 17 00:00:00 2001 From: Alan Parkinson Date: Mon, 13 Jan 2014 21:51:40 +0000 Subject: [PATCH] Register and remove init.d scripts using update-rc.d --- .../packager/archetypes/postinst-sysvinit-template | 1 + .../sbt/packager/archetypes/postrm-sysvinit-template | 1 + .../packager/archetypes/JavaAppUpstartScript.scala | 10 ++++++++++ .../packager/archetypes/JavaServerApplication.scala | 11 +++++++++++ 4 files changed, 23 insertions(+) create mode 100644 src/main/resources/com/typesafe/sbt/packager/archetypes/postrm-sysvinit-template diff --git a/src/main/resources/com/typesafe/sbt/packager/archetypes/postinst-sysvinit-template b/src/main/resources/com/typesafe/sbt/packager/archetypes/postinst-sysvinit-template index 57c805210..fd4da4702 100644 --- a/src/main/resources/com/typesafe/sbt/packager/archetypes/postinst-sysvinit-template +++ b/src/main/resources/com/typesafe/sbt/packager/archetypes/postinst-sysvinit-template @@ -1 +1,2 @@ +update-rc.d ${{app_name}} defaults service ${{app_name}} start || echo "${{app_name}} could not be started. Try manually with service ${{app_name}} start" diff --git a/src/main/resources/com/typesafe/sbt/packager/archetypes/postrm-sysvinit-template b/src/main/resources/com/typesafe/sbt/packager/archetypes/postrm-sysvinit-template new file mode 100644 index 000000000..87316bd0d --- /dev/null +++ b/src/main/resources/com/typesafe/sbt/packager/archetypes/postrm-sysvinit-template @@ -0,0 +1 @@ +update-rc.d -f ${{app_name}} remove diff --git a/src/main/scala/com/typesafe/sbt/packager/archetypes/JavaAppUpstartScript.scala b/src/main/scala/com/typesafe/sbt/packager/archetypes/JavaAppUpstartScript.scala index 81c8634c2..dfd917959 100644 --- a/src/main/scala/com/typesafe/sbt/packager/archetypes/JavaAppUpstartScript.scala +++ b/src/main/scala/com/typesafe/sbt/packager/archetypes/JavaAppUpstartScript.scala @@ -15,6 +15,7 @@ object JavaAppStartScript { protected def sysvinitTemplateSource: URL = getClass.getResource("sysvinit-template") protected def postinstTemplateSource: URL = getClass.getResource("postinst-template") protected def postinstSysvinitTemplateSource: URL = getClass.getResource("postinst-sysvinit-template") + protected def postrmSysvinitTemplateSource: URL = getClass.getResource("postrm-sysvinit-template") protected def preremTemplateSource: URL = getClass.getResource("prerem-template") @@ -30,6 +31,15 @@ object JavaAppStartScript { TemplateWriter.generateScript(template, Seq("app_name" -> appName)) + def generatePostrm(appName: String, loader: ServerLoader, template: Option[java.net.URL] = None): Option[String] = + (template, loader) match { + case (Some(template), _) => Option(TemplateWriter.generateScript(template, Seq("app_name" -> appName))) + case (_, SystemV) => + Option(TemplateWriter.generateScript(postrmSysvinitTemplateSource, Seq("app_name" -> appName))) + case (_, _) => None + } + + def generatePostinst(appName: String, loader: ServerLoader, template: Option[java.net.URL] = None): String = (template, loader) match { // User has overriden the default. diff --git a/src/main/scala/com/typesafe/sbt/packager/archetypes/JavaServerApplication.scala b/src/main/scala/com/typesafe/sbt/packager/archetypes/JavaServerApplication.scala index f33336bf1..a21ceeb9b 100644 --- a/src/main/scala/com/typesafe/sbt/packager/archetypes/JavaServerApplication.scala +++ b/src/main/scala/com/typesafe/sbt/packager/archetypes/JavaServerApplication.scala @@ -85,6 +85,7 @@ object JavaServerAppPackaging { }, // TODO - only make these if the upstart config exists... debianMakePrermScript <<= (normalizedName, target in Universal) map makeDebianPrermScript, + debianMakePostrmScript <<= (normalizedName, target in Universal, serverLoading in Debian) map makeDebianPostrmScript, debianMakePostinstScript <<= (normalizedName, target in Universal, serverLoading in Debian) map makeDebianPostinstScript) private def makeDebianStartScript( @@ -104,6 +105,16 @@ object JavaServerAppPackaging { Some(script) } + protected def makeDebianPostrmScript(name: String, tmpDir: File, loader: ServerLoader): Option[File] = { + JavaAppStartScript.generatePostrm(name, loader) match { + case Some(scriptBits) => + val script = tmpDir / "tmp" / "bin" / "debian-postrm" + IO.write(script, scriptBits) + Some(script) + case None => None + } + } + protected def makeDebianPostinstScript(name: String, tmpDir: File, loader: ServerLoader): Option[File] = { val scriptBits = JavaAppStartScript.generatePostinst(name, loader) val script = tmpDir / "tmp" / "bin" / "debian-postinst"