使用Darling在Linux上运行MacOS软件
我们有Wine,这是一个免费的开放源代码兼容性层,可帮助我们在Linux和类似Unix的操作系统上安装和运行为Windows开发的应用程序和游戏。
我们还有一个名为Dosbox的仿真器,可以运行古老的MS-DOS游戏和已废弃的C++编译器,例如Linux中的Turbo C++。
那么macOS软件呢?
我们是否曾经想过如何在Linux下运行专门针对Mac的应用程序?
本教程说明了如何使用Darling运行时环境在Linux操作系统上运行macOS软件。
Darling是一个转换层,使我们可以在Linux上运行macOS应用程序。
它模拟了完整的达尔文环境,包括Mach,dyld,已启动以及我们期望的所有内容。
它使我们可以立即切换到Bash shell,并开始在Linux系统中运行为macOS构建的应用程序。
听起来不错,是吗?
亲爱的与 Wine 非常相似。
Wine允许我们在Linux上运行Windows应用程序。
Darling使我们可以运行macOS软件Linux。
好消息是,Darling没有违反苹果的EULA。
因为它仅使用作为完全免费软件发布的达尔文版本的某些部分。
“ Darling”的名称来自“ Darwin”和“ Linux”的组合。
我们可能知道,Darwin是macOS和iOS所基于的核心操作系统。
Darling是在GPLv3下发布的免费开源软件。
在Ubuntu Linux上安装Darling
当前,Darling开发人员仅提供了预编译的DEB软件包。
转到发行版页面并下载为“ darling”和“ darling-dkms”(内核模块)提供的DEB软件包。
$sudo gdebi darling-dkms_0.1.20170331.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.20170331.testing_amd64.deb ... Unpacking darling-dkms (0.1.20170331~testing) ... Setting up darling-dkms (0.1.20170331~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.20170331.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 http://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.20170331.testing_amd64.deb ... Unpacking darling (0.1.20170331~testing) ... Setting up darling (0.1.20170331~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.20170331.testing_amd64.deb
$sudo gdebi darling_0.1.20170331.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程序。
如果需要,它还将自动加载内核模块并初始化前缀内容。
Darling前缀称为'DPREFIXes',与'WINEPREFIXes'非常相似。
前缀不过是具有类似于macOS的文件系统结构的虚拟“ chroot”环境,我们可以其中安全地安装软件。
容器中运行的当前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中运行。
例如,使用以下命令打印操作系统的名称:
$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 2017 dev -> /Volumes/SystemRoot/dev lrwxrwxrwx 1 sk sk 11 Mar 31 2017 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 2017 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程序时,我们可能希望它们访问主文件夹中的文件。
为了方便起见,从容器内部看,Darling主文件夹中有一个“ LinuxHome”符号链接,该符号链接指向Linux主文件夹。
此外,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 theitroad Welcome To theitroad
显示操作系统名称:
$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 2017 LaunchAgents drwxr-xr-x 1 sk sk 4096 Mar 31 2017 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 2017 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 2017 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
我们可以做更多。
一切都在最后链接的官方文档中标题为“尝试什么”的部分下给出。
终止darling
我们已经完成了探索Mac OS的工作,只需退出Darling shell并使用以下命令关闭容器:
$exit
$darling shutdown
关闭容器时,我们不会看到任何通知。
再次运行该命令,我们将看到以下输出:
Darling container is not running