/usr/bin/arch
Многие из нас за последнее время стали обладателями маков на процессорах M1. Для поддержки приложений, написанных для
процессоров Intel есть Rosetta. В этой заметке я хочу подсветить расширенную утилиту arch
, которая на маках работает
чуть шире, чем uname -m
, и ситуации, в которых она может быть полезна.
Давайте посмотрим, как работает arch
. Без аргументов будет выведена текущая архитектура. С помощью аргумента с именем
архитектуры, можно имитировать другой тип процессора. Нам важно добиться, чтобы приложение, которое мы вызываем, думало,
что оно работает на Intel:
$ arch
arm64
$ arch -arm64 uname -m
arm64
$ arch -x86_64 uname -m
x86_64
У нас получилось сделать вид, что мы работаем на архитектуре x86_64
. Теперь о том, как это можно было бы применять.
Представим ситуацию, что какое-либо приложение не поставляется в собранном для arm64
виде. Например, на момент
написания статьи, это утилита kustomize
. Вы уже знаете, что я большой сторонник asdf
1 для управления
фиксированными версиями установленных приложений. Давайте попробуем установить kustomize
с помощью asdf
:
$ asdf install kustomize 5.1.1
Downloading kustomize from https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv5.1.1/kustomize_v5.1.1_darwin_arm64.tar.gz
tar: Error opening archive: Unrecognized archive format
В действительности релиза для arm64
под M1 не
существует: https://github.com/kubernetes-sigs/kustomize/releases/tag/kustomize%2Fv5.1.1.
Применим arch
для имитации архитектуры x86_64
:
❯ arch -x86_64 asdf install kustomize 5.1.1
Downloading kustomize from https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv5.1.1/kustomize_v5.1.1_darwin_amd64.tar.gz
$ asdf global kustomize 5.1.1
$ kustomize version
v5.1.1
Теперь у нас есть рабочая утилита, которую мы можем использовать на нашем M1. За обеспечение её работоспособности будет отвечать Rosetta.