在新的Apple Silicon架构上运行Ruby,Node,Python和Docker?

问题描述

如何在Apple Silicon架构上运行Ruby,Python和Node.js开发环境。虚拟化软件如码头工人?

解决方法

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

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

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

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

,

现实世界测试已经结束,可悲的是nodeJs花费了大约2个小时来编译:(

,

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

Docker本身无法运行,VirtualBox无法运行,Parallels无法运行,...最后,归结为使用UTM创建虚拟机,然后在其上安装Ubuntu服务器。安装完后,您可以在其上安装任何内容(Docker,Node JS,Apache,PHP,MariaDB等)。

然后设置传送,以便可以使用所有喜欢的Mac OS工具(终端,传输,VS代码,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

创建新的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. 使用新驱动器创建主驱动器,界面VirtIO并选择所需的大小(我选择20 480 MB),然后单击“创建”。
    2. 使用新驱动器创建CD驱动器,选中“可移动,接口USB”,然后单击创建
  5. 保存虚拟机
  6. 在侧栏中并在右下角选择闪亮的新VM,单击浏览,然后选择Linux安装ISO虚拟磁盘。

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

在此经典安装过程中,系统将要求您在Linux系统上创建一个用户帐户(我们将其称为 bob )。安装完成后,请关闭虚拟机并解压缩安装盘,然后重新启动。

4-在VM内工作

重新启动VM时,会出现一个终端,要求您使用在安装过程中创建的用户名和密码登录Linux。

您现在可以使用经典的apt-get命令安装Docker,openSSH服务器,nodeJS。

5-从MacOS在VM中运行

如果像我这样失败,则选择了正确的键盘,则可能无法输入一些特殊字符。现在,使用VM的最佳方法是从外部进行操作。

停止VM(如果已经在外壳中,则现在停止sudo shutdown -h)并返回UTM:
在左侧面板中选择您的VM,然后单击右上角的按钮以再次编辑VM:
转到网络标签,然后在端口转发前面,点击新建
您需要为要从Mac OS主机访问的VM中的每个端口手动添加新的端口转发指令。

以SSH为例:在新的端口转发格式中,只需在Guest Port(访客端口)中写22,在Host Port(主机端口)中写什么(例如3022)。

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

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

6-通过sftp复制文件

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

使用以下方法创建新连接:
通讯协定:SFTP
主机:localhost
用户:bob
密码:[您的密码]
港口:3022
(是的,端口与SSH相同)

您现在可以在VM中自由浏览文件并与之复制文件。

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

7-在VM上使用VS Code

现在,您还可以通过Mac OS VS Code在VM上工作,安装 Remote Development 扩展: 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

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

我进行了一些Nuxt.js开发,该调用包含Apache / PHP / MySQL的API(不得不切换到MariaDB,因为我找不到正在运行的ARM版本的MySQL),这些API都在内部的不同Docker容器中运行使用docker-compose虚拟机。

具有端口将guest 3000端口转发到host 3000端口,我可以使用Safari浏览前端,就像它们都在Mac OS上本地运行一样。

我希望这些都可以节省您一些时间。

,

对于 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”终端配置文件。 shell under Rosetta

在 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

然后你就可以运行 ruby​​。

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

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

,

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...