@@ -16,6 +16,7 @@ trait DebianPlugin extends Plugin with linux.LinuxPlugin {
16
16
val Debian = config(" debian" ) extend Linux
17
17
18
18
import com .typesafe .sbt .packager .universal .Archives
19
+ import DebianPlugin .Names
19
20
20
21
private [this ] final def copyAndFixPerms (from : File , to : File , perms : LinuxFileMetaData , zipped : Boolean = false ): Unit = {
21
22
if (zipped) {
@@ -39,6 +40,15 @@ trait DebianPlugin extends Plugin with linux.LinuxPlugin {
39
40
script
40
41
}
41
42
43
+
44
+ private [this ] def prependAndFixPerms (script : File , lines : Seq [String ], perms : LinuxFileMetaData ): File = {
45
+ val old = IO .readLines(script)
46
+ IO .writeLines(script, lines ++ old, append = false )
47
+ chmod(script, perms.permissions)
48
+ script
49
+ }
50
+
51
+
42
52
private [this ] def scriptMapping (scriptName : String )(script : Option [File ], controlDir : File ): Seq [(File , String )] = {
43
53
(script, controlDir) match {
44
54
// check if user defined script exists
@@ -67,17 +77,17 @@ trait DebianPlugin extends Plugin with linux.LinuxPlugin {
67
77
// Debian Control Scripts
68
78
debianControlScriptsReplacements <<= (maintainer in Debian , packageSummary in Debian , normalizedName, version) apply DebianControlScriptReplacements ,
69
79
70
- debianControlScriptsDirectory <<= (sourceDirectory) apply (_ / " debian" / " DEBIAN " ),
80
+ debianControlScriptsDirectory <<= (sourceDirectory) apply (_ / " debian" / Names . Debian ),
71
81
debianMaintainerScripts := Seq .empty,
72
82
debianMakePreinstScript := None ,
73
83
debianMakePrermScript := None ,
74
84
debianMakePostinstScript := None ,
75
85
debianMakePostrmScript := None ,
76
86
77
- debianMaintainerScripts <++= (debianMakePrermScript, debianControlScriptsDirectory) map scriptMapping(" prerm " ),
78
- debianMaintainerScripts <++= (debianMakePreinstScript, debianControlScriptsDirectory) map scriptMapping(" preinst " ),
79
- debianMaintainerScripts <++= (debianMakePostinstScript, debianControlScriptsDirectory) map scriptMapping(" postinst " ),
80
- debianMaintainerScripts <++= (debianMakePostrmScript, debianControlScriptsDirectory) map scriptMapping(" postrm " )) ++ inConfig(Debian )(Seq (
87
+ debianMaintainerScripts <++= (debianMakePrermScript, debianControlScriptsDirectory) map scriptMapping(Names . Prerm ),
88
+ debianMaintainerScripts <++= (debianMakePreinstScript, debianControlScriptsDirectory) map scriptMapping(Names . Preinst ),
89
+ debianMaintainerScripts <++= (debianMakePostinstScript, debianControlScriptsDirectory) map scriptMapping(Names . Postinst ),
90
+ debianMaintainerScripts <++= (debianMakePostrmScript, debianControlScriptsDirectory) map scriptMapping(Names . Postrm )) ++ inConfig(Debian )(Seq (
81
91
packageArchitecture := " all" ,
82
92
debianPackageInfo <<=
83
93
(name, version, maintainer, packageSummary, packageDescription) apply PackageInfo ,
@@ -95,14 +105,14 @@ trait DebianPlugin extends Plugin with linux.LinuxPlugin {
95
105
},
96
106
debianControlFile <<= (debianPackageMetadata, debianPackageInstallSize, target) map {
97
107
(data, size, dir) =>
98
- val cfile = dir / " DEBIAN " / " control "
108
+ val cfile = dir / Names . Debian / Names . Control
99
109
IO .write(cfile, data.makeContent(size), java.nio.charset.Charset .defaultCharset)
100
110
chmod(cfile, " 0644" )
101
111
cfile
102
112
},
103
113
debianConffilesFile <<= (linuxPackageMappings, target) map {
104
114
(mappings, dir) =>
105
- val cfile = dir / " DEBIAN " / " conffiles "
115
+ val cfile = dir / Names . Debian / Names . Conffiles
106
116
val conffiles = for {
107
117
LinuxPackageMapping (files, meta, _) <- mappings
108
118
if meta.config != " false"
@@ -139,7 +149,7 @@ trait DebianPlugin extends Plugin with linux.LinuxPlugin {
139
149
// Put the maintainer files in `dir / "DEBIAN"` named as specified.
140
150
// Valid values for the name are preinst,postinst,prerm,postrm
141
151
for ((file, name) <- maintScripts) {
142
- val targetFile = t / " DEBIAN " / name
152
+ val targetFile = t / Names . Debian / name
143
153
copyAndFixPerms(file, targetFile, LinuxFileMetaData ())
144
154
filterAndFixPerms(targetFile, replacements, LinuxFileMetaData ())
145
155
}
@@ -154,31 +164,38 @@ trait DebianPlugin extends Plugin with linux.LinuxPlugin {
154
164
} groupBy (_._1) foreach {
155
165
case ((user, group), pathList) =>
156
166
streams.log info (" Altering postrm/postinst files to add user " + user + " and group " + group)
157
- val postinst = t / " DEBIAN " / " postinst "
158
- val postrm = t / " DEBIAN " / " postrm "
167
+ val postinst = t / Names . Debian / Names . Postinst
168
+ val postrm = t / Names . Debian / Names . Postrm
159
169
160
170
val replacements = Seq (" group" -> group, " user" -> user)
161
- IO .append(postinst, TemplateWriter .generateScript(DebianPlugin .postinstGroupaddTemplateSource, replacements))
162
- IO .append(postinst, TemplateWriter .generateScript(DebianPlugin .postinstUseraddTemplateSource, replacements))
171
+
172
+ val userGroupAdd = Seq (
173
+ TemplateWriter .generateScript(DebianPlugin .postinstGroupaddTemplateSource, replacements),
174
+ TemplateWriter .generateScript(DebianPlugin .postinstUseraddTemplateSource, replacements)
175
+ )
176
+
177
+ prependAndFixPerms(postinst, userGroupAdd, LinuxFileMetaData ())
163
178
164
179
// remove key, flatten it and then go through each file
165
180
pathList.map(_._2).flatten foreach {
166
181
case (_, target) =>
167
182
val pathReplacements = replacements :+ (" path" -> target.toString)
168
- IO .append(postinst, TemplateWriter .generateScript(DebianPlugin .postinstChownTemplateSource, pathReplacements))
183
+ val chownAdd = Seq (TemplateWriter .generateScript(DebianPlugin .postinstChownTemplateSource, pathReplacements))
184
+ prependAndFixPerms(postinst, chownAdd, LinuxFileMetaData ())
169
185
}
170
186
171
- IO .append(postrm, TemplateWriter .generateScript(DebianPlugin .postrmPurgeTemplateSource, replacements))
187
+ val purgeAdd = Seq (TemplateWriter .generateScript(DebianPlugin .postrmPurgeTemplateSource, replacements))
188
+ prependAndFixPerms(postrm, purgeAdd, LinuxFileMetaData ())
172
189
}
173
190
t
174
191
},
175
192
debianMD5sumsFile <<= (debianExplodedPackage, target) map {
176
193
(mappings, dir) =>
177
- val md5file = dir / " DEBIAN " / " md5sums"
194
+ val md5file = dir / Names . Debian / " md5sums"
178
195
val md5sums = for {
179
196
(file, name) <- (dir.*** --- dir x relativeTo(dir))
180
197
if file.isFile
181
- if ! (name startsWith " DEBIAN " )
198
+ if ! (name startsWith Names . Debian )
182
199
if ! (name contains " debian-binary" )
183
200
// TODO - detect symlinks with Java7 (when we can) rather than hackery...
184
201
if file.getCanonicalPath == file.getAbsolutePath
@@ -210,6 +227,20 @@ trait DebianPlugin extends Plugin with linux.LinuxPlugin {
210
227
}
211
228
212
229
object DebianPlugin {
230
+ object Names {
231
+ val Debian = " DEBIAN"
232
+
233
+ // maintainer script names
234
+ val Postinst = " postinst"
235
+ val Postrm = " postrm"
236
+ val Prerm = " prerm"
237
+ val Preinst = " preinst"
238
+
239
+ val Control = " control"
240
+ val Conffiles = " conffiles"
241
+ }
242
+
243
+
213
244
private def postinstGroupaddTemplateSource : java.net.URL = getClass.getResource(" postinst-groupadd" )
214
245
private def postinstUseraddTemplateSource : java.net.URL = getClass.getResource(" postinst-useradd" )
215
246
private def postinstChownTemplateSource : java.net.URL = getClass.getResource(" postinst-chown" )
0 commit comments