2
2
3
3
const fs = require ( 'fs-extra' ) ;
4
4
const path = require ( 'path' ) ;
5
+ const execa = require ( 'execa' ) ;
5
6
const template = require ( 'lodash/template' ) ;
6
7
7
8
const cli = require ( '../../lib' ) ;
@@ -11,18 +12,30 @@ class SystemdExtension extends cli.Extension {
11
12
let instance = this . system . getInstance ( ) ;
12
13
13
14
if ( ! argv . local && instance . config . get ( 'process' ) === 'systemd' ) {
14
- cmd . addStage ( 'systemd' , this . _setup . bind ( this ) ) ;
15
+ cmd . addStage ( 'systemd' , this . _setup . bind ( this ) , 'linux-user' ) ;
15
16
}
16
17
}
17
18
18
- _setup ( argv , ctx ) {
19
+ _setup ( argv , ctx , task ) {
20
+ let uid ;
21
+
22
+ try {
23
+ uid = execa . shellSync ( 'id -u ghost' ) . stdout ;
24
+ } catch ( e ) {
25
+ if ( ! e . message . match ( / n o s u c h u s e r / ) ) {
26
+ return Promise . reject ( e ) ;
27
+ }
28
+
29
+ return task . skip ( 'Ghost user has not been set up.' ) ;
30
+ }
31
+
19
32
let service = template ( fs . readFileSync ( path . join ( __dirname , 'ghost.service.template' ) , 'utf8' ) ) ;
20
33
let serviceFilename = `ghost_${ ctx . instance . name } .service` ;
21
34
22
35
return ctx . instance . template ( service ( {
23
36
name : ctx . instance . name ,
24
37
dir : process . cwd ( ) ,
25
- user : process . getuid ( ) ,
38
+ user : uid ,
26
39
environment : this . system . environment ,
27
40
ghost_exec_path : process . argv . slice ( 0 , 2 ) . join ( ' ' )
28
41
} ) , 'systemd service file' , serviceFilename , '/lib/systemd/system' ) . then ( ( ) => {
0 commit comments