优化探针获取 home 目录

This commit is contained in:
dushixiang committed 2025-12-25 19:12:40 +08:00
1 parent 43780305da
commit 7944fb09dc
3 files changed
+38 -10

No files matched your search

+2 -4
View File
@@ -9,6 +9,7 @@ import (
"runtime"
"time"
"github.com/dushixiang/pika/pkg/agent/utils"
"gopkg.in/yaml.v3"
)
@@ -107,10 +108,7 @@ func DefaultConfig() *Config {
// GetDefaultConfigPath 获取默认配置文件路径
func GetDefaultConfigPath() string {
homeDir, err := os.UserHomeDir()
if err != nil {
homeDir = "."
}
var homeDir = utils.GetSafeHomeDir()
return filepath.Join(homeDir, ".pika", "agent.yaml")
}
+2 -6
View File
@@ -6,6 +6,7 @@ import (
"path/filepath"
"strings"
"github.com/dushixiang/pika/pkg/agent/utils"
"github.com/google/uuid"
)
@@ -24,12 +25,7 @@ func NewManager() *Manager {
// getIDFilePath 获取 ID 文件路径
func getIDFilePath() string {
// 获取用户主目录
homeDir, err := os.UserHomeDir()
if err != nil {
// 如果无法获取主目录,使用当前目录
homeDir = "."
}
var homeDir = utils.GetSafeHomeDir()
// 统一使用 ~/.pika/agent.id
return filepath.Join(homeDir, ".pika", "agent.id")
}
+34
View File
@@ -0,0 +1,34 @@
package utils
import (
"os"
"os/user"
)
func GetSafeHomeDir() string {
// 1. 尝试从环境变量拿(最快,符合大多数 Unix/Windows 惯例)
if h, err := os.UserHomeDir(); err == nil && h != "" {
return h
}
// 2. 尝试从系统底层数据库拿(绕过环境变量,直接看 /etc/passwd)
if u, err := user.Current(); err == nil && u.HomeDir != "" {
return u.HomeDir
}
// 3. 特殊环境兜底(针对 OpenWrt/嵌入式等 root 为主的系统)
// 如果是 root 权限运行但没设家目录,通常就是 /root
if os.Getuid() == 0 {
if _, err := os.Stat("/root"); err == nil {
return "/root"
}
}
// 4. 极端情况兜底:使用当前程序运行目录或临时目录
// 保证程序至少能跑起来,而不是直接 panic 或报错退出
if pwd, err := os.Getwd(); err == nil {
return pwd
}
return "./"
}