Skip to content

Commit f55f0fd

Browse files
committed
nfs: implement Host mountpoint
1 parent d834aad commit f55f0fd

File tree

3 files changed

+106
-24
lines changed

3 files changed

+106
-24
lines changed

go.mod

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,29 @@ require (
66
github.com/adrg/xdg v0.4.0
77
github.com/charmbracelet/glamour v0.6.0
88
github.com/djdv/p9 v0.2.1-0.20230601152255-7d74b92b80b0
9-
github.com/go-git/go-billy/v5 v5.4.1
9+
github.com/go-git/go-billy/v5 v5.5.0
1010
github.com/hashicorp/golang-lru/arc/v2 v2.0.7
1111
github.com/ipfs/boxo v0.10.2-0.20230629143123-2d3edc552442
12+
github.com/ipfs/go-block-format v0.1.2
1213
github.com/ipfs/go-cid v0.4.1
1314
github.com/ipfs/go-ipfs-cmds v0.9.0
1415
github.com/ipfs/go-ipld-cbor v0.0.6
1516
github.com/ipfs/go-ipld-format v0.5.0
17+
github.com/ipfs/go-unixfsnode v1.7.1
1618
github.com/ipfs/kubo v0.21.0
19+
github.com/ipld/go-codec-dagpb v1.6.0
1720
github.com/jaevor/go-nanoid v1.3.0
21+
github.com/lxn/win v0.0.0-20210218163916-a377121e959e
1822
github.com/mattn/go-colorable v0.1.4
1923
github.com/muesli/termenv v0.15.1
2024
github.com/multiformats/go-multiaddr v0.9.0
2125
github.com/multiformats/go-multiaddr-dns v0.3.1
2226
github.com/multiformats/go-multibase v0.2.0
2327
github.com/u-root/uio v0.0.0-20230305220412-3e8cd9d6bf63
28+
github.com/willscott/go-nfs v0.0.2
2429
github.com/winfsp/cgofuse v1.5.1-0.20230130140708-f87f5db493b5
2530
golang.org/x/exp v0.0.0-20230321023759-10a507213a29
26-
golang.org/x/sys v0.12.0
31+
golang.org/x/sys v0.16.0
2732
golang.org/x/term v0.12.0
2833
)
2934

@@ -38,29 +43,24 @@ require (
3843
github.com/go-logr/logr v1.2.4 // indirect
3944
github.com/go-logr/stdr v1.2.2 // indirect
4045
github.com/gogo/protobuf v1.3.2 // indirect
41-
github.com/google/uuid v1.3.1 // indirect
46+
github.com/google/uuid v1.5.0 // indirect
4247
github.com/gorilla/css v1.0.0 // indirect
4348
github.com/hashicorp/golang-lru v0.5.4 // indirect
4449
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
4550
github.com/ipfs/bbloom v0.0.4 // indirect
4651
github.com/ipfs/go-bitfield v1.1.0 // indirect
47-
github.com/ipfs/go-block-format v0.1.2
48-
github.com/ipfs/go-blockservice v0.5.2 // indirect
4952
github.com/ipfs/go-datastore v0.6.0 // indirect
5053
github.com/ipfs/go-ipfs-util v0.0.3 // indirect
5154
github.com/ipfs/go-ipld-legacy v0.2.1 // indirect
5255
github.com/ipfs/go-log v1.0.5 // indirect
5356
github.com/ipfs/go-log/v2 v2.5.1 // indirect
5457
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
55-
github.com/ipfs/go-unixfsnode v1.7.3
56-
github.com/ipld/go-codec-dagpb v1.6.0
5758
github.com/ipld/go-ipld-prime v0.20.0 // indirect
5859
github.com/jbenet/goprocess v0.1.4 // indirect
5960
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
6061
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
6162
github.com/libp2p/go-libp2p v0.27.7 // indirect
6263
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
63-
github.com/lxn/win v0.0.0-20210218163916-a377121e959e
6464
github.com/mattn/go-isatty v0.0.19 // indirect
6565
github.com/mattn/go-runewidth v0.0.14 // indirect
6666
github.com/microcosm-cc/bluemonday v1.0.21 // indirect
@@ -79,10 +79,12 @@ require (
7979
github.com/opentracing/opentracing-go v1.2.0 // indirect
8080
github.com/pkg/errors v0.9.1 // indirect
8181
github.com/polydawn/refmt v0.89.0 // indirect
82+
github.com/rasky/go-xdr v0.0.0-20170124162913-1a41d1a06c93 // indirect
8283
github.com/rivo/uniseg v0.2.0 // indirect
8384
github.com/rs/cors v1.7.0 // indirect
8485
github.com/spaolacci/murmur3 v1.1.0 // indirect
8586
github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa // indirect
87+
github.com/willscott/go-nfs-client v0.0.0-20240104095149-b44639837b00 // indirect
8688
github.com/yuin/goldmark v1.5.2 // indirect
8789
github.com/yuin/goldmark-emoji v1.0.1 // indirect
8890
go.opentelemetry.io/otel v1.16.0 // indirect

go.sum

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ github.com/charmbracelet/glamour v0.6.0/go.mod h1:taqWV4swIMMbWALc0m7AfE9JkPSU8o
2323
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
2424
github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 h1:HVTnpeuvF6Owjd5mniCL8DEXo7uYXdQEmOP4FJbV5tg=
2525
github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3/go.mod h1:p1d6YEZWvFzEh4KLyvBcVSnrfNDDvK2zfK/4x2v/4pE=
26-
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
2726
github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0=
2827
github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis=
2928
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -47,8 +46,8 @@ github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJn
4746
github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY=
4847
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
4948
github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
50-
github.com/go-git/go-billy/v5 v5.4.1 h1:Uwp5tDRkPr+l/TnbHOQzp+tmJfLceOlbVucgpTz8ix4=
51-
github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg=
49+
github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU=
50+
github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow=
5251
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
5352
github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
5453
github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
@@ -73,8 +72,8 @@ github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo
7372
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751 h1:hR7/MlvK23p6+lIw9SN1TigNLn9ZnF3W4SYRKq2gAHs=
7473
github.com/google/pprof v0.0.0-20230602150820-91b7bce49751/go.mod h1:Jh3hGz2jkYak8qXPD19ryItVnUgpgeqzdkY/D0EaeuA=
7574
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
76-
github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4=
77-
github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
75+
github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
76+
github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
7877
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
7978
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4=
8079
github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
@@ -101,8 +100,8 @@ github.com/ipfs/go-bitfield v1.1.0/go.mod h1:paqf1wjq/D2BBmzfTVFlJQ9IlFOZpg422HL
101100
github.com/ipfs/go-block-format v0.0.2/go.mod h1:AWR46JfpcObNfg3ok2JHDUfdiHRgWhJgCQF+KIgOPJY=
102101
github.com/ipfs/go-block-format v0.1.2 h1:GAjkfhVx1f4YTODS6Esrj1wt2HhrtwTnhEr+DyPUaJo=
103102
github.com/ipfs/go-block-format v0.1.2/go.mod h1:mACVcrxarQKstUU3Yf/RdwbC4DzPV6++rO2a3d+a/KE=
104-
github.com/ipfs/go-blockservice v0.5.2 h1:in9Bc+QcXwd1apOVM7Un9t8tixPKdaHQFdLSUM1Xgk8=
105-
github.com/ipfs/go-blockservice v0.5.2/go.mod h1:VpMblFEqG67A/H2sHKAemeH9vlURVavlysbdUI632yk=
103+
github.com/ipfs/go-blockservice v0.5.0 h1:B2mwhhhVQl2ntW2EIpaWPwSCxSuqr5fFA93Ms4bYLEY=
104+
github.com/ipfs/go-blockservice v0.5.0/go.mod h1:W6brZ5k20AehbmERplmERn8o2Ni3ZZubvAxaIUeaT6w=
106105
github.com/ipfs/go-cid v0.0.1/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM=
107106
github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM=
108107
github.com/ipfs/go-cid v0.0.6/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I=
@@ -153,8 +152,8 @@ github.com/ipfs/go-peertaskqueue v0.8.1 h1:YhxAs1+wxb5jk7RvS0LHdyiILpNmRIRnZVzte
153152
github.com/ipfs/go-peertaskqueue v0.8.1/go.mod h1:Oxxd3eaK279FxeydSPPVGHzbwVeHjatZ2GA8XD+KbPU=
154153
github.com/ipfs/go-unixfs v0.4.5 h1:wj8JhxvV1G6CD7swACwSKYa+NgtdWC1RUit+gFnymDU=
155154
github.com/ipfs/go-unixfs v0.4.5/go.mod h1:BIznJNvt/gEx/ooRMI4Us9K8+qeGO7vx1ohnbk8gjFg=
156-
github.com/ipfs/go-unixfsnode v1.7.3 h1:giAxFq7CxAm2Z8h8yFAD7TOQUpf5XG7a2xrR143ci4Y=
157-
github.com/ipfs/go-unixfsnode v1.7.3/go.mod h1:PVfoyZkX1B34qzT3vJO4nsLUpRCyhnMuHBznRcXirlk=
155+
github.com/ipfs/go-unixfsnode v1.7.1 h1:RRxO2b6CSr5UQ/kxnGzaChTjp5LWTdf3Y4n8ANZgB/s=
156+
github.com/ipfs/go-unixfsnode v1.7.1/go.mod h1:PVfoyZkX1B34qzT3vJO4nsLUpRCyhnMuHBznRcXirlk=
158157
github.com/ipfs/go-verifcid v0.0.2 h1:XPnUv0XmdH+ZIhLGKg6U2vaPaRDXb9urMyNVCE7uvTs=
159158
github.com/ipfs/go-verifcid v0.0.2/go.mod h1:40cD9x1y4OWnFXbLNJYRe7MpNvWlMn3LZAG5Wb4xnPU=
160159
github.com/ipfs/kubo v0.21.0 h1:1+XKokeyatfI2Mri5iBn8Eplxf2F5ud0K5zLDg4tSSc=
@@ -187,7 +186,6 @@ github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZY
187186
github.com/koron/go-ssdp v0.0.4 h1:1IDwrghSKYM7yLf7XCzbByg2sJ/JcNOZRXS2jczTwz0=
188187
github.com/koron/go-ssdp v0.0.4/go.mod h1:oDXq+E5IL5q0U8uSBcoAXzTzInwy5lEgC91HoKtbmZk=
189188
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
190-
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
191189
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
192190
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
193191
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
@@ -282,7 +280,6 @@ github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXS
282280
github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE=
283281
github.com/multiformats/go-varint v0.0.7 h1:sWSGR+f/eu5ABZA2ZpYKBILXTTs9JWpdEM/nEGOHFS8=
284282
github.com/multiformats/go-varint v0.0.7/go.mod h1:r8PUYw/fD/SjBCiKOoDlGF6QawOELpZAu9eioSos/OU=
285-
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
286283
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
287284
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
288285
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
@@ -321,12 +318,14 @@ github.com/quic-go/quic-go v0.33.0 h1:ItNoTDN/Fm/zBlq769lLJc8ECe9gYaW40veHCCco7y
321318
github.com/quic-go/quic-go v0.33.0/go.mod h1:YMuhaAV9/jIu0XclDXwZPAsP/2Kgr5yMYhe9oxhhOFA=
322319
github.com/quic-go/webtransport-go v0.5.3 h1:5XMlzemqB4qmOlgIus5zB45AcZ2kCgCy2EptUrfOPWU=
323320
github.com/quic-go/webtransport-go v0.5.3/go.mod h1:OhmmgJIzTTqXK5xvtuX0oBpLV2GkLWNDA+UeTGJXErU=
321+
github.com/rasky/go-xdr v0.0.0-20170124162913-1a41d1a06c93 h1:UVArwN/wkKjMVhh2EQGC0tEc1+FqiLlvYXY5mQ2f8Wg=
322+
github.com/rasky/go-xdr v0.0.0-20170124162913-1a41d1a06c93/go.mod h1:Nfe4efndBz4TibWycNE+lqyJZiMX4ycx+QKV8Ta0f/o=
324323
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
325324
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
326325
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
327326
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
328-
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
329-
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
327+
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
328+
github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
330329
github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik=
331330
github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU=
332331
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
@@ -360,6 +359,10 @@ github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa h1:EyA027ZA
360359
github.com/whyrusleeping/cbor-gen v0.0.0-20230126041949-52956bd4c9aa/go.mod h1:fgkXqYy7bV2cFeIEOkVTZS/WjXARfBqSH6Q2qHL33hQ=
361360
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f h1:jQa4QT2UP9WYv2nzyawpKMOCl+Z/jW7djv2/J50lj9E=
362361
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f/go.mod h1:p9UJB6dDgdPgMJZs7UjUOdulKyRr9fqkS+6JKAInPy8=
362+
github.com/willscott/go-nfs v0.0.2 h1:BaBp1CpGDMooCT6bCgX6h6ZwgPcTMST4yToYZ9byee0=
363+
github.com/willscott/go-nfs v0.0.2/go.mod h1:SvullWeHxr/924WQNbUaZqtluBt2vuZ61g6yAV+xj7w=
364+
github.com/willscott/go-nfs-client v0.0.0-20240104095149-b44639837b00 h1:U0DnHRZFzoIV1oFEZczg5XyPut9yxk9jjtax/9Bxr/o=
365+
github.com/willscott/go-nfs-client v0.0.0-20240104095149-b44639837b00/go.mod h1:Tq++Lr/FgiS3X48q5FETemXiSLGuYMQT2sPjYNPJSwA=
363366
github.com/winfsp/cgofuse v1.5.1-0.20230130140708-f87f5db493b5 h1:jxZvjx8Ve5sOXorZG0KzTxbp0Cr1n3FEegfmyd9br1k=
364367
github.com/winfsp/cgofuse v1.5.1-0.20230130140708-f87f5db493b5/go.mod h1:uxjoF2jEYT3+x+vC2KJddEGdk/LU8pRowXmyVMHSV5I=
365368
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -440,11 +443,10 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc
440443
golang.org/x/sys v0.0.0-20220622161953-175b2fd9d664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
441444
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
442445
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
443-
golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
444446
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
445447
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
446-
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
447-
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
448+
golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU=
449+
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
448450
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
449451
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
450452
golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package nfs
2+
3+
import (
4+
"encoding/json"
5+
"errors"
6+
"io"
7+
"io/fs"
8+
"net"
9+
"os"
10+
11+
"github.com/djdv/go-filesystem-utils/internal/filesystem"
12+
"github.com/djdv/go-filesystem-utils/internal/generic"
13+
maddrc "github.com/djdv/go-filesystem-utils/internal/multiaddr"
14+
"github.com/go-git/go-billy/v5/helper/polyfill"
15+
"github.com/multiformats/go-multiaddr"
16+
manet "github.com/multiformats/go-multiaddr/net"
17+
"github.com/willscott/go-nfs"
18+
nfshelper "github.com/willscott/go-nfs/helpers"
19+
)
20+
21+
type (
22+
// Host holds metadata required to host
23+
// a file system as an NFS server.
24+
Host struct {
25+
Maddr multiaddr.Multiaddr `json:"maddr,omitempty"`
26+
}
27+
)
28+
29+
const HostID filesystem.Host = "NFS"
30+
31+
func (*Host) HostID() filesystem.Host { return HostID }
32+
33+
func (nh *Host) UnmarshalJSON(b []byte) error {
34+
// multiformats/go-multiaddr issue #100
35+
var maddrWorkaround struct {
36+
Maddr maddrc.Multiaddr `json:"maddr,omitempty"`
37+
}
38+
if err := json.Unmarshal(b, &maddrWorkaround); err != nil {
39+
return err
40+
}
41+
nh.Maddr = maddrWorkaround.Maddr.Multiaddr
42+
return nil
43+
}
44+
45+
func (nh *Host) Mount(fsys fs.FS) (io.Closer, error) {
46+
listener, err := manet.Listen(nh.Maddr)
47+
if err != nil {
48+
return nil, err
49+
}
50+
const cacheLimit = 1024
51+
var (
52+
netFsys = &netFS{fsys: fsys}
53+
billyFsys = polyfill.New(netFsys)
54+
nfsHandler = nfshelper.NewNullAuthHandler(billyFsys)
55+
cachedHandler = nfshelper.NewCachingHandler(nfsHandler, cacheLimit)
56+
goListener = manet.NetListener(listener)
57+
errsCh = make(chan error, 1)
58+
closerFn generic.Closer = func() error {
59+
if err := listener.Close(); err != nil {
60+
return err
61+
}
62+
if err := <-errsCh; !errors.Is(err, net.ErrClosed) {
63+
return err
64+
}
65+
return nil
66+
}
67+
)
68+
// The NFS library has verbose logging by default.
69+
// If the operator has not specified a log level,
70+
// override the library's default level.
71+
// (Primarily to suppress `ENOENT` errors in the console.)
72+
const nfslibEnvKey = "LOG_LEVEL"
73+
if _, set := os.LookupEnv(nfslibEnvKey); !set {
74+
nfs.Log.SetLevel(nfs.PanicLevel)
75+
}
76+
go func() { errsCh <- nfs.Serve(goListener, cachedHandler) }()
77+
return closerFn, nil
78+
}

0 commit comments

Comments
 (0)