software,

Homebrew: i comandi avanzati

Sabino Maggi Sabino Maggi Segui 14-May-2014 · 8 minuti di lettura
Condividi

Dopo aver esaminato i comandi principali per usare Homebrew, è ora di trattare i principali comandi avanzati. Prima però un breve ripasso del post precedente.

Aggiornamento

Come abbiamo visto, per aggiornare Homebrew si usa la terna di comandi

$ brew update

che aggiorna il sistema Homebrew vero e proprio,

$ brew outdated

che elenca le nuove versioni disponibili dei package già installati nel sistema (Figura 1),

Figura 1. Elenco dei nuovi package disponibili.
Figura 1. Elenco dei nuovi package disponibili.

e infine

$ brew upgrade

che aggiorna i package installati alla versione più recente presente in Homebrew (Figura 2).

Figura 2. Aggiornamento dei package installati.
Figura 2. Aggiornamento dei package installati.

Se si vuole aggiornare solo uno o più package (magari perché si sa a priori che qualche aggiornamento contiene dei bachi o è incompatibile con altri software installati sul Mac)

$ brew upgrade package1 [package2 ...]

dove package1, package2, indicano i nomi dei package da aggiornare.

Versioni

Quando si aggiorna un package, Homebrew ne mantiene anche le versioni precedenti. Il comando

$ brew list --versions

elenca i package installati con i relativi numeri di versione. Se un package è stato già aggiornato, tutte le versioni presenti nel sistema sono mostrate sulla stessa riga (Figura 3).

Figura 3. Elenco dei package installati con i relativi numeri di versione. In evidenza un package di cui sono presenti due versioni diverse.
Figura 3. Elenco dei package installati con i relativi numeri di versione. In evidenza un package di cui sono presenti due versioni diverse.

Per mettere in evidenza i package di cui esistono versioni multiple si aggiunge una ulteriore opzione a brew list che, sul Mac con una installazione relativamente recente di Homebrew che sto usando, riporta soltanto

$ brew list --versions --multiple
git 1.9.2 1.9.3
readline 6.3.3 6.3.5

Su un sistema più vissuto, la lista dei package in versioni multiple può diventare molto lunga (Figura 4).

Figura 4. Package in versioni multiple su un Mac con una installazione meno recente di Homebrew.
Figura 4. Package in versioni multiple su un Mac con una installazione meno recente di Homebrew.

Per rimuovere le vecchie versioni di un package, lasciando installata l’ultima versione

$ brew cleanup package

mentre per rimuovere in blocco le vecchie versioni di tutti i package installati

$ brew cleanup [-n]

dove l’opzione -n serve ad eseguire un dry-run, cioè mostra le operazioni che saranno svolte senza eseguirle realmente (Figura 5). Togliendo l’opzione -n il sistema effettua la rimozione effettiva dei package più vecchi.

Figura 5. Esecuzione del comando `brew cleanup` in modalità `dry-run`, cioè senza eseguire le operazioni previste dal comando.
Figura 5. Esecuzione del comando `brew cleanup` in modalità `dry-run`, cioè senza eseguire le operazioni previste dal comando.

Disinstallazione

Per disinstallare un package, come abbiamo visto, si usa

$ brew remove package

oppure

$ brew uninstall package

che mi sembra più facile da ricordare.

Se sono presenti versioni multiple di un package, Homebrew disinstalla solo la versione più recente. Per rimuovere definitivamente un package di cui sono installate varie versioni è quindi consigliabile eseguire in sequenza

$ brew cleanup package
$ brew uninstall package

Quando si installano i package i file di installazione, sia in forma di sorgenti da compilare che di bottle precompilate, vengono salvati in una cartella ben definita, generalmente /Library/Caches/Homebrew, detta la cache di Homebrew. Il percorso della cache viene riportato dal comando

$ brew --cache
/Library/Caches/Homebrew

Si noti fra parentesi che, se si racchiude un qualunque comando fra $(...), il Terminale (o meglio l’interprete dei comandi bash) consente di usarne l’output come dato di ingresso di comandi successivi. Ad esempio, per elencare il contenuto della cache di Homebrew si può scrivere

$ ls -a /Library/Caches/Homebrew

oppure

$ ls -a $(brew --cache)

che è particolarmente comodo se si vogliono automatizzare determinate operazioni (Figura 6).

Figura 6. Parte del contenuto della cache di una installazione di Homebrew.
Figura 6. Parte del contenuto della cache di una installazione di Homebrew.

Una volta installato il package, i file di installazione dei package di Homebrew non sono più strettamente necessari (analogamente ai file .dmg che in OS X contengono nella maggior parte dei casi le applicazioni da installare) ed occupano inutilmente spazio sul disco rigido. Inoltre, soprattutto dopo installazioni fallite, si può voler rimuovere il file di installazione e scaricare una nuova versione pulita.

Per rimuovere dalla cache i file di installazione di uno o più package

$ rm -rf $(brew --cache package1 [package2 ...])

e per ripulire completamente la cache (naturalmente senza rimuovere i package installati)

$ rm -rf $(brew --cache)

Per programmatori

Un comando utile a chi ha esperienza di programmazione quando si installano nuovi package è

$ brew options package

che mostra le (eventuali) opzioni non standard di installazione di un determinato package. Ad esempio

$ brew options pandoc

non riporta nulla, mentre eseguendo

$ brew options git

si ottiene

--with-blk-sha1
    ompile with the block-optimized SHA1 implementation
--with-brewed-curl
    Use Homebrew's version of cURL library
--with-brewed-openssl
    Build with Homebrew OpenSSL instead of the system version
--with-gettext
    Build with gettext support
--with-pcre
    Build with pcre support
--with-persistent-https
    Build git-remote-persistent-https from "contrib" directory
--without-completions
    Disable bash/zsh completions from "contrib" directory
--devel
    install development version 2.0.0.rc3
--HEAD
    install HEAD version

Se si sa esattamente cosa si sta facendo, una o più di queste opzioni possono essere inserite nel comando di installazione del package, che verrà compilato con le opzioni prescelte e non con quelle di default. Ad esempio

$ brew install --with-brewed-openssl git

compila git usando la libreria OpenSSL – che tanto ha fatto parlare di sé negli ultimi tempi – contenuta in Homebrew e non quella installata in OS X (che è comunque immune all’Heartbleed Bug).

Il comando brew list seguito dal nome di un package

$ brew list [--verbose] package

elenca i file e le cartelle installati da quel package

$ brew list pandoc
/usr/local/Cellar/pandoc/1.12.3/bin/pandoc
/usr/local/Cellar/pandoc/1.12.3/etc/bash_completion.d/pandoc-completion.bash
/usr/local/Cellar/pandoc/1.12.3/share/doc/x86_64-osx-ghc-7.6.3/pandoc-1.12.3/COPYING
/usr/local/Cellar/pandoc/1.12.3/share/man/ (2 files)
/usr/local/Cellar/pandoc/1.12.3/share/x86_64-osx-ghc-7.6.3/ (38 files)

e, con l’opzione --verbose, mostra i file contenuti in tutte le cartelle installate (l’elenco può essere davvero molto lungo).

Formule

In tutti i miei post su Homebrew ho volutamente preferito usare il termine package invece di formula, come è più usuale in Homebrew e come si troverà scritto in tutta la documentazione disponibile.

Un package indica infatti il programma che vogliamo installare, mentre la formula è la serie di comandi usati da Homebrew per installarlo, scritta in Ruby. In Homebrew i due significati si confondono, ma secondo me è più comprensibile mantenerli distinti.

Se siamo curiosi di sapere come è fatta la formula di un package di Homebrew

$ brew cat package

Ad esempio

$ brew cat pandoc

mostra la formula che serve a compilare ed installare il solito pandoc (Figura 7).

Figura 7. `Formula` per l'installazione del package `pandoc`.
Figura 7. `Formula` per l'installazione del package `pandoc`.

Quello che fa questa formula è abbastanza evidente, anche senza conoscere Ruby o altri linguaggi di programamzione.

Ed è questa un’altra caratteristica utile di Homebrew: rende la vita facile non solo a chi si limita ad installare i package, ma anche agli sviluppatori che si occupano di prepararli.

Uno degli aspetti che approfondiremo prossimamente.

Sabino Maggi
Pubblicato da Sabino Maggi Segui
Commenti

Aggiungi un commento