OSX 上的 chroot 作为不同的操作系统

eka*_*aqu 4 linux centos chroot ubuntu macos

我想知道是否有人能够在 OSX 上使用 chroot 来运行另一个操作系统(ubuntu、centos)。我知道它们非常不同,但是我想用它来做的几乎所有事情都不会关心内核级别的任何事情,所以希望有一种方法可以在不使用 VM 的情况下做到这一点。

根据我的谷歌搜索,我看到有人问了这个问题,但除了“尝试虚拟机”之外没有真正的答案。虽然真的很想在没有虚拟机的情况下做到这一点。

use*_*686 8

不幸的是,大多数程序确实关心内核,无论是直接的还是不关心的。

不同的操作系统甚至在最常见的功能(epoll vs inotify vs kqueue,clone vs vfork vs rfork ...)上也有显着差异。

即使程序坚持使用与用户空间相同的最小功能(例如 stdio、基本文件访问),它(或者更确切地说,libc)仍然需要知道如何在内核中调用这些函数,这在 Linux 之间是完全不同的(普通的旧系统调用)和 OS X(系统调用和 Mach IPC 的混合)。

并且假设您可以首先让内核开始执行程序——OS X 内核不理解 ELF 格式,只能理解 Mach-O(以及各种遗留的 Mac OS 内容)。

存在各种模拟器——例如,FreeBSD 有 Linux 模拟,Wine 在 Unix 上运行 Windows 程序,似乎有一个适用于 LinuxOS X 模拟器——但我找不到任何可以在 OS X 上运行 Linux 程序的模拟器

这里描述了如何在 FreeBSD 上模拟基本的 Linux 功能


Gor*_*son 5

chroot 改变根目录;它不会改变可执行文件格式、应用程序二进制接口等,所有这些在 OS X 和 linux 之间都是不同的。运行另一个操作系统需要的不仅仅是 chroot;它需要一个虚拟机。