如何检测illumos / solaris上的chroot?

时间:2012-07-10 13:45:45

标签: solaris chroot

正在运行的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

2 个答案:

答案 0 :(得分:2)

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

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

希望有所帮助。

答案 1 :(得分:1)

我用这种方式:

#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