如何让Ruby和Node.js开发环境在Apple Silicon架构上运行。例如Docker之类的虚拟化软件呢?
发布于 2020-11-16 14:00:24
编程语言,如Ruby,Node和Python应该可以在苹果M1芯片上运行,但目前还不支持Docker (他们正在努力)
用于Mac的Docker Issue https://github.com/docker/for-mac/issues/4733
Docker团队可能正在努力修复这个问题,如下所示:https://github.com/docker/roadmap/issues/142
我的建议是:只有当你想构建iOS应用程序时才使用它。由于大多数人现在还没有笔记本电脑,我们最终可能会遇到很多其他问题。
更新:现在回答这个问题更合适:https://stackoverflow.com/a/65253659/8216911
发布于 2020-12-11 22:58:39
我尝试了很多方法,但遇到了一些真正的问题,但最后,这是我找到的在新的Mac Silicon M1芯片上运行Docker的最简单的方法。
Docker本身不能工作,VirtualBox不能工作,Parallels不能工作,...最后,使用UTM创建一个虚拟机,并在其上安装Ubuntu服务器。一旦你有了它,你就可以在上面安装任何你想要的东西(Docker,Node,Apache,PHP,MariaDB,...)。
然后你可以设置所有东西,这样你就可以使用所有你喜欢的Mac OS工具(终端,传输,VS代码,Safari ... )来工作,就像您在本地文件系统上拥有所有这些一样。
1-下载Linux安装盘
获取一个ARM linux发行版。我使用Ubuntu server 20.04 LTS:https://cdimage.ubuntu.com/releases/20.04/release/ubuntu-20.04.1-live-server-arm64.iso
它有922MB。
我从这里得到它:https://ubuntu.com/download/server/arm
您可以选择任何linux发行版,但只需确保获得ARM版本(有些发行版没有ARM版本)。
2-下载UTM
UTM是一个主要针对IOs设备的虚拟化软件,但它也适用于Mac OS。
https://github.com/utmapp/UTM/releases/download/v2.0.14/UTM.dmg
那个是255MB的。
未来的版本将从这里获得:https://github.com/utmapp/UTM/releases/
只需下载该包,打开它,然后启动其中的应用程序。
3-创建虚拟机
创建新虚拟机,将linux安装盘连接到该虚拟机,然后按照以下步骤启动该虚拟机:
https://github.com/utmapp/UTM/wiki/Install-Ubuntu-ARM64-on-Apple-M1
基本上:
>H114在硬件中选择ARM64 (aarch64) architecture
现在可以启动虚拟机了,它将在Linux安装CD: install Linux上启动。
在这个经典的安装过程中,系统将要求您在linux系统上创建一个用户帐户(让我们称其为bob)。安装完成后,请关闭VM并解压缩安装磁盘,然后再重新启动。
4-在虚拟机中工作
当您重新启动VM时,您会得到一个终端,要求您使用在安装过程中创建的用户名和密码登录Linux。
您现在可以使用经典的apt-get命令安装Docker、openSSH-server、nodeJS。
5-从MacOS在虚拟机中工作
如果你像我这样选对了键盘,你可能会在键入一些特殊字符时遇到麻烦。使用你的虚拟机的最好方法是现在从它的外部工作。
停止VM (如果您已经在shell中,请立即执行sudo shutdown -h ),然后返回到UTM:
在左侧面板中选择您的虚拟机,然后单击右上角按钮再次编辑该虚拟机:
转到网络选项卡,在端口转发前面,单击新。
您需要为要从Mac OS主机访问的VM中的每个端口手动添加新的端口转发指令。
例如,对于SSH:在新的端口转发表单中,只需在Guest port中写入22,在Host Port中写入您想要的内容(假设为3022)。
现在,您可以重新启动虚拟机,在普通的Mac OS终端中,您可以使用以下命令登录虚拟机
3022 bob@ -p
如果您不想每次都键入密码,请将~/.ssh/id_rsa.pub (来自Mac OS)的内容复制到VM中新创建的/home/bob/.ssh/authorized_keys文本文件中。
6-通过sftp复制文件
遗憾的是,我没有设法使用finder直接访问VM的内容。我不得不使用著名的FTP客户端传输。
使用以下命令创建新连接:
协议: SFTP
Host: localhost
用户: bob
Password:您的密码
端口: 3022
(是,端口与SSH相同)
您现在可以自由地浏览和复制文件到您的VM或从VM复制文件。
但是等等..。还有更多!
7-在您的VM上使用VS代码
现在,您还可以在虚拟机上工作,从Mac代码安装远程开发扩展:https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack
安装扩展后,单击VS代码窗口左下角的绿色><符号,然后选择Remote-SSH: connect to host...
选择add new SSH host并输入ssh -p 3022 bob@localhost
现在,您可以在VM内的项目上使用VS Code,就像它在本地文件系统中一样。
我做了一些Nuxt.js开发,调用Apache / PHP / MySQL驱动的API (我不得不切换到MariaDB,因为我找不到正在运行的MySQL的ARM版本),这些API都是使用docker-compose在VM内的不同Docker容器中运行的。
有了port将来宾3000端口转发到主机3000端口,我就可以使用Safari浏览前端,就像它都在Mac OS上本地运行一样。
我希望这一切都能为你节省一些时间。
发布于 2021-02-23 23:37:52
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 tab Run命令"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然后你就可以运行ruby了。
我还设法在Parallels虚拟化测试版的Mac M1上运行了一个用于ARM的流浪虚拟机fedora33。这可能会对apache和php有所帮助。这里有说明
https://stackoverflow.com/questions/64774787
复制相似问题