mirror of
https://github.com/tailscale/tailscale.git
synced 2025-05-01 13:11:01 +00:00
hostifo: update LXC, add Cloud Run.
Recent LXC support no longer has "lxc" in /proc/1/cgroup: # cat /proc/1/cgroup 12:freezer:/ 11:rdma:/ 10:cpuset:/ 9:pids:/ 8:blkio:/ 7:devices:/ 6:perf_event:/ 5:net_cls,net_prio:/ 4:memory:/ 3:hugetlb:/ 2:cpu,cpuacct:/ 1:name=systemd:/init.scope 0::/init.scope Look for fuse.lxcfs in /proc.mounts in addition: # grep lxc /proc/mounts lxcfs /proc/cpuinfo fuse.lxcfs ... lxcfs /proc/diskstats fuse.lxcfs ... lxcfs /proc/loadavg fuse.lxcfs ... lxcfs /proc/meminfo fuse.lxcfs ... lxcfs /proc/stat fuse.lxcfs ... lxcfs /proc/swaps fuse.lxcfs ... lxcfs /proc/uptime fuse.lxcfs ... lxcfs /sys/devices/system/cpu/online fuse.lxcfs ... Add Knative detection by looking for the environment variables which are part of its container contract. Signed-off-by: Denton Gentry <dgentry@tailscale.com>
This commit is contained in:
parent
57756ef673
commit
224e60cef2
@ -11,6 +11,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
@ -58,6 +59,9 @@ func osVersionLinux() string {
|
|||||||
if inContainer() {
|
if inContainer() {
|
||||||
attrBuf.WriteString("; container")
|
attrBuf.WriteString("; container")
|
||||||
}
|
}
|
||||||
|
if inKnative() {
|
||||||
|
attrBuf.WriteString("; env=kn")
|
||||||
|
}
|
||||||
attr := attrBuf.String()
|
attr := attrBuf.String()
|
||||||
|
|
||||||
id := m["ID"]
|
id := m["ID"]
|
||||||
@ -99,5 +103,21 @@ func inContainer() (ret bool) {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
|
lineread.File("/proc/mounts", func(line []byte) error {
|
||||||
|
if mem.Contains(mem.B(line), mem.S("fuse.lxcfs")) {
|
||||||
|
ret = true
|
||||||
|
return io.EOF
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func inKnative() bool {
|
||||||
|
// https://cloud.google.com/run/docs/reference/container-contract#env-vars
|
||||||
|
if os.Getenv("K_REVISION") != "" && os.Getenv("K_CONFIGURATION") != "" &&
|
||||||
|
os.Getenv("K_SERVICE") != "" && os.Getenv("PORT") != "" {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user