Если вы используете Homebrew на macOS, возможно, сталкивались с ситуацией, когда какая-то программа «застряла» на старой версии, несмотря на доступные обновления. Например, как в случае с cask «rar», который почему-то отказывается обновляться, хотя в списке пакетов явно указана более новая версия.
Всё дело в pinning – механизме, который позволяет закрепить конкретную версию приложения. Но если вы не помните, как это сделали, вернуть всё как было может быть непросто, особенно если стандартные команды вроде brew unpin не работают. Давайте разбираться.
Почему возникает ошибка «No available formula» при попытке открепить cask
Сначала стоит понять, что Homebrew разделяет пакеты на формулы (formulae) и cask (программы с графическим интерфейсом). По умолчанию команда brew pin и brew unpin предназначены только для формул, но не для cask. Поэтому при попытке выполнить brew unpin rar вы получите ошибку:
Error: No available formula with the name “rar”. Did you mean rnr, dar, bar or par?
Это происходит потому, что rar установлен как cask, а не как формула.
Но откуда тогда взялось состояние «PINNED» в выводе обновлений? Всё дело в сторонних расширениях для Homebrew. Возможно, используется утилита brew-cask-upgrade (сокращённо brew cu), которая добавляет функционал для управления cask, включая закрепление версий.
Как открепить cask через brew-cask-upgrade
1. Проверьте, установлен ли tap buo/cask-upgrade. Выполните команду:
brew tap | grep buo/cask-upgrade
Если вывод пустой, установите его:
brew tap buo/cask-upgrade
2. Снимите закрепление для cask «rar». Вместо стандартной команды brew unpin используйте:
brew cu unpin rar
Это специфичная для brew cu команда, которая управляет состоянием pinning для cask.
3. Убедитесь, что закрепление снято. Посмотрите список закреплённых cask:
brew cu --list-pinned
Если всё сделано правильно, «rar» исчезнет из списка.
Что делать, если команда не сработала
Иногда проблемы возникают из-за конфликта версий или некорректных метаданных. Вот что можно попробовать:
Обновите Homebrew и все taps:
brew update && brew upgrade
Переустановите cask «rar»:
brew reinstall --cask rar
Проверьте, не закреплён ли пакет через другие инструменты (например, через topgrade, если вы его используете). В этом случае стоит заглянуть в конфигурацию автоматизированного обновления.
Зачем вообще нужно закреплять версии
Pinning полезен, когда:
- Новая версия программы вызывает ошибки в вашем рабочем процессе.
- Вы хотите отложить обновление до проверки совместимости (например, для финансовых приложений вроде Ledger Live).
- Программа перешла на платную модель, а старая версия остаётся бесплатной.
Но важно помнить: brew cu не блокирует обновления через стандартные команды Homebrew. Если вы выполните brew upgrade –cask rar, пакет обновится, даже если он закреплён через brew cu.
Как избежать случайного закрепления в будущем
1. Внимательно проверяйте команды при использовании brew cu. Например, опция –pin при обновлении может случайно закрепить версию:
brew cu --pin outdated_package
2. Регулярно просматривайте список закреплённых cask:
brew cu --list-pinned
3. Используйте псевдонимы в shell, чтобы сократить риск ошибок. Например, добавьте в .zshrc или .bashrc:
alias brewlistpinned='brew cu --list-pinned'
Если вы всё ещё видите «PINNED» в выводе
Проверьте, не добавлены ли другие taps, которые могли повлиять на поведение Homebrew. Например, некоторые пользователи случайно устанавливают несколько менеджеров для cask, что приводит к конфликтам. Команда brew tap покажет все активные репозитории – если там есть что-то кроме homebrew/cask, buo/cask-upgrade и стандартных, изучите их назначение.
Альтернатива: как управлять версиями без pinning
Если закрепление кажется слишком рискованным, попробуйте:
– Установить конкретную версию через cask-url:
brew install --cask https://raw.githubusercontent.com/Homebrew/homebrew-cask/your-desired-version/Casks/rar.rb
– Использовать версионные директории (например, через brew extract для формул). Для cask это сложнее, но возможно создать собственный tap с нужной версией.
Подводя итог, проблема с закреплением cask возникает из-за особенностей используемых инструментов. Если вы применяете brew cu, запомните три ключевые команды:
- brew cu unpin – снять закрепление.
- brew cu –list-pinned – показать закреплённые cask.
- brew cu –pin – закрепить версию (но используйте осторожно!).
И не забывайте: Homebrew – гибкая система, но её расширения вроде buo/cask-upgrade требуют внимательного чтения документации. Если что-то пошло не так, всегда можно заглянуть в официальный репозиторий и поискать ответы в Issues.
P.S. Если вы активно используете topgrade, проверьте его конфигурацию – возможно, он вызывает brew cu с параметрами, которые автоматически закрепляют версии. Это редкий сценарий, но его стоит исключить.