From 73cc27a920b8162fa55dafc4897acd160707837e Mon Sep 17 00:00:00 2001 From: David Pennell Date: Sun, 17 Jul 2016 15:09:11 -0400 Subject: [PATCH] Issue 807 - add support to enable/disable service autostart after package installation (#847) --- README.md | 10 +- .../systemloader/systemd/loader-functions | 12 ++- .../systemloader/systemv/loader-functions | 20 ++-- .../systemloader/upstart/loader-functions | 12 ++- .../systemloader/SystemloaderKeys.scala | 3 +- .../systemloader/SystemloaderPlugin.scala | 14 ++- src/sbt-test/debian/systemd-deb/build.sbt | 17 ++++ src/sbt-test/debian/systemd-deb/test | 10 +- src/sbt-test/debian/sysvinit-deb/build.sbt | 18 ++++ src/sbt-test/debian/sysvinit-deb/test | 9 +- src/sbt-test/debian/upstart-deb/build.sbt | 18 ++++ src/sbt-test/debian/upstart-deb/test | 8 ++ src/sbt-test/rpm/systemd-rpm/build.sbt | 56 ++++++++++- src/sbt-test/rpm/systemd-rpm/test | 11 ++- src/sbt-test/rpm/sysvinit-rpm/build.sbt | 98 +++++++++++++++++++ src/sbt-test/rpm/sysvinit-rpm/test | 11 ++- src/sphinx/archetypes/systemloaders.rst | 3 + 17 files changed, 301 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index cea0b5d4d..08187e5f6 100644 --- a/README.md +++ b/README.md @@ -41,11 +41,11 @@ different archetypes for common configurations, such as simple Java apps or serv * `msi` for Windows * `docker` images * Provide archetypes for common use cases - * [Java application][] with startscripts for linux/osx/windows - * [Java server application][] with additional autostart configurations - * Systemd - * Systemv - * Upstart + * [Java application][] with start scripts for Linux, OSX and Windows + * [Java server application][] adds support for service managers:s + * Systemd + * Systemv + * Upstart * Java8 [jdkpackager][] wrapper * Optional JDeb integration for cross-platform Debian builds * Optional Spotify docker client integration diff --git a/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/systemd/loader-functions b/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/systemd/loader-functions index 15e7a93f2..3c4acd8c4 100644 --- a/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/systemd/loader-functions +++ b/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/systemd/loader-functions @@ -1,8 +1,8 @@ # -# Adding service to autostart +# Adding service for management # $1 = service name # -startService() { +addService() { app_name=$1 app_sys_config="/etc/sysconfig/${app_name}" @@ -16,6 +16,14 @@ startService() { fi systemctl enable "$app_name.service" +} + +# +# Start the service +# $1 = service name +# +startService() { + app_name=$1 systemctl start "$app_name.service" } diff --git a/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/systemv/loader-functions b/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/systemv/loader-functions index 256eff62d..07c58cad3 100644 --- a/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/systemv/loader-functions +++ b/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/systemv/loader-functions @@ -1,23 +1,30 @@ # -# Adding service to autostart +# Add service for management # $1 = service name # -startService() { +addService() { app_name=$1 if hash update-rc.d >/dev/null 2>&1; then - echo "Adding $app_name to autostart using update-rc.d" + echo "Adding $app_name to service management using update-rc.d" update-rc.d $app_name defaults - service $app_name start elif hash chkconfig >/dev/null 2>&1; then - echo "Adding $app_name to autostart using chkconfig" + echo "Adding $app_name to service management using chkconfig" chkconfig --add ${{app_name}} chkconfig $app_name on - service $app_name start else echo "WARNING: Could not add $app_name to autostart: neither update-rc nor chkconfig found!" fi } +# +# Start the service +# $1 = service name +# +startService() { + app_name=$1 + service $app_name start +} + # # Removing service from autostart # $1 = service name @@ -36,7 +43,6 @@ stopService() { else echo "WARNING: Could not remove $app_name from autostart: neither update-rc nor chkconfig found!" fi - } # diff --git a/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/upstart/loader-functions b/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/upstart/loader-functions index a7724bc9f..5f593a790 100644 --- a/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/upstart/loader-functions +++ b/src/main/resources/com/typesafe/sbt/packager/archetypes/systemloader/upstart/loader-functions @@ -1,10 +1,18 @@ # -# Adding service to autostart +# Adding service for management # $1 = service name # -startService() { +addService() { app_name=$1 initctl reload-configuration +} + +# +# Start the service +# $1 = service name +# +startService() { + app_name=$1 service $app_name start } diff --git a/src/main/scala/com/typesafe/sbt/packager/archetypes/systemloader/SystemloaderKeys.scala b/src/main/scala/com/typesafe/sbt/packager/archetypes/systemloader/SystemloaderKeys.scala index 58752673f..12ebb87b2 100644 --- a/src/main/scala/com/typesafe/sbt/packager/archetypes/systemloader/SystemloaderKeys.scala +++ b/src/main/scala/com/typesafe/sbt/packager/archetypes/systemloader/SystemloaderKeys.scala @@ -4,6 +4,7 @@ import sbt._ trait SystemloaderKeys { val serverLoading = SettingKey[Option[ServerLoader.ServerLoader]]("server-loader", "Loading system to be used for application start script") + val serviceAutostart = SettingKey[Boolean]("service-autostart", "Automatically start the service after installation") val startRunlevels = SettingKey[Option[String]]("start-runlevels", "Sequence of runlevels on which application will start up") val stopRunlevels = SettingKey[Option[String]]("stop-runlevels", "Sequence of runlevels on which application will stop") val requiredStartFacilities = SettingKey[Option[String]]("required-start-facilities", "Names of system services that should be provided at application start") @@ -13,4 +14,4 @@ trait SystemloaderKeys { val retryTimeout = SettingKey[Int]("retry-timeout", "Timeout between retries in seconds") val retries = SettingKey[Int]("retries", "Number of retries to start service") -} \ No newline at end of file +} diff --git a/src/main/scala/com/typesafe/sbt/packager/archetypes/systemloader/SystemloaderPlugin.scala b/src/main/scala/com/typesafe/sbt/packager/archetypes/systemloader/SystemloaderPlugin.scala index 1ae9e61a3..0caa64e7d 100644 --- a/src/main/scala/com/typesafe/sbt/packager/archetypes/systemloader/SystemloaderPlugin.scala +++ b/src/main/scala/com/typesafe/sbt/packager/archetypes/systemloader/SystemloaderPlugin.scala @@ -13,6 +13,7 @@ import com.typesafe.sbt.packager.Keys.{ linuxStartScriptName, linuxPackageMappings, serverLoading, + serviceAutostart, requiredStartFacilities, requiredStopFacilities, startRunlevels, @@ -47,6 +48,7 @@ object SystemloaderPlugin extends AutoPlugin { def systemloaderSettings: Seq[Setting[_]] = Seq( serverLoading := None, + serviceAutostart := true, linuxStartScriptName := Some(packageName.value), // defaults, may be override by concrete systemloader retries := 0, @@ -78,6 +80,12 @@ object SystemloaderPlugin extends AutoPlugin { ) ) + def addAndStartService(autostart: Boolean, pad: String = ""): String = { + val addService = s"""${pad}addService $${{app_name}} || echo "$${{app_name}} could not be registered"""" + val startService = s"""${pad}startService $${{app_name}} || echo "$${{app_name}} could not be started"""" + if (autostart) s"${addService}\n${startService}" else addService + } + def debianSettings: Seq[Setting[_]] = inConfig(Debian)(Seq( // add automatic service start/stop maintainerScripts := maintainerScriptsAppend( @@ -86,7 +94,7 @@ object SystemloaderPlugin extends AutoPlugin { )( DebianConstants.Postinst -> s"""|# ${serverLoading.value} support |$${{loader-functions}} - |startService $${{app_name}} || echo "$${{app_name}} could not be registered or started" + |${addAndStartService(serviceAutostart.value)} |""".stripMargin, DebianConstants.Prerm -> s"""|# ${serverLoading.value} support |$${{loader-functions}} @@ -107,7 +115,7 @@ object SystemloaderPlugin extends AutoPlugin { |# $$1 == 1 is first installation and $$1 == 2 is upgrade |if [ $$1 -eq 1 ] ; |then - | startService $${{app_name}} || echo "Could not start $${{app_name}}" + |${addAndStartService(serviceAutostart.value, " ")} |fi |""".stripMargin, RpmConstants.Postun -> s"""|# ${serverLoading.value} support @@ -154,4 +162,4 @@ object SystemloaderPlugin extends AutoPlugin { ) } -} \ No newline at end of file +} diff --git a/src/sbt-test/debian/systemd-deb/build.sbt b/src/sbt-test/debian/systemd-deb/build.sbt index 6eee8abcf..a5887d6ed 100644 --- a/src/sbt-test/debian/systemd-deb/build.sbt +++ b/src/sbt-test/debian/systemd-deb/build.sbt @@ -29,3 +29,20 @@ TaskKey[Unit]("check-etc-default") <<= (target, streams) map { (target, out) => assert(script.contains("systemd"), s"systemd etc-default template wasn't selected; contents are:\n" + script) () } + +TaskKey[Unit]("check-autostart") <<= (target, streams) map { (target, out) => + val script = IO.read(target / "debian-test-0.1.0" / "DEBIAN" / "postinst") + assert(script.contains( + """addService debian-test || echo "debian-test could not be registered" + |startService debian-test || echo "debian-test could not be started" + |""".stripMargin), "addService, startService post install commands missing or incorrect") + () +} + +TaskKey[Unit]("check-no-autostart") <<= (target, streams) map { (target, out) => + val script = IO.read(target / "debian-test-0.1.0" / "DEBIAN" / "postinst") + assert(script.contains( + """addService debian-test || echo "debian-test could not be registered" + |""".stripMargin), "addService post install commands missing or incorrect") + () +} diff --git a/src/sbt-test/debian/systemd-deb/test b/src/sbt-test/debian/systemd-deb/test index 6e5cc6e39..2b712f916 100644 --- a/src/sbt-test/debian/systemd-deb/test +++ b/src/sbt-test/debian/systemd-deb/test @@ -8,4 +8,12 @@ $ exists target/debian-test-0.1.0/lib/systemd/system/debian-test.service > plugins > check-startup-script -> check-etc-default \ No newline at end of file +> check-etc-default +> check-autostart + + +# Test that serviceAutostart can be disabled + +> set every NativePackagerKeys.serviceAutostart := false +> debian:package-bin +> check-no-autostart \ No newline at end of file diff --git a/src/sbt-test/debian/sysvinit-deb/build.sbt b/src/sbt-test/debian/sysvinit-deb/build.sbt index 05dcea761..b9bf56717 100644 --- a/src/sbt-test/debian/sysvinit-deb/build.sbt +++ b/src/sbt-test/debian/sysvinit-deb/build.sbt @@ -46,3 +46,21 @@ TaskKey[Unit]("check-startup-script") <<= (target, streams) map { (target, out) out.log.success("Successfully tested systemV start up script") () } + +TaskKey[Unit]("check-autostart") <<= (target, streams) map { (target, out) => + val script = IO.read(target / "debian-test-0.1.0" / "DEBIAN" / "postinst") + assert(script.contains( + """addService debian-test || echo "debian-test could not be registered" + |startService debian-test || echo "debian-test could not be started" + |""".stripMargin), "addService, startService post install commands missing or incorrect") + () +} + +TaskKey[Unit]("check-no-autostart") <<= (target, streams) map { (target, out) => + val script = IO.read(target / "debian-test-0.1.0" / "DEBIAN" / "postinst") + assert(script.contains( + """addService debian-test || echo "debian-test could not be registered" + |""".stripMargin), "addService post install commands missing or incorrect") + () +} + diff --git a/src/sbt-test/debian/sysvinit-deb/test b/src/sbt-test/debian/sysvinit-deb/test index c52706fc7..d83fa8ad0 100644 --- a/src/sbt-test/debian/sysvinit-deb/test +++ b/src/sbt-test/debian/sysvinit-deb/test @@ -7,4 +7,11 @@ $ 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 \ No newline at end of file +> check-startup-script +> check-autostart + +# Test that serviceAutostart can be disabled + +> set every NativePackagerKeys.serviceAutostart := false +> debian:package-bin +> check-no-autostart \ No newline at end of file diff --git a/src/sbt-test/debian/upstart-deb/build.sbt b/src/sbt-test/debian/upstart-deb/build.sbt index 1bab90afa..65d7db914 100644 --- a/src/sbt-test/debian/upstart-deb/build.sbt +++ b/src/sbt-test/debian/upstart-deb/build.sbt @@ -46,3 +46,21 @@ TaskKey[Unit]("check-startup-script") <<= (target, streams) map { (target, out) assert(script contains "[ -d /var/run/debian-test ] || install -m 755 -o root -g app-group -d /var/run/debian-test", "Script is missing /var/run dir install\n" + script) () } + +TaskKey[Unit]("check-autostart") <<= (target, streams) map { (target, out) => + val script = IO.read(target / "debian-test-0.1.0" / "DEBIAN" / "postinst") + assert(script.contains( + """addService debian-test || echo "debian-test could not be registered" + |startService debian-test || echo "debian-test could not be started" + |""".stripMargin), "addService, startService post install commands missing or incorrect") + () +} + +TaskKey[Unit]("check-no-autostart") <<= (target, streams) map { (target, out) => + val script = IO.read(target / "debian-test-0.1.0" / "DEBIAN" / "postinst") + assert(script.contains( + """addService debian-test || echo "debian-test could not be registered" + |""".stripMargin), "addService post install commands missing or incorrect") + () +} + diff --git a/src/sbt-test/debian/upstart-deb/test b/src/sbt-test/debian/upstart-deb/test index e2e350b2a..2e520c9f9 100644 --- a/src/sbt-test/debian/upstart-deb/test +++ b/src/sbt-test/debian/upstart-deb/test @@ -14,3 +14,11 @@ $ exists target/debian-test-0.1.0/DEBIAN/postinst > check-control-files > check-softlink target/debian-test-0.1.0/usr/bin/debian-test points to /usr/share/debian-test/bin/debian-test > check-startup-script +> check-autostart + + +# Test that serviceAutostart can be disabled + +> set every NativePackagerKeys.serviceAutostart := false +> debian:package-bin +> check-no-autostart \ No newline at end of file diff --git a/src/sbt-test/rpm/systemd-rpm/build.sbt b/src/sbt-test/rpm/systemd-rpm/build.sbt index 11d601b5a..3f51a889a 100644 --- a/src/sbt-test/rpm/systemd-rpm/build.sbt +++ b/src/sbt-test/rpm/systemd-rpm/build.sbt @@ -37,10 +37,10 @@ TaskKey[Unit]("checkSpecFile") <<= (target, streams) map { (target, out) => assert(spec contains """ |# - |# Adding service to autostart + |# Adding service for management |# $1 = service name |# - |startService() { + |addService() { | app_name=$1 | | app_sys_config="/etc/sysconfig/${app_name}" @@ -54,9 +54,20 @@ TaskKey[Unit]("checkSpecFile") <<= (target, streams) map { (target, out) => | fi | | systemctl enable "$app_name.service" + |} + |""".stripMargin, "rpm addService() scriptlet is missing or incorrect") + + assert(spec contains + """ + |# + |# Start the service + |# $1 = service name + |# + |startService() { + | app_name=$1 | systemctl start "$app_name.service" |} - |""".stripMargin, "rpm scriptlet does not systemd service registration and startup") + |""".stripMargin, "rpm startService() scriptlet is missing or incorrect") assert(spec contains """ @@ -71,7 +82,7 @@ TaskKey[Unit]("checkSpecFile") <<= (target, streams) map { (target, out) => | systemctl stop "$app_name.service" | systemctl disable "$app_name.service" |} - |""".stripMargin, "rpm scriptlet does not systemd stop service and disable") + |""".stripMargin, "rpm stopService() scriptlet is missing or incorrect") assert(spec contains """ @@ -85,8 +96,43 @@ TaskKey[Unit]("checkSpecFile") <<= (target, streams) map { (target, out) => | systemctl daemon-reload | systemctl try-restart "$app_name.service" |} - |""".stripMargin, "rpm scriptlet does not systemd reload during restart") + |""".stripMargin, "rpm restartService() scriptlet is missing or incorrect") out.log.success("Successfully tested rpm test file") () } + +TaskKey[Unit]("check-spec-autostart") <<= (target, streams) map { (target, out) => + val spec = IO.read(target / "rpm" / "SPECS" / "rpm-test.spec") + println(spec) + + assert(spec contains + """ + |# Scriptlet syntax: http://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Syntax + |# $1 == 1 is first installation and $1 == 2 is upgrade + |if [ $1 -eq 1 ] ; + |then + | addService rpm-test || echo "rpm-test could not be registered" + | startService rpm-test || echo "rpm-test could not be started" + |fi + |""".stripMargin, "rpm addService, startService post install commands missing or incorrect") + () +} + + +TaskKey[Unit]("check-spec-no-autostart") <<= (target, streams) map { (target, out) => + val spec = IO.read(target / "rpm" / "SPECS" / "rpm-test.spec") + println(spec) + + assert(spec contains + """ + |# Scriptlet syntax: http://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Syntax + |# $1 == 1 is first installation and $1 == 2 is upgrade + |if [ $1 -eq 1 ] ; + |then + | addService rpm-test || echo "rpm-test could not be registered" + |fi + |""".stripMargin, "rpm addService post install commands missing or incorrect") + () +} + diff --git a/src/sbt-test/rpm/systemd-rpm/test b/src/sbt-test/rpm/systemd-rpm/test index 6eaecadd7..120ba89c6 100644 --- a/src/sbt-test/rpm/systemd-rpm/test +++ b/src/sbt-test/rpm/systemd-rpm/test @@ -1,4 +1,4 @@ -# Run the debian packaging. +# Run the rpm packaging. > rpm:packageBin $ exists target/rpm/RPMS/noarch/rpm-test-0.1.0-1.noarch.rpm @@ -8,3 +8,12 @@ $ exists usr/lib/systemd/system/rpm-test.service > checkStartupScript > checkSpecFile +> check-spec-autostart + + +# test that autostart can be disabled + +> set every NativePackagerKeys.serviceAutostart := false +> rpm:packageBin +> checkSpecFile +> check-spec-no-autostart diff --git a/src/sbt-test/rpm/sysvinit-rpm/build.sbt b/src/sbt-test/rpm/sysvinit-rpm/build.sbt index e641daf5b..920b17df2 100644 --- a/src/sbt-test/rpm/sysvinit-rpm/build.sbt +++ b/src/sbt-test/rpm/sysvinit-rpm/build.sbt @@ -40,6 +40,7 @@ TaskKey[Unit]("unzipAndCheck") <<= (baseDirectory, packageBin in Rpm, streams) m TaskKey[Unit]("check-spec-file") <<= (target, streams) map { (target, out) => val spec = IO.read(target / "rpm" / "SPECS" / "rpm-test.spec") + println(spec) assert(spec contains "addGroup rpm-test", "addGroup not present in \n" + spec) assert(spec contains "addUser rpm-test", "Incorrect useradd command in \n" + spec) assert(spec contains "deleteGroup rpm-test", "deleteGroup not present in \n" + spec) @@ -56,5 +57,102 @@ TaskKey[Unit]("check-spec-file") <<= (target, streams) map { (target, out) => | echo "PACKAGE_PREFIX=${RPM_INSTALL_PREFIX}" >> /etc/sysconfig/rpm-test |fi |""".stripMargin, "Persisting $RPM_INSTALL_PREFIX not present in \n" + spec) + assert(spec contains + """ + |# + |# Add service for management + |# $1 = service name + |# + |addService() { + | app_name=$1 + | if hash update-rc.d >/dev/null 2>&1; then + | echo "Adding $app_name to service management using update-rc.d" + | update-rc.d $app_name defaults + | elif hash chkconfig >/dev/null 2>&1; then + | echo "Adding $app_name to service management using chkconfig" + | chkconfig --add rpm-test + | chkconfig $app_name on + | else + | echo "WARNING: Could not add $app_name to autostart: neither update-rc nor chkconfig found!" + | fi + |} + |""".stripMargin, "rpm addService() scriptlet missing or incorrect") + assert(spec contains + """ + |# + |# Start the service + |# $1 = service name + |# + |startService() { + | app_name=$1 + | service $app_name start + |} + |""".stripMargin, "rpm startService() scriptlet is missing or incorrect") + assert(spec contains + """ + |# + |# Removing service from autostart + |# $1 = service name + |# + |stopService() { + | app_name=$1 + | if hash update-rc.d >/dev/null 2>&1; then + | echo "Removing $app_name from autostart using update-rc.d" + | update-rc.d -f $app_name remove + | service $app_name stop + | elif hash chkconfig >/dev/null 2>&1; then + | echo "Removing $app_name from autostart using chkconfig" + | chkconfig $app_name off + | chkconfig --del $app_name + | service $app_name stop + | else + | echo "WARNING: Could not remove $app_name from autostart: neither update-rc nor chkconfig found!" + | fi + |} + |""".stripMargin, "rpm stopService() scriptlet is missing or incorrect") + assert(spec contains + """ + |# + |# Restarting the service after package upgrade + |# $1 = service name + |# + |restartService() { + | app_name=$1 + | service $app_name restart + |} + |""".stripMargin, "rpm restartService() scriptlet is missing or incorrect") + () +} + +TaskKey[Unit]("check-spec-autostart") <<= (target, streams) map { (target, out) => + val spec = IO.read(target / "rpm" / "SPECS" / "rpm-test.spec") + println(spec) + assert(spec contains + """ + |# Scriptlet syntax: http://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Syntax + |# $1 == 1 is first installation and $1 == 2 is upgrade + |if [ $1 -eq 1 ] ; + |then + | addService rpm-test || echo "rpm-test could not be registered" + | startService rpm-test || echo "rpm-test could not be started" + |fi + |""".stripMargin, "rpm rpm addService, startService post install commands missing or incorrect") + + () +} + +TaskKey[Unit]("check-spec-no-autostart") <<= (target, streams) map { (target, out) => + val spec = IO.read(target / "rpm" / "SPECS" / "rpm-test.spec") + println(spec) + assert(spec contains + """ + |# Scriptlet syntax: http://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Syntax + |# $1 == 1 is first installation and $1 == 2 is upgrade + |if [ $1 -eq 1 ] ; + |then + | addService rpm-test || echo "rpm-test could not be registered" + |fi + |""".stripMargin, "rpm rpm addService, startService post install commands missing or incorrect") + () } diff --git a/src/sbt-test/rpm/sysvinit-rpm/test b/src/sbt-test/rpm/sysvinit-rpm/test index 8fbb764c2..05e6596fb 100644 --- a/src/sbt-test/rpm/sysvinit-rpm/test +++ b/src/sbt-test/rpm/sysvinit-rpm/test @@ -1,8 +1,9 @@ -# Run the debian packaging. +# Run the rpm packaging. > rpm:package-bin $ exists target/rpm/RPMS/noarch/rpm-test-0.1.0-1.noarch.rpm > check-spec-file +> check-spec-autostart # Check rpm contents > unzipAndCheck @@ -24,3 +25,11 @@ $ exists var/run/rpm-test > set NativePackagerKeys.rpmBrpJavaRepackJars := true > check-spec-file +> check-spec-autostart + +# Test that serviceAutostart can be disabled + +> set every NativePackagerKeys.serviceAutostart := false +> rpm:package-bin +> check-spec-file +> check-spec-no-autostart \ No newline at end of file diff --git a/src/sphinx/archetypes/systemloaders.rst b/src/sphinx/archetypes/systemloaders.rst index 9fbf8c3a9..8be24f5b6 100644 --- a/src/sphinx/archetypes/systemloaders.rst +++ b/src/sphinx/archetypes/systemloaders.rst @@ -22,6 +22,9 @@ General Settings Loading system to be used for application start script (SystemV, Upstart, Systemd). This setting can be used to trigger systemloader specific behaviour in your build. + ``serverAutostart`` + Determines if service will be automatically started after installation. The default value is true. + ``startRunlevels`` Sequence of runlevels on which application will start up