In laboratorio avrete solo un utente normale, senza i permessi di amministrazione. Ma questo non vi impedirà di poter fare comunque un sacco di cose!

no-root

Programmi in C

Vediamo come impostare le variabili d’ambiente per poter compilare i programmi C in modo che vengano poi installati in ~/opt, all’interno della nostra area utente.

Innanzitutto sarà necessario aggiungere alla propria configurazione in ~/.bashrc una serie di linee:

## Local C environment under ~/opt

# Configure time
export PKG_CONFIG_PATH="$HOME/opt/lib/pkgconfig:$PKG_CONFIG_PATH"

# Compile time
export CFLAGS="-L$HOME/opt/lib -I$HOME/opt/include"

# Link time
#export LOADLIBES="-l$HOME/opt/lib"

# Run time
if [ -z $LD_LIBRARY_PATH ]; then
  # Do not leave a trailing ':' otherwise you'll load libraries from the cwd too!
  export LD_LIBRARY_PATH="$HOME/opt/lib"
else
  export LD_LIBRARY_PATH="$HOME/opt/lib:$LD_LIBRARY_PATH"
fi

# Man path
export MANPATH="$MANPATH:$HOME/opt/share/man"

# PATH
#export PATH="$HOME/opt/bin:$PATH"
export PATH="$PATH:$HOME/opt/bin"

# CMake default path will be `/opt too:
export CMAKE_INSTALL_PREFIX=~/opt

Dopodiché in fase di configurazione sarà necessario specificare come prefix la directory ~/opt. Ad esempio:

  ./configure --prefix=~/opt
  make
  make install

Grazie alle variabili d’ambiente che abbiamo impostato, il sistema sarà in grado di gestire le librerie in ~/opt/lib, e i file include in ~/opt/include.

Attenzione: se si vuole ricompilare qualche programma già presente nella distribuzione, per far sì che la nostra versione abbia la precedenza su quella di sistema, è necessario utilizzare la prima versione del comando che ridefinisce il PATH, in modo da mettere il nostro percorso locale prima dei percorsi di sistema. Normalmente è quello che desideriamo, ma, quando il laboratorio verrà reinstallato con una nuova distribuzione, potremmo ritrovarci con una versione più vecchia rispetto ai programmi della distribuzione.

Se il programma non è stato configurato con autoconf / automake, e non ha un file configure, bisognerà seguire le indicazioni dell’autore, solitamente presenti con i sorgenti. Sovente si tratta di impostare una variabile d’ambiente, prima di richiamare il comando make.

Python

Per installare un pacchetto Python dal repository PyPi è possibile utilizzare il comando pip.

Ad esempio:

  pip --user install NOME_DEL_PACCHETTO_PYTHON

Se nel pacchetto sono presenti degli eseguibili, per poterli lanciare è necessario aggiungere nel proprio file ~/.bashrc queste linee:

# pip --user install
export PATH="$PATH:~/.local/bin"

Questa è la via più semplice se la versione di Python presente nella distribuzione è compatibile con la libreria che si vuole utilizzare.

Conda

Con conda è possibile installare dei pacchetti da dei repository online. In laboratorio è utilizzato per Anaconda, una distribuzione di tool e pacchetti per Machine Learning e Data Science.

In particolare, molte librerie Python sono disponibili anche tramite conda.

Ma, a differenza di pip, con conda è anche possibile installare una versione di Python differente da quella di sistema.

Questo può essere necessario per utilizzare alcune versioni di alcune librerie.

Attenzione però agli effetti negativi. Leggere con attenzione la pagina con le indicazioni, linkata qui sotto.

Per avere le indicazioni operative, leggere la parte relativa agli ambienti, nella pagina relativa ad Anaconda.

NodeJS

La configurazione di default in NPM è per una installazione locale delle dipendenze, all’interno della directory node_modules.

Quindi è importante non utilizzare il flag -g, che si usa per richiedere una installazione globale, perché quello è riservato all’amministratore di sistema (o a un utente a cui sono assegnati esplicitamente i permessi necessari).

Di solito il comando viene lanciato nella directory del progetto, alla radice, in modo che la directory node_modules sia una sottodirectory di primo livello della directory del progetto stesso.

Esempio:

  mkdir ghost-proj && cd ghost-proj
  npm install ghost-cli
  mkdir site && cd site
  ../node_modules/ghost-cli/bin/ghost install local

Ruby

Con gem è possibile utilizzare l’opzione --user-install.

Sarà necessario configurare il PATH utilizzato per gli eseguibili delle gemme nel proprio file .bashrc.

Ad esempio, se lanciamo:

gem install --user-install yekyll

Il sistema ci avverte che gli eseguibili finiranno in una directory che non è inclusa nel PATH:

  WARNING:  You don't have /home/USER/.gem/ruby/2.7.0/bin in your PATH,
            gem executables will not run.

Per poter richiamare eventuali eseguibili, bisogna quindi aggiungere il path indicato nel file .bashrc. Ad esempio:

  # gem --user-install
  export PATH="$PATH:$HOME/.gem/ruby/2.7.0/bin"

Nota: il percorso dipende dalla versione di Ruby, e quindi potrebbe cambiare a seguito di aggiornamenti.

Con il PATH impostato correttamente, il comando gem install --user-install non genererà più alcun warning. Seguendo l’esempio precedente, è possibile vedere che il comando jekyll è ora disponibile, proprio nella directory che abbiamo configurato:

  which jekyll

Per configurare bundle per installare in una directory locale si può utilizzare l’opzione --path, ma è deprecata. Un modo alternativo è quello di inserire il path desiderato nella configurazione. Ad esempio:

  bundle config set path $HOME/.gem

Nota: questa impostazione viene salvata in ~/.bundle/config, e non è limitata al progetto attuale, ma è globale.

Dopodiché è possibile fare:

  bundle install

E le gemme dovrebbero finire nella stessa directory che abbiamo utilizzato in precedenza con gem. In questo modo saranno anche visibili con gem list.

Rust / Cargo

Aggiungere nel proprio file ~/.bashrc queste linee:

# RUST/Cargo
export PATH="$PATH:$HOME/.cargo/bin"

Go Lang

Attenzione: vecchie note, non testate di recente. Il loro contenuto potrebbe non essere più applicabile.

Aggiungere nel proprio file ~/.bashrc queste linee:

# Go
export GOPATH="$HOME/golang"
export PATH="$PATH:$HOME/golang/bin"

APT, YUM, DNF, docker, minikube, etc

Per tutto il resto, è sempre possibile creare una macchina virtuale in VirtualBox, installare la propria distribuzione Linux preferita, e poi installare tutti i tool desiderati.

Attenzione però alla quota disco! Conviene partire da una versione server, senza ambiente grafico, aggiungere solo quello che è effettivamente necessario, e collegarsi poi alla macchina virtuale in SSH.

Ad esempio, l’immagine Fedora Cloud è perfetta per molte attività!

Se è per un attività legata alla tesi, parlatene con il vostro relatore; probabilmente vi verrà fornita una macchina virtuale che gira su un server, senza doverla lanciare in laboratorio con VirtualBox.