如何解决在新的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
基本上:
- 点击创建新虚拟机
- 在信息标签中:为您的VM选择名称和图标
- 在系统标签中:
- 在硬件中选择ARM64(aarch64)体系结构
- 给它一些内存(大约4 GB ...)
- 在驱动器标签中:
- 使用新驱动器创建主驱动器,界面VirtIO并选择所需的大小(我选择20 480 MB),然后单击“创建”。
- 使用新驱动器创建CD驱动器,选中“可移动,接口USB”,然后单击创建
- 保存虚拟机
- 在侧栏中并在右下角选择闪亮的新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”终端配置文件。
在 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技术无缝运行。”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。