Atualização automática do Homebrew

13

Atualmente, estou usando o gerenciador de pacotes Homebrew e minha pergunta é: é possível escrever o script de um bash para executar brew updatee, eventualmente, brew upgradesempre que abrir um shell pela primeira vez? Estou usando o iTerm no momento.

g_rmz
fonte
Você pode fazer isso em ~/.bash_profilearquivo. Você precisará verificar se apenas 1 sessão do Terminal está aberta e depois executar brew update. Verifique stackoverflow.com/questions/6172663/… para determinar o número de janelas do Terminal.
Mateusz Szlosek 19/09/15
Esse é o número de terminais que estão abertos quando o script é executado ou o número de terminais abertos em geral?
g_rmz
Esse é o número de terminais abertos (janelas + guias) quando o script é executado. ~/.bash_profileé executado automaticamente no início da sessão do Terminal. Essa verificação é necessária se você precisar executar brew updatena primeira inicialização. Se quiser executar este cada vez que uma nova janela é aberta, ignore este passo e correr brew updateem ~/.bash_profile.
Mateusz Szlosek
Isso tornará a abertura da guia Terminal muito lenta
user151019
Ok obrigado! :) Diminuirá muito o desempenho do terminal?
g_rmz

Respostas:

20

Isso é muito fácil de fazer.

Para eficiência (e fator legal), eu usaria uma ferramenta como o Lingon para iniciar esse script periodicamente usando o launchctl / launchd em vez de cada vez que você inicia um shell. No meu MacBook, são necessários 3 segundos para atualizar a segunda vez (sem trabalho, conjunto de cache DNS, etc ...) e 10 segundos para executar na primeira vez (sem trabalho) ou mais de 15 segundos se um pacote precisar para ser baixado ou compilado.

Talvez uma vez por dia ou uma vez por hora - a execução em segundo plano seja suficiente, dado esses horários para execução?

Você pode criar um script simples /usr/local/bin/brewupque chame brew por sua vez e registre os resultados no log do sistema

#!/bin/bash

brew=/usr/local/bin/brew
logger=/usr/bin/logger

$brew update 2>&1  | $logger -t brewup.update
$brew upgrade 2>&1 | $logger -t brewup.upgrade
$brew cleanup 2>&1 | $logger -t brewup.cleanup

Eu ligo para a preparação quando estou prestes a fazer o chá ou quando eu começo e deixo correr em segundo plano.

brewup &
bmike
fonte
2
+1 Concordo que é melhor usar o tomo tipo de launchclt em vez de executar a cada início do Terminal. Além disso, é independente do terminal (para usuários do iTerm).
Mateusz Szlosek
11
Isso é brilhante, obrigado! :) Que tal crontab em vez de Lingon?
g_rmz
2
@g_rmz Não há nada errado com o crontab e é fácil saber. Se funcionar, corra com ele. Os benefícios do launchdexcesso cronsão que eles são mais resilientes, mais amigáveis ​​com a energia e lidam com intervalos de sono / perda mais naturalmente.
bmike
Obrigado pelo ótimo roteiro. Apenas por curiosidade - qual é a opção -t?
Avriis 31/03/19
11
Hey @dahved. Consulte a página de manual do registrador para a versão seca do tsinalizador. Eu o uso para encontrar essas mensagens no mar de logs com um termo fácil grepou de logcomando e predicado / pesquisa.
bmike
5

Existe uma ferramenta chamada homebrew-autoupdate que fará isso por você. Ele pode ser executado automaticamente brew updateem segundo plano a cada 24 horas (configurável) para garantir que você sempre tenha dados atualizados de homebrew ao instalar / atualizar pacotes.

Para instalá-lo, execute brew tap domt4/autoupdatee brew autoupdate --start 43200configure-o para atualizar automaticamente a cada 12 horas (43200 segundos).

Daniel Compton
fonte
0

Prefiro atualizar o Homebrew na inicialização. Eu tenho um script brew-update.shem ~/Applications:

for cmd in update upgrade cleanup; do
  brew $cmd
done

Este script é executado na inicialização usando launchd. Para isso, tenho brew-update.plistem ~/Library/LaunchAgents:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>brew-update</string>
        <key>ProgramArguments</key>
        <array>
            <string>/Users/Username/Applications/brew-update.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

Observe que ele pode não ser atualizado de maneira confiável quando você, por exemplo, possui um MacBook e apenas abre e fecha a tampa. No entanto, funciona bem para o meu iMac que eu desligo e inicio regularmente. Deixe-me saber se funciona!

Daan
fonte