Skip to content

Commit 705c0fe

Browse files
Improved the support for the newer SystemD format under Unix.
SystemD is now the default format but there is a property to use the old outdated init.d format.
1 parent 91a20fa commit 705c0fe

File tree

4 files changed

+154
-93
lines changed

4 files changed

+154
-93
lines changed

src/com/inet/gradle/setup/abstracts/AbstractUnixSetupTask.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public AbstractUnixSetupTask( String extension ) {
1313
}
1414

1515
private String daemonUser = "root";
16+
private boolean useInitD = false;
1617

1718
/**
1819
* Returns the user with which the daemon should be running. If no user was specified the default root user will be
@@ -36,4 +37,23 @@ public String getDaemonUser() {
3637
public void setDaemonUser( String daemonUser ) {
3738
this.daemonUser = daemonUser;
3839
}
40+
41+
/**
42+
* Checks if the installer should use the old outdated InitD format
43+
* @return true if the installer should use the old outdated InitD format
44+
*/
45+
@Input
46+
public boolean isUseInitD() {
47+
return useInitD ;
48+
}
49+
50+
/**
51+
* Specifies if the installer should use the old outdated InitD format. Per default the Unix installers
52+
* use the SystemD daemon format.
53+
* @param useInitD true if the old init.d format should be used.
54+
*/
55+
public void setUseInitD(boolean useInitD) {
56+
this.useInitD = useInitD;
57+
}
58+
3959
}

src/com/inet/gradle/setup/unix/deb/DebBuilder.java

Lines changed: 55 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -276,41 +276,73 @@ private void setupService( Service service ) throws IOException {
276276
String installationRoot = task.getInstallationRoot();
277277
String workingDir = installationRoot + (service.getWorkDir() != null ? "/" + service.getWorkDir() : "");
278278
String mainJarPath = workingDir + "/" + service.getMainJar();
279-
280-
Template initScript = new Template( "unix/init-service.sh" );
281-
initScript.setPlaceholder( "name", serviceUnixName );
282279
String version = task.getVersion();
283-
initScript.setPlaceholder( "majorversion", version.substring( 0, version.indexOf( '.' ) ) );
284-
initScript.setPlaceholder( "displayName", setup.getApplication() );
285-
initScript.setPlaceholder( "description", service.getDescription() );
286-
initScript.setPlaceholder( "wait", "2" );
287-
288-
initScript.setPlaceholder( "workdir", workingDir );
289-
initScript.setPlaceholder( "mainJar", mainJarPath );
290-
initScript.setPlaceholder( "startArguments", (service.getStartArguments()).trim() );
291-
initScript.setPlaceholder( "javaVMArguments", (String.join( " ", service.getJavaVMArguments())).trim() );
292-
293-
initScript.setPlaceholder( "mainClass", service.getMainClass() );
294-
initScript.setPlaceholder( "daemonUser", task.getDaemonUser() );
295-
initScript.setPlaceholder( "daemonExec", javaMainExecutable );
296-
initScript.setPlaceholder( "additionalServiceScript", task.getAdditionalServiceScript() );
297-
298-
String initScriptFile = "etc/init.d/" + serviceUnixName;
299-
initScript.writeTo( createFile( initScriptFile, true ) );
300280

281+
if(task.isUseInitD()) {
282+
Template initScript = new Template( "unix/init-service.sh" );
283+
initScript.setPlaceholder( "name", serviceUnixName );
284+
initScript.setPlaceholder( "majorversion", version.substring( 0, version.indexOf( '.' ) ) );
285+
initScript.setPlaceholder( "displayName", setup.getApplication() );
286+
initScript.setPlaceholder( "description", service.getDescription() );
287+
initScript.setPlaceholder( "wait", "2" );
288+
289+
initScript.setPlaceholder( "workdir", workingDir );
290+
initScript.setPlaceholder( "mainJar", mainJarPath );
291+
initScript.setPlaceholder( "startArguments", (service.getStartArguments()).trim() );
292+
initScript.setPlaceholder( "javaVMArguments", (String.join( " ", service.getJavaVMArguments())).trim() );
293+
294+
initScript.setPlaceholder( "mainClass", service.getMainClass() );
295+
initScript.setPlaceholder( "daemonUser", task.getDaemonUser() );
296+
initScript.setPlaceholder( "daemonExec", javaMainExecutable );
297+
initScript.setPlaceholder( "additionalServiceScript", task.getAdditionalServiceScript() );
298+
299+
String initScriptFile = "etc/init.d/" + serviceUnixName;
300+
initScript.writeTo( createFile( initScriptFile, true ) );
301+
302+
controlBuilder.addTailScriptFragment( Script.POSTINST, "[ -f \"/etc/init.d/" + serviceUnixName + "\" ] && update-rc.d " + serviceUnixName + " defaults 91 09 >/dev/null || true" );
303+
controlBuilder.addTailScriptFragment( Script.PRERM, "[ -f \"/etc/init.d/" + serviceUnixName + "\" ] && service " + serviceUnixName + " stop || true" );
304+
} else {
305+
String systemdTemplate = "unix/systemd.service";
306+
Template systemdScript = new Template( systemdTemplate );
307+
systemdScript.setPlaceholder( "name", serviceUnixName );
308+
systemdScript.setPlaceholder( "majorversion", version.substring( 0, version.indexOf( '.' ) ) );
309+
systemdScript.setPlaceholder( "displayName", setup.getApplication() );
310+
systemdScript.setPlaceholder( "description", service.getDescription() );
311+
systemdScript.setPlaceholder( "wait", "2" );
312+
313+
systemdScript.setPlaceholder( "workdir", workingDir );
314+
systemdScript.setPlaceholder( "mainJar", mainJarPath );
315+
systemdScript.setPlaceholder( "startArguments", (service.getStartArguments()).trim() );
316+
systemdScript.setPlaceholder( "javaVMArguments", String.join( " ", service.getJavaVMArguments()).trim() );
317+
318+
systemdScript.setPlaceholder( "mainClass", service.getMainClass() );
319+
systemdScript.setPlaceholder( "daemonUser", task.getDaemonUser() );
320+
systemdScript.setPlaceholder( "daemonExec", javaMainExecutable );
321+
systemdScript.setPlaceholder( "additionalServiceScript", task.getAdditionalServiceScript() );
322+
323+
String systemdScriptFile = "usr/lib/systemd/system/" + serviceUnixName + ".service";
324+
systemdScript.writeTo( createFile( systemdScriptFile , true ) );
325+
controlBuilder.addConfFile( systemdScriptFile );
326+
}
327+
301328
// copy a default service file if set
302329
if( task.getDefaultServiceFile() != null ) {
303330
File serviceDestFile = new File( buildDir.getAbsolutePath(), "/etc/default/" + serviceUnixName );
304331
serviceDestFile.mkdirs();
305332
Files.copy( task.getDefaultServiceFile().toPath(), serviceDestFile.toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING );
306333
}
307334

308-
controlBuilder.addTailScriptFragment( Script.POSTINST, "[ -f \"/etc/init.d/" + serviceUnixName + "\" ] && update-rc.d " + serviceUnixName + " defaults 91 09 >/dev/null || true" );
335+
309336
if ( task.shouldStartDefaultService() ) {
310-
controlBuilder.addTailScriptFragment( Script.POSTINST, "[ -f \"/etc/init.d/" + serviceUnixName + "\" ] && service " + serviceUnixName + " start || true" );
337+
if(task.isUseInitD()) {
338+
controlBuilder.addTailScriptFragment( Script.POSTINST, "[ -f \"/etc/init.d/" + serviceUnixName + "\" ] && service " + serviceUnixName + " start || true" );
339+
} else {
340+
controlBuilder.addTailScriptFragment( Script.POSTINST, "systemctl start " + serviceUnixName + " || true" );
341+
}
342+
311343
}
312344

313-
controlBuilder.addTailScriptFragment( Script.PRERM, "[ -f \"/etc/init.d/" + serviceUnixName + "\" ] && service " + serviceUnixName + " stop || true" );
345+
314346
controlBuilder.addTailScriptFragment( Script.POSTRM, "[ \"$1\" = \"purge\" ] && update-rc.d " + serviceUnixName + " remove >/dev/null || true " );
315347
}
316348

src/com/inet/gradle/setup/unix/rpm/RpmBuilder.java

Lines changed: 74 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -134,84 +134,90 @@ public void build() {
134134
* @throws IOException on errors during creating or writing a file
135135
*/
136136
private void setupService( Service service ) throws IOException {
137-
String serviceUnixName = service.getId();
138-
String installationRoot = task.getInstallationRoot();
139-
String workingDir = installationRoot + (service.getWorkDir() != null ? "/" + service.getWorkDir() : "");
140-
String mainJarPath = workingDir + "/" + service.getMainJar();
141-
142-
String initTemplate = "unix/init-service.sh";
143-
Template initScript = new Template( initTemplate );
144-
initScript.setPlaceholder( "name", serviceUnixName );
145-
String version = task.getVersion();
146-
initScript.setPlaceholder( "majorversion", version.substring( 0, version.indexOf( '.' ) ) );
147-
initScript.setPlaceholder( "displayName", setup.getApplication() );
148-
initScript.setPlaceholder( "description", service.getDescription() );
149-
initScript.setPlaceholder( "wait", "2" );
150-
151-
initScript.setPlaceholder( "workdir", workingDir );
152-
initScript.setPlaceholder( "mainJar", mainJarPath );
153-
initScript.setPlaceholder( "startArguments", (service.getStartArguments()).trim() );
154-
initScript.setPlaceholder( "javaVMArguments", String.join( " ", service.getJavaVMArguments()).trim() );
155-
156-
initScript.setPlaceholder( "mainClass", service.getMainClass() );
157-
initScript.setPlaceholder( "daemonUser", task.getDaemonUser() );
158-
initScript.setPlaceholder( "daemonExec", javaMainExecutable );
159-
initScript.setPlaceholder( "additionalServiceScript", task.getAdditionalServiceScript() );
160-
161-
String initScriptFile = "BUILD/etc/init.d/" + serviceUnixName;
162-
initScript.writeTo( createFile( initScriptFile , true ) );
163-
controlBuilder.addConfFile( initScriptFile );
164-
165-
137+
String serviceUnixName = service.getId();
138+
String installationRoot = task.getInstallationRoot();
139+
String workingDir = installationRoot + (service.getWorkDir() != null ? "/" + service.getWorkDir() : "");
140+
String mainJarPath = workingDir + "/" + service.getMainJar();
141+
String version = task.getVersion();
142+
143+
if(task.isUseInitD()) {
144+
String initTemplate = "unix/init-service.sh";
145+
Template initScript = new Template( initTemplate );
146+
initScript.setPlaceholder( "name", serviceUnixName );
147+
initScript.setPlaceholder( "majorversion", version.substring( 0, version.indexOf( '.' ) ) );
148+
initScript.setPlaceholder( "displayName", setup.getApplication() );
149+
initScript.setPlaceholder( "description", service.getDescription() );
150+
initScript.setPlaceholder( "wait", "2" );
151+
152+
initScript.setPlaceholder( "workdir", workingDir );
153+
initScript.setPlaceholder( "mainJar", mainJarPath );
154+
initScript.setPlaceholder( "startArguments", (service.getStartArguments()).trim() );
155+
initScript.setPlaceholder( "javaVMArguments", String.join( " ", service.getJavaVMArguments()).trim() );
156+
157+
initScript.setPlaceholder( "mainClass", service.getMainClass() );
158+
initScript.setPlaceholder( "daemonUser", task.getDaemonUser() );
159+
initScript.setPlaceholder( "daemonExec", javaMainExecutable );
160+
initScript.setPlaceholder( "additionalServiceScript", task.getAdditionalServiceScript() );
161+
162+
String initScriptFile = "BUILD/etc/init.d/" + serviceUnixName;
163+
initScript.writeTo( createFile( initScriptFile , true ) );
164+
controlBuilder.addConfFile( initScriptFile );
165+
166+
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.PREINSTHEAD, "[ -f \"/etc/init.d/" + serviceUnixName + "\" ] && \"/etc/init.d/" + serviceUnixName + "\" stop || true" );
167+
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.POSTINSTTAIL, "if [ -f \"/etc/init.d/" + serviceUnixName + "\" ] && [ \"" + installationRoot + "\" != \"$RPM_INSTALL_PREFIX\" ] ; then\n"
168+
+ "echo replace path\n"
169+
+ "sed -i 's|'" + installationRoot + "'|'$RPM_INSTALL_PREFIX'|g' /etc/init.d/" + serviceUnixName
170+
+ "\nfi" );
171+
172+
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.POSTINSTTAIL, "( [ -f \"/etc/init.d/" + serviceUnixName + "\" ] && chkconfig --add " + serviceUnixName + " && systemctl enable " + serviceUnixName + " ) || true" );
173+
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.PRERMHEAD, "[ -f \"/etc/init.d/" + serviceUnixName + "\" ] && /etc/init.d/" + serviceUnixName + " stop || true" );
174+
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.PRERMHEAD, "( [ -f \"/etc/init.d/" + serviceUnixName + "\" ] && systemctl disable " + serviceUnixName + " && chkconfig --del " + serviceUnixName + " ) || true" );
175+
} else {
176+
177+
String systemdTemplate = "unix/systemd.service";
178+
Template systemdScript = new Template( systemdTemplate );
179+
systemdScript.setPlaceholder( "name", serviceUnixName );
180+
systemdScript.setPlaceholder( "majorversion", version.substring( 0, version.indexOf( '.' ) ) );
181+
systemdScript.setPlaceholder( "displayName", setup.getApplication() );
182+
systemdScript.setPlaceholder( "description", service.getDescription() );
183+
systemdScript.setPlaceholder( "wait", "2" );
184+
185+
systemdScript.setPlaceholder( "workdir", workingDir );
186+
systemdScript.setPlaceholder( "mainJar", mainJarPath );
187+
systemdScript.setPlaceholder( "startArguments", (service.getStartArguments()).trim() );
188+
systemdScript.setPlaceholder( "javaVMArguments", String.join( " ", service.getJavaVMArguments()).trim() );
189+
190+
systemdScript.setPlaceholder( "mainClass", service.getMainClass() );
191+
systemdScript.setPlaceholder( "daemonUser", task.getDaemonUser() );
192+
systemdScript.setPlaceholder( "daemonExec", javaMainExecutable );
193+
systemdScript.setPlaceholder( "additionalServiceScript", task.getAdditionalServiceScript() );
194+
195+
String systemdScriptFile = "BUILD/usr/lib/systemd/system/" + serviceUnixName + ".service";
196+
systemdScript.writeTo( createFile( systemdScriptFile , true ) );
197+
controlBuilder.addConfFile( systemdScriptFile );
198+
199+
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.POSTINSTTAIL, "( [ -f \"/usr/lib/systemd/system/" + serviceUnixName + ".service\" ] && systemctl enable " + serviceUnixName + " ) || true" );
200+
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.PREINSTHEAD, "[ -f \"/usr/lib/systemd/system/" + serviceUnixName + ".service\" ] && systemctl stop \"" + serviceUnixName + "\" || true" );
201+
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.PRERMHEAD, "[ -f \"/usr/lib/systemd/system/" + serviceUnixName + ".service\" ] && systemctl stop " + serviceUnixName + " || true" );
202+
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.PRERMHEAD, "( [ -f \"/usr/lib/systemd/system/" + serviceUnixName + ".service\" ] && systemctl disable " + serviceUnixName + " ) || true" );
203+
}
166204

167-
String systemdTemplate = "unix/systemd.service";
168-
Template systemdScript = new Template( systemdTemplate );
169-
systemdScript.setPlaceholder( "name", serviceUnixName );
170-
systemdScript.setPlaceholder( "majorversion", version.substring( 0, version.indexOf( '.' ) ) );
171-
systemdScript.setPlaceholder( "displayName", setup.getApplication() );
172-
systemdScript.setPlaceholder( "description", service.getDescription() );
173-
systemdScript.setPlaceholder( "wait", "2" );
174-
175-
systemdScript.setPlaceholder( "workdir", workingDir );
176-
systemdScript.setPlaceholder( "mainJar", mainJarPath );
177-
systemdScript.setPlaceholder( "startArguments", (service.getStartArguments()).trim() );
178-
systemdScript.setPlaceholder( "javaVMArguments", String.join( " ", service.getJavaVMArguments()).trim() );
179-
180-
systemdScript.setPlaceholder( "mainClass", service.getMainClass() );
181-
systemdScript.setPlaceholder( "daemonUser", task.getDaemonUser() );
182-
systemdScript.setPlaceholder( "daemonExec", javaMainExecutable );
183-
systemdScript.setPlaceholder( "additionalServiceScript", task.getAdditionalServiceScript() );
184-
185-
String systemdScriptFile = "BUILD/usr/lib/systemd/system/" + serviceUnixName + ".service";
186-
systemdScript.writeTo( createFile( systemdScriptFile , true ) );
187-
controlBuilder.addConfFile( systemdScriptFile );
188-
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.PREINSTHEAD, "[ -f \"/etc/init.d/" + serviceUnixName + "\" ] && \"/etc/init.d/" + serviceUnixName + "\" stop || true" );
189-
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.PREINSTHEAD, "[ -f \"/usr/lib/systemd/system/" + serviceUnixName + ".service\" ] && service \"" + serviceUnixName + "\" stop || true" );
190205

191-
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.POSTINSTTAIL, "if [ -f \"/etc/init.d/" + serviceUnixName + "\" ] && [ \"" + installationRoot + "\" != \"$RPM_INSTALL_PREFIX\" ] ; then\n"
192-
+ "echo replace path\n"
193-
+ "sed -i 's|'" + installationRoot + "'|'$RPM_INSTALL_PREFIX'|g' /etc/init.d/" + serviceUnixName
194-
+ "\nfi" );
195-
196-
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.POSTINSTTAIL, "if [ ! -f /etc/pam.d/passwd ] && [ ! -f /etc/pam.d/" + serviceUnixName + " ] ; then\n"
197-
+ "echo create pam link for " + serviceUnixName + "\n"
198-
+ "ln -s /etc/pam.d/smtp /etc/pam.d/" + serviceUnixName + "\n"
199-
+ "\nfi" );
200206

201207
// copy a default service file if set
202208
if( task.getDefaultServiceFile() != null ) {
203209
File serviceDestFile = createFile( "BUILD/etc/sysconfig/" + serviceUnixName, true );
204210
Files.copy( task.getDefaultServiceFile().toPath(), serviceDestFile.toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING );
205211
}
206-
207-
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.POSTINSTTAIL, "( [ -f \"/etc/init.d/" + serviceUnixName + "\" ] && chkconfig --add " + serviceUnixName + " && systemctl enable " + serviceUnixName + " ) || true" );
212+
208213
if ( task.shouldStartDefaultService() ) {
209-
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.POSTINSTTAIL, "service " + serviceUnixName + " start || true" );
214+
if(task.isUseInitD()) {
215+
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.POSTINSTTAIL, "service " + serviceUnixName + " start || true" );
216+
} else {
217+
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.POSTINSTTAIL, "systemctl start " + serviceUnixName + " || true" );
218+
}
210219
}
211-
212-
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.PRERMHEAD, "[ -f \"/etc/init.d/" + serviceUnixName + "\" ] && /etc/init.d/" + serviceUnixName + " stop || true" );
213-
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.PRERMHEAD, "[ -f \"/usr/lib/systemd/system/" + serviceUnixName + ".service\" ] && service " + serviceUnixName + " stop || true" );
214-
controlBuilder.addScriptFragment( RpmControlFileBuilder.Script.PRERMHEAD, "( [ -f \"/etc/init.d/" + serviceUnixName + "\" ] && systemctl disable " + serviceUnixName + " && chkconfig --del " + serviceUnixName + " ) || true" );
220+
215221
}
216222

217223
/**

src/com/inet/gradle/setup/unix/rpm/RpmControlFileBuilder.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,8 +331,11 @@ private void putFiles( OutputStreamWriter controlWriter ) throws IOException {
331331
}
332332

333333
if( setup.getServices() != null && setup.getServices().size() > 0 ) {
334-
controlWriter.write( "/etc/init.d/*" + NEWLINE ); // the default script is always installed here
335-
controlWriter.write( "/usr/lib/systemd/system/*" + NEWLINE ); // the default script is always installed here
334+
if(rpm.isUseInitD()) {
335+
controlWriter.write( "/etc/init.d/*" + NEWLINE ); // the default script is always installed here
336+
} else {
337+
controlWriter.write( "/usr/lib/systemd/system/*" + NEWLINE ); // the default script is always installed here
338+
}
336339
}
337340

338341
if( rpm.getDefaultServiceFile() != null ) {

0 commit comments

Comments
 (0)