Per il software solo si ha bisogno, utilizza la home directory, invece di /usr/local.
Invece di modificare la proprietà /usr/localo 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 bine le sue sbinsottodirectory sono sul rootpercorso.
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 chmodqualsiasi 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/binandranno 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 configurescript che può essere eseguito in questo modo, per impostazione predefinita configura la build per l'installazione all'interno /usr/localquando alla fine si esegue sudo make installper 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 usernamecon il tuo vero nome utente, ovviamente. Se per qualche motivo la tua home directory non è in /homeallora 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 uninstalltarget:
make uninstall
Questo è esattamente quello che stavi chiedendo ... proprio nella tua home directory, non /usr/local.
Esecuzione dei programmi
Probabilmente la binsottodirectory della tua home directory è:
- già nel tuo
$PATH, o
- sarà nel tuo
$PATHse ti disconnetti e accedi di nuovo.
Il motivo è che il .profilefile 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 bindirectory 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 binsottodirectory della tua home directory, così come la .local/binsottodirectory, 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, binprobabilmente la sottodirectory della tua home directory è probabilmente già nella tua $PATH.
Il tuo .profilefile viene copiato dalla /etc/skeldirectory quando viene creato il tuo account utente. Se il tuo account utente è stato creato su una versione precedente di Ubuntu, ha ottenuto quella versione .profilee non è stato modificato, per il tuo account utente, aggiornando a una versione più recente.
Una volta che la binsottodirectory 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' .localopzione
Potresti aver notato che il .profilefile predefinito per gli account utente creati in alcune versioni di Ubuntu, incluso in 16.04 come descritto sopra, aggiunge non solo il $HOME/bintuo percorso, ma anche $HOME/.local/bin. Se .profilenon 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 .localsottodirectory 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 lscomando (passa il flag -Ao -aper 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 $HOMEper 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/.locale altri software in $HOME. Tocca a voi. Qualunque bindirectory $PATHvenga 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 .profilee aiutandomi a correggerli (vedi anche qui ).