@@ -31,6 +31,7 @@ import (
3131 "github.com/containerd/nydus-snapshotter/pkg/manager"
3232 metrics "github.com/containerd/nydus-snapshotter/pkg/metrics/tool"
3333 "github.com/containerd/nydus-snapshotter/pkg/prefetch"
34+ "github.com/containerd/nydus-snapshotter/pkg/utils/signals"
3435)
3536
3637const (
@@ -61,6 +62,8 @@ type Controller struct {
6162 managers []* manager.Manager
6263 // httpSever *http.Server
6364 addr * net.UnixAddr
65+ uid int
66+ gid int
6467 router * mux.Router
6568}
6669
@@ -125,7 +128,7 @@ type rafsInstanceInfo struct {
125128 ImageID string `json:"image_id"`
126129}
127130
128- func NewSystemController (fs * filesystem.Filesystem , managers []* manager.Manager , sock string ) (* Controller , error ) {
131+ func NewSystemController (fs * filesystem.Filesystem , managers []* manager.Manager , sock string , uid , gid int ) (* Controller , error ) {
129132 if err := os .MkdirAll (filepath .Dir (sock ), os .ModePerm ); err != nil {
130133 return nil , err
131134 }
@@ -145,6 +148,8 @@ func NewSystemController(fs *filesystem.Filesystem, managers []*manager.Manager,
145148 fs : fs ,
146149 managers : managers ,
147150 addr : addr ,
151+ uid : uid ,
152+ gid : gid ,
148153 router : mux .NewRouter (),
149154 }
150155
@@ -155,11 +160,23 @@ func NewSystemController(fs *filesystem.Filesystem, managers []*manager.Manager,
155160
156161func (sc * Controller ) Run () error {
157162 log .L .Infof ("Start system controller API server on %s" , sc .addr )
163+ stopChan := signals .SetupSignalHandler ()
158164 listener , err := net .ListenUnix ("unix" , sc .addr )
159165 if err != nil {
160166 return errors .Wrapf (err , "listen to socket %s " , sc .addr )
161167 }
162168
169+ if err := os .Chown (sc .addr .String (), sc .uid , sc .gid ); err != nil {
170+ return errors .Wrap (err , "chown socket" )
171+ }
172+
173+ go func () {
174+ <- stopChan
175+ if err := listener .Close (); err != nil {
176+ log .L .Errorf ("Failed to close listener %s, err: %v" , sc .addr .String (), err )
177+ }
178+ }()
179+
163180 err = http .Serve (listener , sc .router )
164181 if err != nil {
165182 return errors .Wrapf (err , "system management serving" )
0 commit comments