mirror of
https://github.com/SunBK201/UA3F.git
synced 2025-12-16 16:57:08 +00:00
refactor: DaemonSetup
This commit is contained in:
parent
12c19f9817
commit
992f4ceaba
54
src/internal/daemon/daemon.go
Normal file
54
src/internal/daemon/daemon.go
Normal 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
|
||||||
|
}
|
||||||
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user