使用 Darling 在 Linux 上运行 MacOS 软件

我们有 葡萄酒,一个免费的开源兼容层,可帮助我们在 Linux 和类 Unix 操作系统上安装和运行为 Windows 开发的应用程序和游戏。 我们还有一个名为 多斯盒 在 Linux 中运行老式的 MS-DOS 游戏和已失效的 C++ 编译器,如 Turbo C++。 macOS 软件呢? 你有没有想过如何在 Linux 下运行专门针对 mac 的应用程序? 这就是我们现在要做的。 本指南解释了如何在 Linux 操作系统上运行 macOS 软件,使用 亲爱的 运行环境。

什么是亲爱的?

Darling 是一个翻译层,它允许我们在 Linux 上运行 macOS 应用程序。 它模拟了一个完整的 达尔文 环境,包括 Mach、dyld、launchd 以及您所期望的一切。 它使您可以立即切换到 Bash shell 并开始在您的 Linux 系统中运行为 macOS 构建的应用程序。 听起来很酷,是吗?

Darling 与 Wine 非常相似。 Wine 允许您在 Linux 上运行 Windows 应用程序。 Darling 让您可以运行 macOS 软件 Linux。

好在 Darling 没有违反 苹果的最终用户许可协议. 因为它只使用了作为完全免费软件发布的 Darwin 版本的部分。

“Darling”这个名字来自“Darwin”和“Linux”的组合。 您可能知道,Darwin 是 macOS 和 iOS 所基于的核心操作系统。

Darling 是在 GPLv3 下发布的免费开源软件。

在 Ubuntu Linux 中安装 Darling

目前,Darling 开发者只提供了预编译的 DEB 包。 前往 发布页面 并下载提供的 DEB 包 darlingdarling-dkms (内核模块)。

$ sudo gdebi darling-dkms_0.1.20200331.testing_amd64.deb

样本输出:

Reading package lists... Done
Building dependency tree        
Reading state information... Done
Reading state information... Done

Kernel module for Darling
Do you want to install the software package? [y/N]:y
/usr/bin/gdebi:113: FutureWarning: Possible nested set at position 1
  c = findall("[[(](S+)/S+[])]", msg)[0].lower()
Selecting previously unselected package darling-dkms.
(Reading database ... 269719 files and directories currently installed.)
Preparing to unpack darling-dkms_0.1.20200331.testing_amd64.deb ...
Unpacking darling-dkms (0.1.20200331~testing) ...
Setting up darling-dkms (0.1.20200331~testing) ...
>>> DKMS: Module add, build, and install

Creating symlink /var/lib/dkms/darling-mach/0.1/source ->
                 /usr/src/darling-mach-0.1

DKMS: add completed.

Kernel preparation unnecessary for this kernel.  Skipping...

Building module:
cleaning build area....
'make' -C lkm/ MIGDIR=/usr/src/darling-mach-0.1/miggen MIGDIR_REL=../miggen KERNELVERSION=5.4.0-48-generic...........................................
cleaning build area...

DKMS: build completed.

darling-mach.ko:
Running module version sanity check.
 - Original module
   - No original module exists within this kernel
 - Installation
   - Installing to /lib/modules/5.4.0-48-generic/updates/dkms/

depmod............

DKMS: install completed.

安装 darling-dkms 包后,使用命令安装 darling:

$ sudo gdebi darling_0.1.20200331.testing_amd64.deb 

样本输出:

Reading package lists... Done
Building dependency tree        
Reading state information... Done
Reading state information... Done
Requires the installation of the following packages: libc6-i386 

Darling
 macOS emulation layer for Linux
Do you want to install the software package? [y/N]:y
/usr/bin/gdebi:113: FutureWarning: Possible nested set at position 1
  c = findall("[[(](S+)/S+[])]", msg)[0].lower()
Get:1 https://ny-mirrors.evowise.com/ubuntu focal-updates/main amd64 libc6-i386 amd64 2.31-0ubuntu9.1 [2721 kB]
Fetched 2721 kB in 0s (0 B/s)                                                              
Selecting previously unselected package libc6-i386.
(Reading database ... 274071 files and directories currently installed.)
Preparing to unpack .../libc6-i386_2.31-0ubuntu9.1_amd64.deb ...
Unpacking libc6-i386 (2.31-0ubuntu9.1) ...
Setting up libc6-i386 (2.31-0ubuntu9.1) ...
Processing triggers for libc-bin (2.31-0ubuntu9.1) ...
Selecting previously unselected package darling.
(Reading database ... 274374 files and directories currently installed.)
Preparing to unpack darling_0.1.20200331.testing_amd64.deb ...
Unpacking darling (0.1.20200331~testing) ...
Setting up darling (0.1.20200331~testing) ...
>>> Shutting down old instances of Darling
Seeing if Darling is currently running
No instances running now

我更喜欢安装的原因 .deb 包与 Gdebi 是否会自动解决所需的依赖项并为我安装它们。 如果您更喜欢使用 dpkg 包管理器,您需要先安装 Darling DEB 包,然后安装缺少的依赖项,如下所示。

$ sudo gdebi darling-dkms_0.1.20200331.testing_amd64.deb
$ sudo gdebi darling_0.1.20200331.testing_amd64.deb
$ sudo apt install -f

在其他 Linux 发行版上,您可能需要按照所述从源代码手动编译和安装 Darling 这里.

使用 Darling 在 Linux 上运行 MacOS 软件

Darling 的开发人员正计划构建一个漂亮且用户友好的 GUI 来与 Darling 交互。 但目前,我们只能通过命令行与 Darling 交互。

要进入 Darling shell,只需以普通用户身份运行以下命令:

$ darling shell
Loaded the kernel module
Setting up a new Darling prefix at /home/sk/.darling
Bootstrapping the container with launchd...
Darling [/Volumes/SystemRoot/home/sk/Downloads/darling]$

该命令将启动一个虚拟根目录(即容器)或连接到一个已经运行的容器并在其中生成 shell。

启动亲爱的外壳

如果需要,它还会自动加载内核模块并初始化前缀内容。 亲爱的前缀被称为 DPREFIXes它们非常相似 WINEPREFIXes. 前缀只不过是一个虚拟的“chroot”环境,具有类似 macOS 的文件系统结构,我们可以在其中安全地安装软件。

当前在容器内运行的 shell 是 Bash 它的版本是3.2。

$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.

现在,我们在模拟的类似 macOS 的环境中。 由于 macOS 是 Unix 变体,许多 Linux 和 Unix 命令应该在 Darling shell 中工作。

为了 example使用命令打印操作系统的名称:

$ uname
Darwin

列出内容 root (/) 目录:

$ ls -l /

样本输出:

total 120
drwxr-xr-x    2 sk  sk  4096 Oct  5 09:54 Applications
drwxr-xr-x    1 sk  sk  4096 Oct  5 07:19 Library
drwxr-xr-x    1 sk  sk  4096 Oct  5 07:19 System
drwxrwxr-x    4 sk  sk  4096 Oct  5 09:54 Users
drwxr-xr-x    1 sk  sk  4096 Oct  5 09:54 Volumes
drwxr-xr-x    1 sk  sk  4096 Oct  5 07:20 bin
lrwxrwxrwx    1 sk  sk    23 Mar 31  2020 dev -> /Volumes/SystemRoot/dev
lrwxrwxrwx    1 sk  sk    11 Mar 31  2020 etc -> private/etc
drwxr-xr-x    1 sk  sk  4096 Oct  5 09:54 private
dr-xr-xr-x  292 sk  sk     0 Oct  5 09:54 proc
drwxr-xr-x    1 sk  sk  4096 Oct  5 07:20 sbin
lrwxrwxrwx    1 sk  sk    11 Mar 31  2020 tmp -> private/tmp
drwxr-xr-x    1 sk  sk  4096 Oct  5 09:54 usr
drwxr-xr-x    5 sk  sk  4096 Oct  5 09:54 var

同样,使用任何特定于 macOS 的命令来探索模拟环境。

亲爱的文件系统布局

如果您已经熟悉 macOS 文件系统,您会注意到容器内部的文件系统布局与 macOS 类似,包括顶级目录如 /Applications, /Users, 和 /System 等等

原始 Linux 文件系统作为安装在其上的单独分区可见 /Volumes/SystemRoot. 您可以通过运行具有完整路径名的任何 Linux 命令来验证它,如下所示:

$ /Volumes/SystemRoot/bin/uname 
Linux

正如您在上面的输出中看到的,它列出了我实际主机系统的名称,而不是容器的名称。 如果您不指定拉取路径(即 /Volumes/SystemRoot/bin/uname),它将列出容器的名称。

在 Darling 下运行 macOS 程序时,您可能希望它们访问您的主文件夹中的文件。 为了方便起见,有一个 LinuxHome Darling 主文件夹中指向 Linux 主文件夹的符号链接,如从容器内部所见。 此外,标准目录,如 Downloads Darling 主文件夹中的符号链接到 Linux 主文件夹中的相应文件夹。

您目前可以对 Darling 进行的操作列表

请注意,大多数 GUI 应用程序 暂时无法使用. 目前,您只能运行一些简单的图形应用程序和许多命令行程序。 不要失望。 GUI 应用程序还不能开箱即用。 开发人员正在努力将 Darling 下运行的应用程序完全集成到 Linux 桌面中,就像原生应用程序一样。 从长远来看,他们甚至计划支持 iOS 应用程序。

以下是您当前可以使用 Darling 运行的命令列表。

使用命令打印 Mac OS X 操作系统的详细信息:

$ sw_vers

此命令将显示 Mac OS 名称、产品版本和构建版本:

ProductName:    Mac OS X
ProductVersion: 10.14
BuildVersion:   Darling

使用在标准输出上打印一些很酷的东西 echo 命令:

$ echo Welcome To OSTechNix
Welcome To OSTechNix

显示操作系统的名称:

$ uname 
Darwin

探索 Darling 文件系统:

$ ls -l /
$ ls -l /Library/    
total 56
drwxr-xr-x  1 sk  sk  4096 Oct  5 07:19 Developer
drwxr-xr-x  1 sk  sk  4096 Oct  5 07:20 Documentation
drwxr-xr-x  1 sk  sk  4096 Mar 31  2020 LaunchAgents
drwxr-xr-x  1 sk  sk  4096 Mar 31  2020 LaunchDaemons
drwxr-xr-x  1 sk  sk  4096 Oct  5 07:19 Python
$ ls -l /Volumes/   
total 8
lrwxrwxrwx   1 sk  sk     1 Mar 31  2020 DarlingEmulatedDrive -> /
drwxr-xr-x  25 sk  sk  4096 Oct  5 07:19 SystemRoot
$ ls -l /System/Library/
total 120
drwxr-xr-x  1 sk  sk  4096 Oct  5 07:19 Components
drwxr-xr-x  1 sk  sk  4096 Oct  5 07:20 CoreServices
drwxr-xr-x  1 sk  sk  4096 Oct  5 07:20 Frameworks
drwxr-xr-x  1 sk  sk  4096 Oct  5 07:20 LaunchDaemons
drwxr-xr-x  1 sk  sk  4096 Oct  5 07:19 OpenSSL
drwxr-xr-x  1 sk  sk  4096 Oct  5 07:19 Perl
drwxr-xr-x  1 sk  sk  4096 Oct  5 07:19 PrivateFrameworks
drwxr-xr-x  1 sk  sk  4096 Mar 31  2020 Security
drwxr-xr-x  1 sk  sk  4096 Oct  5 07:19 User Template

显示当前正在运行的进程:

$ ps aux
USER   PID  %CPU %MEM      VSZ    RSS   TT  STAT STARTED      TIME COMMAND
sk     127   0.0  0.1  4226308   8760   ??  R     1Jan70   0:00.02 nps aux 
sk      19   0.0  0.1  4219692   5944   ??  R     1Jan70   0:00.03 o/usr/libexec/shellspawn 
sk      20   0.0  0.1  4342428   9236   ??  R     1Jan70   0:00.06 s/usr/sbin/syslogd 
sk      21   0.0  0.1  4224292   8956   ??  R     1Jan70   0:00.03 s/usr/sbin/memberd -x 
sk      22   0.0  0.2  4355536  15544   ??  R     1Jan70   0:00.06 /usr/sbin/iokitd 
sk      23   0.0  0.1  4423744   9400   ??  R     1Jan70   0:00.14 //usr/sbin/notifyd 
sk      33   0.0  0.1  4480688   8576   ??  R     1Jan70   0:00.06 oaslmanager 
sk      39   0.0  0.0  4227884   3952   ??  RN    1Jan70   0:00.01 s/usr/libexec/shellspawn 
sk      40   0.0  0.1  4226028  10084   ??  R     1Jan70   0:00.38 e/bin/bash --login 
sk       1   0.0  0.1  4260676   9536   ??  R     1Jan70   0:01.06 n/sbin/launchd 

检查坐骑:

$ column -t /proc/self/mounts 

阅读手册页:

$ man uname

你可以做更多。 一切都在标题为的部分下给出 “尝试什么” 在最后链接的官方文档中。

终止亲爱的

您已经完成了对 Mac OS 的探索,只需从 Darling shell 退出并使用命令关闭容器:

$ exit
$ darling shutdown

当容器关闭时,您不会看到任何通知。 再次运行该命令,您将看到以下输出:

Darling container is not running

结论

与 Wine 不同,Darling 不是一个成熟的项目。 使用 Wine,您可以在 Linux 下运行如此多的 Windows 应用程序,甚至是一些高端游戏。 不幸的是,Darling 帮不上什么忙。 它目前只能运行少数命令行程序。 它仍处于 alpha 阶段。 您可以将其用于基本的学习和测试目的。

试一试,在下面的评论部分告诉我们进展如何。

资源:

特色图片由 ErfourisStudio关注.