Homebrew de actualización automática

13

Actualmente estoy usando el administrador de paquetes Homebrew y mi pregunta es: ¿es posible escribir un script de bash para ejecutar brew updatey eventualmente brew upgradecada vez que abra un shell por primera vez? Estoy usando iTerm en este momento.

g_rmz
fuente
Puedes hacer esto en el ~/.bash_profilearchivo. Deberá verificar si solo 1 sesión de Terminal está abierta y luego ejecutarla brew update. Consulte stackoverflow.com/questions/6172663/… para determinar el número de ventanas de Terminal.
Mateusz Szlosek
¿Cuál es el número de terminales que están abiertos cuando se ejecuta el script o el número de terminales abiertos en general?
g_rmz
Esa es la cantidad de terminales abiertas (ventanas + pestañas) cuando se ejecuta el script. ~/.bash_profilese ejecuta automáticamente al inicio de la sesión de Terminal. Esta verificación es necesaria si necesita ejecutar brew updateel primer inicio. Si Usted desea ejecutar esto cada vez que se abre una nueva ventana, omita este paso y ejecutar brew updateen ~/.bash_profile.
Mateusz Szlosek
Hará que abrir una pestaña Terminal sea muy lento
user151019
¡Ok, gracias! :) ¿Disminuirá el rendimiento del terminal muy mal?
g_rmz

Respuestas:

20

Esto es muy fácil de hacer.

Por eficiencia (y factor interesante), usaría una herramienta como Lingon para lanzar este script periódicamente usando launchctl / launchd en lugar de cada vez que inicie un shell. En mi MacBook, tarda 3 segundos en actualizarse la segunda vez (sin trabajo, conjunto de caché DNS, etc.) y tarda 10 segundos en ejecutarse la primera vez (sin trabajo) o más de 15 segundos si un paquete necesita para ser descargado o compilado.

Tal vez una vez al día o una vez por hora: ¿sería suficiente correr en segundo plano dados esos tiempos para ejecutar?

Puede crear un script simple /usr/local/bin/brewupque llame a su vez y registre los resultados en el registro del 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

Solo llamo a la preparación cuando estoy a punto de ir a hacer té o cuando empiezo y dejo que se ejecute en segundo plano.

brewup &
bmike
fuente
2
+1 Estoy de acuerdo en que es mejor usar tome tipo de launchclt en lugar de ejecutarlo en cada inicio de Terminal. Además, es Terminal independiente (para usuarios de iTerm).
Mateusz Szlosek
1
Esto es genial, gracias! :) ¿Qué tal crontab en lugar de Lingon?
g_rmz
2
@g_rmz No hay nada malo con crontab y es fácil de saber. Si funciona, corre con él. Los beneficios de launchdOver cronson que es más resistente, más amigable con el poder y maneja los intervalos de sueño / falta más naturalmente.
bmike
Gracias por un gran guión. Solo por curiosidad: ¿cuál es la opción -t?
avriis
1
Hola @dahved. Vea la página del manual para el registrador para la versión seca de la tbandera. Lo uso para poder encontrar estos mensajes en el mar de registros con un término fácil grepo logcomando y predicado / búsqueda.
bmike
5

Hay una herramienta llamada homebrew-autoupdate que hará esto por usted. Puede ejecutarse automáticamente brew updateen segundo plano cada 24 horas (configurable) para garantizar que siempre tenga datos caseros nuevos cuando vaya a instalar / actualizar paquetes.

Para instalarlo, ejecutar brew tap domt4/autoupdatey brew autoupdate --start 43200configurarlo para que se actualice automáticamente cada 12 horas (43200 segundos).

Daniel Compton
fuente
0

Prefiero actualizar Homebrew al inicio. Tengo un script brew-update.shen ~/Applications:

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

Este script se ejecuta al inicio usando launchd. Para eso, tengo brew-update.plisten ~/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>

Tenga en cuenta que es posible que no se actualice de manera confiable cuando, por ejemplo, tiene un MacBook y solo abre y cierra la tapa. Sin embargo, funciona bien para mi iMac que apago y enciendo regularmente. ¡Déjame saber si funciona!

Daan
fuente