我有一个外部监控工具,它定期通过 ssh 连接并检查 Linux 机器的各种系统参数(cpu、mem 等)。但是这种方法不适用于 CoreOS,因为它上面没有任何东西(sysstat、tcpdump 等)。在 docker 容器上安装软件不是一个选择,因为我无法更改外部监控工具运行的命令(除非重新定义它们 - docker 的 iostat 等等)。
我曾尝试安装 gcc,但它本身需要 c 编译器作为先决条件。
问题:当 gcc 是先决条件时,如何在 CoreOS 主机而不是容器上引导 iostat/tcpdump/等?
答案1
我已成功安装iostat
它,方法是将其安装在 fedora/ubuntu 工具箱容器上,然后将其复制到主机:cp /usr/bin/iostat /media/root/home/core/
。
但这对于 gcc 不起作用,因为文件系统设计为 ro,而不是 rw。gcc 有 cc1 作为依赖项,而 cc1 缺少两个依赖项:
core@test ~/meh $ ldd gcc
linux-vdso.so.1 (0x00007ffd30383000)
libm.so.6 => /lib64/libm.so.6 (0x00007f752f769000)
libc.so.6 => /lib64/libc.so.6 (0x00007f752f3b9000)
/lib64/ld-linux-x86-64.so.2 (0x00007f752fa6d000)
core@test ~/meh $ ldd cc1
linux-vdso.so.1 (0x00007ffc5d9e9000)
libmpfr.so.1 => not found
libgmp.so.3 => not found
libdl.so.2 => /lib64/libdl.so.2 (0x00007f8238144000)
libc.so.6 => /lib64/libc.so.6 (0x00007f8237d94000)
/lib64/ld-linux-x86-64.so.2 (0x00007f8238348000)
[root@test ~]# cp /usr/lib64/libmpfr.so.4 /media/root/lib64/
cp: cannot create regular file '/media/root/lib64/libmpfr.so.4': Read-only file system
我认为唯一的方法是在一台机器内静态编译 gcc,然后将可执行文件推送到 CoreOS 机器。之后 - 一切都应该变得更容易,因为我们会有 gcc 来帮助我们编译其他资源(如果需要):)