@@ -96,6 +96,21 @@ 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 ) {
100
115
const (
101
116
verboseName = "verbose"
@@ -112,9 +127,12 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
112
127
}
113
128
return nil
114
129
})
130
+ }
131
+
132
+ func bindDaemonFlags (flagSet * flag.FlagSet , options * daemonOptions ) {
115
133
const serverUsage = "listening socket `maddr`" +
116
134
"\n can be specified multiple times and/or comma separated"
117
- flagSetFunc (flagSet , serverFlagName , serverUsage , do ,
135
+ flagSetFunc (flagSet , serverFlagName , serverUsage , options ,
118
136
func (value []multiaddr.Multiaddr , settings * daemonSettings ) error {
119
137
settings .serverMaddrs = append (settings .serverMaddrs , value ... )
120
138
return nil
@@ -129,7 +147,7 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
129
147
exitName = exitAfterFlagName
130
148
exitUsage = "check every `interval` (e.g. \" 30s\" ) and shutdown the daemon if its idle"
131
149
)
132
- flagSetFunc (flagSet , exitName , exitUsage , do ,
150
+ flagSetFunc (flagSet , exitName , exitUsage , options ,
133
151
func (value time.Duration , settings * daemonSettings ) error {
134
152
settings .exitInterval = value
135
153
return nil
@@ -138,7 +156,7 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
138
156
uidName = apiFlagPrefix + "uid"
139
157
uidUsage = "file owner's `uid`"
140
158
)
141
- flagSetFunc (flagSet , uidName , uidUsage , do ,
159
+ flagSetFunc (flagSet , uidName , uidUsage , options ,
142
160
func (value p9.UID , settings * daemonSettings ) error {
143
161
settings .nineIDs .uid = value
144
162
return nil
@@ -149,7 +167,7 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
149
167
gidName = apiFlagPrefix + "gid"
150
168
gidUsage = "file owner's `gid`"
151
169
)
152
- flagSetFunc (flagSet , gidName , gidUsage , do ,
170
+ flagSetFunc (flagSet , gidName , gidUsage , options ,
153
171
func (value p9.GID , settings * daemonSettings ) error {
154
172
settings .nineIDs .gid = value
155
173
return nil
@@ -161,7 +179,7 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
161
179
permissionsUsage = "`permissions` to use when creating service files"
162
180
)
163
181
apiPermissions := fs .FileMode (apiPermissionsDefault )
164
- flagSetFunc (flagSet , permissionsName , permissionsUsage , do ,
182
+ flagSetFunc (flagSet , permissionsName , permissionsUsage , options ,
165
183
func (value string , settings * daemonSettings ) error {
166
184
permissions , err := parsePOSIXPermissions (apiPermissions , value )
167
185
if err != nil {
@@ -176,13 +194,7 @@ func (do *daemonOptions) BindFlags(flagSet *flag.FlagSet) {
176
194
}
177
195
178
196
func (do daemonOptions ) make () (daemonSettings , error ) {
179
- settings := daemonSettings {
180
- nineIDs : nineIDs {
181
- uid : apiUIDDefault ,
182
- gid : apiGIDDefault ,
183
- },
184
- permissions : apiPermissionsDefault ,
185
- }
197
+ settings := makeDaemonSettings ()
186
198
if err := generic .ApplyOptions (& settings , do ... ); err != nil {
187
199
return daemonSettings {}, err
188
200
}
@@ -199,26 +211,28 @@ func (do daemonOptions) make() (daemonSettings, error) {
199
211
return settings , nil
200
212
}
201
213
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 )
214
+ func makeDaemonSettings () daemonSettings {
215
+ return daemonSettings {
216
+ nineIDs : nineIDs {
217
+ uid : apiUIDDefault ,
218
+ gid : apiGIDDefault ,
219
+ },
220
+ permissions : apiPermissionsDefault ,
221
+ }
212
222
}
213
223
214
224
func daemonExecute (ctx context.Context , options ... daemonOption ) error {
215
225
settings , err := daemonOptions (options ).make ()
216
226
if err != nil {
217
227
return err
218
228
}
229
+ return daemonRun (ctx , & settings )
230
+ }
231
+
232
+ func daemonRun (ctx context.Context , settings * daemonSettings ) error {
219
233
dCtx , cancel := context .WithCancel (ctx )
220
234
defer cancel ()
221
- system , err := newSystem (dCtx , & settings )
235
+ system , err := newSystem (dCtx , settings )
222
236
if err != nil {
223
237
return err
224
238
}
0 commit comments