From 19efa144560e77b21fd269f1975204d5db96254b Mon Sep 17 00:00:00 2001 From: sianao Date: Fri, 18 Apr 2025 17:41:00 +0800 Subject: [PATCH] add file --- .air.toml | 52 ++++++++++++++++++++++++++++++++++ lib/libpod/client.go | 27 ++++++++++++++++++ lib/libpod/client_supported.go | 15 ++++++++++ lib/libpod/early_init_linux.go | 33 +++++++++++++++++++++ 4 files changed, 127 insertions(+) create mode 100644 .air.toml create mode 100644 lib/libpod/client.go create mode 100644 lib/libpod/client_supported.go create mode 100644 lib/libpod/early_init_linux.go diff --git a/.air.toml b/.air.toml new file mode 100644 index 0000000..31cec02 --- /dev/null +++ b/.air.toml @@ -0,0 +1,52 @@ +root = "." +testdata_dir = "testdata" +tmp_dir = "tmp" + +[build] + args_bin = [] + bin = "./tmp/main" + cmd = "go build -o ./tmp/main -tags \"systemd libsubid exclude_graphdriver_devicemapper seccomp seccomp\" ." + delay = 1000 + exclude_dir = ["assets", "tmp", "vendor", "testdata"] + exclude_file = [] + exclude_regex = ["_test.go"] + exclude_unchanged = false + follow_symlink = false + full_bin = "" + include_dir = [] + include_ext = ["go", "tpl", "tmpl", "html"] + include_file = [] + kill_delay = "0s" + log = "build-errors.log" + poll = false + poll_interval = 0 + post_cmd = [] + pre_cmd = [] + rerun = false + rerun_delay = 500 + send_interrupt = false + stop_on_error = false + +[color] + app = "" + build = "yellow" + main = "magenta" + runner = "green" + watcher = "cyan" + +[log] + main_only = false + silent = false + time = false + +[misc] + clean_on_exit = false + +[proxy] + app_port = 0 + enabled = false + proxy_port = 0 + +[screen] + clear_on_rebuild = false + keep_scroll = true diff --git a/lib/libpod/client.go b/lib/libpod/client.go new file mode 100644 index 0000000..4d16dc4 --- /dev/null +++ b/lib/libpod/client.go @@ -0,0 +1,27 @@ +package libpod + +import "github.com/containers/podman/v5/libpod/define" + +type ClientInfo struct { + OSArch string `json:"OS"` + Provider string `json:"provider"` + Version string `json:"version"` + BuildOrigin string `json:"buildOrigin,omitempty" yaml:",omitempty"` +} + +func GetClientInfo() (*ClientInfo, error) { + p, err := getProvider() + if err != nil { + return nil, err + } + vinfo, err := define.GetVersion() + if err != nil { + return nil, err + } + return &ClientInfo{ + OSArch: vinfo.OsArch, + Provider: p, + Version: vinfo.Version, + BuildOrigin: vinfo.BuildOrigin, + }, nil +} diff --git a/lib/libpod/client_supported.go b/lib/libpod/client_supported.go new file mode 100644 index 0000000..f925cf5 --- /dev/null +++ b/lib/libpod/client_supported.go @@ -0,0 +1,15 @@ +//go:build amd64 || arm64 + +package libpod + +import ( + "github.com/containers/podman/v5/pkg/machine/provider" +) + +func getProvider() (string, error) { + p, err := provider.Get() + if err != nil { + return "", err + } + return p.VMType().String(), nil +} diff --git a/lib/libpod/early_init_linux.go b/lib/libpod/early_init_linux.go new file mode 100644 index 0000000..f6301f2 --- /dev/null +++ b/lib/libpod/early_init_linux.go @@ -0,0 +1,33 @@ +package libpod + +import ( + "fmt" + "syscall" + + "github.com/sirupsen/logrus" +) + +func setRLimits() error { + rlimits := new(syscall.Rlimit) + if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil { + return fmt.Errorf("getting rlimits: %w", err) + } + rlimits.Cur = rlimits.Max + if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, rlimits); err != nil { + return fmt.Errorf("setting new rlimits: %w", err) + } + return nil +} + +func setUMask() { + // Be sure we can create directories with 0755 mode. + syscall.Umask(0022) +} + +func earlyInitHook() { + if err := setRLimits(); err != nil { + logrus.Errorf("Failed to set rlimits: %v", err) + } + + setUMask() +}