From f4f5faf00e6c977612edeb11f3a6ef39aa63c445 Mon Sep 17 00:00:00 2001 From: jester Date: Sat, 21 Feb 2026 21:54:48 +0000 Subject: [PATCH] updated 2-21-26 --- go.mod | 6 + go.sum | 6 + internal/http/agent.go | 312 ++++++++++++++--- internal/http/console_sessions.go | 189 ++++++++++ internal/http/websocket.go | 242 ++++++------- internal/minecraft/status.go | 205 +++++++++++ internal/runtime/pty.go | 45 +++ internal/state/state.go | 22 +- internal/system/process.go | 313 ++++++++++------- internal/update/update.go | 530 +++++++++++++++++++++++++++++ internal/util/log.go | 2 + internal/version/version.go | 3 + main.go | 11 +- scripts/devcontainer/lib/common.sh | 69 +++- zlh-agent | Bin 8166384 -> 8517934 bytes 15 files changed, 1642 insertions(+), 313 deletions(-) create mode 100644 go.sum create mode 100644 internal/http/console_sessions.go create mode 100644 internal/minecraft/status.go create mode 100644 internal/runtime/pty.go create mode 100644 internal/update/update.go create mode 100644 internal/version/version.go diff --git a/go.mod b/go.mod index 7788eef..858c740 100755 --- a/go.mod +++ b/go.mod @@ -1,3 +1,9 @@ module zlh-agent go 1.21.6 + +require github.com/creack/pty v1.1.21 + +require github.com/gorilla/websocket v1.5.1 + +require golang.org/x/net v0.17.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..7b8f512 --- /dev/null +++ b/go.sum @@ -0,0 +1,6 @@ +github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= +github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= diff --git a/internal/http/agent.go b/internal/http/agent.go index 992bd62..17ededa 100755 --- a/internal/http/agent.go +++ b/internal/http/agent.go @@ -8,9 +8,11 @@ import ( "net/http" "os" "path/filepath" + "strconv" "strings" "time" + mcstatus "zlh-agent/internal/minecraft" "zlh-agent/internal/provision" "zlh-agent/internal/provision/devcontainer" "zlh-agent/internal/provision/devcontainer/go" @@ -20,11 +22,16 @@ import ( "zlh-agent/internal/provision/minecraft" "zlh-agent/internal/state" "zlh-agent/internal/system" + "zlh-agent/internal/update" + "zlh-agent/internal/version" ) -/* -------------------------------------------------------------------------- - Helpers -----------------------------------------------------------------------------*/ +/* + -------------------------------------------------------------------------- + Helpers + +---------------------------------------------------------------------------- +*/ func fileExists(path string) bool { _, err := os.Stat(path) return err == nil @@ -35,9 +42,12 @@ func dirExists(path string) bool { return err == nil && s.IsDir() } -/* -------------------------------------------------------------------------- - Shared provision pipeline (installer + Minecraft verify) -----------------------------------------------------------------------------*/ +/* + -------------------------------------------------------------------------- + Shared provision pipeline (installer + Minecraft verify) + +---------------------------------------------------------------------------- +*/ func runProvisionPipeline(cfg *state.Config) error { state.SetState(state.StateInstalling) state.SetInstallStep("provision_all") @@ -61,44 +71,45 @@ func runProvisionPipeline(cfg *state.Config) error { return nil } -/* -------------------------------------------------------------------------- - ensureProvisioned() — idempotent, unified -----------------------------------------------------------------------------*/ +/* + -------------------------------------------------------------------------- + ensureProvisioned() — idempotent, unified + +---------------------------------------------------------------------------- +*/ func ensureProvisioned(cfg *state.Config) error { -if cfg.ContainerType == "dev" { + if cfg.ContainerType == "dev" { - if !devcontainer.IsProvisioned() { - if err := runProvisionPipeline(cfg); err != nil { - return err - } - } + if !devcontainer.IsProvisioned() { + if err := runProvisionPipeline(cfg); err != nil { + return err + } + } - var err error + var err error - switch strings.ToLower(cfg.Runtime) { - case "node": - err = node.Verify(*cfg) - case "python": - err = python.Verify(*cfg) - case "go": - err = goenv.Verify(*cfg) - case "java": - err = java.Verify(*cfg) - default: - return fmt.Errorf("unsupported devcontainer runtime: %s", cfg.Runtime) - } + switch strings.ToLower(cfg.Runtime) { + case "node": + err = node.Verify(*cfg) + case "python": + err = python.Verify(*cfg) + case "go": + err = goenv.Verify(*cfg) + case "java": + err = java.Verify(*cfg) + default: + return fmt.Errorf("unsupported devcontainer runtime: %s", cfg.Runtime) + } - if err != nil { - return err - } - - // ✅ DEV READY = RUNNING - state.SetState(state.StateRunning) - state.SetError(nil) - return nil -} + if err != nil { + return err + } + state.SetState(state.StateIdle) + state.SetError(nil) + return nil + } dir := provision.ServerDir(*cfg) game := strings.ToLower(cfg.Game) @@ -131,9 +142,12 @@ if cfg.ContainerType == "dev" { return runProvisionPipeline(cfg) } -/* -------------------------------------------------------------------------- - /config — the REAL provisioning trigger (async) -----------------------------------------------------------------------------*/ +/* + -------------------------------------------------------------------------- + /config — the REAL provisioning trigger (async) + +---------------------------------------------------------------------------- +*/ func handleConfig(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "POST only", http.StatusMethodNotAllowed) @@ -193,6 +207,23 @@ func handleConfig(w http.ResponseWriter, r *http.Request) { time.Sleep(2 * time.Second) } + // Wait for server.properties to exist before enforcing + propsPath := filepath.Join(provision.ServerDir(c), "server.properties") + propsDeadline := time.Now().Add(2 * time.Minute) + for { + if _, err := os.Stat(propsPath); err == nil { + break + } + if time.Now().After(propsDeadline) { + err := fmt.Errorf("forge server.properties not found before timeout") + log.Println("[agent] forge post-start error:", err) + state.SetError(err) + state.SetState(state.StateError) + return + } + time.Sleep(2 * time.Second) + } + _ = system.StopServer() if err := minecraft.EnforceForgeServerProperties(c); err != nil { @@ -219,9 +250,12 @@ func handleConfig(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte(`{"ok": true, "state": "installing"}`)) } -/* -------------------------------------------------------------------------- - /start -----------------------------------------------------------------------------*/ +/* + -------------------------------------------------------------------------- + /start + +---------------------------------------------------------------------------- +*/ func handleStart(w http.ResponseWriter, r *http.Request) { cfg, err := state.LoadConfig() if err != nil { @@ -243,9 +277,12 @@ func handleStart(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte(`{"ok": true, "state": "starting"}`)) } -/* -------------------------------------------------------------------------- - /stop -----------------------------------------------------------------------------*/ +/* + -------------------------------------------------------------------------- + /stop + +---------------------------------------------------------------------------- +*/ func handleStop(w http.ResponseWriter, r *http.Request) { if err := system.StopServer(); err != nil { http.Error(w, "stop error: "+err.Error(), http.StatusInternalServerError) @@ -254,9 +291,12 @@ func handleStop(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusNoContent) } -/* -------------------------------------------------------------------------- - /restart -----------------------------------------------------------------------------*/ +/* + -------------------------------------------------------------------------- + /restart + +---------------------------------------------------------------------------- +*/ func handleRestart(w http.ResponseWriter, r *http.Request) { cfg, err := state.LoadConfig() if err != nil { @@ -280,9 +320,12 @@ func handleRestart(w http.ResponseWriter, r *http.Request) { _, _ = w.Write([]byte(`{"ok": true, "state": "starting"}`)) } -/* -------------------------------------------------------------------------- - /status -----------------------------------------------------------------------------*/ +/* + -------------------------------------------------------------------------- + /status + +---------------------------------------------------------------------------- +*/ func handleStatus(w http.ResponseWriter, r *http.Request) { cfg, _ := state.LoadConfig() @@ -303,9 +346,12 @@ func handleStatus(w http.ResponseWriter, r *http.Request) { _ = json.NewEncoder(w).Encode(resp) } -/* -------------------------------------------------------------------------- - /console/command -----------------------------------------------------------------------------*/ +/* + -------------------------------------------------------------------------- + /console/command + +---------------------------------------------------------------------------- +*/ func handleSendCommand(w http.ResponseWriter, r *http.Request) { cmd := r.URL.Query().Get("cmd") if cmd == "" { @@ -322,8 +368,158 @@ func handleSendCommand(w http.ResponseWriter, r *http.Request) { } /* -------------------------------------------------------------------------- - Router + /agent/update ----------------------------------------------------------------------------*/ + +func handleAgentUpdate(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodPost { + http.Error(w, "POST only", http.StatusMethodNotAllowed) + return + } + + res := update.CheckAndUpdate(version.AgentVersion) + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(res) +} + +/* -------------------------------------------------------------------------- + /agent/update/status +----------------------------------------------------------------------------*/ + +func handleAgentUpdateStatus(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "GET only", http.StatusMethodNotAllowed) + return + } + + res := update.ReadStatus() + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(res) +} + +/* -------------------------------------------------------------------------- + /version +----------------------------------------------------------------------------*/ + +func handleVersion(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "GET only", http.StatusMethodNotAllowed) + return + } + resp := map[string]any{ + "version": version.AgentVersion, + } + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(resp) +} + +/* -------------------------------------------------------------------------- + /game/players +----------------------------------------------------------------------------*/ + +func handleGamePlayers(w http.ResponseWriter, r *http.Request) { + if r.Method != http.MethodGet { + http.Error(w, "GET only", http.StatusMethodNotAllowed) + return + } + + cfg, err := state.LoadConfig() + if err != nil { + http.Error(w, "no config loaded", http.StatusBadRequest) + return + } + if strings.ToLower(cfg.ContainerType) != "game" { + http.Error(w, "not a game container", http.StatusBadRequest) + return + } + if strings.ToLower(cfg.Game) != "minecraft" { + http.Error(w, "unsupported game", http.StatusNotImplemented) + return + } + + ports := make([]int, 0, 3) + propsPath := filepath.Join(provision.ServerDir(*cfg), "server.properties") + if b, err := os.ReadFile(propsPath); err == nil { + lines := strings.Split(string(b), "\n") + for _, l := range lines { + if strings.HasPrefix(l, "server-port=") { + if p, err := strconv.Atoi(strings.TrimPrefix(l, "server-port=")); err == nil && p > 0 { + ports = append(ports, p) + } + break + } + } + } + if len(cfg.Ports) > 0 && cfg.Ports[0] > 0 { + ports = append(ports, cfg.Ports[0]) + } + ports = append(ports, 25565) + + seenPorts := make(map[int]struct{}, len(ports)) + uniqPorts := make([]int, 0, len(ports)) + for _, p := range ports { + if _, ok := seenPorts[p]; ok { + continue + } + seenPorts[p] = struct{}{} + uniqPorts = append(uniqPorts, p) + } + + protocols := []int{mcstatus.ProtocolForVersion(cfg.Version), 767, 765, 763, 762, 754} + seenProtocols := make(map[int]struct{}, len(protocols)) + uniqProtocols := make([]int, 0, len(protocols)) + for _, pr := range protocols { + if _, ok := seenProtocols[pr]; ok { + continue + } + seenProtocols[pr] = struct{}{} + uniqProtocols = append(uniqProtocols, pr) + } + + var status mcstatus.StatusResponse + var lastErr error + for _, port := range uniqPorts { + for _, protocol := range uniqProtocols { + s, err := mcstatus.QueryStatus("127.0.0.1", port, protocol) + if err != nil { + lastErr = err + continue + } + status = s + lastErr = nil + break + } + if lastErr == nil { + break + } + } + if lastErr != nil { + http.Error(w, "status query failed: "+lastErr.Error(), http.StatusBadGateway) + return + } + + players := make([]string, 0, len(status.Players.Sample)) + for _, p := range status.Players.Sample { + if p.Name != "" { + players = append(players, p.Name) + } + } + + resp := map[string]any{ + "online": status.Players.Online, + "max": status.Players.Max, + "players": players, + } + w.Header().Set("Content-Type", "application/json") + _ = json.NewEncoder(w).Encode(resp) +} + +/* + -------------------------------------------------------------------------- + Router + +---------------------------------------------------------------------------- +*/ func NewMux() *http.ServeMux { m := http.NewServeMux() @@ -333,6 +529,10 @@ func NewMux() *http.ServeMux { m.HandleFunc("/restart", handleRestart) m.HandleFunc("/status", handleStatus) m.HandleFunc("/console/command", handleSendCommand) + m.HandleFunc("/agent/update", handleAgentUpdate) + m.HandleFunc("/agent/update/status", handleAgentUpdateStatus) + m.HandleFunc("/version", handleVersion) + m.HandleFunc("/game/players", handleGamePlayers) registerWebSocket(m) diff --git a/internal/http/console_sessions.go b/internal/http/console_sessions.go new file mode 100644 index 0000000..adf8ced --- /dev/null +++ b/internal/http/console_sessions.go @@ -0,0 +1,189 @@ +package agenthttp + +import ( + "fmt" + "io" + "log" + "os" + "sync" + "time" + + "github.com/gorilla/websocket" + + "zlh-agent/internal/runtime" + "zlh-agent/internal/state" + "zlh-agent/internal/system" +) + +const sessionTTL = 60 * time.Second + +type consoleConn struct { + send chan []byte +} + +type consoleSession struct { + key string + cfg *state.Config + ptyFile *os.File + createdAt time.Time + lastActive time.Time + + mu sync.Mutex + conns map[*websocket.Conn]*consoleConn + readerOnce sync.Once +} + +var ( + sessionMu sync.Mutex + sessions = make(map[string]*consoleSession) +) + +func sessionKey(cfg *state.Config) string { + return fmt.Sprintf("%d:%s", cfg.VMID, cfg.ContainerType) +} + +func getConsoleSession(cfg *state.Config) (*consoleSession, bool, error) { + key := sessionKey(cfg) + + sessionMu.Lock() + if sess, ok := sessions[key]; ok { + sessionMu.Unlock() + sess.touch() + log.Printf("[ws] session reuse: vmid=%d type=%s", cfg.VMID, cfg.ContainerType) + return sess, true, nil + } + sessionMu.Unlock() + + ptyFile, err := system.GetConsolePTY(cfg) + if err != nil { + return nil, false, err + } + + sess := &consoleSession{ + key: key, + cfg: cfg, + ptyFile: ptyFile, + createdAt: time.Now(), + lastActive: time.Now(), + conns: make(map[*websocket.Conn]*consoleConn), + } + + sess.startReader() + + sessionMu.Lock() + sessions[key] = sess + sessionMu.Unlock() + + log.Printf("[ws] session created: vmid=%d type=%s", cfg.VMID, cfg.ContainerType) + return sess, false, nil +} + +func (s *consoleSession) touch() { + s.mu.Lock() + s.lastActive = time.Now() + s.mu.Unlock() +} + +func (s *consoleSession) addConn(conn *websocket.Conn, cc *consoleConn) *consoleConn { + s.mu.Lock() + defer s.mu.Unlock() + + if cc == nil { + cc = &consoleConn{send: make(chan []byte, 128)} + } + s.conns[conn] = cc + s.lastActive = time.Now() + log.Printf("[ws] conn add: vmid=%d type=%s conns=%d", s.cfg.VMID, s.cfg.ContainerType, len(s.conns)) + return cc +} + +func (s *consoleSession) removeConn(conn *websocket.Conn) int { + s.mu.Lock() + defer s.mu.Unlock() + + cc, ok := s.conns[conn] + if ok { + delete(s.conns, conn) + close(cc.send) + } + s.lastActive = time.Now() + log.Printf("[ws] conn remove: vmid=%d type=%s conns=%d", s.cfg.VMID, s.cfg.ContainerType, len(s.conns)) + return len(s.conns) +} + +func (s *consoleSession) startReader() { + s.readerOnce.Do(func() { + go func() { + buf := make([]byte, 4096) + for { + n, err := s.ptyFile.Read(buf) + if n > 0 { + out := make([]byte, n) + copy(out, buf[:n]) + log.Printf("[ws] pty read: vmid=%d bytes=%d", s.cfg.VMID, n) + s.broadcast(out) + } + if err != nil { + if err == io.EOF { + log.Printf("[ws] pty read loop exit: vmid=%d err=EOF", s.cfg.VMID) + } else { + log.Printf("[ws] pty read loop exit: vmid=%d err=%v", s.cfg.VMID, err) + } + return + } + if n == 0 && err == nil { + continue + } + } + }() + }) +} + +func (s *consoleSession) broadcast(data []byte) { + s.mu.Lock() + defer s.mu.Unlock() + s.lastActive = time.Now() + for _, cc := range s.conns { + select { + case cc.send <- data: + default: + select { + case <-cc.send: + default: + } + select { + case cc.send <- data: + default: + } + } + } +} + +func (s *consoleSession) writeInput(data []byte) error { + s.touch() + return runtime.Write(s.ptyFile, data) +} + +func (s *consoleSession) scheduleCleanupIfIdle() { + s.mu.Lock() + last := s.lastActive + s.mu.Unlock() + + go func(ts time.Time) { + time.Sleep(sessionTTL) + s.mu.Lock() + conns := len(s.conns) + lastActive := s.lastActive + s.mu.Unlock() + + if conns == 0 && lastActive.Equal(ts) { + log.Printf("[ws] session cleanup: vmid=%d type=%s", s.cfg.VMID, s.cfg.ContainerType) + if s.cfg.ContainerType == "dev" { + _ = system.StopDevShell() + } + sessionMu.Lock() + delete(sessions, s.key) + sessionMu.Unlock() + } + }(last) +} diff --git a/internal/http/websocket.go b/internal/http/websocket.go index 7442f62..9bbcec5 100644 --- a/internal/http/websocket.go +++ b/internal/http/websocket.go @@ -1,19 +1,13 @@ package agenthttp import ( - "bufio" - "crypto/sha1" - "encoding/base64" "fmt" "log" - "net" "net/http" - "os" - "path/filepath" - "strings" "time" - "zlh-agent/internal/provision" + "github.com/gorilla/websocket" + "zlh-agent/internal/state" ) @@ -25,86 +19,14 @@ import ( GET /console/stream */ -const maxInitialTail = 4096 // 4 KB +const maxPayloadSize = 64 * 1024 -/* -------------------------------------------------------------------------- - Minimal WebSocket Upgrader (stdlib only) -----------------------------------------------------------------------------*/ - -type WebSocketConn struct { - Conn net.Conn - Rw *bufio.ReadWriter -} - -func upgradeToWebSocket(w http.ResponseWriter, r *http.Request) (*WebSocketConn, error) { - if !strings.Contains(strings.ToLower(r.Header.Get("Connection")), "upgrade") || - strings.ToLower(r.Header.Get("Upgrade")) != "websocket" { - return nil, fmt.Errorf("invalid websocket upgrade request") - } - - key := r.Header.Get("Sec-WebSocket-Key") - if key == "" { - return nil, fmt.Errorf("missing Sec-WebSocket-Key") - } - - accept := computeAcceptKey(key) - - h := w.Header() - h.Set("Upgrade", "websocket") - h.Set("Connection", "Upgrade") - h.Set("Sec-WebSocket-Accept", accept) - h.Set("Sec-WebSocket-Version", "13") - - w.WriteHeader(http.StatusSwitchingProtocols) - - hj, ok := w.(http.Hijacker) - if !ok { - return nil, fmt.Errorf("websocket: hijacking not supported") - } - - conn, rw, err := hj.Hijack() - if err != nil { - return nil, fmt.Errorf("websocket hijack: %w", err) - } - - return &WebSocketConn{ - Conn: conn, - Rw: rw, - }, nil -} - -func (c *WebSocketConn) WriteText(msg string) error { - payload := []byte(msg) - - // FIN + opcode(1 = text) - header := []byte{0x81} - - // Length encoding - if len(payload) < 126 { - header = append(header, byte(len(payload))) - } else { - header = append(header, 126, byte(len(payload)>>8), byte(len(payload))) - } - - if _, err := c.Conn.Write(header); err != nil { - return err - } - _, err := c.Conn.Write(payload) - return err -} - -func (c *WebSocketConn) Close() error { - return c.Conn.Close() -} - -/* -------------------------------------------------------------------------- - SHA-1 + Base64 for Sec-WebSocket-Accept -----------------------------------------------------------------------------*/ - -func computeAcceptKey(key string) string { - const magic = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11" - h := sha1.Sum([]byte(key + magic)) - return base64.StdEncoding.EncodeToString(h[:]) +var wsUpgrader = websocket.Upgrader{ + ReadBufferSize: 4096, + WriteBufferSize: 4096, + CheckOrigin: func(r *http.Request) bool { + return true + }, } /* -------------------------------------------------------------------------- @@ -117,45 +39,131 @@ func handleConsoleStream(w http.ResponseWriter, r *http.Request) { http.Error(w, "no config loaded", http.StatusBadRequest) return } + log.Printf("[ws] console connect: vmid=%d type=%s runtime=%s game=%s", cfg.VMID, cfg.ContainerType, cfg.Runtime, cfg.Game) - ws, err := upgradeToWebSocket(w, r) + conn, err := wsUpgrader.Upgrade(w, r, nil) if err != nil { log.Println("[ws] upgrade failed:", err) http.Error(w, "websocket upgrade failed", http.StatusBadRequest) return } - defer ws.Close() + defer conn.Close() - dir := provision.ServerDir(*cfg) - logfile := filepath.Join(dir, "logs", "latest.log") + conn.SetReadLimit(maxPayloadSize) + conn.SetCloseHandler(func(code int, text string) error { + log.Printf("[ws] close frame: vmid=%d code=%d text=%q", cfg.VMID, code, text) + return nil + }) - f, err := os.Open(logfile) - if err != nil { - _ = ws.WriteText(fmt.Sprintf("[error] cannot open log: %v", err)) - return - } - defer f.Close() - - // 1) Send last 4 KB (initial tail) - stat, _ := f.Stat() - sz := stat.Size() - if sz > maxInitialTail { - _, _ = f.Seek(sz-maxInitialTail, 0) - } - - scanner := bufio.NewScanner(f) - for scanner.Scan() { - _ = ws.WriteText(scanner.Text()) - } - - // 2) Follow the file — stream new log lines live - for { - time.Sleep(500 * time.Millisecond) - for scanner.Scan() { - line := scanner.Text() - _ = ws.WriteText(line) + sendCh := make(chan []byte, 64) + writeErrCh := make(chan error, 1) + go func() { + ticker := time.NewTicker(5 * time.Second) + defer ticker.Stop() + for { + select { + case msg, ok := <-sendCh: + if !ok { + writeErrCh <- nil + return + } + if err := conn.WriteMessage(websocket.TextMessage, msg); err != nil { + writeErrCh <- err + return + } + case <-ticker.C: + if err := conn.WriteMessage(websocket.TextMessage, []byte{}); err != nil { + writeErrCh <- err + return + } + } + } + }() + + inputCh := make(chan []byte, 32) + readErrCh := make(chan error, 1) + go func() { + for { + msgType, msg, err := conn.ReadMessage() + if err != nil { + log.Printf("[ws] read error: vmid=%d err=%v", cfg.VMID, err) + readErrCh <- err + close(inputCh) + return + } + if msgType == websocket.TextMessage || msgType == websocket.BinaryMessage { + log.Printf("[ws] input: vmid=%d bytes=%d type=%d", cfg.VMID, len(msg), msgType) + inputCh <- msg + } + } + }() + + waitingNotified := false + var sess *consoleSession + sessionBound := false + for { + sess, _, err = getConsoleSession(cfg) + if err == nil { + log.Printf("[ws] console attached: vmid=%d type=%s", cfg.VMID, cfg.ContainerType) + break + } + if cfg.ContainerType != "dev" { + if !waitingNotified { + sendCh <- []byte("[info] waiting for server console...") + log.Printf("[ws] waiting for server console: vmid=%d type=%s err=%v", cfg.VMID, cfg.ContainerType, err) + waitingNotified = true + } + } else { + log.Printf("[ws] dev console unavailable: vmid=%d err=%v", cfg.VMID, err) + sendCh <- []byte(fmt.Sprintf("[error] %v", err)) + if !sessionBound { + close(sendCh) + } + return + } + + select { + case <-time.After(500 * time.Millisecond): + case <-readErrCh: + if !sessionBound { + close(sendCh) + } + return + case <-writeErrCh: + if !sessionBound { + close(sendCh) + } + return + } + } + + sess.addConn(conn, &consoleConn{send: sendCh}) + sessionBound = true + defer func() { + if sess != nil { + if sess.removeConn(conn) == 0 { + sess.scheduleCleanupIfIdle() + } + } + }() + + for { + select { + case msg, ok := <-inputCh: + if !ok { + return + } + if err := sess.writeInput(msg); err != nil { + sendCh <- []byte(fmt.Sprintf("[error] %v", err)) + } + case <-readErrCh: + return + case err := <-writeErrCh: + if err != nil { + log.Printf("[ws] write error: vmid=%d err=%v", cfg.VMID, err) + } + return } - // on EOF, loop continues and scanner will pick up new lines } } diff --git a/internal/minecraft/status.go b/internal/minecraft/status.go new file mode 100644 index 0000000..5b13b73 --- /dev/null +++ b/internal/minecraft/status.go @@ -0,0 +1,205 @@ +package minecraft + +import ( + "bytes" + "encoding/binary" + "encoding/json" + "fmt" + "io" + "net" + "strings" + "time" +) + +type StatusResponse struct { + Version struct { + Name string `json:"name"` + Protocol int `json:"protocol"` + } `json:"version"` + Players struct { + Max int `json:"max"` + Online int `json:"online"` + Sample []struct { + Name string `json:"name"` + ID string `json:"id"` + } `json:"sample"` + } `json:"players"` +} + +func ProtocolForVersion(version string) int { + v := strings.TrimSpace(strings.TrimPrefix(version, "v")) + switch v { + case "1.21.1": + return 767 + case "1.21": + return 767 + case "1.20.4": + return 765 + case "1.20.1": + return 763 + case "1.19.4": + return 762 + default: + return 754 + } +} + +func QueryStatus(host string, port int, protocol int) (StatusResponse, error) { + addr := fmt.Sprintf("%s:%d", host, port) + conn, err := net.DialTimeout("tcp", addr, 3*time.Second) + if err != nil { + return StatusResponse{}, err + } + defer conn.Close() + + _ = conn.SetDeadline(time.Now().Add(5 * time.Second)) + + if err := writeHandshake(conn, host, port, protocol); err != nil { + return StatusResponse{}, err + } + if err := writeStatusRequest(conn); err != nil { + return StatusResponse{}, err + } + + payload, err := readPacket(conn) + if err != nil { + return StatusResponse{}, err + } + + r := bytes.NewReader(payload) + packetID, err := readVarInt(r) + if err != nil { + return StatusResponse{}, err + } + if packetID != 0x00 { + return StatusResponse{}, fmt.Errorf("unexpected packet id: %d", packetID) + } + + respStr, err := readString(r) + if err != nil { + return StatusResponse{}, err + } + + var status StatusResponse + if err := json.Unmarshal([]byte(respStr), &status); err != nil { + return StatusResponse{}, err + } + return status, nil +} + +func writeHandshake(w io.Writer, host string, port int, protocol int) error { + var payload bytes.Buffer + if err := writeVarInt(&payload, 0x00); err != nil { + return err + } + if err := writeVarInt(&payload, protocol); err != nil { + return err + } + if err := writeString(&payload, host); err != nil { + return err + } + if err := binary.Write(&payload, binary.BigEndian, uint16(port)); err != nil { + return err + } + if err := writeVarInt(&payload, 0x01); err != nil { + return err + } + + return writePacket(w, payload.Bytes()) +} + +func writeStatusRequest(w io.Writer) error { + var payload bytes.Buffer + if err := writeVarInt(&payload, 0x00); err != nil { + return err + } + return writePacket(w, payload.Bytes()) +} + +func writePacket(w io.Writer, payload []byte) error { + var buf bytes.Buffer + if err := writeVarInt(&buf, len(payload)); err != nil { + return err + } + if _, err := buf.Write(payload); err != nil { + return err + } + _, err := w.Write(buf.Bytes()) + return err +} + +func readPacket(r io.Reader) ([]byte, error) { + length, err := readVarInt(r) + if err != nil { + return nil, err + } + if length <= 0 || length > 1<<20 { + return nil, fmt.Errorf("invalid packet length: %d", length) + } + buf := make([]byte, length) + if _, err := io.ReadFull(r, buf); err != nil { + return nil, err + } + return buf, nil +} + +func writeVarInt(w io.Writer, value int) error { + for { + temp := byte(value & 0x7F) + value >>= 7 + if value != 0 { + temp |= 0x80 + } + if _, err := w.Write([]byte{temp}); err != nil { + return err + } + if value == 0 { + break + } + } + return nil +} + +func readVarInt(r io.Reader) (int, error) { + numRead := 0 + result := 0 + for { + if numRead > 5 { + return 0, fmt.Errorf("varint too long") + } + b := make([]byte, 1) + if _, err := r.Read(b); err != nil { + return 0, err + } + value := int(b[0] & 0x7F) + result |= value << (7 * numRead) + numRead++ + if b[0]&0x80 == 0 { + break + } + } + return result, nil +} + +func writeString(w io.Writer, s string) error { + if err := writeVarInt(w, len(s)); err != nil { + return err + } + _, err := w.Write([]byte(s)) + return err +} + +func readString(r io.Reader) (string, error) { + length, err := readVarInt(r) + if err != nil { + return "", err + } + if length < 0 || length > 1<<20 { + return "", fmt.Errorf("invalid string length: %d", length) + } + buf := make([]byte, length) + if _, err := io.ReadFull(r, buf); err != nil { + return "", err + } + return string(buf), nil +} diff --git a/internal/runtime/pty.go b/internal/runtime/pty.go new file mode 100644 index 0000000..13f23e1 --- /dev/null +++ b/internal/runtime/pty.go @@ -0,0 +1,45 @@ +package runtime + +import ( + "os" + "os/exec" + + "github.com/creack/pty" +) + +// CreatePTY starts cmd attached to a PTY and returns the PTY file. +func CreatePTY(cmd *exec.Cmd) (*os.File, error) { + ptmx, err := pty.Start(cmd) + if err != nil { + return nil, err + } + return ptmx, nil +} + +// ReadLoop reads from a PTY in non-blocking mode and streams chunks to onData. +func ReadLoop(ptyFile *os.File, stop <-chan struct{}, onData func([]byte) error) error { + buf := make([]byte, 4096) + for { + n, err := ptyFile.Read(buf) + if n > 0 { + if writeErr := onData(buf[:n]); writeErr != nil { + return writeErr + } + } + if err != nil { + return err + } + + select { + case <-stop: + return nil + default: + } + } +} + +// Write sends data to the PTY. +func Write(ptyFile *os.File, data []byte) error { + _, err := ptyFile.Write(data) + return err +} diff --git a/internal/state/state.go b/internal/state/state.go index 29fcc1b..2fb6be5 100755 --- a/internal/state/state.go +++ b/internal/state/state.go @@ -4,6 +4,7 @@ import ( "encoding/json" "log" "os" + "strconv" "sync" "time" ) @@ -42,8 +43,6 @@ type Config struct { AdminPass string `json:"admin_pass,omitempty"` } - - /* -------------------------------------------------------------------------- AGENT STATE ENUM ----------------------------------------------------------------------------*/ @@ -181,5 +180,24 @@ func LoadConfig() (*Config, error) { if err := json.Unmarshal(b, &cfg); err != nil { return nil, err } + + if cfg.ContainerType == "" { + vmidStr := strconv.Itoa(cfg.VMID) + if len(vmidStr) > 0 { + switch vmidStr[0] { + case '6': + cfg.ContainerType = "dev" + case '5': + cfg.ContainerType = "game" + } + } + if cfg.ContainerType == "" && cfg.Runtime != "" { + cfg.ContainerType = "dev" + } + if cfg.ContainerType == "" { + cfg.ContainerType = "game" + } + } + return &cfg, nil } diff --git a/internal/system/process.go b/internal/system/process.go index c0b229e..2c8ab2d 100755 --- a/internal/system/process.go +++ b/internal/system/process.go @@ -1,28 +1,30 @@ package system import ( - "fmt" - "io" - "os" - "os/exec" - "path/filepath" - "strings" // <-- ADD THIS + "fmt" + "os" + "os/exec" + "path/filepath" + "strings" "sync" - "time" + "time" - "zlh-agent/internal/provision" - "zlh-agent/internal/state" + "zlh-agent/internal/provision" + "zlh-agent/internal/runtime" + "zlh-agent/internal/state" ) - /* -------------------------------------------------------------------------- GLOBAL PROCESS STATE ----------------------------------------------------------------------------*/ var ( - mu sync.Mutex - serverCmd *exec.Cmd - serverStdin io.WriteCloser + mu sync.Mutex + serverCmd *exec.Cmd + serverPTY *os.File + + devCmd *exec.Cmd + devPTY *os.File ) /* -------------------------------------------------------------------------- @@ -30,129 +32,54 @@ var ( ----------------------------------------------------------------------------*/ func StartServer(cfg *state.Config) error { - mu.Lock() - defer mu.Unlock() + mu.Lock() + defer mu.Unlock() - // Already running? - if serverCmd != nil { - return fmt.Errorf("server already running") - } + // Already running? + if serverCmd != nil { + return fmt.Errorf("server already running") + } - dir := provision.ServerDir(*cfg) - startScript := filepath.Join(dir, "start.sh") + dir := provision.ServerDir(*cfg) + startScript := filepath.Join(dir, "start.sh") - cmd := exec.Command("/bin/bash", startScript) - cmd.Dir = dir + cmd := exec.Command("/bin/bash", startScript) + cmd.Dir = dir - stdout, _ := cmd.StdoutPipe() - stderr, _ := cmd.StderrPipe() - stdin, _ := cmd.StdinPipe() + ptmx, err := runtime.CreatePTY(cmd) + if err != nil { + return fmt.Errorf("start server: %w", err) + } - serverStdin = stdin - serverCmd = cmd + serverCmd = cmd + serverPTY = ptmx - // Mark STARTING (not running) - state.SetState(state.StateStarting) + state.SetState(state.StateRunning) + state.SetError(nil) - if err := cmd.Start(); err != nil { - serverCmd = nil - return fmt.Errorf("start server: %w", err) - } + go func() { + err := cmd.Wait() - /* ------------------------- - Log pumps - --------------------------*/ - go pumpOutput(stdout, os.Stdout) - go pumpOutput(stderr, os.Stderr) + mu.Lock() + defer mu.Unlock() - /* ------------------------- - Detect "Done" → running - --------------------------*/ - go detectMinecraftReady(cfg) + if serverPTY != nil { + _ = serverPTY.Close() + } - /* ------------------------- - Crash watcher - --------------------------*/ - go func() { - err := cmd.Wait() + if err != nil { + state.RecordCrash(err) + } else { + state.SetState(state.StateIdle) + } - mu.Lock() - defer mu.Unlock() + serverCmd = nil + serverPTY = nil + }() - if err != nil { - state.RecordCrash(err) - serverCmd = nil - serverStdin = nil - return - } - - // Normal stop - state.SetState(state.StateIdle) - serverCmd = nil - serverStdin = nil - }() - - return nil + return nil } -/* helper to pump logs */ -func pumpOutput(r io.Reader, w *os.File) { - buf := make([]byte, 4096) - for { - n, err := r.Read(buf) - if n > 0 { - w.Write(buf[:n]) - } - if err != nil { - return - } - } -} - -/* Detects Minecraft "Done" and updates state */ -func detectMinecraftReady(cfg *state.Config) { - dir := provision.ServerDir(*cfg) - logPath := filepath.Join(dir, "logs", "latest.log") - - deadline := time.Now().Add(5 * time.Minute) // FORGE NEEDS MORE TIME - - lastSize := int64(0) - - for time.Now().Before(deadline) { - - // Wait for log file to appear - st, err := os.Stat(logPath) - if err == nil { - // ensure file is growing - if st.Size() != lastSize { - lastSize = st.Size() - - b, _ := os.ReadFile(logPath) - s := string(b) - - // UNIVERSAL READY MATCHES - if strings.Contains(s, "Done (") || - strings.Contains(s, "For help, type \"help\"") || - strings.Contains(s, "Successfully loaded forge") || - strings.Contains(s, "Preparing spawn area: 100%") { - - state.SetState(state.StateRunning) - state.SetError(nil) - return - } - } - } - - time.Sleep(2 * time.Second) - } - - state.SetState(state.StateError) - state.SetError(fmt.Errorf("server failed to reach running state before timeout")) -} - - - - /* -------------------------------------------------------------------------- StopServer ----------------------------------------------------------------------------*/ @@ -168,10 +95,10 @@ func StopServer() error { state.SetState(state.StateStopping) // Try graceful stop - if serverStdin != nil { - _, _ = serverStdin.Write([]byte("save-all\n")) + if serverPTY != nil { + _ = runtime.Write(serverPTY, []byte("save-all\n")) time.Sleep(2 * time.Second) - _, _ = serverStdin.Write([]byte("stop\n")) + _ = runtime.Write(serverPTY, []byte("stop\n")) } // Wait a moment @@ -182,9 +109,6 @@ func StopServer() error { _ = serverCmd.Process.Kill() } - state.SetState(state.StateIdle) - serverCmd = nil - serverStdin = nil return nil } @@ -208,10 +132,137 @@ func SendConsoleCommand(cmd string) error { mu.Lock() defer mu.Unlock() - if serverStdin == nil { + if serverPTY == nil { return fmt.Errorf("server console not available") } - _, err := serverStdin.Write([]byte(cmd + "\n")) - return err + return runtime.Write(serverPTY, []byte(cmd+"\n")) +} + +/* -------------------------------------------------------------------------- + Dev Shell PTY +----------------------------------------------------------------------------*/ + +func StartDevShell() (*os.File, error) { + mu.Lock() + defer mu.Unlock() + + if devPTY != nil && devCmd != nil { + return devPTY, nil + } + + shell := "/bin/bash" + if _, err := os.Stat(shell); err != nil { + shell = "/bin/sh" + } + + var cmd *exec.Cmd + if shell == "/bin/bash" { + cmd = exec.Command(shell, "-l", "-i") + } else { + cmd = exec.Command(shell, "-i") + } + cmd.Dir = "/opt" + + ptmx, err := runtime.CreatePTY(cmd) + if err != nil { + return nil, fmt.Errorf("start dev shell: %w", err) + } + + devCmd = cmd + devPTY = ptmx + + state.SetState(state.StateRunning) + state.SetError(nil) + + go func() { + err := cmd.Wait() + + mu.Lock() + defer mu.Unlock() + + if devPTY != nil { + _ = devPTY.Close() + } + + if err != nil { + state.RecordCrash(err) + } else { + state.SetState(state.StateIdle) + } + + devCmd = nil + devPTY = nil + }() + + return devPTY, nil +} + +func GetConsolePTY(cfg *state.Config) (*os.File, error) { + if cfg.ContainerType == "dev" { + return StartDevShell() + } + + mu.Lock() + defer mu.Unlock() + + if serverPTY == nil { + return nil, fmt.Errorf("server console not available") + } + return serverPTY, nil +} + +func WriteConsoleInput(cfg *state.Config, input string) error { + if strings.HasSuffix(input, "\n") { + input = strings.TrimSuffix(input, "\n") + } + payload := []byte(input + "\n") + + if cfg.ContainerType == "dev" { + mu.Lock() + defer mu.Unlock() + if devPTY == nil { + return fmt.Errorf("dev shell not available") + } + return runtime.Write(devPTY, payload) + } + + mu.Lock() + defer mu.Unlock() + if serverPTY == nil { + return fmt.Errorf("server console not available") + } + return runtime.Write(serverPTY, payload) +} + +/* -------------------------------------------------------------------------- + Stop Dev Shell +----------------------------------------------------------------------------*/ + +func StopDevShell() error { + mu.Lock() + defer mu.Unlock() + + if devCmd == nil { + return nil + } + + if devPTY != nil { + _ = runtime.Write(devPTY, []byte("exit\n")) + } + + time.Sleep(1 * time.Second) + + if devCmd.Process != nil { + _ = devCmd.Process.Kill() + } + + if devPTY != nil { + _ = devPTY.Close() + devPTY = nil + } + + devCmd = nil + state.SetState(state.StateIdle) + return nil } diff --git a/internal/update/update.go b/internal/update/update.go new file mode 100644 index 0000000..bf8f0d4 --- /dev/null +++ b/internal/update/update.go @@ -0,0 +1,530 @@ +package update + +import ( + "crypto/sha256" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "io" + "log" + "net/http" + "os" + "os/exec" + "path/filepath" + "runtime" + "strings" + "time" +) + +const ( + artifactBaseURL = "http://10.60.0.251:8080/agents/" + releasesDir = "/opt/zlh-agent/releases" + currentLink = "/opt/zlh-agent/current" + previousLink = "/opt/zlh-agent/previous" + binaryPath = "/opt/zlh-agent/zlh-agent" + stateDir = "/opt/zlh-agent/state" + statusFile = "/opt/zlh-agent/state/update.json" + defaultUnit = "zlh-agent" + defaultMode = "notify" +) + +type Manifest struct { + SchemaVersion int `json:"schema_version"` + Latest string `json:"latest"` + MinSupported string `json:"min_supported"` + Channels map[string]string `json:"channels"` + Artifacts map[string]struct { + LinuxAMD64 struct { + Binary string `json:"binary"` + SHA256 string `json:"sha256"` + } `json:"linux_amd64"` + } `json:"artifacts"` + ReleasedAt string `json:"released_at"` +} + +type Result struct { + Status string `json:"status"` + Current string `json:"current,omitempty"` + Target string `json:"target,omitempty"` + Error string `json:"error,omitempty"` + CheckedAtUTC string `json:"checked_at_utc,omitempty"` +} + +func CheckAvailable(currentVersion string) Result { + currentVersion = normalizeVersion(currentVersion) + result := Result{ + Status: "error", + Current: currentVersion, + CheckedAtUTC: time.Now().UTC().Format(time.RFC3339), + } + + manifest, err := fetchManifest() + if err != nil { + result.Error = err.Error() + writeStatus(result) + return result + } + if manifest.SchemaVersion != 1 { + result.Error = fmt.Sprintf("unsupported manifest schema: %d", manifest.SchemaVersion) + writeStatus(result) + return result + } + + target := normalizeVersion(manifest.Channels["stable"]) + if target == "" { + result.Error = "missing stable channel version" + writeStatus(result) + return result + } + result.Target = target + + if compareVersions(currentVersion, target) >= 0 { + result.Status = "noop" + result.Error = "" + writeStatus(result) + return result + } + + result.Status = "available" + result.Error = "" + writeStatus(result) + return result +} + +func StartPeriodic(currentVersion string) { + mode := strings.ToLower(strings.TrimSpace(os.Getenv("ZLH_AGENT_UPDATE_MODE"))) + if mode == "" { + mode = defaultMode + } + + switch mode { + case "off", "disabled": + log.Printf("[update] periodic checks disabled (mode=%s)", mode) + return + case "notify", "auto": + default: + log.Printf("[update] invalid mode %q, using %q", mode, defaultMode) + mode = defaultMode + } + + interval := 30 * time.Minute + if v := strings.TrimSpace(os.Getenv("ZLH_AGENT_UPDATE_INTERVAL")); v != "" { + d, err := time.ParseDuration(v) + if err != nil { + log.Printf("[update] invalid ZLH_AGENT_UPDATE_INTERVAL=%q: %v (using %s)", v, err, interval) + } else if d < time.Minute { + log.Printf("[update] ZLH_AGENT_UPDATE_INTERVAL too small (%s), using %s", d, interval) + } else { + interval = d + } + } + + log.Printf("[update] periodic checks enabled (mode=%s interval=%s)", mode, interval) + + run := func() { + switch mode { + case "auto": + res := CheckAndUpdate(currentVersion) + switch res.Status { + case "updated": + log.Printf("[update] applied update current=%s target=%s", res.Current, res.Target) + case "noop": + log.Printf("[update] no update available current=%s target=%s", res.Current, res.Target) + default: + log.Printf("[update] auto check failed status=%s current=%s target=%s err=%s", res.Status, res.Current, res.Target, res.Error) + } + case "notify": + res := CheckAvailable(currentVersion) + switch res.Status { + case "available": + log.Printf("[update] update available current=%s target=%s", res.Current, res.Target) + case "noop": + log.Printf("[update] no update available current=%s target=%s", res.Current, res.Target) + default: + log.Printf("[update] notify check failed status=%s current=%s target=%s err=%s", res.Status, res.Current, res.Target, res.Error) + } + } + } + + go func() { + time.Sleep(10 * time.Second) + run() + + ticker := time.NewTicker(interval) + defer ticker.Stop() + + for range ticker.C { + run() + } + }() +} + +func CheckAndUpdate(currentVersion string) Result { + currentVersion = normalizeVersion(currentVersion) + result := Result{ + Status: "error", + Current: currentVersion, + CheckedAtUTC: time.Now().UTC().Format(time.RFC3339), + } + + if runtime.GOOS != "linux" || runtime.GOARCH != "amd64" { + result.Error = fmt.Sprintf("unsupported platform: %s_%s", runtime.GOOS, runtime.GOARCH) + writeStatus(result) + return result + } + + lockPath := filepath.Join(stateDir, "update.lock") + if err := acquireLock(lockPath); err != nil { + result.Error = err.Error() + writeStatus(result) + return result + } + defer releaseLock(lockPath) + + manifest, err := fetchManifest() + if err != nil { + result.Error = err.Error() + writeStatus(result) + return result + } + if manifest.SchemaVersion != 1 { + result.Error = fmt.Sprintf("unsupported manifest schema: %d", manifest.SchemaVersion) + writeStatus(result) + return result + } + + target := normalizeVersion(manifest.Channels["stable"]) + if target == "" { + result.Error = "missing stable channel version" + writeStatus(result) + return result + } + result.Target = target + + if compareVersions(currentVersion, target) == 0 { + result.Status = "noop" + result.Error = "" + writeStatus(result) + return result + } + + if compareVersions(target, normalizeVersion(manifest.MinSupported)) < 0 { + result.Error = "target below min_supported" + writeStatus(result) + return result + } + + artifact, ok := manifest.Artifacts[target] + if !ok { + result.Error = "missing artifacts for target version" + writeStatus(result) + return result + } + + binPath := artifact.LinuxAMD64.Binary + shaPath := artifact.LinuxAMD64.SHA256 + if binPath == "" || shaPath == "" { + result.Error = "artifact paths missing" + writeStatus(result) + return result + } + + if err := ensureCurrentSymlinks(currentVersion); err != nil { + result.Error = fmt.Sprintf("prepare current symlink: %v", err) + writeStatus(result) + return result + } + + if err := os.MkdirAll(filepath.Join(releasesDir, target), 0o755); err != nil { + result.Error = err.Error() + writeStatus(result) + return result + } + + tmpPath := filepath.Join(releasesDir, target, "zlh-agent.new") + finalPath := filepath.Join(releasesDir, target, "zlh-agent") + + binURL := artifactBaseURL + binPath + shaURL := artifactBaseURL + shaPath + + if err := downloadFile(binURL, tmpPath); err != nil { + result.Error = fmt.Sprintf("download binary: %v", err) + writeStatus(result) + return result + } + + expected, err := downloadSHA256(shaURL) + if err != nil { + result.Error = fmt.Sprintf("download sha256: %v", err) + writeStatus(result) + return result + } + + if err := verifySHA256(tmpPath, expected); err != nil { + result.Error = fmt.Sprintf("sha256 verify failed: %v", err) + writeStatus(result) + return result + } + + if err := os.Chmod(tmpPath, 0o755); err != nil { + result.Error = fmt.Sprintf("chmod: %v", err) + writeStatus(result) + return result + } + + if err := os.Rename(tmpPath, finalPath); err != nil { + result.Error = fmt.Sprintf("install: %v", err) + writeStatus(result) + return result + } + + if err := updateSymlinks(target); err != nil { + result.Error = fmt.Sprintf("update symlinks: %v", err) + writeStatus(result) + return result + } + + if err := os.Remove(binaryPath); err != nil && !errors.Is(err, os.ErrNotExist) { + result.Error = fmt.Sprintf("remove binary path: %v", err) + writeStatus(result) + return result + } + if err := os.Symlink(filepath.Join(currentLink, "zlh-agent"), binaryPath); err != nil { + result.Error = fmt.Sprintf("update current symlink: %v", err) + writeStatus(result) + return result + } + + result.Status = "updated" + result.Error = "" + writeStatus(result) + go func() { + if err := restartService(); err != nil { + log.Printf("[update] restart failed: %v", err) + } + }() + return result +} + +func fetchManifest() (Manifest, error) { + url := artifactBaseURL + "manifest.json" + client := &http.Client{Timeout: 10 * time.Second} + resp, err := client.Get(url) + if err != nil { + return Manifest{}, err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return Manifest{}, fmt.Errorf("manifest status %d", resp.StatusCode) + } + var m Manifest + if err := json.NewDecoder(resp.Body).Decode(&m); err != nil { + return Manifest{}, err + } + return m, nil +} + +func downloadFile(url, dest string) error { + client := &http.Client{Timeout: 30 * time.Second} + resp, err := client.Get(url) + if err != nil { + return err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("status %d", resp.StatusCode) + } + f, err := os.Create(dest) + if err != nil { + return err + } + defer f.Close() + _, err = io.Copy(f, resp.Body) + return err +} + +func downloadSHA256(url string) (string, error) { + client := &http.Client{Timeout: 10 * time.Second} + resp, err := client.Get(url) + if err != nil { + return "", err + } + defer resp.Body.Close() + if resp.StatusCode != http.StatusOK { + return "", fmt.Errorf("status %d", resp.StatusCode) + } + b, err := io.ReadAll(resp.Body) + if err != nil { + return "", err + } + fields := strings.Fields(string(b)) + if len(fields) == 0 { + return "", errors.New("empty sha256 file") + } + return strings.TrimSpace(fields[0]), nil +} + +func verifySHA256(path, expected string) error { + f, err := os.Open(path) + if err != nil { + return err + } + defer f.Close() + h := sha256.New() + if _, err := io.Copy(h, f); err != nil { + return err + } + sum := hex.EncodeToString(h.Sum(nil)) + if !strings.EqualFold(sum, expected) { + return fmt.Errorf("checksum mismatch") + } + return nil +} + +func restartService() error { + unit := os.Getenv("ZLH_AGENT_UNIT") + if unit == "" { + unit = defaultUnit + } + cmd := exec.Command("systemctl", "restart", unit) + return cmd.Run() +} + +func normalizeVersion(v string) string { + return strings.TrimPrefix(strings.TrimSpace(v), "v") +} + +func compareVersions(a, b string) int { + as := strings.Split(a, ".") + bs := strings.Split(b, ".") + for len(as) < 3 { + as = append(as, "0") + } + for len(bs) < 3 { + bs = append(bs, "0") + } + for i := 0; i < 3; i++ { + ai := parseInt(as[i]) + bi := parseInt(bs[i]) + if ai < bi { + return -1 + } + if ai > bi { + return 1 + } + } + return 0 +} + +func parseInt(s string) int { + n := 0 + for _, r := range s { + if r < '0' || r > '9' { + break + } + n = n*10 + int(r-'0') + } + return n +} + +func writeStatus(res Result) { + _ = os.MkdirAll(stateDir, 0o755) + b, _ := json.MarshalIndent(res, "", " ") + _ = os.WriteFile(statusFile, b, 0o644) +} + +func ReadStatus() Result { + b, err := os.ReadFile(statusFile) + if err != nil { + return Result{} + } + var res Result + _ = json.Unmarshal(b, &res) + return res +} + +func acquireLock(path string) error { + _ = os.MkdirAll(stateDir, 0o755) + f, err := os.OpenFile(path, os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0o644) + if err != nil { + return fmt.Errorf("update already in progress") + } + _ = f.Close() + return nil +} + +func releaseLock(path string) { + _ = os.Remove(path) +} + +func ensureCurrentSymlinks(currentVersion string) error { + if _, err := os.Lstat(currentLink); err == nil { + return nil + } + + if err := os.MkdirAll(releasesDir, 0o755); err != nil { + return err + } + + currentRelease := filepath.Join(releasesDir, currentVersion) + if err := os.MkdirAll(currentRelease, 0o755); err != nil { + return err + } + + currentBinary := filepath.Join(currentRelease, "zlh-agent") + if _, err := os.Stat(currentBinary); errors.Is(err, os.ErrNotExist) { + if err := copyFile(binaryPath, currentBinary); err != nil { + return err + } + if err := os.Chmod(currentBinary, 0o755); err != nil { + return err + } + } + + if err := os.Symlink(filepath.Join("releases", currentVersion), currentLink); err != nil { + return err + } + + if err := os.Remove(binaryPath); err != nil && !errors.Is(err, os.ErrNotExist) { + return err + } + if err := os.Symlink(filepath.Join(currentLink, "zlh-agent"), binaryPath); err != nil { + return err + } + + return nil +} + +func updateSymlinks(target string) error { + if err := os.RemoveAll(previousLink); err != nil && !errors.Is(err, os.ErrNotExist) { + return err + } + if _, err := os.Lstat(currentLink); err == nil { + if err := os.Symlink("current", previousLink); err != nil { + return err + } + } + + if err := os.RemoveAll(currentLink); err != nil && !errors.Is(err, os.ErrNotExist) { + return err + } + return os.Symlink(filepath.Join("releases", target), currentLink) +} + +func copyFile(src, dst string) error { + in, err := os.Open(src) + if err != nil { + return err + } + defer in.Close() + out, err := os.Create(dst) + if err != nil { + return err + } + defer out.Close() + if _, err := io.Copy(out, in); err != nil { + return err + } + return out.Close() +} diff --git a/internal/util/log.go b/internal/util/log.go index 582ed08..f690e94 100644 --- a/internal/util/log.go +++ b/internal/util/log.go @@ -2,6 +2,7 @@ package util import ( "fmt" + "io" "log" "os" "time" @@ -21,6 +22,7 @@ func InitLogFile(path string) error { } logFile = f logReady = true + log.SetOutput(io.MultiWriter(os.Stdout, logFile)) return nil } diff --git a/internal/version/version.go b/internal/version/version.go new file mode 100644 index 0000000..5c8fd1a --- /dev/null +++ b/internal/version/version.go @@ -0,0 +1,3 @@ +package version + +const AgentVersion = "v1.0.0" diff --git a/main.go b/main.go index ccc920a..3fa4066 100755 --- a/main.go +++ b/main.go @@ -10,14 +10,14 @@ import ( "time" agenthttp "zlh-agent/internal/http" - "zlh-agent/internal/system" // <-- ADD THIS + "zlh-agent/internal/system" + "zlh-agent/internal/update" "zlh-agent/internal/util" + "zlh-agent/internal/version" ) -const AgentVersion = "v1.0.0" // Consolidated agent version tag - func main() { - log.Printf("[agent] starting ZeroLagHub Agent %s", AgentVersion) + log.Printf("[agent] starting ZeroLagHub Agent %s", version.AgentVersion) // ------------------------------------------------------------ // Optional: enable log file (safe if path doesn't exist yet) @@ -46,7 +46,8 @@ func main() { // Enable autostart subsystem // (does nothing unless AutoStartEnabled=true) // ------------------------------------------------------------ - system.InitAutoStart() // <-- ADD THIS + system.InitAutoStart() + update.StartPeriodic(version.AgentVersion) server := &http.Server{ Addr: addr, diff --git a/scripts/devcontainer/lib/common.sh b/scripts/devcontainer/lib/common.sh index ff8a132..ab351fe 100644 --- a/scripts/devcontainer/lib/common.sh +++ b/scripts/devcontainer/lib/common.sh @@ -1,20 +1,46 @@ #!/usr/bin/env bash set -euo pipefail +############################################ +# Required env (installer contract) +############################################ + : "${RUNTIME:?RUNTIME required}" : "${RUNTIME_VERSION:?RUNTIME_VERSION required}" : "${ARCHIVE_EXT:?ARCHIVE_EXT required}" +############################################ +# Optional env +############################################ + ZLH_ARTIFACT_BASE_URL="${ZLH_ARTIFACT_BASE_URL:-http://10.60.0.251:8080}" ZLH_RUNTIME_ROOT="${ZLH_RUNTIME_ROOT:-/opt/zlh/runtime}" ARCHIVE_PREFIX="${ARCHIVE_PREFIX:-${RUNTIME}}" +############################################ +# Derived paths +############################################ + RUNTIME_ROOT="${ZLH_RUNTIME_ROOT}/${RUNTIME}" DEST_DIR="${RUNTIME_ROOT}/${RUNTIME_VERSION}" CURRENT_LINK="${RUNTIME_ROOT}/current" -log() { echo "[zlh-installer:${RUNTIME}] $*"; } -fail() { echo "[zlh-installer:${RUNTIME}] ERROR: $*" >&2; exit 1; } +############################################ +# Logging helpers +############################################ + +log() { + echo "[zlh-installer:${RUNTIME}] $*" +} + +fail() { + echo "[zlh-installer:${RUNTIME}] ERROR: $*" >&2 + exit 1 +} + +############################################ +# Artifact helpers +############################################ artifact_name() { echo "${ARCHIVE_PREFIX}-${RUNTIME_VERSION}.${ARCHIVE_EXT}" @@ -24,6 +50,10 @@ artifact_url() { echo "${ZLH_ARTIFACT_BASE_URL%/}/devcontainer/${RUNTIME}/${RUNTIME_VERSION}/$(artifact_name)" } +############################################ +# Download / extract +############################################ + download_artifact() { local url out url="$(artifact_url)" @@ -56,6 +86,10 @@ extract_artifact() { esac } +############################################ +# Runtime wiring +############################################ + update_symlinks() { ln -sfn "${DEST_DIR}" "${CURRENT_LINK}" ln -sfn "${CURRENT_LINK}/bin" "${RUNTIME_ROOT}/bin" @@ -68,6 +102,35 @@ EOF chmod +x /etc/profile.d/zlh-${RUNTIME}.sh } +############################################ +# SSH host key initialization +############################################ + +ensure_ssh_host_keys() { + # SSH may not be installed in all templates — do not fail + if ! command -v ssh-keygen >/dev/null 2>&1; then + log "ssh-keygen not present, skipping SSH host key setup" + return 0 + fi + + if ls /etc/ssh/ssh_host_*_key >/dev/null 2>&1; then + log "SSH host keys already exist" + return 0 + fi + + log "Generating SSH host keys" + ssh-keygen -A + + # Best-effort service restart (container init systems vary) + systemctl enable ssh >/dev/null 2>&1 || true + systemctl restart ssh >/dev/null 2>&1 || \ + systemctl restart sshd >/dev/null 2>&1 || true +} + +############################################ +# Entry point +############################################ + install_runtime() { log "Installing ${RUNTIME} ${RUNTIME_VERSION}" @@ -84,5 +147,7 @@ install_runtime() { write_profile chmod -R 755 "${DEST_DIR}" + ensure_ssh_host_keys + log "Install complete" } diff --git a/zlh-agent b/zlh-agent index 07e39d33c1e8a631ea064cbea4c81d75c0b4f02f..9dea1f320e9bd5608d0ed291eba30ada48da9743 100755 GIT binary patch delta 4477417 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ΠlCTH^NCs|ATB@v=MaEPU6&)_vqvCcNN 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