Категория > Новости > M1 для хакера. Тестируем Homebrew, виртуалки, Docker и Node на новой архитектуре Apple - «Новости»

M1 для хакера. Тестируем Homebrew, виртуалки, Docker и Node на новой архитектуре Apple - «Новости»


1-02-2022, 00:00. Автор: Григорий
пред­ста­вила новую архи­тек­туру Apple Silicon на базе ARM и объ­яви­ла, что в течение двух лет переве­дет на нее все свои компь­юте­ры. Для прос­тых поль­зовате­лей миг­рация про­ходит прак­тичес­ки незамет­но, а как нас­чет прод­винутых? В этой статье я рас­ска­жу об ито­гах года исполь­зования MacBook Pro с M1 внут­ри и покажу те нем­ногие под­водные кам­ни, с которы­ми мне довелось стол­кнуть­ся.
 

Внешний монитор


Мак­буки из пер­вого поколе­ния компь­юте­ров на M1 под­держи­вали все­го один внеш­ний монитор (к Mac mini мож­но под­клю­чить два). С выходом новых MacBook Pro на M1 Pro и M1 Max ситу­ация изме­нилась: у них есть порт HDMI, который мож­но исполь­зовать для вто­рого экра­на.


Ес­ли же менять ноут­бук ты пока не хочешь, а для работы нуж­но нес­коль­ко монито­ров, то решени­ем может стать док‑стан­ция с под­дер­жкой DisplayLink — нап­ример, Dell D6000 или CalDigit. Одна­ко я прос­то отка­зал­ся от исполь­зования трех монито­ров и купил один, но UltraWide. Да, это не Retina Display, но если тебе нуж­но раз­решение 5K, то выбор не велик — толь­ко LG UltraFine, сто­ящие 90 с чем‑то тысяч руб­лей.


Не­дав­но товарищ посове­товал мне велико­леп­ную ути­литу, которая поз­воля­ет в разы улуч­шить работу с моим монито­ром. BetterDummy соз­дает фик­тивный дис­плей, который под­держи­вает огромный набор раз­решений Retina, а затем переда­ет кар­тинку с него на твой. Если твой монитор пло­хо под­держи­вает­ся в macOS, то эта прог­рамма может кар­диналь­но изме­нить ситу­ацию.


Нап­ример, для дис­плея с раз­решени­ем 3440 × 1440 я рекомен­дую исполь­зовать сле­дующие нас­трой­ки.


Единс­твен­ная проб­лема, с которой я стол­кнул­ся при исполь­зовании BetterDummy, — невоз­можно выс­тавить высокую час­тоту обновле­ния (144 Гц). Ока­залось, что это огра­ниче­ние API CGVirtualDisplay в macOS, и испра­вить эту проб­лему может толь­ко Apple. Воз­можно, все изме­нит­ся, ког­да появит­ся под­дер­жка ProMotion для AirPlay или Sidecar.


Ес­ли ты хочешь иметь высокую час­тоту обновле­ния экра­на (144 Гц и выше) с раз­решени­ем 3440 на 1440 точек и более, то при­дет­ся отка­зать­ся от BetterDummy и купить отдель­ный кабель USB Type-C → DisplayPort. Через уни­вер­саль­ные хабы (у меня Native Union) работать с такими нас­трой­ками не вый­дет — не хва­тит про­пус­кной спо­соб­ности пор­та для одновре­мен­ного вывода изоб­ражения и под­клю­чения перифе­рии.


 

Homebrew и zsh


Homebrew — популяр­ный сто­рон­ний пакет­ный менед­жер для macOS. Если тебе нуж­на какая‑то кон­соль­ная ути­лита, то, ско­рее все­го, ты най­дешь ее в Homebrew. С вер­сии 3.0 Homebrew под­держи­вает ARM. До это­го рабочим решени­ем была уста­нов­ка Homebrew через слой бинар­ной тран­сля­ции Rosetta 2. Соот­ветс­твен­но, все при­ложе­ния, уста­нов­ленные отту­да, тоже про­ходи­ли тран­сля­цию и работа­ли (но не так быс­тро, как мог­ли бы армов­ские бинар­ники).


Сей­час дос­таточ­но пос­тавить Homebrew через скрипт‑уста­нов­щик и получать натив­ные пакеты для ARM.


$ /bin/bash -c "$(curl -fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"$ echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' /Users/$(logname)/.zprofile
$ eval "$(/opt/homebrew/bin/brew shellenv)"

Но если понадо­бит­ся перек­лючать­ся меж­ду архи­тек­турами, то можешь сде­лать себе такие али­асы в фай­ле ~/.bashrc или ~/.zshrc:


alias intel="env /usr/bin/arch -x86_64 /bin/zsh --login"
alias arm="env /usr/bin/arch -arm64 /bin/zsh --login"

Чуть поз­же мы стол­кнем­ся с прак­тичес­ким при­мене­нием такого решения, но если вкрат­це, то скрипт кон­фигура­ции (./configure) перед сбор­кой опре­деля­ет перемен­ные сис­темы, в том чис­ле и для какой архи­тек­туры ком­пилиро­вать про­ект. Нап­ример, если сей­час выб­рать режим i386 при уста­нов­ке Homebrew, то вмес­то бинар­ников для ARM64 мы получим вер­сии для x86_64, что при­ведет к потере про­изво­дитель­нос­ти.


 

Виртуальные машины


 

Parallels Desktop


Про­дукт Parallels — это в дан­ный момент самое фун­кци­ональ­ное решение для вир­туали­зации на M1. Недаром его показы­вали на пре­зен­тации Apple. Через Parallels Desktop мож­но в один клик уста­новить дис­три­бути­вы Ubuntu, Fedora, Debian и macOS Monterey. С вер­сии 17.1.1 добав­лена под­дер­жка акту­аль­ной на дан­ной момент вер­сии Kali Linux — 2021.3.


Драй­веры гос­тевых машин опти­мизи­рова­ны и работа­ют без нарека­ний (буфер обме­на, сеть, динами­чес­кое раз­решение, 3D-уско­рение и про­чие фичи). Проб­рос адап­тера Wi-Fi или любого дру­гого устрой­ства работа­ет кор­рек­тно.


От­дель­но хочет­ся погово­рить о Windows 11 для ARM, которая уме­ет тран­сли­ровать код при­ложе­ний x86_64 в натив­ные вызовы ARM. При­чем дела­ет это весь­ма качес­твен­но, как и Rosetta 2. При помощи такой мат­решки мне уда­лось запус­тить отладчик для кода x64 и без проб­лем уви­деть регис­тры RBX, RSP, RBP и так далее.


Так же работа­ет и Visual Studio, которая смог­ла ском­пилиро­вать неболь­шой тес­товый про­ект (Quasar RAT) в клас­сичес­кую архи­тек­туру i386. И это все на вир­туаль­ной машине с гос­тевой Windows, для которой хос­том выс­тупа­ет macOS для ARM. Фан­тасти­ка!


Не могу не отме­тить энер­гоэф­фектив­ность при работе с вир­туаль­ными машина­ми. Запущен­ные фоном VM без серь­езной наг­рузки прак­тичес­ки не вли­яют на вре­мя работы от акку­муля­тора. Помимо это­го, в новых вер­сиях Parallels был добав­лен режим поез­дки, в котором еще силь­нее сни­жает­ся энер­гопот­ребле­ние при без­дей­ствии VM.


 

VMware


Еще один про­изво­дитель популяр­ных решений для вир­туали­зации до недав­него вре­мени был за бор­том зате­янно­го Apple перево­рота, но в кон­це сен­тября 2021 года ком­пания VMware пред­ста­вила на все­общее обоз­рение тех­ничес­кое превью VMware Fusion.


Сей­час VMware Fusion мож­но бес­плат­но заг­рузить на стра­нице про­дук­та или же по пря­мой ссыл­ке. Минималь­ный набор удобств при­сутс­тву­ет, одна­ко в Ubuntu мне не уда­лось нас­тро­ить VMware Tools. Я уста­новил откры­тую вер­сию — open-vm-tools, но и это не помог­ло мне сде­лать адап­тивное раз­решение экра­на и общий с хос­товой сис­темой буфер обме­на.


В общем, решение сырова­тое, но впол­не работос­пособ­ное и пока что бес­плат­ное.


 

QEMU


QEMU — это глы­ба не толь­ко сре­ди про­дук­тов эму­ляции, но и сре­ди средств аппа­рат­ной вир­туали­зации. Это осно­ва гипер­визора KVM, который исполь­зует аппа­рат­ные воз­можнос­ти сов­ремен­ных про­цес­соров. Базовая под­дер­жка Apple Silicon уже есть в QEMU, и ее активно дораба­тыва­ют. Так что его в ряде слу­чаев мож­но исполь­зовать как мощ­ное средс­тво вир­туали­зации на M1.


Установка QEMU

Для начала под­готовим необ­ходимые пакеты для сбор­ки:


Кло­ниру­ем репози­торий QEMU, добав­ляем вет­ку со вклю­чен­ным рас­ширени­ем BFloat16 и при­меня­ем патч Алек­сан­дра Гра­фа:


$ git checkout 3c93dfa42c394fdd55684f2fbf24cf2f39b97d47
$ curl https://patchwork.kernel.org/series/485309/mbox/ | git am

Со­бира­ем и уста­нав­лива­ем QEMU:


$ ../configure --target-list=aarch64-softmmu
$ make -j8$ sudo make install

Го­тово, мож­но поль­зовать­ся!


Создание виртуальной машины с Ubuntu в QEMU

Да­вай поп­робу­ем пос­тавить Ubuntu для x86_64.



Перейти обратно к новости