Homebrew à mise à jour automatique

13

J'utilise actuellement le gestionnaire de paquets Homebrew et ma question est: est-il possible d'écrire le script d'un bash afin de l'exécuter brew updateet éventuellement à brew upgradechaque ouverture d'un shell pour la première fois? J'utilise iTerm en ce moment.

g_rmz
la source
Vous pouvez le faire dans un ~/.bash_profilefichier. Vous devrez vérifier si une seule session Terminal est ouverte, puis exécuter brew update. Consultez stackoverflow.com/questions/6172663/… pour déterminer le nombre de fenêtres de terminal.
Mateusz Szlosek
C'est le nombre de terminaux ouverts lors de l'exécution du script ou le nombre de terminaux ouverts en général?
g_rmz
C'est le nombre de terminaux ouverts (fenêtres + onglets) lorsque le script est exécuté. ~/.bash_profileest automatiquement exécuté au début de la session Terminal. Cette vérification est nécessaire si vous devez exécuter brew updateau premier démarrage. Si vous voulez exécuter ce à chaque fois une nouvelle fenêtre est ouverte, sauter cette étape et courir brew updatedans ~/.bash_profile.
Mateusz Szlosek
L'ouverture d'un onglet Terminal sera très lente
user151019
D'accord, merci! :) Cela va diminuer les performances du terminal très mauvais?
g_rmz

Réponses:

20

C'est très simple à faire.

Pour l'efficacité (et le facteur cool), j'utiliserais un outil comme Lingon pour lancer ce script périodiquement en utilisant launchctl / launchd au lieu de chaque fois que vous démarrez un shell. Sur mon MacBook, il faut 3 secondes pour mettre à jour la deuxième fois (aucun travail effectué, ensemble de cache DNS, etc ...) et 10 secondes pour s'exécuter la première fois (aucun travail effectué) ou 15+ secondes si un package a besoin à télécharger ou à compiler.

Peut-être une fois par jour ou une fois par heure - courir en arrière-plan serait suffisant compte tenu de ces temps pour exécuter?

Vous pouvez créer un script simple /usr/local/bin/brewupqui appelle à son tour brew et enregistre les résultats dans le journal système

#!/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

J'appelle juste le brewup quand je suis sur le point d'aller faire du thé ou quand je commence et le laisse couler en arrière-plan.

brewup &
bmike
la source
2
+1 Je suis d'accord qu'il vaut mieux utiliser le tome sorte de launchclt au lieu de courir à chaque démarrage de Terminal. De plus, il est indépendant du terminal (pour les utilisateurs iTerm).
Mateusz Szlosek
1
C'est génial, merci! :) Que diriez-vous de crontab au lieu de Lingon?
g_rmz
2
@g_rmz Il n'y a rien de mal avec crontab et c'est facile à savoir. Si cela fonctionne, exécutez-le. Les avantages de launchdOver cronest qu'il est plus résistant, plus économe en énergie et gère les intervalles de sommeil / manqués plus naturellement.
bmike
Merci pour un excellent script. Juste par curiosité - quelle est l'option -t?
avriis
1
Salut @dahved. Voir la page de manuel de l'enregistreur pour la version sèche du tdrapeau. Je l'utilise pour trouver ces messages dans la mer de journaux avec un terme facile grepou logcommande et prédicat / recherche.
bmike
5

Il existe un outil appelé homebrew-autoupdate qui le fera pour vous. Il peut s'exécuter automatiquement brew updateen arrière-plan toutes les 24 heures (configurable) pour vous assurer d'avoir toujours de nouvelles données homebrew lorsque vous allez installer / mettre à niveau des packages.

Pour l'installer, exécutez-le brew tap domt4/autoupdateet brew autoupdate --start 43200configurez-le pour une mise à jour automatique toutes les 12 heures (43200 secondes).

Daniel Compton
la source
0

Je préfère mettre à jour Homebrew au démarrage. J'ai un script brew-update.shdans ~/Applications:

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

Ce script est exécuté au démarrage à l'aide de launchd. Pour cela, j'ai 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>

Notez qu'il peut ne pas se mettre à jour de manière fiable lorsque vous avez, par exemple, un MacBook et que vous ouvrez et fermez uniquement le couvercle. Cependant, cela fonctionne bien pour mon iMac que j'arrête et démarre régulièrement. Laisse moi savoir si ça fonctionne!

Daan
la source