38 votes

Mise à jour automatique de Homebrew

Je suis actuellement en train d'utiliser le gestionnaire de paquets Homebrew et ma question est la suivante : est-il possible d'écrire un script de bash afin d'exécuter brew update et finalement brew upgrade lors de l'ouverture d'un shell pour la première fois ? J'utilise iTerm pour le moment.

47voto

Tate Thurston Points 411

Homebrew a un mise à jour automatique sous-commande. Vous pouvez donc exécuter :

brew autoupdate start

Pour exécuter automatiquement brew update toutes les 24 heures. Les documents liés ci-dessus décrivent un certain nombre d'options de configuration. Comme vous souhaitez également exécuter brew upgrade tu peux courir :

brew autoupdate start --upgrade

Sous le capot brew autoupdate utilise launchd .

2 votes

C'est ainsi que j'ajoute cette information en tant que lien vers votre message tout en haut de mon ancienne réponse. +1

35voto

Oskar Points 1242

Cela a été facilement fait avec scripts et maintenant l'intégré autoupdate Le mécanisme de l'UE gère cela de manière élégante. Voir L'excellente réponse de Tate pour les détails


Si la mise à jour et la mise à niveau automatiques ne fonctionnent pas, voici un autre moyen pour les anciennes versions.

Pour l'efficacité (et le facteur de fraîcheur), j'utiliserais un outil tel que 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é, cache DNS défini, etc...) et il faut 10 secondes pour lancer la première fois (aucun travail effectué) ou 15+ secondes si un paquet doit être téléchargé ou compilé.

Peut-être qu'une fois par jour ou une fois par heure - en fonctionnant en arrière-plan - serait suffisant pour ces moments d'exécution ?

Vous pourriez faire un simple script /usr/local/bin/brewup qui appelle Brew à tour de rôle et consigne les résultats dans le journal du système. Si vous n'aimez pas courir après les journaux dans le magasin centralisé des journaux, "les transférer dans un fichier texte fonctionne bien aussi.

#!/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 simplement l'infusion quand je suis sur le point d'aller faire du thé ou quand je commence et je la laisse fonctionner en arrière-plan.

brewup &

2 votes

+1 Je suis d'accord qu'il est préférable d'utiliser une sorte de launchclt plutôt que de le lancer à chaque démarrage de Terminal. De plus, il est indépendant de Terminal (pour les utilisateurs d'iTerm).

1 votes

C'est génial, merci ! :) Pourquoi pas crontab au lieu de Lingon ?

3 votes

@g_rmz Il n'y a rien de mal à la crontab. . Si elle fonctionne déjà pour vous ou si vous voulez l'apprendre, utilisez-la. Les avantages de launchd plus cron est qu'il est plus résistant, plus économe en énergie et qu'il gère plus naturellement les intervalles de sommeil ou d'absence. Il est également plus compliqué et moins de personnes l'utilisent depuis des décennies.

18voto

Daniel Compton Points 325

Il existe un outil appelé homebrew-autoupdate qui le fera pour vous. Il peut exécuter automatiquement brew update en arrière-plan toutes les 24 heures (configurable) pour s'assurer que vous avez toujours des données homebrew fraîches lorsque vous allez installer/mettre à jour des paquets.

Pour l'installer, exécutez brew tap domt4/autoupdate y brew autoupdate --start 43200 pour le configurer afin qu'il se mette à jour automatiquement toutes les 12 heures (43200 secondes).

EDIT : Ceci est maintenant intégré dans Homebrew, voir https://github.com/Homebrew/homebrew-autoupdate .

2 votes

Pour information, cette fonctionnalité a depuis été intégrée dans Homebrew, voir la réponse de Tate ci-dessous.

4voto

sneeuwitje Points 21

Vous pourriez vous demander : "Est-ce que je veux vraiment mettre à jour automatiquement les applications dont dépendent les applications que je construis moi-même ?"

L'équipe de brasserie a refusé cette demande de fonctionnalité pour faciliter les premières mises à jour .

Mon interprétation de leur raisonnement : "Le risque qu'un code malveillant passe à travers le processus d'audit des logiciels libres pèse plus lourd que le besoin accessoire d'une mise à jour rapide."

Si si c'est votre raisonnement, que vous aimez contrôler les mises à jour des logiciels et que vous tenez beaucoup à ce que les paquets homebrew soient à jour, vous feriez probablement mieux d'ajouter une ligne au bas du fichier .bashrc (ou le fichier rc de votre shell préféré) en demandant à :

brew outdated

Cela vous confrontera, dans chaque nouveau terminal, aux paquets périmés. Lorsque votre agacement atteindra la limite (vous vous sentirez prêt à faire une mise à jour), vous serez heureux de faire le nécessaire.

2voto

Daan Points 292

Je préfère mettre à jour Homebrew au démarrage. J'ai un script Update Homebrew.sh sur ~/Library/Scripts :

#!/usr/local/bin/bash

brew update
brew upgrade
brew cleanup -s

N'oubliez pas de rendre le script exécutable en utilisant chmod u+x .

Le script est lancé au démarrage à l'aide de la fonction launchd . Pour cela, j'ai Update Homebrew.plist sur ~/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>Update Homebrew</string>
        <key>ProgramArguments</key>
        <array>
            <string>/Users/[home]/Library/Scripts/Update Homebrew.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

[home] est le nom de votre dossier personnel. (Vous ne pouvez pas utiliser le tilde dans ce fichier).

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X