Search code examples
scalasbtsbt-native-packager

Overriding archetype templates in sbt-native-packager?


The start-rpm-template does not work with SLES 11 SP3.

Reason: Init.d/functions are not available

# Source function library.

. /etc/rc.d/init.d/functions

On SLES the functions are here:

/lib/lsb/init-functions

How can a project provide its own Archetype templates?


Solution

  • From src/main/scala/com/typesafe/sbt/packager/linux/Keys:

    val linuxMakeStartScript = TaskKey[Option[File]]("makeStartScript", "Creates or discovers the start script used by this project")
    val linuxStartScriptTemplate = TaskKey[URL]("linuxStartScriptTemplate", "The location of the template start script file we use for debian (upstart or init.d")
    val linuxEtcDefaultTemplate = TaskKey[URL]("linuxEtcDefaultTemplate", "The location of the /etc/default/<pkg> template script.")
    val linuxJavaAppStartScriptBuilder = SettingKey[JavaAppStartScriptBuilder]("linuxJavaAppStartScriptBuilder", "Responsible for loading the start scripts. Only used with archetype.java_server")
    val linuxScriptReplacements = SettingKey[Seq[(String, String)]]("linuxScriptReplacements",
      """|Replacements of template parameters used in linux scripts.
           |  Default supported templates:
           |  execScript - name of the script in /usr/bin
           |  author - author of this project
           |  descr - short description
           |  chdir - execution path of the script
           |  retries - on fail, how often should a restart be tried
           |  retryTimeout - pause between retries
           |  appName - name of application
           |  appClasspath - application classpath
           |  appMainClass - main class to start
           |  daemonUser - daemon user
        """.stripMargin)
    

    I would use linuxMakeStartScript or linuxStartScriptTemplate or linuxScriptReplacements.