Skip to content

Commit 64472cb

Browse files
committed
New setting daemonShell. Used in debian package to create user with
specified shell. FIX #235
1 parent a375e78 commit 64472cb

File tree

9 files changed

+62
-12
lines changed

9 files changed

+62
-12
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Adding ${{user}}
22
if ! id -u ${{user}} > /dev/null 2>&1; then
33
echo "Creating user ${{user}} in group ${{group}}"
4-
useradd --system --no-create-home --gid ${{group}} --shell /bin/false ${{user}}
4+
useradd --system --no-create-home --gid ${{group}} --shell ${{shell}} ${{user}}
55
fi

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

+3-1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ trait JavaAppStartScriptBuilder {
8888
appName: String,
8989
daemonUser: String,
9090
daemonGroup: String,
91+
daemonShell: String,
9192
retries: Int = 0,
9293
retryTimeout: Int = 60): Seq[(String, String)] =
9394
Seq(
@@ -99,7 +100,8 @@ trait JavaAppStartScriptBuilder {
99100
"retryTimeout" -> retryTimeout.toString,
100101
"app_name" -> appName,
101102
"daemon_user" -> daemonUser,
102-
"daemon_group" -> daemonGroup)
103+
"daemon_group" -> daemonGroup,
104+
"daemon_shell" -> daemonShell)
103105
}
104106

105107
/**

src/main/scala/com/typesafe/sbt/packager/debian/DebianPlugin.scala

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Keys._
66
import sbt._
77
import sbt.Keys.{ target, name, normalizedName, TaskStreams }
88
import linux.{ LinuxFileMetaData, LinuxPackageMapping, LinuxSymlink }
9-
import linux.Keys.{ linuxScriptReplacements }
9+
import linux.Keys.{ linuxScriptReplacements, daemonShell }
1010
import com.typesafe.sbt.packager.Hashing
1111
import com.typesafe.sbt.packager.archetypes.TemplateWriter
1212

@@ -145,8 +145,8 @@ trait DebianPlugin extends Plugin with linux.LinuxPlugin {
145145
chmod(cfile, "0644")
146146
cfile
147147
},
148-
debianExplodedPackage <<= (linuxPackageMappings, debianControlFile, debianMaintainerScripts, debianConffilesFile, linuxScriptReplacements, linuxPackageSymlinks, target, streams)
149-
map { (mappings, _, maintScripts, _, replacements, symlinks, t, streams) =>
148+
debianExplodedPackage <<= (linuxPackageMappings, debianControlFile, debianMaintainerScripts, debianConffilesFile, daemonShell in Linux, linuxScriptReplacements, linuxPackageSymlinks, target, streams)
149+
map { (mappings, _, maintScripts, _, shell, replacements, symlinks, t, streams) =>
150150

151151
// Create files and directories
152152
mappings foreach {
@@ -191,7 +191,7 @@ trait DebianPlugin extends Plugin with linux.LinuxPlugin {
191191
val prerm = createFileIfRequired(t / Names.Debian / Names.Prerm, LinuxFileMetaData())
192192
val headerScript = IO.readLinesURL(DebianPlugin.headerSource)
193193

194-
val replacements = Seq("group" -> group, "user" -> user)
194+
val replacements = Seq("group" -> group, "user" -> user, "shell" -> shell)
195195

196196
prependAndFixPerms(prerm, headerScript, LinuxFileMetaData())
197197

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

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ trait Keys {
1414
val maintainer = SettingKey[String]("maintainer", "The name/email address of a maintainer for the native package.")
1515
val daemonUser = SettingKey[String]("daemon-user", "User to start application daemon")
1616
val daemonGroup = SettingKey[String]("daemon-group", "Group to start application daemon")
17+
val daemonShell = SettingKey[String]("daemon-shell", "Shell provided for the daemon user")
1718
val serverLoading = SettingKey[ServerLoader]("server-loader", "Loading system to be used for application start script")
1819
val linuxPackageMappings = TaskKey[Seq[LinuxPackageMapping]]("linux-package-mappings", "File to install location mappings including owner and privileges.")
1920
val linuxPackageSymlinks = TaskKey[Seq[LinuxSymlink]]("linux-package-symlinks", "Symlinks we should produce in the underlying package.")

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

+5-3
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,16 @@ trait LinuxPlugin extends Plugin {
3636
packageDescription in Linux <<= packageDescription,
3737
daemonUser in Linux <<= normalizedName,
3838
daemonGroup in Linux <<= daemonUser in Linux,
39+
daemonShell in Linux := "bin/false",
3940
defaultLinuxInstallLocation := "/usr/share",
4041
defaultLinuxLogsLocation := "/var/log",
4142
defaultLinuxConfigLocation := "/etc",
4243

4344
// This one is begging for sbt 0.13 syntax...
4445
linuxScriptReplacements <<= (
45-
maintainer in Linux, packageSummary in Linux, daemonUser in Linux, daemonGroup in Linux, normalizedName,
46+
maintainer in Linux, packageSummary in Linux, daemonUser in Linux, daemonGroup in Linux, daemonShell in Linux, normalizedName,
4647
sbt.Keys.version, defaultLinuxInstallLocation)
47-
apply { (author, descr, daemonUser, daemonGroup, name, version, installLocation) =>
48+
apply { (author, descr, daemonUser, daemonGroup, daemonShell, name, version, installLocation) =>
4849
val appDir = installLocation + "/" + name
4950

5051
// TODO Making replacements should be done somewhere else. Maybe TemplateWriter
@@ -55,7 +56,8 @@ trait LinuxPlugin extends Plugin {
5556
chdir = appDir,
5657
appName = name,
5758
daemonUser = daemonUser,
58-
daemonGroup = daemonGroup)
59+
daemonGroup = daemonGroup,
60+
daemonShell = daemonShell)
5961
}
6062

6163
)

src/main/scala/com/typesafe/sbt/packager/rpm/RpmHelper.scala

+3-3
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ object RpmHelper {
8080
"--define", "_topdir " + workArea.getAbsolutePath,
8181
"--define", "_tmppath " + tmpRpmBuildDir.getAbsolutePath
8282
) ++ (
83-
if (gpg) Seq("--define", "_gpg_name " + "<insert keyname>", "--sign")
84-
else Seq.empty
85-
) ++ Seq(spec.meta.name + ".spec")
83+
if (gpg) Seq("--define", "_gpg_name " + "<insert keyname>", "--sign")
84+
else Seq.empty
85+
) ++ Seq(spec.meta.name + ".spec")
8686
log.debug("Executing rpmbuild with: " + args.mkString(" "))
8787
(Process(args, Some(specsDir)) ! log) match {
8888
case 0 => ()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import NativePackagerKeys._
2+
import com.typesafe.sbt.packager.archetypes.ServerLoader
3+
4+
packageArchetype.java_server
5+
6+
serverLoading in Debian := ServerLoader.Upstart
7+
8+
daemonUser in Linux := "daemonuser"
9+
10+
daemonGroup in Linux := "daemongroup"
11+
12+
daemonShell in Linux := "/bin/bash"
13+
14+
mainClass in Compile := Some("empty")
15+
16+
name := "debian-test"
17+
18+
version := "0.1.0"
19+
20+
maintainer := "Josh Suereth <[email protected]>"
21+
22+
packageSummary := "Test debian package"
23+
24+
packageDescription := """A fun package description of our software,
25+
with multiple lines."""
26+
27+
TaskKey[Unit]("check-control-files") <<= (target, streams) map { (target, out) =>
28+
val debian = target / "debian-test-0.1.0" / "DEBIAN"
29+
val postinst = IO.read(debian / "postinst")
30+
val postrm = IO.read(debian / "postrm")
31+
assert(postinst contains "useradd --system --no-create-home --gid daemongroup --shell /bin/bash daemonuser", "postinst misses useradd for daemonuser: " + postinst)
32+
()
33+
}
34+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % sys.props("project.version"))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# Run the debian packaging.
2+
> debian:package-bin
3+
$ exists target/debian-test-0.1.0.deb
4+
5+
# Check defaults
6+
$ exists target/debian-test-0.1.0/DEBIAN/prerm
7+
$ exists target/debian-test-0.1.0/DEBIAN/postinst
8+
9+
# Check files for defaults
10+
> check-control-files

0 commit comments

Comments
 (0)