fix docker build
Some checks failed
CodeQL / Analyze (go) (push) Failing after 2s
CodeQL / Analyze (javascript) (push) Failing after 2s
docker / build-docker (inux/arm/v6) (push) Failing after 26s
docker / build-docker (linux/386) (push) Failing after 2m22s
docker / build-docker (linux/amd64) (push) Failing after 2m0s
docker / build-docker (linux/arm64) (push) Has been cancelled
docker / build-docker (linux/arm/v7) (push) Has been cancelled
mkdocs / mkdocs (push) Failing after 2s
Some checks failed
CodeQL / Analyze (go) (push) Failing after 2s
CodeQL / Analyze (javascript) (push) Failing after 2s
docker / build-docker (inux/arm/v6) (push) Failing after 26s
docker / build-docker (linux/386) (push) Failing after 2m22s
docker / build-docker (linux/amd64) (push) Failing after 2m0s
docker / build-docker (linux/arm64) (push) Has been cancelled
docker / build-docker (linux/arm/v7) (push) Has been cancelled
mkdocs / mkdocs (push) Failing after 2s
This commit is contained in:
parent
334f2205ac
commit
3a310f8a30
10 changed files with 89 additions and 52 deletions
34
Dockerfile
34
Dockerfile
|
@ -2,32 +2,30 @@
|
||||||
# Stage 1: Build
|
# Stage 1: Build
|
||||||
#===============
|
#===============
|
||||||
|
|
||||||
FROM golang:1.20 as builder
|
FROM golang:1.21 as builder
|
||||||
|
|
||||||
ENV BIN_REPO=git.kmsign.ru/royalcat/tstor
|
WORKDIR /app
|
||||||
ENV BIN_PATH=$GOPATH/src/$BIN_REPO
|
|
||||||
|
|
||||||
COPY . $BIN_PATH
|
COPY go.mod ./
|
||||||
WORKDIR $BIN_PATH
|
COPY go.sum ./
|
||||||
|
RUN go mod download
|
||||||
|
|
||||||
RUN apk add fuse-dev git gcc libc-dev g++ make
|
COPY ./src ./src
|
||||||
|
COPY ./cmd ./cmd
|
||||||
|
COPY ./assets ./assets
|
||||||
|
COPY ./templates ./templates
|
||||||
|
COPY embed.go embed.go
|
||||||
|
|
||||||
RUN BIN_OUTPUT=/bin/tstor make build
|
RUN go generate ./...
|
||||||
|
RUN CGO_ENABLED=0 go build -tags timetzdata -o /tstor ./cmd/tstor/main.go
|
||||||
|
|
||||||
#===============
|
#===============
|
||||||
# Stage 2: Run
|
# Stage 2: Run
|
||||||
#===============
|
#===============
|
||||||
|
|
||||||
FROM alpine:3
|
FROM scratch
|
||||||
|
|
||||||
RUN apk add gcc libc-dev fuse-dev
|
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
|
||||||
|
COPY --from=builder /tstor /tstor
|
||||||
|
|
||||||
COPY --from=builder /bin/tstor /bin/tstor
|
ENTRYPOINT ["/tstor"]
|
||||||
RUN chmod +x /bin/tstor
|
|
||||||
|
|
||||||
RUN mkdir /tstor-data
|
|
||||||
|
|
||||||
RUN echo "user_allow_other" >> /etc/fuse.conf
|
|
||||||
ENV tstor_FUSE_ALLOW_OTHER=true
|
|
||||||
|
|
||||||
ENTRYPOINT ["./bin/tstor"]
|
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
FROM techknowlogick/xgo:go-1.17.x
|
|
||||||
|
|
||||||
# add 32-bit and 64-bit architectures and install 7zip
|
|
||||||
RUN \
|
|
||||||
dpkg --add-architecture i386 && \
|
|
||||||
dpkg --add-architecture amd64 && \
|
|
||||||
apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends p7zip-full
|
|
||||||
|
|
||||||
# install LIBFUSE
|
|
||||||
RUN \
|
|
||||||
apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends libfuse-dev:i386 && \
|
|
||||||
apt-get install -y --no-install-recommends libfuse-dev:amd64 && \
|
|
||||||
apt-get download libfuse-dev:i386 && \
|
|
||||||
dpkg -x libfuse-dev*i386*.deb /
|
|
||||||
|
|
||||||
ENV \
|
|
||||||
OSXCROSS_NO_INCLUDE_PATH_WARNINGS 1
|
|
|
@ -27,7 +27,6 @@ import (
|
||||||
|
|
||||||
const (
|
const (
|
||||||
configFlag = "config"
|
configFlag = "config"
|
||||||
fuseAllowOther = "fuse-allow-other"
|
|
||||||
portFlag = "http-port"
|
portFlag = "http-port"
|
||||||
webDAVPortFlag = "webdav-port"
|
webDAVPortFlag = "webdav-port"
|
||||||
)
|
)
|
||||||
|
@ -45,7 +44,7 @@ func main() {
|
||||||
},
|
},
|
||||||
|
|
||||||
Action: func(c *cli.Context) error {
|
Action: func(c *cli.Context) error {
|
||||||
err := load(c.String(configFlag), c.Int(portFlag), c.Int(webDAVPortFlag), c.Bool(fuseAllowOther))
|
err := load(c.String(configFlag))
|
||||||
|
|
||||||
// stop program execution on errors to avoid flashing consoles
|
// stop program execution on errors to avoid flashing consoles
|
||||||
if err != nil && runtime.GOOS == "windows" {
|
if err != nil && runtime.GOOS == "windows" {
|
||||||
|
@ -108,7 +107,7 @@ func (s *stc) Close() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func load(configPath string, port, webDAVPort int, fuseAllowOther bool) error {
|
func load(configPath string) error {
|
||||||
conf, err := config.Load(configPath)
|
conf, err := config.Load(configPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error loading configuration: %w", err)
|
return fmt.Errorf("error loading configuration: %w", err)
|
||||||
|
|
3
go.work
Normal file
3
go.work
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
go 1.21.3
|
||||||
|
|
||||||
|
use .
|
27
go.work.sum
Normal file
27
go.work.sum
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||||
|
github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
|
||||||
|
github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic=
|
||||||
|
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
|
||||||
|
github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks=
|
||||||
|
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||||
|
github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4=
|
||||||
|
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
|
||||||
|
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
|
||||||
|
github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I=
|
||||||
|
github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
|
||||||
|
github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
|
||||||
|
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||||
|
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
|
||||||
|
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||||
|
golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
|
golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
|
||||||
|
google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
|
||||||
|
google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw=
|
||||||
|
lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
|
||||||
|
modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0=
|
||||||
|
modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY=
|
||||||
|
modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
|
||||||
|
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
|
||||||
|
modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
|
||||||
|
modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
|
||||||
|
modernc.org/z v1.7.0/go.mod h1:hVdgNMh8ggTuRG1rGU8x+xGRFfiQUIAw0ZqlPy8+HyQ=
|
|
@ -1,3 +1,5 @@
|
||||||
|
//go:build cgo
|
||||||
|
|
||||||
package fuse
|
package fuse
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
@ -38,7 +40,7 @@ func (s *Handler) Mount(vfs vfs.Filesystem) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
host := fuse.NewFileSystemHost(NewFS(vfs))
|
host := fuse.NewFileSystemHost(newFuseFS(vfs))
|
||||||
|
|
||||||
// TODO improve error handling here
|
// TODO improve error handling here
|
||||||
go func() {
|
go func() {
|
||||||
|
|
23
src/mounts/fuse/handler_nocgo.go
Normal file
23
src/mounts/fuse/handler_nocgo.go
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
//go:build !cgo
|
||||||
|
|
||||||
|
package fuse
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"git.kmsign.ru/royalcat/tstor/src/host/vfs"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Handler struct{}
|
||||||
|
|
||||||
|
func NewHandler(fuseAllowOther bool, path string) *Handler {
|
||||||
|
return &Handler{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Handler) Mount(vfs vfs.Filesystem) error {
|
||||||
|
return fmt.Errorf("tstor was build without fuse support")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Handler) Unmount() {
|
||||||
|
}
|
|
@ -1,3 +1,5 @@
|
||||||
|
//go:build cgo
|
||||||
|
|
||||||
package fuse
|
package fuse
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
@ -14,22 +16,22 @@ import (
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
type FS struct {
|
type fuseFS struct {
|
||||||
fuse.FileSystemBase
|
fuse.FileSystemBase
|
||||||
fh *fileHandler
|
fh *fileHandler
|
||||||
|
|
||||||
log zerolog.Logger
|
log zerolog.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewFS(fs vfs.Filesystem) fuse.FileSystemInterface {
|
func newFuseFS(fs vfs.Filesystem) fuse.FileSystemInterface {
|
||||||
l := log.Logger.With().Str("component", "fuse").Logger()
|
l := log.Logger.With().Str("component", "fuse").Logger()
|
||||||
return &FS{
|
return &fuseFS{
|
||||||
fh: &fileHandler{fs: fs},
|
fh: &fileHandler{fs: fs},
|
||||||
log: l,
|
log: l,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *FS) Open(path string, flags int) (errc int, fh uint64) {
|
func (fs *fuseFS) Open(path string, flags int) (errc int, fh uint64) {
|
||||||
fh, err := fs.fh.OpenHolder(path)
|
fh, err := fs.fh.OpenHolder(path)
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
fs.log.Debug().Str("path", path).Msg("file does not exists")
|
fs.log.Debug().Str("path", path).Msg("file does not exists")
|
||||||
|
@ -46,15 +48,15 @@ func (fs *FS) Open(path string, flags int) (errc int, fh uint64) {
|
||||||
|
|
||||||
// Unlink removes a file.
|
// Unlink removes a file.
|
||||||
// The FileSystemBase implementation returns -ENOSYS.
|
// The FileSystemBase implementation returns -ENOSYS.
|
||||||
func (fs *FS) Unlink(path string) int {
|
func (fs *fuseFS) Unlink(path string) int {
|
||||||
return -fuse.ENOSYS
|
return -fuse.ENOSYS
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *FS) Opendir(path string) (errc int, fh uint64) {
|
func (fs *fuseFS) Opendir(path string) (errc int, fh uint64) {
|
||||||
return fs.Open(path, 0)
|
return fs.Open(path, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *FS) Getattr(path string, stat *fuse.Stat_t, fh uint64) (errc int) {
|
func (fs *fuseFS) Getattr(path string, stat *fuse.Stat_t, fh uint64) (errc int) {
|
||||||
if path == "/" {
|
if path == "/" {
|
||||||
stat.Mode = fuse.S_IFDIR | 0555
|
stat.Mode = fuse.S_IFDIR | 0555
|
||||||
return 0
|
return 0
|
||||||
|
@ -81,7 +83,7 @@ func (fs *FS) Getattr(path string, stat *fuse.Stat_t, fh uint64) (errc int) {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *FS) Read(path string, dest []byte, off int64, fh uint64) int {
|
func (fs *fuseFS) Read(path string, dest []byte, off int64, fh uint64) int {
|
||||||
file, err := fs.fh.GetFile(path, fh)
|
file, err := fs.fh.GetFile(path, fh)
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
fs.log.Error().Err(err).Str("path", path).Msg("file not found on READ operation")
|
fs.log.Error().Err(err).Str("path", path).Msg("file not found on READ operation")
|
||||||
|
@ -110,7 +112,7 @@ func (fs *FS) Read(path string, dest []byte, off int64, fh uint64) int {
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *FS) Release(path string, fh uint64) int {
|
func (fs *fuseFS) Release(path string, fh uint64) int {
|
||||||
if err := fs.fh.Remove(fh); err != nil {
|
if err := fs.fh.Remove(fh); err != nil {
|
||||||
fs.log.Error().Err(err).Str("path", path).Msg("error getting holder when releasing file")
|
fs.log.Error().Err(err).Str("path", path).Msg("error getting holder when releasing file")
|
||||||
return -fuse.EIO
|
return -fuse.EIO
|
||||||
|
@ -119,11 +121,11 @@ func (fs *FS) Release(path string, fh uint64) int {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *FS) Releasedir(path string, fh uint64) int {
|
func (fs *fuseFS) Releasedir(path string, fh uint64) int {
|
||||||
return fs.Release(path, fh)
|
return fs.Release(path, fh)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (fs *FS) Readdir(path string,
|
func (fs *fuseFS) Readdir(path string,
|
||||||
fill func(name string, stat *fuse.Stat_t, ofst int64) bool,
|
fill func(name string, stat *fuse.Stat_t, ofst int64) bool,
|
||||||
ofst int64,
|
ofst int64,
|
||||||
fh uint64) (errc int) {
|
fh uint64) (errc int) {
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
//go:build cgo
|
||||||
|
|
||||||
package fuse
|
package fuse
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
|
Loading…
Reference in a new issue