【问题标题】:How to detect chroot on illumos/solaris?如何在 illumos/solaris 上检测 chroot?
【发布时间】:2012-07-10 13:45:44
【问题描述】:

一个正在运行的 C 程序如何检测它是否在 illumos/solaris 上的“chroot”中运行?

有一个 Debian 实用程序 [1] 在 linux、freebsd、hurd 上使用了一些技巧。

如何在 illumos/solaris 上做到这一点?

[1]http://anonscm.debian.org/gitweb/?p=users/clint/debianutils.git;a=blob;f=ischroot.c;h=bed67f9f655d26906e3d65fd290698dce5402a89;hb=HEAD

【问题讨论】:

  • 在其他平台上可以检测到它的事实似乎是错误的。如果没有超级用户权限,它可能根本不应该以编程方式检测到。

标签: solaris chroot


【解决方案1】:

this thread on comp.unix.solaris 详细介绍了确定 Solaris 是在区域(容器/chroot-on-lots-of-steroids)还是虚拟机内运行的各种方法。特别广泛的是the list in this posting(似乎来自this blog post。我将在这里重新创建一些与区域相关的项目——那些非root用户可以使用的项目。

  • /usr/bin/zonename 命令告诉您一些不同于“全局”的内容
  • Solaris 内核“进程”在非分区(或“全局”/管理区域内)环境中称为sched,但在区域内称为zsched
  • Solaris prstat 命令(类似于其他 UN*Xes 上的 top)具有 -z / -Z 命令行选项,可将报告限制在特定区域 (-z) 或提供所有区域的统计信息 ( -Z);在区域内,这些选项不起作用/仅显示您正在运行的区域。

希望能有所帮助。

【讨论】:

    【解决方案2】:

    我是这样用的:

    #elif defined (__sun__)
    
    /* Similar to Linux
     * XXX: check zone?
     * XXX: illumos kernel automatically mounts /proc on boot
     */
    
    static int ischroot()
    {
      struct stat st1, st2;
    
      if (stat("/", &st1))
        return 2;
      if (stat("/proc/1/root", &st2))
        return 2;
      if ((st1.st_dev == st2.st_dev) && (st1.st_ino == st2.st_ino))
        return 1;
      return 0;
    }
    
    #else
    

    【讨论】:

      猜你喜欢
      • 2018-09-12
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多