Per il software solo si ha bisogno, utilizza la home directory, invece di /usr/local
.
Invece di modificare la proprietà /usr/local
o di eseguire i comandi come root quando non si desidera, è sufficiente configurare le build in modo che vengano installate nella directory home anziché /usr/local
. Questo risolve tutti i potenziali problemi con la modifica della proprietà /usr/local
, incluso il modo in cui la sua bin
e le sue sbin
sottodirectory sono sul root
percorso.
Se devi consentire ad altri utenti di eseguire il tuo software, puoi dare loro l'accesso. In effetti, probabilmente lo saranno già, perché per impostazione predefinita la tua directory home ha accesso in lettura ed esecuzione permissivo . (Se non lo vuoi, puoi cambiarlo abbastanza facilmente, semplicemente usando chmod
qualsiasi file o directory che vuoi rendere privato e possibilmente anche cambiando il tuo umask
.)
Con il software installato nella tua home directory, i binari che sarebbero entrati /usr/local/bin
andranno invece dentro . Otterrai altre sottodirectory della tua home directory corrispondenti alle sottodirectory di cui necessita il software che installi. Ciò si verifica in genere automaticamente quando si installa il software dal codice sorgente./home/username/bin
/usr/local
Configurare le tue build
La maggior parte dei software creati dal codice sorgente prevede un passaggio in cui si esegue:
./configure
Per la stragrande maggioranza del software fornito con uno configure
script che può essere eseguito in questo modo, per impostazione predefinita configura la build per l'installazione all'interno /usr/local
quando alla fine si esegue sudo make install
per installarlo. Il motivo è che è implicitamente equivalente all'esecuzione:
./configure --prefix=/usr/local
Per configurare una build per l'installazione nella directory home, utilizzare invece questa:
./configure --prefix="$HOME"
In pratica, in Ubuntu, i percorsi della home directory non contengono spazi, altri spazi bianchi o altri caratteri che verranno trattati in modo speciale dalla shell *
, quindi a meno che tu non abbia impostato il tuo account utente in modo strano, puoi semplicemente digitare:
./configure --prefix=$HOME
( Tuttavia, non consiglio di prendere l'abitudine per scrivere script . Inoltre, su alcuni altri sistemi operativi - come macOS - è meno raro che i percorsi delle home directory degli utenti contengano spazi.)
Oppure, se preferisci, puoi digitare il percorso completo della tua directory home:
./configure --prefix=/home/username
(Sostituisci username
con il tuo vero nome utente, ovviamente. Se per qualche motivo la tua home directory non è in /home
allora dovrai adattarti di conseguenza.)
Installare le tue build
Dopo l'esecuzione make
, potresti essere abituato all'esecuzione sudo make install
, ma quando si installa nella propria directory home, non è necessario eseguirlo come root, quindi è possibile - e dovrebbe - modificarlo sudo
. Corri:
make install
Allo stesso modo, per i software che supportano un uninstall
target:
make uninstall
Questo è esattamente quello che stavi chiedendo ... proprio nella tua home directory, non /usr/local
.
Esecuzione dei programmi
Probabilmente la bin
sottodirectory della tua home directory è:
- già nel tuo
$PATH
, o
- sarà nel tuo
$PATH
se ti disconnetti e accedi di nuovo.
Il motivo è che il .profile
file nella tua home directory, che contiene i comandi eseguiti quando accedi, lo contiene per impostazione predefinita per gli account utente creati nella maggior parte delle versioni di Ubuntu (incluso l'account amministratore iniziale creato quando si installa il sistema operativo):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Questo codice viene eseguito quando accedi (perché è presente .profile
) e inserisce la tua bin
directory personale $PATH
solo se esiste in quel momento. Ecco perché potrebbe essere necessario disconnettersi e riconnettersi.
Le versioni precedenti come Ubuntu 14.04, così come le versioni più recenti come Ubuntu 17.10, ne derivano. Tuttavia, Ubuntu 16.04, che è probabilmente la versione più popolare al momento della stesura di questo documento, ha invece questo:
# set PATH so it includes user's private bin directories
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Ciò aggiunge semplicemente la bin
sottodirectory della tua home directory, così come la .local/bin
sottodirectory, alla tua $PATH
, senza controllare se quelle directory effettivamente esistono. Quindi se usi 16.04 o se hai eseguito l'upgrade da un sistema che era 16.04 quando è stato creato il tuo account utente, bin
probabilmente la sottodirectory della tua home directory è probabilmente già nella tua $PATH
.
Il tuo .profile
file viene copiato dalla /etc/skel
directory quando viene creato il tuo account utente. Se il tuo account utente è stato creato su una versione precedente di Ubuntu, ha ottenuto quella versione .profile
e non è stato modificato, per il tuo account utente, aggiornando a una versione più recente.
Una volta che la bin
sottodirectory della tua home directory è nella tua $PATH
, sarai in grado di eseguire programmi i cui file eseguibili sono installati lì semplicemente digitando i loro nomi, proprio come potresti fare con i programmi installati dal gestore dei pacchetti di Ubuntu o installati all'interno /usr/local
.
L' .local
opzione
Potresti aver notato che il .profile
file predefinito per gli account utente creati in alcune versioni di Ubuntu, incluso in 16.04 come descritto sopra, aggiunge non solo il $HOME/bin
tuo percorso, ma anche $HOME/.local/bin
. Se .profile
non lo aggiungi, ma lo desideri , puoi semplicemente modificarlo.
Sebbene sia spesso utilizzato per archiviare impostazioni e dati memorizzati nella cache , è anche possibile installare software nella .local
sottodirectory della home directory. Dovresti sentirti disinibito nel farlo, poiché dal punto di vista dell'usabilità e della sicurezza --prefix="$HOME/.local"
è simile --prefix="$HOME"
.
Ricorda che i file e le directory che iniziano con .
non sono mostrati di default nei browser di file grafici (usa Ctrl+ Hper scoprirli e rivederli) o tramite il ls
comando (passa il flag -A
o -a
per mostrarli). Questo potrebbe non essere quello che vuoi, o potrebbe essere esattamente quello che vuoi. Questa è una questione di preferenze personali.
Tuttavia, ho osservato che alcuni gestori di pacchetti automatizzati basati su sorgente che compilano e installano software nell'uso della propria directory home $HOME/.local
. In realtà non so quanto sia comune - spero di indagare ulteriormente e aggiornare questa risposta - ma potresti preferire utilizzare solo $HOME
per le cose che compili manualmente. In questo modo sarà chiaro da dove provengono le cose. E se c'è una collisione, è probabile che il software coesista in modo accettabile.
È inoltre possibile installare deliberatamente alcuni software $HOME/.local
e altri software in $HOME
. Tocca a voi. Qualunque bin
directory $PATH
venga visualizzata per prima nella variabile di ambiente è quella da cui verrà eseguito un comando, nel caso in cui esistano comandi con lo stesso nome in entrambi.
Il merito va a Zanna e Videonauth per aver segnalato gli errori in una versione precedente di questa risposta, riguardo a quali versioni di Ubuntu hanno il codice predefinito .profile
e aiutandomi a correggerli (vedi anche qui ).