@@ -96,7 +96,23 @@ const (
96
96
errShutdownDisposition = generic .ConstError ("invalid shutdown disposition" )
97
97
)
98
98
99
+ // Daemon constructs the command which
100
+ // hosts the file system service server.
101
+ func Daemon () command.Command {
102
+ const (
103
+ name = daemonCommandName
104
+ synopsis = "Host system services."
105
+ )
106
+ usage := header ("File system service daemon." ) +
107
+ "\n \n " + synopsis
108
+ return command .MakeVariadicCommand [daemonOptions ](
109
+ name , synopsis , usage , daemonExecute ,
110
+ command .WithSubcommands (Service ()),
111
+ )
112
+ }
113
+
99
114
func (do * daemonOptions ) BindFlags (flagSet * flag.FlagSet ) {
115
+ bindDaemonFlags (flagSet , do )
100
116
userMaddrs , err := userServiceMaddrs ()
101
117
if err != nil {
102
118
panic (err )
@@ -118,9 +134,12 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
118
134
}
119
135
return nil
120
136
})
137
+ }
138
+
139
+ func bindDaemonFlags (flagSet * flag.FlagSet , options * daemonOptions ) {
121
140
const serverUsage = "listening socket `maddr`" +
122
141
"\n can be specified multiple times and/or comma separated"
123
- flagSetFunc (flagSet , serverFlagName , serverUsage , do ,
142
+ flagSetFunc (flagSet , serverFlagName , serverUsage , options ,
124
143
func (value []multiaddr.Multiaddr , settings * daemonSettings ) error {
125
144
settings .serverMaddrs = append (settings .serverMaddrs , value ... )
126
145
return nil
@@ -129,7 +148,7 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
129
148
exitName = exitAfterFlagName
130
149
exitUsage = "check every `interval` (e.g. \" 30s\" ) and shutdown the daemon if its idle"
131
150
)
132
- flagSetFunc (flagSet , exitName , exitUsage , do ,
151
+ flagSetFunc (flagSet , exitName , exitUsage , options ,
133
152
func (value time.Duration , settings * daemonSettings ) error {
134
153
settings .exitInterval = value
135
154
return nil
@@ -138,7 +157,7 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
138
157
uidName = apiFlagPrefix + "uid"
139
158
uidUsage = "file owner's `uid`"
140
159
)
141
- flagSetFunc (flagSet , uidName , uidUsage , do ,
160
+ flagSetFunc (flagSet , uidName , uidUsage , options ,
142
161
func (value p9.UID , settings * daemonSettings ) error {
143
162
settings .nineIDs .uid = value
144
163
return nil
@@ -149,7 +168,7 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
149
168
gidName = apiFlagPrefix + "gid"
150
169
gidUsage = "file owner's `gid`"
151
170
)
152
- flagSetFunc (flagSet , gidName , gidUsage , do ,
171
+ flagSetFunc (flagSet , gidName , gidUsage , options ,
153
172
func (value p9.GID , settings * daemonSettings ) error {
154
173
settings .nineIDs .gid = value
155
174
return nil
@@ -161,7 +180,7 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
161
180
permissionsUsage = "`permissions` to use when creating service files"
162
181
)
163
182
apiPermissions := fs .FileMode (apiPermissionsDefault )
164
- flagSetFunc (flagSet , permissionsName , permissionsUsage , do ,
183
+ flagSetFunc (flagSet , permissionsName , permissionsUsage , options ,
165
184
func (value string , settings * daemonSettings ) error {
166
185
permissions , err := parsePOSIXPermissions (apiPermissions , value )
167
186
if err != nil {
@@ -176,13 +195,7 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
176
195
}
177
196
178
197
func (do daemonOptions ) make () (daemonSettings , error ) {
179
- settings := daemonSettings {
180
- nineIDs : nineIDs {
181
- uid : apiUIDDefault ,
182
- gid : apiGIDDefault ,
183
- },
184
- permissions : apiPermissionsDefault ,
185
- }
198
+ settings := makeDaemonSettings ()
186
199
if err := generic .ApplyOptions (& settings , do ... ); err != nil {
187
200
return daemonSettings {}, err
188
201
}
@@ -199,26 +212,28 @@ func (do daemonOptions) make() (daemonSettings, error) {
199
212
return settings , nil
200
213
}
201
214
202
- // Daemon constructs the command which
203
- // hosts the file system service server.
204
- func Daemon () command.Command {
205
- const (
206
- name = daemonCommandName
207
- synopsis = "Host system services."
208
- )
209
- usage := header ("File system service daemon." ) +
210
- "\n \n " + synopsis
211
- return command .MakeVariadicCommand [daemonOptions ](name , synopsis , usage , daemonExecute )
215
+ func makeDaemonSettings () daemonSettings {
216
+ return daemonSettings {
217
+ nineIDs : nineIDs {
218
+ uid : apiUIDDefault ,
219
+ gid : apiGIDDefault ,
220
+ },
221
+ permissions : apiPermissionsDefault ,
222
+ }
212
223
}
213
224
214
225
func daemonExecute (ctx context.Context , options ... daemonOption ) error {
215
226
settings , err := daemonOptions (options ).make ()
216
227
if err != nil {
217
228
return err
218
229
}
230
+ return daemonRun (ctx , & settings )
231
+ }
232
+
233
+ func daemonRun (ctx context.Context , settings * daemonSettings ) error {
219
234
dCtx , cancel := context .WithCancel (ctx )
220
235
defer cancel ()
221
- system , err := newSystem (dCtx , & settings )
236
+ system , err := newSystem (dCtx , settings )
222
237
if err != nil {
223
238
return err
224
239
}
0 commit comments