Su Ubuntu, Homebrew non sostituisce apt: lo affianca. La scelta ha senso quando ti servono versioni più recenti di utility, linguaggi o tool da build senza sporcare il sistema base, oppure quando vuoi replicare più facilmente un ambiente tra macchine diverse. In pratica, Homebrew ti dà un canale parallelo per installare software in /home/linuxbrew/.linuxbrew o nel prefisso dell’utente, con una gestione più prevedibile rispetto a pacchetti sparsi tra repository terzi e tarball manuali.
Il punto non è “meglio di apt” in assoluto. Il punto è capire quando è utile avere due livelli di packaging: uno per il sistema operativo e uno per gli strumenti operativi quotidiani. Su server, workstation tecniche e ambienti di test, questa separazione evita spesso l’effetto collaterale classico: aggiornare un tool per un progetto e rompere dipendenze di sistema o repository esterni mantenuti male.
Perché usarlo davvero su Ubuntu
La ragione più concreta è il controllo della versione. Ubuntu LTS privilegia stabilità e compatibilità, quindi molti pacchetti restano volutamente conservativi. Per un admin o un devops però capita spesso di voler git, fzf, htop, jq, ripgrep, ansible o un linguaggio con release più attuale del ramo distribuzione. Homebrew colma quel gap senza imporre PPA casuali o installazioni manuali in /usr/local.
Un secondo motivo è la portabilità operativa. Se lavori su più host Ubuntu, una lista di formule Homebrew è più facile da versionare rispetto a una sequenza di comandi sparsi. Il file Brewfile diventa una specie di inventario leggibile: sai cosa hai chiesto, da dove arriva e con quale cadenza lo aggiorni. Per chi gestisce ambienti ibridi o macchine di supporto, questa cosa riduce il classico “sul server A c’è, sul server B no”.
Terzo vantaggio: meno attrito con i permessi. Homebrew è pensato per non richiedere root nell’uso normale. Questo non è un dettaglio cosmetico: limita il rischio di installare tool di sviluppo con privilegi elevati e rende più semplice lavorare in ambienti dove non vuoi concedere accesso amministrativo continuo. Ovviamente, se devi toccare il sistema, sudo resta necessario; ma la superficie operativa quotidiana si restringe parecchio.
Quando non conviene
Homebrew su Ubuntu non è la risposta giusta per tutto. Se il pacchetto serve al sistema o a un servizio gestito da systemd, in genere è più pulito usare il repository della distro. Vale soprattutto per componenti come nginx, php-fpm, mariadb, postfix o librerie che devono integrarsi con il resto dello stack. Mischiare package manager per servizi di produzione aumenta il rischio di path inconsistente, aggiornamenti dimenticati e troubleshooting più lento.
Il criterio pratico è semplice: se il software è un tool utente, Homebrew è spesso comodo; se è un componente di sistema, meglio apt o il canale ufficiale del vendor. Il confine non è teorico: un binario installato da Homebrew può stare in /home/linuxbrew/.linuxbrew/bin e risultare visibile solo in certe shell, mentre il servizio che parte da systemd potrebbe non ereditare lo stesso PATH. È il tipo di dettaglio che in produzione genera ticket inutili.
Installazione corretta su Ubuntu
La sequenza sotto è quella sensata su Ubuntu recente. Prima installi le dipendenze base, poi esegui lo script ufficiale. Il punto importante è non improvvisare con repository non verificati o pacchetti di terze parti che “semplificano” troppo.
1. Aggiorna l’indice pacchetti e installa i prerequisiti:
sudo apt update
sudo apt install -y build-essential procps curl file git
2. Esegui l’installer ufficiale:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
3. Aggiungi Homebrew al PATH. Su Linux, lo script indica di solito il blocco corretto da incollare nel profilo della shell. Nella pratica, per Bash puoi usare:
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> ~/.bashrc
source ~/.bashrc
4. Verifica che il binario sia quello atteso:
which brew
brew --version
brew doctor
Se brew doctor segnala warning, non ignorarlo a prescindere. Alcuni sono innocui, altri ti dicono che la shell non carica il prefisso corretto o che hai conflitti di permessi. Il test minimo è vedere brew --prefix restituire il percorso previsto e confermare che brew help funzioni senza errori di libreria o path.
Il guadagno operativo: pacchetti, aggiornamenti, rollback mentale
Il vantaggio più sottovalutato è la leggibilità del ciclo di vita. Con apt spesso ti affidi al repository di distribuzione e a eventuali backport; con Homebrew hai una vista più diretta su ciò che è installato, aggiornabile o rimovibile. Per un ambiente tecnico questo significa meno tempo perso a ricordare “da dove arrivava quel binario”.
Comandi base utili:
brew search jq
brew install jq
brew list
brew outdated
brew upgrade jq
brew uninstall jq
Se usi Homebrew in modo serio, la parte interessante non è installare un singolo pacchetto, ma mantenere un set coerente. Esempio pratico: sul laptop amministrativo puoi voler avere jq, yq, ripgrep, tmux, openssl@3 e python@3.12 senza dipendere dal ritmo della distro. In un contesto simile, Homebrew rende più semplice allineare toolchain e script locali.
Per versionare l’ambiente, il Brewfile è la leva più utile. Esempio minimale:
brew bundle dump --force --file=./Brewfile
brew bundle --file=./Brewfile
Questo approccio è più pulito del classico elenco in README. Il file diventa eseguibile, ripetibile e adatto al bootstrap di una workstation. Se un tool manca, il comando fallisce in modo esplicito e puoi intervenire subito, invece di scoprire il problema quando lo script di deploy arriva a metà.
Conflitti con apt: come evitarli senza fare casino
Il rischio vero non è Homebrew in sé, ma l’illusione che tutto installato lì sia automaticamente preferibile. Se hai due versioni dello stesso tool, il problema si sposta sul PATH. Per questo conviene sapere con precisione quale binario viene eseguito:
type -a python
type -a git
echo $PATH
Se un comando viene preso dal prefisso Homebrew e non da /usr/bin, va bene solo se è una scelta consapevole. In caso contrario, correggi l’ordine del path invece di inseguire bug fantasma. Nei casi più delicati, soprattutto su server condivisi, conviene evitare di sovrascrivere tool di sistema con alias o symlink aggressivi.
Un esempio tipico: installi python con Homebrew per un progetto locale e poi uno script di manutenzione usa il primo python3 trovato. Risultato: dipendenze diverse, comportamento diverso, debug più lungo. La regola utile è separare nettamente tooling personale e runtime di servizio. Quando non puoi separarli, documenta il path esplicito nello script.
Homebrew e automazione: uno scenario realistico
Se gestisci onboarding di nuove macchine, Homebrew diventa interessante perché ti permette di codificare l’ambiente in modo semplice. Un esempio di flusso minimo è questo:
- Installa i prerequisiti con apt.
- Installa Homebrew con lo script ufficiale.
- Carica il prefisso nella shell dell’utente.
- Applica un
Brewfilecondiviso. - Verifica la presenza dei tool critici con un check finale.
Un check semplice può essere questo:
for bin in brew jq rg git; do
command -v "$bin" || echo "MISSING: $bin"
done
Questo non sostituisce un vero sistema di configuration management, ma riduce il rumore in ambienti piccoli o semi-personali. Se invece hai decine di host, Homebrew può restare un layer locale per tool da operatore, mentre Ansible, Puppet o simili gestiscono il resto.
Un dettaglio che molti saltano: shell, sessioni e servizi
Su Ubuntu, la shell interattiva dell’utente non coincide con l’ambiente di un servizio systemd. Questo significa che un comando visibile in terminale potrebbe non esserlo da uno script di avvio o da un timer. Se un tool Homebrew deve essere usato da automazioni, non dare per scontato il PATH: esplicitarlo è più robusto.
Per verificare il comportamento reale, puoi confrontare l’ambiente della shell e quello di un servizio di test. Per esempio, in una sessione interattiva:
echo $PATH
brew --prefix
E in un’unità systemd temporanea o in un wrapper script, controlla che il prefisso Homebrew venga richiamato in modo esplicito. È una precauzione banale, ma evita il classico bug “funziona a mano, fallisce in servizio”.
Sicurezza e igiene operativa
Dal punto di vista sicurezza, Homebrew non è una scorciatoia per abbassare la guardia. Il primo controllo è la provenienza dei pacchetti: usa formule conosciute, evita tap non verificati se non hai motivo concreto di fidarti, e tieni sotto controllo i binari che installi. Il secondo è la gestione dei privilegi: non eseguire installazioni o upgrade come root se non è richiesto dal workflow.
Per audit minimo, i comandi utili sono pochi ma efficaci:
brew list --versions
brew info jq
brew doctor
Se devi condividere output o diagnostica, redigi eventuali token, URL privati o nomi host sensibili. Non ha senso mettere in chiaro dettagli che poi finiscono in ticket, chat o log di supporto.
Quando Homebrew su Ubuntu è una buona scelta
La risposta pratica è: quando ti serve velocità di aggiornamento, isolamento ragionevole e ripetibilità per tool non critici del sistema. In particolare funziona bene per workstation amministrative, ambienti di sviluppo, macchine di test e host dove vuoi una toolchain moderna senza dipendere dai tempi della distribuzione.
Non è invece la scelta ideale se vuoi standardizzare servizi di produzione, sostituire il packaging della distro o ridurre a zero il lavoro di manutenzione. Homebrew aiuta a ordinare il layer degli strumenti; non ti evita di progettare bene il resto. Se lo usi con questo confine chiaro, su Ubuntu diventa un supporto concreto e non un doppione rumoroso di apt.
Commenti (0)
Nessun commento ancora.
Segnala contenuto
Elimina commento
Eliminare definitivamente questo commento?
L'azione non si può annullare.