Saltar al contenido principal

% 16k.es

Homebrew

Table of Contents

¿Qué hacer después de instalar paquetes homebrew? Tu macOS no avisa de las actualizaciones homebrew, así que debes hacerlo tú mismo. Este pequeño script te puede ayudar.

homebrew

Todos sabemos que debemos mantener nuestro software al día; no sólo porque los proveedores lanzan continuamente nuevas y novedosas funciones sino, lo que es más importante, porque proporcionan -con suerte- actualizaciones de seguridad.

Si tienes un Mac probablemente estés familiarizado con el proceso de actualización de software:

macOS updates

Si tienes un Mac, lo más probable es que tengas instalado homebrew. Homebrew es una especie de gestor de paquetes que proporciona software que puede faltar en un Mac (y también para Linux, pero ¿a quién le importa?).

Por ejemplo, si quieres una versión de python actualizada, o una versión de GPG de código abierto, lo más probable es que la instales desde homebrew.

Añadir homebrew es muy fácil:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

E instalar el software necesario:

brew install gnupg

Por desgracia, macOS no nos notificará de las actualizaciones de homebrew, así que tendrás que comprobarlo por tus propios medios. La forma más sencilla es usar la línea de comandos:

brew update
brew outdated
Importante el update primero!

Si algo está obsoleto, se puede actualizar todo o una fórmula específica:

brew upgrade
brew upgrade <formula>

# Formulae vs casks

Antes de continuar, voy a explicar la diferencia básica entre fórmulas y casks:

  • Formulas son scripts Ruby que describen cómo descargar, compilar e instalar software. Típicamente software opensource de línea de comandos
  • Casks es algún tipo de extensión que permite instalar aplicaciones GUI, software propietario y binarios

## Otros términos de homebrew

  • Tap. Un tap es una fuente de formulas (¿y quizás también casks?). Default tap es homebrew/core pero hay taps de terceros.
  • Cellar. Cellar es el directorio donde homebrew instala cosas. Tras la instalación, homebrew crea un enlace en /usr/local/bin.

# Volviendo a las actualizaciones

Hace algún tiempo me di cuenta de que brew outdated no informaba de algunos de mis paquetes desactualizados. La razón era que eran casks. Así que si tienes alguno instalado también tienes que ejecutar:

brew outdated --cask
Recordar el update primero!

# Automatizar las notificaciones

Dado que es realmente importante mantener nuestro software actualizado, será útil establecer un recordatorio para actualizar nuestros paquetes homebrew.

Podemos usar este script:

#!/bin/zsh

# Need to add /usr/local/bin to PATH
PATH=/usr/local/bin:$PATH

BREW=brew

if ! command -v $BREW &> /dev/null
then
    echo "ERROR: $BREW not found" >&2
    exit 1
fi

$BREW update >/dev/null
OUTDATED_F=$($BREW outdated | wc -l)
OUTDATED_C=$($BREW outdated --cask | wc -l)
OUTDATED=$((OUTDATED_F+OUTDATED_C))

if [[ $OUTDATED -gt 0 ]]; then
	MSG="You have $OUTDATED outdated packeges\nPlease check your homebrew installation"
	osascript -e "display notification \"$MSG\" with title \"Homebrew\""
fi

that will display a standard macOS notifications if there are packages out of date.

To run automatically once a day we can use launchd. So let’s create a plist file:

<?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.updates.notification</string>
        <key>Program</key>
        <string>/usr/local/bin/brew-check-update.sh</string>
        <key>RunAtLoad</key>
        <true/>
        <key>StartCalendarInterval</key>
        <dict>	
            <key>Hour</key>
            <integer>9</integer>
            <key>Minute</key>
            <integer>0</integer>
        </dict>	
    </dict>
</plist>

Y cargarlo:

launchctl bootstrap gui/501/brew.updates.notification

Con esto el script debería ejecutarse cada 9:00 de la mañana y avisarnos si debemos ejecutar brew upgrade.

# References