/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. Вы уже знаете, что я большой сторонник asdf1 для управления фиксированными версиями установленных приложений. Давайте попробуем установить 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.