Gerenciando pacotes no macOS com Homebrew :: Flaverton Rodrigues Rosa
Gerenciando pacotes no macOS com Homebrew
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:
Software como bundle (.app) no macOS: uma introdução ao que são os apps (bundles) no macOS;
rpath no macOS: Explica como os apps (bundles) auto suficientes gerenciam suas dependências internas e como o RPATH funciona no macOS
O comportamento e gerenciamento do Homebrew é altamente relacionado ao git, então em alguns momentos saber sobre ele pode facilitar o entendimento.
A instalação do Homebrew é bem simples, pode ser consultada no link abaixo, onde sempre será a mais atual possível:
https://brew.sh/index_pt-br#install
Depois para testar se tudo ocorreu da maneira correta, pode executar o comando:
Caso ocorra algum erro ou incompatibilidade, será descrita na saída do programa.
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.
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 é:
https://github.com/Homebrew/homebrew-core/tree/master/Formula
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>
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.
É 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.
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>
É 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.
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:
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>
Podemos listar pacotes instalados utilizando o comando:
Caso queira listar os casks instalados deve adicionar a flag --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
Listar pacotes desatualizados
$ brew outdated --formula
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
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
O comando que ativa essa instalação é o:
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: