На прохання Юрія Власюка я трохи переробив свій пост з групи Facebook‘а. Основною метою поста був опис масового деплоймента ПЗ на комп’ютери або перевстановлення ПЗ після «спаленої землі», за допомогою опенсорсного менеджера пакетів Homebrew. Для статті я спробую додати приклади використання його в звичайному житті. У моєму випадку це була допомога батькам у їх боротьбі з домашнім Mac mini, без котрого за сьогоднішніх карантинних часів — ніяк…

Як мій науковий керівник ще на зорі моєї наукової молодості вчив мене, спочатку дослідимо історію питання і трохи проаналізуємо те, що було раніше…

Загалом, після того, як в середині 90-х був похерений мій улюблений проект Apple A/UX, я встановив на одну з офісних Macintosh Quadra NetBSD і майже заспокоївся, заходившись освоювати Apple Network Assistant, а потім — Apple Remote Desktop. І з сумом дивився на системи, де активно розвивалися системи управління пакетами, такі як Debian, та йому подібні.

Але, як ви розумієте тепер, тільки-но восени 2000 року з’явилася Mac OS X Public Beta, я негайно її собі встановив, почавши інтенсивно використовувати та досліджувати.

Добре, визнаю! Тільки-но у середині 1997 року з’явився проект Apple Rhapsody (що трансформувався згодом у проект Apple Darwin), і тим більше, коли в 1999 році вийшов заснований на ньому і придбаний разом зі Стівом NextStep – Mac OS X Server, я пробував використовувати ці системи в своїй роботі і навіть трохи у замовників. Але в Mac OS X спочатку було щось особливе в плані адміністрування. А ще це була справжня і дійсно реальна на той момент спроба створити *nix систему для звичайного, не яйцеголового й не червоноокого користувача!

Майже одразу після появи першої кішки (Cheetah – кодове ім’я Apple Mac OS X 10.0) почали з’являтися різні системи управління пакетами. До Homebrew було кілька спроб створити ефективні пакетні менеджери для OS X. Дві найбільш популярні в результаті втілилися в проекти Fink і Macports, але у кожної з них все одно є свої гострі кути. Зокрема, в обох створення власних пакетів або портів є надто складним навіть для системного адміністратора.

Всі менеджери пакетів в *nix завжди мали певні недоліки, і більшість Linux-дистрибутивів намагаються по-різному ці недоліки обійти. Вся принадність Homebrew в тому, що цей менеджер пакетів спрямований на простоту використання. У Homebrew створювати нові пакети і працювати з ними дуже просто. Давайте пригадаємо, що роблять менеджери пакетів. Основна думка дуже зрозуміла. Homebrew спрощує та автоматизує монотонні дії із завантаження та архівів пакунків. Якщо вам набридли нескінченні ./configure && make && make install, Homebrew вам допоможе.

При цьому Homebrew не нав’язує ніякої суворої структури і шляхів. За промовчуванням, він встановлюється в /usr/local, але його можна поставити куди завгодно. Всі пакети встановлюються в директорії в спеціальному «підвалі» (cellar), наприклад Cellar/git/1.6.5.4/. Після встановлення Homebrew робить симлінк в стандартні Unix-директорії. Втім, і ручне встановлення якихось пакетів не з Homebrew теж чудово співіснує з ними.

Таке може знадобитися рідко, але пакети можна встановлюватии безпосередньо з систем контролю версій. Якщо у пакета є публічний git, svn, cvs або mercurial репозиторій, завжди можна зібрати найсвіжішу devel-версію прямо звідти простим brew install.

До речі, встановлення займає менше часу, оскільки Homebrew намагається уникати дублювання пакетів. Наприклад, вона не ставить чергову версію Perl як залежність оскільки в системі вже є і працює готовий Perl. До того ж, Homebrew задуманий таким чином, аби вам не доводилося використовувати sudo при роботі з пакетами. Отже, давайте все-таки зробимо рішучий крок і встановимо менеджер пакетів Homebrew, який, я вважаю, має бути майже у кожного користувача Mac, а тим більше – у макадміна.

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Другим кроком ми встановлюємо першим пакетом з Homebrew command line interface для Mac App Store (https://github.com/mas-cli/mas)

$ brew install mas

Важливою особливістю command mas-cli є те, що він працює з ідентифікаторами програм, які є в кожного продукту в магазині Mac App Store. А найпростіший спосіб отримати ідентифікатор програми – переглянути його у себе на компі за допомогою команди

$ mas list

У мене виходить, зазвичай, ось такий результат:

1440147259 AdGuard for Safari (1.8.10)
1037126344 Apple Configurator 2 (2.13.3)
409183694 Keynote (10.3.9)
715768417 Microsoft Remote Desktop (8.0.30030)
409203825 Numbers (10.3.9)
409201541 Pages (10.3.9)
568494494 Pocket (1.8.6)
897118787 Shazam (2.10.0)
1084332555 Simple Voice Recorder Pro (1.7)
919269455 StuffIt Expander (16.2)
411680127 WiFi Scanner (2.9.5)

Для швидкого встановлення всього необхідного програмного забезпечення цих двох кроків принципово достатньо. Всі інші менеджер пакетів зробить сам, якщо ми звернемося до розширених функцій (я потім напишу, до яких).

Далі для інсталяції всього необхідного є два шляхи: перший – просто дати пару команд в терміналі, перерахувавши все, що нам потрібно. Для роботи в одні руки мені це здається зручнішим…

Для мене це:

$ brew install fdupes ffmpeg glances handbrake imagemagick jhead joe jpegoptim media-info mc optipng osx-cpu-temp telnet wget youtube-dl
$ brew install —cask caramba-switcher cool-retro-term dropbox firefox google-chrome handbrake iina imazing losslesscut rar signal skype textmate transmission viber vlc zoom
$ mas install 1440147259 1037126344 409183694 715768417 09203825 409201541 568494494 897118787 1084332555 919269455 411680127

Зверніть увагу: в другій команді з’явився ключ з ще одним терміном з галузі пивоваріння (Боже, як же мені це подобається в цьому пакеті 😉) «–cask». Бочонок (Cask) пропонує спосіб для командного рядка керувати встановленням графічних (і не тільки, см. rar) додатків з цілим переліком різновидів ліцензій, даючи можливість розширити функціонал пакета Homebrew за межі command line interface, і дозволяючи встановлювати будь-які програми, які з яких-небудь причин не увійшли до Mac Apple Store. Це одна з тих розширених функцій, які я обіцяв згадати раніше. І вона автоматично (дякуючидосвідченим пивоварам!) встановлюється пакетом Homebrew при першому зверненні до однієї з функцій бочки (cask). У моєму прикладі — це встановлення кількох необхідних мені графічних програм.

Але я також обіцяв, на мою думку, більш правильний (але перший спосіб все одно легше 😉), я б навіть сказав, більш канонічний, шлях встановлення всього і вся на комп’ютер Macintosh.

Для нього ми скористаємося ще однією розширеною функцією, а саме – Homebrew bundle. Цей метод можна застосовувати як тоді, коли потрібно налаштувати комп’ютер з таким же набором ПО, як і наявний, так і в разі, коли встановлення занадто великої кількості ПО унеможливлює встановлення в кілька рядків в терміналі. І тут на допомогу приходить розширення bundle. Для встановлення всього і відразу в один рядок нам знадобиться записати все, що нам необхідно, в спеціальний файл Brewfile. Мені він подобається ще й можливістю прокоментувати кожен рядок, щоб було зрозуміло кільком співробітникам, які використовують одні й ті ж самі інструменти або собі самому через деякий час. А ще – можливістю «закоментувати» те ПЗ, яке у даному випадку вам не потрібно встановлювати!

Ви, мабуть, cпитаєте, як же цей чортів файл створювати? Чи не потрібно для нього вчити ще одну версію XML або ще якусь гидоту? Розробники і тут подбали про нас з вами, додавши в розширення команду dump. За її допомогою ми можемо отримати Brewfile, що відповідає всьому встановленому на обраному комп’ютері.

$ brew bundle dump

У моєму випадку це такий файл:

tap “homebrew/bundle”
tap “homebrew/cask”
tap “homebrew/core”
brew “fdupes”
brew “ffmpeg”
brew “glances”
brew “handbrake”
brew “imagemagick”
brew “jhead”
brew “joe”
brew “jpegoptim”
brew “mas”
brew “media-info”
brew “midnight-commander”
brew “optipng”
brew “osx-cpu-temp”
brew “telnet”
brew “transmission-cli”
brew “wget”
brew “youtube-dl”
cask “adguard”
cask “caramba-switcher”
cask “cool-retro-term”
cask “coteditor”
cask “dropbox”
cask “firefox”
cask “google-chrome”
cask “handbrake”
cask “iina”
cask “imazing”
cask “losslesscut”
cask “marta”
cask “rar”
cask “signal”
cask “skype”
cask “textmate”
cask “tor-browser”
cask “transmission”
cask “viber”
cask “vlc”
cask “zoom”
mas “AdGuard for Safari”, id: 1440147259
mas “Apple Configurator 2”, id: 1037126344
mas “Keynote”, id: 409183694
mas “Microsoft Remote Desktop”, id: 715768417
mas “Numbers”, id: 409203825
mas “Pages”, id: 409201541
mas “Pocket”, id: 568494494
mas “Shazam”, id: 897118787
mas “StuffIt Expander”, id: 919269455
mas “WiFi Scanner”, id: 411680127
mas “Zoom for Safari”, id: 1423085875
mas “Simple Voice Recorder Pro”, id: 1084332555

З коментарями виглядає ще зрозуміліше і зручніше!

# Да, я – старий пінь!
brew «joe»
# Куди ж без нього!
cask “cool-retro-term”

Незалежно від того, який шлях встановлення ПО ми обрали, але все зроблено, тож маємо комп’ютер з встановленим на нього всім необхідним ПЗ! Що далі?

Далі ми маємо вкрай зручний механізм відстеження і виконання своєчасного оновлення всіх програм і вирішення різних проблем, пов’язаних з оновленням і перестановками … І теж, як завжди, в два шляхи. Перший – по черзі запускати скрипти

$ brew update

Оновлюємо базу пакетів в Homebrew

$ brew upgrade

Потім оновлюємо пакети і бочки, які ви встановили за допомогою Homebrew.

$ brew cleanup

І наприкінці видаляємо застарілі версії пакетів Homebrew. Не повірите, але я одного разу зіштовхнувся з ось таким повідомленням: «This operation has freed approximately 11.3GB of disk space.», А для 128Гб SSD, це досить суттєва цифра!

Ну і, зрозуміло, оновлюємо все ПЗ, встановлене з Mac App Store.

$ mas upgrade

Або робимо це все в один рядок в терміналі

$ brew update && brew upgrade && brew cleanup; mas upgrade

Все б добре, але раптом нам знадобиться розширити наведений у статті список програм чимось своїм або рекомендованим співтовариством або цим сайтом. Припустимо ми багато хорошого чули про програму baobab, казали відмінний аналізатор використання диска і не прийдеться зчищати тонку смужку магнітного шару з жорсткого диска, як у випадку з MacKeeper, чур мене.

Спочатку переконаємося, що потрібна нам формула є у пивоварів:

$ brew search baobab

Homebrew радісно нам відповідає, що подібна формула у пивоварів є!

==> Formulae
baobab

Тепер залишається тільки дати менеджеру пакетів команду скористатися цією формулою і встановити baobab!

$ brew install baobab

І не преминемо скористатися ним для перевірки!

Після невеликої паузи, все-таки, не дивлячись на любов до CLI, файлів на комп’ютері чимало і…

можна тихо і спокійно повивчати, куди ж поділося вільне місце!

Приблизно така ж послідовність дій і у випадку з графічними програмами! Припустимо ми вирішили встановити програму TeamViewer, щоб морочити голову коханому сисадміну, або заходити зрідка на робочий комп’ютер. Послідовність та ж: перевіряємо, встановлюємо, запускаємо для проби!

$ brew search teamviewer

==> Casks
teamviewer teamviewer-quickjoin teamviewermeeting
teamviewer-host teamviewer-quicksupport

$ brew install teamviewer

Програма встановлюється в папку Application і її звідти і можна запустити! Втім, якщо хочеться запустити її з командного рядка, чому б ні?

$ open -a TeamViewer

Ну і тепер саме незвичайне — установка програм з Mac App Store з терміналу або віддалено. Для початку, як вже було описано раніше, нам потрібно дізнатися ідентифікатор цієї програми! Ось вирішили ми максимально спростити користувачеві роздачу якихось документів з його Мака. Скористаємося для цього, наприклад, програмою A Simple Http Server. Дізнатися його ідентифікатор просто! Головне не забути, що ім’я програми, якщо воно складається не з одного слова треба взяти в лапки.

$ mas search "Simple HTTP Server"

1220721770 A Simple Http Server (1.0.0)

Тепер встановлюємо її

$ mas install 1220721770

І клієнт вже може її запускати!

Ось власне і все, що хотілося б донести! За кадром залишився Whalebrew – інструмент, що створює псевдоніми для контейнерів Docker і дозволяє запускати їх безпосередньо з командного рядка через аліас так, якби вони були локальними виконуваними файлами. Не знаю, чи варто було заглиблюватися і цікаво це, чи ні.
Не особливо заглиблювався і в подальше адміністрування всього встановленого. Якщо цікаво, можна задавати питання, я намагатимуся не затягувати з відповідями!

Дякую, що дочитали до кінця!

Яків Глумов
ТОВ Компанія Мак-версія
Епізод подкасту MacAdminsUA з Яківом

Універсальна бізнес форма

Tags: