Skip to content

Commit

Permalink
RPM and Debian are now working
Browse files Browse the repository at this point in the history
  • Loading branch information
muuki88 committed May 12, 2016
1 parent 9c4e12e commit ff9c318
Show file tree
Hide file tree
Showing 10 changed files with 58 additions and 39 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import com.typesafe.sbt.packager.archetypes.systemloader.ServerLoader
*
* This doesn't create the best of distributions, but it can simplify the distribution of code.
*
* **NOTE: EXPERIMENTAL** This currently only supports debian upstart scripts.
*/
object JavaServerAppPackaging extends AutoPlugin {
import ServerLoader._
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ trait MaintainerScriptHelper {
* import RpmConstants._
* maintainerScripts in Rpm := maintainerScriptsAppend((maintainerScripts in Rpm).value)(
* Pretrans -> "echo 'hello, world'",
* Post -> s"echo 'installing ${(packageName in Rpm).value}'"
* Post -> "echo 'installing " + (packageName in Rpm).value + "'"
* )
* }}}
*
Expand All @@ -59,7 +59,7 @@ trait MaintainerScriptHelper {
*
*
* @param current maintainer scripts
* @param replacements (e.g. (linuxScriptReplacements in Debian).value
* @param replacements (e.g. (linuxScriptReplacements in Debian).value)
* @param scripts scriptName -> scriptContent pairs
* @return maintainerScripts with appended `scripts`
* @see [[maintainerScriptsAppendFromFile]]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ package com.typesafe.sbt.packager.archetypes
* val replacements = Seq("name" -> "your-app", "custom" -> "1")
* TemplateWriter.generateScript(template, replacements, "\r\n", TemplateWriter.batFriendlyKeySurround)
* }}}
*
* TODO move out of archetypes package
*/
object TemplateWriter {
def defaultCharset: java.nio.charset.Charset = java.nio.charset.Charset.forName("UTF-8")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,14 @@ object SystemdPlugin extends AutoPlugin {
requiredStartFacilities := Some("network.target"),
requiredStopFacilities := Some("network.target"),
defaultLinuxStartScriptLocation := "/usr/lib/systemd/system",
linuxStartScriptName := Some(packageName.value + ".service")
linuxStartScriptName := Some(packageName.value + ".service"),
// add systemloader to mappings
linuxPackageMappings ++= startScriptMapping(
linuxStartScriptName.value,
linuxMakeStartScript.value,
defaultLinuxStartScriptLocation.value,
isConf = true
)
)


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,6 @@ object SystemloaderPlugin extends AutoPlugin {
(target in Universal).value,
defaultLinuxStartScriptLocation.value,
linuxStartScriptName.value.getOrElse(sys.error("`linuxStartScriptName` is not defined"))
),
// add systemloader to mappings
linuxPackageMappings ++= startScriptMapping(
linuxStartScriptName.value,
linuxMakeStartScript.value,
defaultLinuxStartScriptLocation.value,
isConf = true
)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.typesafe.sbt.packager.Keys.{
linuxStartScriptName,
linuxStartScriptTemplate,
linuxMakeStartScript,
linuxPackageMappings,
defaultLinuxStartScriptLocation,
requiredStartFacilities,
requiredStopFacilities,
Expand Down Expand Up @@ -37,7 +38,14 @@ object UpstartPlugin extends AutoPlugin {
requiredStartFacilities := None,
requiredStopFacilities := None,
defaultLinuxStartScriptLocation := "/etc/init",
linuxStartScriptName := Some(packageName.value + ".conf")
linuxStartScriptName := Some(packageName.value + ".conf"),
// add systemloader to mappings
linuxPackageMappings ++= startScriptMapping(
linuxStartScriptName.value,
linuxMakeStartScript.value,
defaultLinuxStartScriptLocation.value,
isConf = true
)
)

}
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,10 @@ package object systemloader {
sys.error("""No linuxStartScriptName defined. Add `linuxStartScriptName in <PackageFormat> := Some("name.service")""")
)
val path = location + "/" + name
val perms = if (isConf) "0644" else "0755"
for {
s <- script.toSeq
} yield LinuxPackageMapping(Seq(s -> path), LinuxFileMetaData(Users.Root, Users.Root, "0644", isConf.toString))
} yield LinuxPackageMapping(Seq(s -> path), LinuxFileMetaData(Users.Root, Users.Root, perms, isConf.toString))
}

private def in(loader: ServerLoader, name: String): String = loader.toString + "/" + name
Expand Down
28 changes: 19 additions & 9 deletions src/main/scala/com/typesafe/sbt/packager/rpm/RpmMetadata.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ package rpm
import sbt._
import com.typesafe.sbt.packager.linux.{ LinuxPlugin, LinuxPackageMapping, LinuxFileMetaData, LinuxSymlink }
import com.typesafe.sbt.packager.rpm.RpmPlugin.Names._
import com.typesafe.sbt.packager.archetypes.TemplateWriter
import java.io.File

case class RpmMetadata(
Expand Down Expand Up @@ -108,15 +109,24 @@ case class RpmScripts(

object RpmScripts {

def fromMaintainerScripts(maintainerScripts: Map[String, Seq[String]] = Map()): RpmScripts = RpmScripts(
pretrans = maintainerScripts.get(Pretrans).map(_.mkString("\n")),
pre = maintainerScripts.get(Pre).map(_.mkString("\n")),
post = maintainerScripts.get(Post).map(_.mkString("\n")),
verifyscript = maintainerScripts.get(Verifyscript).map(_.mkString("\n")),
posttrans = maintainerScripts.get(Posttrans).map(_.mkString("\n")),
preun = maintainerScripts.get(Preun).map(_.mkString("\n")),
postun = maintainerScripts.get(Postun).map(_.mkString("\n"))
)
def fromMaintainerScripts(
maintainerScripts: Map[String, Seq[String]],
replacements: Seq[(String, String)]): RpmScripts = {
val toContent = toContentWith(replacements) _
RpmScripts(
pretrans = maintainerScripts.get(Pretrans).map(toContent),
pre = maintainerScripts.get(Pre).map(toContent),
post = maintainerScripts.get(Post).map(toContent),
verifyscript = maintainerScripts.get(Verifyscript).map(toContent),
posttrans = maintainerScripts.get(Posttrans).map(toContent),
preun = maintainerScripts.get(Preun).map(toContent),
postun = maintainerScripts.get(Postun).map(toContent)
)
}

// insert replacements
private def toContentWith(replacements: Seq[(String, String)])(lines: Seq[String]): String =
TemplateWriter.generateScriptFromLines(lines, replacements).mkString("\n")

}

Expand Down
32 changes: 15 additions & 17 deletions src/main/scala/com/typesafe/sbt/packager/rpm/RpmPlugin.scala
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package com.typesafe.sbt
package packager
package rpm
package com.typesafe.sbt.packager.rpm

import sbt._
import linux._
import sbt.Keys.{ name, version, sourceDirectory, target, packageBin, streams }
import java.nio.charset.Charset
import SbtNativePackager.Linux

import sbt.Keys.{ name, version, sourceDirectory, target, packageBin, streams }
import linux.LinuxPlugin.autoImport.{ linuxPackageMappings, linuxPackageSymlinks, packageArchitecture }
import packager.Keys._
import com.typesafe.sbt.SbtNativePackager.Linux
import com.typesafe.sbt.packager.SettingsHelper
import com.typesafe.sbt.packager.Keys._
import com.typesafe.sbt.packager.linux._

/**
* Plugin containing all generic values used for packaging rpms.
Expand Down Expand Up @@ -107,16 +105,16 @@ object RpmPlugin extends AutoPlugin {
rpmDependencies <<=
(rpmProvides, rpmRequirements, rpmPrerequisites, rpmObsoletes, rpmConflicts) apply RpmDependencies,
maintainerScripts := {
val scripts = maintainerScripts.value
if (rpmBrpJavaRepackJars.value) {
val pre = scripts.getOrElse(Names.Pre, Nil)
val scriptBits = IO.readStream(RpmPlugin.osPostInstallMacro.openStream, Charset forName "UTF-8")
scripts + (Names.Pre -> (pre :+ scriptBits))
} else {
scripts
}
val scripts = maintainerScripts.value
if (rpmBrpJavaRepackJars.value) {
val pre = scripts.getOrElse(Names.Pre, Nil)
val scriptBits = IO.readStream(RpmPlugin.osPostInstallMacro.openStream, Charset forName "UTF-8")
scripts + (Names.Pre -> (pre :+ scriptBits))
} else {
scripts
}
},
rpmScripts := RpmScripts.fromMaintainerScripts(maintainerScripts.value),
rpmScripts := RpmScripts.fromMaintainerScripts(maintainerScripts.value, linuxScriptReplacements.value),
rpmSpecConfig <<=
(rpmMetadata, rpmDescription, rpmDependencies, rpmScripts, linuxPackageMappings, linuxPackageSymlinks, defaultLinuxInstallLocation) map RpmSpec,
packageBin <<= (rpmSpecConfig, target, streams) map { (spec, dir, s) =>
Expand Down
1 change: 1 addition & 0 deletions src/sbt-test/rpm/systemd-rpm/build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ TaskKey[Unit]("checkStartupScript") <<= (target, streams) map { (target, out) =>

TaskKey[Unit]("checkSpecFile") <<= (target, streams) map { (target, out) =>
val spec = IO.read(target / "rpm" / "SPECS" / "rpm-test.spec")
println(spec)
assert(spec contains
"""
|#
Expand Down

0 comments on commit ff9c318

Please sign in to comment.