refactor: DaemonSetup

This commit is contained in:
SunBK201 2025-12-08 21:57:07 +08:00
parent 12c19f9817
commit 992f4ceaba
3 changed files with 58 additions and 37 deletions

View File

@ -0,0 +1,54 @@
package daemon
import (
"fmt"
"log/slog"
"os"
"os/exec"
"os/user"
"strings"
"github.com/sunbk201/ua3f/internal/config"
)
func DaemonSetup(cfg *config.Config) error {
if IsOpenWrt() {
if err := SetOOMScoreAdj(-900); err != nil {
slog.Warn("SetOOMScoreAdj", slog.Any("error", err))
}
}
if err := SetUserGroup(cfg); err != nil {
return fmt.Errorf("SetUserGroup: %w", err)
}
return nil
}
func IsOpenWrt() bool {
checkFiles := []string{
"/etc/openwrt_release",
}
for _, f := range checkFiles {
if _, err := os.Stat(f); err == nil {
return true
}
}
data, err := os.ReadFile("/etc/os-release")
if err == nil && strings.Contains(string(data), "OpenWrt") {
return true
}
if _, err := user.Lookup("uci"); err == nil {
return true
}
if _, err := exec.LookPath("opkg"); err == nil {
return true
}
if _, err := user.Lookup("apk"); err == nil {
return true
}
return false
}

View File

@ -7,13 +7,13 @@ import (
"log" "log"
"log/slog" "log/slog"
"net" "net"
"os"
"os/exec" "os/exec"
"os/user" "os/user"
"strings" "strings"
"github.com/coreos/go-iptables/iptables" "github.com/coreos/go-iptables/iptables"
"github.com/sunbk201/ua3f/internal/config" "github.com/sunbk201/ua3f/internal/config"
"github.com/sunbk201/ua3f/internal/daemon"
"sigs.k8s.io/knftables" "sigs.k8s.io/knftables"
) )
@ -169,7 +169,7 @@ func (f *Firewall) DeleteTproxyRoute(fwmark, routeTable string) error {
} }
func detectFirewallBackend(cfg *config.Config) string { func detectFirewallBackend(cfg *config.Config) string {
isOpenwrt := isOpenWrt() isOpenwrt := daemon.IsOpenWrt()
if isOpenwrt { if isOpenwrt {
slog.Info("Detected OpenWrt environment") slog.Info("Detected OpenWrt environment")
} }
@ -276,36 +276,6 @@ func getLocalIPv4CIDRs() ([]string, error) {
return cidrs, nil return cidrs, nil
} }
func isOpenWrt() bool {
checkFiles := []string{
"/etc/openwrt_release",
}
for _, f := range checkFiles {
if _, err := os.Stat(f); err == nil {
return true
}
}
data, err := os.ReadFile("/etc/os-release")
if err == nil && strings.Contains(string(data), "OpenWrt") {
return true
}
if _, err := user.Lookup("uci"); err == nil {
return true
}
if _, err := exec.LookPath("opkg"); err == nil {
return true
}
if _, err := user.Lookup("apk"); err == nil {
return true
}
return false
}
func IsCommandAvailable(cmd string) bool { func IsCommandAvailable(cmd string) bool {
_, err := exec.LookPath(cmd) _, err := exec.LookPath(cmd)
return err == nil return err == nil

View File

@ -32,13 +32,10 @@ func main() {
log.LogHeader(appVersion, cfg) log.LogHeader(appVersion, cfg)
if err := daemon.SetUserGroup(cfg); err != nil { if err := daemon.DaemonSetup(cfg); err != nil {
slog.Error("daemon.SetUserGroup", slog.Any("error", err)) slog.Error("daemon.DaemonSetup", slog.Any("error", err))
return return
} }
if err := daemon.SetOOMScoreAdj(-800); err != nil {
slog.Warn("daemon.SetOOMScoreAdj", slog.Any("error", err))
}
helper := netlink.New(cfg) helper := netlink.New(cfg)
addShutdown("helper.Close", helper.Close) addShutdown("helper.Close", helper.Close)