Installare software da codice sorgente

9/07/2021

Il mio obiettivo oggi non è quello di spiegare come funziona in se e per se Git, per quello probabilmente farò una guida apposita, ma vorrei soffermarmi sul fatto che un utilizzo abbastanza comune dei repository Git è quello di mettere a disposizione il codice sorgente di un software che può essere reperito, compilato, così da generarne i file binari, per infine essere installato sul sistema operativo.

Premetto che in tal contesto non esiste una procedura standard per installare del software da Git, ma bisogna sempre attenersi a un manuale, tipicamente fornito dallo sviluppatore, che spiega quali sono i passaggi richiesti per ottenerne una copia funzionante sulla propria macchina. Infatti, parlare di installare programmi da Git è un termine improprio, tuttalpiù si scaricano i sorgenti, dalle quali partire per poi procedere con l’installazione.

Tra l’altro non è dato per scontato che una cartella ottenuta da Git debba essere per forza contenere il codice sorgente, può essere benissimo un programma già compilato con uno script di installazione.

Ad ogni modo, questo processo si suddivide in 3-4 fasi:

  1. Installazione dei prerequisiti: ovvero, quei pacchetti richiesti dal software per il corretto funzionamento;
  2. Clonazione del repository Git: per reperire il contenuto dello stesso;
  3. Compilazione: qualora si trattasse di codice sorgente;
  4. Installazione: fase conclusiva che termina con l’esecuzione del software funzionante.

Nonostante non vi sia una vera e propria procedura standard, possiamo farci un’idea di cosa bisogna fare.

Ubuntu: Installare gli strumenti di compilazione di base

In base al programma da compilare, possono essere richiesti o meno dei pacchetti specifici. Tuttavia ce ne sono alcuni che sul nostro sistema operativo NON devono mai mancare, in particolar modo. Modifichiamo il seguente file:

$ sudo nano /etc/apt/sources.list

E andiamo a decommentare tutte le stringhe che iniziano con deb-src. Facendo ciò, non solo sarà possibile scaricare un software sotto forma di codice sorgente tramite il comando apt, ma si potrà vedere quali sono le dipendente richieste da tali software per funzionare correttamente nel nostro sistema operativo. Questo vale soprattutto per software comunque disponibili nei repository ufficiali della distribuzione, che tuttavia siamo intenzionati a compilare da sorgente. Può tornare utile anche per sorgenti non fornite ufficialmente dalla distribuzione, ma in tal caso bisogna prestare attenzione a:

  • Versione di queste dipendenze;
  • Se le dipendenze sono tutte presenti;
  • Se non c’è una variante consigliata dallo stesso sviluppatore.

A questo punto, salviamo e usciamo. Aggiorniamo i repository con:

$ sudo apt update

Installiamo i pacchetti build-essential, cmake, git e python3-pip con:

$ sudo apt install build-essential cmake git python3-pip devscripts equivs checkinstall

Parentesi Arch Linux

Molti di voi si staranno chiedendo: e per Arch? Partiamo dal presupposto che gli strumenti di compilazione vengono installati automaticamente mediante il pacchetto base-devel. Ciò di cui Arch Linux è dotata, a differenza di altre distribuzioni, è l’Arch User Repository: laddove necessario, i PKGBUILD sono già predisposti per scaricare automaticamente il software tramite Git e compilarlo in locale tramite ABS (che non è quello delle automobili, ma sta per Arch Build System). Sono veramente rari i casi in cui si deve procedere manualmente come vedremo tra poco. Ad ogni modo, aldilà dell’installazione delle dipendenze di compilazione ed esecuzione, il resto della procedura è molto simile. Discorso analogo per altre distribuzioni come Fedora, ecc.

A questo punto possiamo passare ad un esempio che comprende anche una fase di risoluzione di eventuali problemi.

ESEMPIO: Compilare e installare KiCad da sorgenti

A titolo di esempio installeremo da sorgenti il software KiCad, un software per la progettazione e design di circuiti elettronici. Ho preso come riferimento la documentazione al seguente indirizzo: https://dev-docs.kicad.org/en/build/linux/, leggermente modificata da me. Sulle distribuzioni Ubuntu/Debian-based procediamo nel seguente modo.

Installazione prerequisiti

Con riferimento alla documentazione, installiamo i prerequisiti scrivendo:

$ mk-build-deps kicad --install --root-cmd sudo
$ sudo apt install liboce-foundation-dev liboce-ocaf-dev

Il primo comando installa le dipendenze di KiCad sotto forma di metapacchetto, così da poterle eventualmente rimuovere col comando:

$ sudo apt purge kicad-build-deps

Anzichè rimuoverle poi una alla volta.

Preparazione alla compilazione

Cloniamo da git il nostro codice sorgente digitando:

$ git clone https://github.com/KiCad/kicad-source-mirror.git

Creiamo nella nostra home una directory chiamata build ed entriamoci dentro:

$ mkdir build
$ cd build

Dobbiamo ora configurare CMake in modo tale da settare come directory di lavoro per compilare KiCad la directory build. La documentazione ci suggerisce il comando:

$ cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ../kicad-source-mirror/

Troubleshooting

Nel caso in cui Cmake dovesse segnalarci la mancanza di un pacchetto inerente a gtk 3, su Ubuntu, questo problema può essere risolto, in base a delle ricerche da me effettuate, installando il pacchetto libgtk-3-dev con:

sudo apt install libgtk-3-dev

A questo punto possiamo ripetere il comando precedente, quindi lui procederà con la disposizione delle condizioni ideali per la compilazione vera e propria. Digitiamo poi:

$ make -j$(nproc)

In particolare, utilizzando questo comando, grazie all’aggiunta di -j$(nproc), impegnerete tutti i thread della vostra CPU, così da velocizzare notevolmente la procedura di compilazione. A questo punto non c’è altro da aggiungere, bisognerà aspettare il termine della procedura di compilazione che dipenderà appunto dalle caratteristiche della propria macchina.

Installare il software compilato

Una volta terminata la compilazione, possiamo procedere in due modi. Digitando il comando:

$ sudo make install

Installera direttamente il programma già compilato nel nostro sistema operativo e questo vale per tutte le distribuzioni.

In alternativa, sulle distro Debian-based possiamo generare un pacchetto deb da distribuire ad altri utenti, digitando:

$ sudo checkinstall

Qualora aveste altre installazioni di KiCad, vi consiglio di rimuoverle, prima di procedere con questo comando. Esso procederà infatti, in seguito alla generazione del file .deb, ad installarlo.

  • La prima domanda del wizard riguarda se creare un set di documentazione del pacchetto. Diamo n e poi INVIO;
  • La seconda domanda riguarda l’aggiunta di una descrizione del pacchetto. Scriviamo qualcosa che più ci aggrada e diamo INVIO due volte.

A questo punto bisognerà impostare delle caratteristiche riguardanti la costruzione del pacchetto, quali il mantenitore (cioè chi pacchettizza il programma), una descrizione summary, il nome (importantissimo) e altre caratteristiche come versione, licenza, ecc. Noi siamo interessati sostanzialmente a mantainer e name, che andremo ad impostare in maniera adeguata.

  • Digitiamo 0 per modificare il mantainer e inseriamo, ad esempio, il nostro nome utente. Quindi diamo INVIO**;**
  • Digitiamo 2 per modificare il nome e inseriamo un nome legato al pacchetto, in questo caso, kicad-xeeon. Vi consiglio di differenziare il nome del pacchetto da quello presente nei repository ufficiali;
  • Altri parametri possono essere modificati analogamente. In questo caso andiamo avanti con la procedura dando INVIO.
  • Ci verrà chiesto se vogliamo includere nel pacchetto dei file dentro la directory /home. Diamo n e poi INVIO.
  • Alla seconda domanda diamo y e poi INVIO.
  • A questo punto aspettiamo la fine della procedura.

Fatto questo e dopo il termine della procedura guidata, compresa generazione del file deb, KiCad sarà richiamabile dal terminale tramite il comando:

$ kicad

Oppure dal menù delle applicazioni del nostro ambiente desktop. Il file .deb sarà invece disponibile nella stessa directory dove risiedono i sorgenti e assumerà il nome assegnato.

Infine, eliminiamo tutte le directory su cui abbiamo lavorato finora per compilare il software, ovvero build e kicad-source-mirror.

In qualsiasi momento, possiamo rimuovere il software e le dipendenze nel seguente modo:

$ sudo apt purge -y kicad-xeeon kicad-build-deps
$ sudo apt autoremove --purge -y

Conclusioni

Dunque, abbiamo visto come in generale sia possibile compilare del software da sorgenti. Per quanto la procedura non possa essere identica in tutti i casi, le fasi sono le stesse:

  1. Installazione delle dipendenze
  2. Clonazione del repository con i sorgenti
  3. Compilazione
  4. Eventuale troubleshooting qualora si presentassero dei problemi
  5. Installazione

Rinnovo inoltre il consiglio di guardare sempre la documentazione dello sviluppatore, altamente preziosa e che vi permette di risparmiare parecchio tempo in alcuni casi. Anche perchè non sempre compilare un software richiede pochi minuti, se provate, ad esempio, a compilare un ambiente desktop ci vogliono ore, e non è certamente bello avere brutte sorpese durante o dopo.