Gerenciar pacotes no macOS é um processo que não é nativo, por isso é necessária a utilização de algum gerenciador externo (de terceiros), que não tira de modo algum a excelência de tudo que foi criado. Com isso alguns gerenciadores conhecidos são:

A minha escolha foi a popularidade do Homebrew que fui apresentado, talvez seja por reflexo de pessoas e tutorias que vejo. Mas uso bastante e acho uma maneira muito simples de instalar e deixar os pacotes atualizados.

Mas por mais que Homebrew seja legal de instalar e atualizar vez ou outra os pacotes, é sempre interessante a curiosidade dos porques, por isso criei 2 arquivos anteriores que explicam coisas relacionadas ao funcionamento de:

O comportamento e gerenciamento do Homebrew é altamente relacionado ao git, então em alguns momentos saber sobre ele pode facilitar o entendimento.

Instalando Homebrew

A instalação do Homebrew é bem simples, pode ser consultada no link abaixo, onde sempre será a mais atual possível:

Depois para testar se tudo ocorreu da maneira correta, pode executar o comando:

$ brew doctor

Caso ocorra algum erro ou incompatibilidade, será descrita na saída do programa.

Tipos de pacotes

Seus pacotes s√£o divididos em 2 tipos:

  • CLI: linha de comando, muito utilizado em Linux e compilados para macOS;
  • Casks: todos os softwares que possuem interfaces e/ou que s√£o propriet√°rios, como Firefox, Chrome, Gimp, Virtualbox, etc. A sua maioria s√£o aplicativos instalados por padr√£o em /Applications, mas pode ser instalado por usu√°rio utilizando a pasta ~/Applications.

Formulas

A formula é a representação de um pacote a ser instalado, é uma DSL de Ruby que descreve o que precisa e como precisa ser feito o processo de instalação. Esse processo pode ser a compilação antes da instalação na máquina de quem executou o comando, um binário pré combilado chamado de bottle ou script que pode ser instalado (por consequência, sua dependência é o interpredador dessa linguagem).

O repositório atual com todas as formulas oficiais é o Homebrew/homebrew-core e a pasta onde elas ficam é:

Todos essses arquivos s√£o baixados a primeira vez para o seu computador com git clone, ap√≥s isso atualizados com git pull. √Č poss√≠vel tamb√©m fazer modifica√ß√Ķees locais e posteriormente o git gerenciar essas modifica√ß√Ķes, para efetuar uma modifica√ß√£o, utilize o comando:

$ brew edit <package>

Esse comando abre o editor padrão baseado na variável EDITOR ou HOMEBREW_EDITOR, a segunda pode ser utilizada caso queira abrir em um diferente do editor do sistema. Lembrando que pode ser alterada em tempo de execução, tenho um post sobre isso em:

Os detalhes est√£o no post acima, mas basicamente seria:

$ EDITOR=emacs brew edit <package>

Repositórios de terceiros

Estas formulas podem ser mantidas por terceiros e são referidas como taps, comumente armazenadas no Github, onde sempre são um repositório prefixado com homebrew-, algo como:

https://gihub.com/<username>/homebrew-<tap>

Assim adicionamos o repositório como:

$ brew tap <username>/<tap>

Note que se <username>/<tap> n√£o for informado, s√£o listados os taps j√° cadastrados.

Como o gerenciamento de formulas é feito via git, qualquer protocolo que ele saiba interagir é válido.

Para removermos um tap da lista, utilizamos:

$ brew untap <username>/<tap>

Atualizando índice de pacotes

√Č sempre importante atualizar o √≠ndice para ter as √ļltimas informa√ß√Ķes sobre tudo o que se quer instalar. Na pr√°tica o Homebrew utiliza o git para gerenciar as formulas, fazendo um git pull dos reposit√≥rios em que elas est√£o versionadas.

$ brew update

√Č importante saber que quando o processo de atualiza√ß√£o √© iniciado uma trava (lock) nesse comando √© feita para que mais de uma inst√Ęncia n√£o seja iniciada ao mesmo tempo (comportamento comum em gerenciadores de pacotes). N√£o feche o terminal sem que o processo ternha acabado ou finalizado de forma correta, caso contr√°rio ser√° necess√°rio apagar manualmente a trava.

Busca

A busca de um pacote é importante, para isso utilizamos:

$ brew search <name>

Esse comando filtra a busca com pacotes CLI e logo após os casks, é possível pesquisar apenas um tipo de cada utilizando as flags: --formula e --cask.

$ brew search --formula <name>
$ brew search --cask <name>

Informa√ß√Ķes sobre o pacote

√Č poss√≠vel obter informa√ß√Ķes sobre um pacote utilizando o comando:

$ brew info <name>

Mesmo que <name> seja um cask a informação é exibida, porém se for utilizado em script deve quebrar, por que o código de retorno é diferente de 0. Então se não quiser receber esse código no script, pode utilizar:

$ brew cask info <name>

Esse c√≥digo √© armazenado na vari√°vel ? e sempre representa o c√≥digo de sa√≠da do √ļltimo programa executado no termial.

$ echo $?

Nesse comando tamb√©m s√£o exibidas informa√ß√Ķes sobre quais depend√™ncias de <name> foram suplidas e como configurar ele como depend√™ncia de compila√ß√£o para seu c√≥digo.

Instalar software via Homebrew

Para instalar um pacote, pode utilizar o comando:

$ brew install <name>

Caso seja um cask utilize:

$ brew cask install <name>

Como vimos casks podem ser instalados em /Applications ou ~/Applications, para isso utilizamos a flag --appdir:

$ brew cask install <name> --appdir <pasta>

Algo interessante √© que o conte√ļdo de ambas pastas Applications √© mostrado no Launchpad.

Se <name> est√° em um tap e j√° existe como formula padr√£o, pode ser instalado como:

$ brew install <username>/<tap>/<name>

Listar pacotes

Podemos listar pacotes instalados utilizando o comando:

$ brew list

Caso queira listar os casks instalados deve adicionar a flag --cask:

$ brew list --cask

Esse comando lista os pacotes CLI e logo após os casks, é possível listar apenas um tipo de cada utilizando as flags: --formula e --cask.

$ brew list --formula
$ brew list --cask

Listar pacotes desatualizados

Para os mais detalhistas ou que gostam de saber os mínimos detalhes de cada atualização, é possível saber quais pacotes estão desatualizados utilizando o comando:

$ brew outdated

Esse comando lista os pacotes CLI e logo após os casks, é possível listar apenas um tipo de cada utilizando as flags: --formula e --cask.

$ brew outdated --formula
$ brew outdated --cask

Também é possível obter esta lista em formato json, utilizando a flag --json.

$ brew outdated --json

Note que existe mais de uma vers√£o do schema do JSON, pode verificar qual a padr√£o na vers√£o do Homebrew que est√° utilizando usando a flag --help.

$ brew outdated --help

Atualizar pacotes

Fazer a atualização de algum pacote pode utilizar o comando:

$ brew upgrade <name>

Onde toda vez que <name> n√£o for informado, todos os pacotes s√£o atualizados.

Também é possível atualizar somente pacotes CLI ou casks, utilizando as flags: --formula e --cask.

$ brew upgrade --formula
$ brew upgrade --cask

Brewfile

O comando que ativa essa instalação é o:

$ brew bundle

Que no seu primeiro uso, faz a ativação/instalação do comando e se o arquivo Brewfile estiver no diretorio em que foi executado o comando, executa o que está descrito no Brewfile.

Para o uso global é utilizado o arquivo ~/.Brewfile com comando:

$ brew bundle --global

Caso o Brewfile não esteja nem no diretório corrente, nem na sua pasta ~, pode ser especificado utilizando a flag --file:

$ brew bundle --file=<file>

Depois de tudo que foi apresentado o Brewfile se torna auto explicativo:

# Taps
tap "caskroom/cask"
tap "caskroom/fonts"
tap "homebrew/bundle"
tap "homebrew/cask-drivers"

cask_args appdir: "/Applications"

# Binaries
brew "hugo"
brew "tmux"
brew "vim"

# Apps
cask "alacritty", args: { appdir: "~/Applications" }
cask "vlc"

Referências