110 lines
2.5 KiB
Go
110 lines
2.5 KiB
Go
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
|
|
}
|