package makecmd import ( "fmt" "os" "path/filepath" "github.com/spf13/cobra" "yizhisec.com/hsv2/forge/internal/controller/maker" "yizhisec.com/hsv2/forge/internal/opt" ) func Minio() *cobra.Command { var ( storage int ) _cmd := &cobra.Command{ Use: "minio", Short: "Make Minio", RunE: func(cmd *cobra.Command, args []string) error { mk := maker.NewMaker(opt.Cfg.Make.Dir) return mk.Minio(cmd.Context(), fmt.Sprintf("%dGi", storage)) }, } _cmd.Flags().IntVar(&storage, "storage-size", 100, "Storage size(GB)") _cmd.AddCommand(minioBase()) return _cmd } func minioBase() *cobra.Command { var ( push bool ) _cmd := &cobra.Command{ Use: "base", Short: "Make Minio Image Rely(minio initer)", RunE: func(cmd *cobra.Command, args []string) error { const ( DOCKERFILE = `FROM %s COPY mc /usr/local/bin/mc RUN sed -i 's#https\?://dl-cdn.alpinelinux.org/alpine#https://mirrors.tuna.tsinghua.edu.cn/alpine#g' /etc/apk/repositories && \ apk update && \ apk add curl wget tzdata && chmod +x /usr/local/bin/mc && \ mkdir -p /data && \ wget https://artifactory.yizhisec.com/artifactory/filestore/hsv2/db/ipv4.ipdb -O /data/ipv4.ipdb ` ) var ( err error mk = maker.NewMaker(opt.Cfg.Make.Dir) tmpDir = filepath.Join(os.TempDir(), "minio-base") mcFile = filepath.Join(tmpDir, "mc") dockerfile = filepath.Join(tmpDir, "Dockerfile") ) if err = os.MkdirAll(tmpDir, 0755); err != nil { return err } defer os.RemoveAll(tmpDir) if err = mk.RunCommand(cmd.Context(), tmpDir, fmt.Sprintf("docker run -d --name minio-base %s server /data", opt.IMAGE_MINIO), ); err != nil { return err } defer mk.RunCommand(cmd.Context(), tmpDir, "docker rm -f minio-base") if err = mk.RunCommand(cmd.Context(), tmpDir, fmt.Sprintf("docker cp minio-base:/usr/bin/mc %s", mcFile), ); err != nil { return err } if err = os.WriteFile(dockerfile, []byte(fmt.Sprintf(DOCKERFILE, opt.IMAGE_ALPINE)), 0644); err != nil { return err } if err = mk.RunCommand(cmd.Context(), tmpDir, fmt.Sprintf("docker build --network host -t %s -f %s %s", opt.IMAGE_MINIO_BASE, dockerfile, tmpDir), ); err != nil { return err } if push { if err = mk.RunCommand(cmd.Context(), tmpDir, fmt.Sprintf("docker push %s", opt.IMAGE_MINIO_BASE), ); err != nil { return err } } return nil }, } _cmd.Flags().BoolVar(&push, "push", false, "Push image to registry") return _cmd }