32

如何获得在 Apple Silicon 架构上运行的 Ruby、Python 和 Node.js 开发环境。Docker 等虚拟化软件呢?

4

4 回答 4

5

Ruby、Node 和 Python 等编程语言应在 Apple M1 芯片上运行,但目前不支持 Docker(他们正在开发中)

Docker for Mac 问题 https://github.com/docker/for-mac/issues/4733

Docker 团队可能正在按照以下方式解决问题: https ://github.com/docker/roadmap/issues/142

我的建议:仅当您想构建 iOS 应用程序时,现在就获取它。由于大多数人现在没有笔记本电脑,我们最终可能会遇到很多其他问题。

更新: 这个现在更合适的答案: https ://stackoverflow.com/a/65253659/8216911

于 2020-11-16T06:00:23.743 回答
4

我尝试了很多事情,但在让事情正常工作时遇到了一些真正的麻烦,但最后,这是我发现让 Docker 在新的 Mac Silicon M1 芯片上运行的最简单方法。

Docker 本身不工作,VirtualBox 不工作,Parallels 不工作,......最后,它归结为使用 UTM 创建虚拟机,在其上安装 Ubuntu 服务器。一旦你有了它,你就可以在上面安装任何你想要的东西(Docker、Node JS、Apache、PHP、MariaDB……)。

然后你设置好一切,这样你就可以使用所有你最喜欢的 Mac OS 工具(终端、传输、VS Code、Safari ...)来工作,就像你在本地文件系统上拥有所有这些一样。

1 - 下载 Linux 安装盘

获取 ARM linux 发行版。我拿了 Ubuntu 服务器 20.04 LTS: https
://cdimage.ubuntu.com/releases/20.04/release/ubuntu-20.04.1-live-server-arm64.iso 是 922 MB。

我从这里得到它:https ://ubuntu.com/download/server/arm

您可以选择任何 linux 发行版,但只要确保您获得的是 ARM 版本(有些发行版没有)。

2 - 下载 UTM

UTM 是一个主要针对 IO 设备的虚拟化软件,但它也适用于 Mac OS。
https://github.com/utmapp/UTM/releases/download/v2.0.14/UTM.dmg
那一个是 255 MB。
未来的版本可以从这里获得:https
://github.com/utmapp/UTM/releases/ 只需下载包,打开它,然后启动里面的应用程序。

3 - 创建你的虚拟机

创建您的新 VM,将 linux 安装盘附加到它,然后按照以下步骤启动 VM:
https ://github.com/utmapp/UTM/wiki/Install-Ubuntu-ARM64-on-Apple-M1

基本上:

  1. 单击创建新虚拟机
  2. 信息选项卡中:为您的 VM 选择名称和图标
  3. 系统选项卡中:
    1. 在硬件中选择ARM64(aarch64)架构
    2. 给它一些内存(大约 4 GB ...)
  4. 在“驱动器”选项卡中:
    1. 使用New Drive创建您的主驱动器,连接 VirtIO 并选择您想要的大小(我选择了 20 480 MB),然后单击 Create。
    2. 使用New Drive创建 CD 驱动器,勾选 Removable,interface USB,点击Create
  5. 保存虚拟机
  6. 在边栏中选择闪亮的新 VM,然后在右下角单击浏览并选择 Linux 安装 ISO 虚拟磁盘。

您现在可以启动 VM,它将在 Linux 安装 CD 上启动:安装 Linux。

在这个经典的安装过程中,您将被要求在 linux 系统上创建一个用户帐户(我们称之为bob)。安装完成后,关闭虚拟机并提取安装盘,然后重新启动。

4 - 在你的虚拟机内部工作

重新启动 VM 时,您会看到一个终端,要求您使用安装期间创建的用户名和密码登录 Linux。

您现在可以使用经典的 apt-get 命令安装 Docker、openSSH-server、nodeJS。

5 - 从 MacOS 在你的 VM 中工作

如果您像我一样未能选择正确的键盘,您可能无法输入一些特殊字符。使用 VM 的最佳方式现在是在其外部工作。

停止虚拟机(如果您已经在 shell 中,则立即停止虚拟机)并返回 UTM:
在左侧面板中选择您的虚拟机,然后单击右上角的按钮再次编辑虚拟机:
转到网络选项卡并在在 Port Forward 前面,单击New
您需要为要从 Mac OS 主机访问的 VM 中的每个端口手动添加新的端口转发指令。

例如对于 SSH:在新的端口转发表单中,只需在访客端口中写入 22,在主机端口中写入您想要的内容(比如说 3022)。

现在您可以重新启动您的虚拟机并在普通的 Mac OS 终端中,您可以使用
ssh -p 3022 bob@localhost登录您的虚拟机

如果您不想每次都输入密码,请将 ~/.ssh/id_rsa.pub(来自 Mac OS)的内容复制到 VM 内新创建的 /home/bob/.ssh/authorized_keys 文本文件中。

6 - 通过 sftp 复制文件

可悲的是,我没有设法直接使用 finder 访问 VM 的内容。我不得不使用著名的 FTP 客户端 Transmit。

使用以下命令创建新连接:
协议:SFTP
主机:localhost
用户:bob
密码:[您的密码]
端口:3022
(是的,端口与 SSH 相同)

您现在可以自由地浏览和复制文件到您的 VM 和从您的 VM 复制文件。

哦,但等等......还有更多!

7 - 在你的虚拟机上使用 VS Code

现在,您还可以在您的 VM 上工作,从您的 Mac OS VS Code 安装远程开发扩展: https ://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack

安装扩展后,单击 VS Code 窗口左下方的绿色 >< 符号并选择Remote-SSH: connect to host ...
选择添加新的 SSH 主机并输入ssh -p 3022 bob@localhost

现在,您可以在 VM 内的项目上使用 VS Code 工作,就像它在本地文件系统中一样。

我做了一些 Nuxt.js 开发,它调用由 Apache / PHP / MySQL 提供支持的 API(必须切换到 MariaDB,因为我找不到正在工作的 ARM 版本的 MySQL),它们都在 VM 内的不同 Docker 容器中运行,使用码头工人撰写。

端口将访客 3000 端口转发到主机 3000 端口后,我可以使用 Safari 浏览前端,就像它在 Mac OS 上本地运行一样。

我希望这一切都能为您节省一些时间。

于 2020-12-11T14:58:39.123 回答
0

对于 docker, https: //docs.docker.com/docker-for-mac/apple-m1/ 有一个技术预览。

通过设置在 Rosetta 模式下运行的终端,您可以直接在 Mac M1 上运行 ruby​​、python 等。然后运行 ​​home brew,就可以使用现有的 x86_64 架构的 brew taps。我使用 /bin/bash 作为我的 Mac shell 而不是 zsh,但如果您愿意,可以将以下内容调整为 zsh。

登录到您的普通 shell 并将 ARM homebrew 安装到 /opt/homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

现在使用 Shell 选项卡运行命令“env /usr/bin/arch -x86_64 /bin/bash --login”设置一个新的“Rosetta shell”终端配置文件。 罗塞塔下的外壳

在rosetta shell下再次登录并将x86_64 homebrew安装到/usr/local/homebrew

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

编辑您的 ~/.bash_profile 并添加一些代码来检测您的 shell 是否在 Rosetta 下,如果是,请使用 /usr/local/homebrew 而不是通常的 /opt/homebrew

if [ "$(sysctl -n sysctl.proc_translated)" = "1" ]; then
    # run under rosetta 2 with
    #   env /usr/bin/arch -x86_64 /bin/bash --login
    #local brew_path="/usr/local/homebrew/bin"
    eval $(/usr/local/bin/brew shellenv)
    export PS1="i \D{%I:%M %p}:\w $ "
else
    #local brew_path="/opt/homebrew/bin"
    eval $(/opt/homebrew/bin/brew shellenv)
fi

现在登录到您的 Rosetta shell 并执行以下命令

$ brew install ruby

然后你可以运行红宝石。

我还设法在 Parallels 虚拟化测试版下在 Mac M1 上运行了一个流浪虚拟机 Fedora 33 for ARM。这可能对 apache 和 php 有所帮助。这里的说明

https://github.com/peterdragon/packer-M1-parallels-fedora33

于 2021-02-23T15:37:51.847 回答
-15

似乎一切都会按原样工作......

他们在活动演示中表示:“尚未更新到 Universal 的现有 Mac 应用程序将与 Apple 的 Rosetta 2 技术无缝运行。”

于 2020-11-10T19:18:58.250 回答