domenica 18 luglio 2010

Come si installa un .tar.gz?


Una domanda abbastanza frequente sul forum della comunità italiana di Ubuntu è su come installare un .tar.gz (o anche un .tar.bz2 e compagnia bella). La risposta è semplice:
la domanda non ha senso.

Un .tar.gz (o un .tar.bz2) è un insieme di file archiviati con tar e compresso con gzip (o bzip2 nel caso dei .tar.bz, negli altri formati cambierà il tipo di compressione), ma dentro può esserci qualsiasi cosa (binari precompilati, sorgenti da compilare a mano, programma in python che non va compilato, temi per il desktop, chi più ne ha più ne metta) ed è per questo motivo che non ha senso chiedere come si installi. In generale non si può dire niente su cosa si debba fare con un archivio senza sapere cosa ci sia dentro. È come chiedere «come si apre un file?» senza dire di che file si tratti.

Esempio famoso: Mozilla distribuisce sul suo sito Firefox e Thunderbird (e altri programmi) per sistemi GNU/Linux in archivi .tar.bz2 che contengono dentro i programmi già compilati e pronti per l'uso (una cosa che molta gente sembra non capire, nonostante gli venga detto, è che non c'è bisogno di compilare proprio niente in questo caso). Qui non c'è nulla da installare, per avviare i due programmi basterà scompattare l'archivio (e per favore, se non siete in grado (come me) di farlo da terminale, scompattate attraverso interfaccia grafica, non capisco perché la gente si ammazzi a scompattare da linea di comando quando bastano due clic) e fare doppio clic sul file firefox o thunderbird, a seconda del programma.

Allora la domanda sorgente spontanea: come faccio a capire cosa me ne devo fare di questo archivio? Anche qui la risposta è semplice: aprirlo. Nella stragrande maggioranza dei casi è presente un file chimato README che contiene le istruzioni (purtroppo praticamente sempre in inglese) sul da farsi (estrarre l'archivio e compilare, oppure estrarre e fare doppio clic su un file o altro).

Nel caso in cui l'archivio contenga il sorgente di un programma da compilare è spesso presente anche un altro file chiamato INSTALL che spiega più dettagliatamente come si compila il programma, anche se spesso sono sufficienti i "comandi magici":
./configure
make
# make install

È bene comunque controllare sempre le istruzioni per la compilazione e non partire in quarta con questi comandi, ci sono tantissimi programmi che non devono essere compilati in questo modo.

Concludendo, se avete scaricato un .tar.gz/.bz2/.lzma/ecc. e volete chiedere aiuto su un forum & Co. è sensato porre la domanda «Ho scaricato il programma xyz [magari fornendo anche link al sito da cui si è scaricato l'archivio], come faccio a utilizzarlo?» ma non «Ho scaricato un .tar.gz [senza fornire alcuna indicazione su quale programma si tratti...], come si installa?» perché, come mi sembra di aver già detto,
la domanda non ha senso.

18 commenti:

  1. Grazie :)
    Ero stanco di ripeterlo ogni volta sul forum sul forum, allora ho scritto questo post

    Ciao!

    RispondiElimina
  2. Le istruzioni per compilare non sono le stesse se invece di usare il file CONFIGURE il programmatore ha scelto di usare cmake.
    Inoltre essendo i programmi fatti per essere fruiti in tutto il mondo mi pare ovvio che siano sempre in inglese, è ora che ci svegliamo da questo torpore linguistico che abbiamo quì. In Svezia i muratori ti rispondono in inglese meglio di come un muratore quì ti risponde in italiano... -_-"

    RispondiElimina
    Risposte
    1. Torpore linguistico o no.... qui, si scrive senza accento.

      Elimina
  3. @Iuri: lo so che alcuni programmi si compilano con cmake (se non ci credi puoi vedere la guida per compilare QtOctave che scrissi un anno fa) e non è neanche l'unica alternativa ad autotools, secondo te perché ho detto di controllare comunque il file INSTALL?

    Ho scritto «purtroppo praticamente sempre in inglese» perché non escludo che un utente che abbia bisogno di leggere questo post abbia anche problemi con l'inglese (uno smanettone che sa già compilare da sé e conosce l'inglese sicuramente non se ne fa niente di questo post).

    Ciao

    RispondiElimina
  4. hai fatto un po' di filosofia, ma alla fine non hai concluso niente, dici piuttosto come si scompatta il file, e come si installa, chi è digiuno di linux, e ha bisogno di procedere, la sintesi è un toccasana.
    Dovrei installare wvdial-1.61.tar.gz scaricato da windows per configurare il modem del telefonino samsung sgh z150 tramite wvdial.conf, e non so minimamente come fare

    RispondiElimina
  5. Questo post non voleva essere una guida, ma solo uno sfogo per tutte le volte che sento chiedere «Come si installa un tar.gz (& Co.)?».

    Pensavo anche di aver spiegato che non esiste un metodo generale per "installare un tar.gz", per questo non ha senso spiegare come si fa. Leggiti il README se c'è, altrimenti chiedi aiuto nei luoghi di supporto (non qui, non è il posto adatto). Non ho concluso nulla perché non c'è niente da concludere.

    Nel post avevo anche scritto (ma mi viene il dubbio che tu non l'abbia letto per bene) che un archivio si può tranquillamente scompattare per via grafica. Se io fossi uno a digiuno di linux proverei per prima cosa questa strada, non farei i salti mortali nel terminale.

    Ciao

    RispondiElimina
  6. Letto e sottoscritto! ;)

    Ziocane

    RispondiElimina
  7. raga e se il file INSTALL o README non c'è? tipo in un programma sviluppato da una università che viene dato ad un'altra??? che famo???

    RispondiElimina
  8. In questo caso te la devi prendere con lo sviluppatore che non spiega come si compila il programma. Un sviluppatore dovrebbe sempre fornire le informazioni minime necessarie per utilizzare i propri programmi. Non è una regola scritta da qualche parte, si tratta semplicemente buon senso.

    Se quello che hai scaricato è il codice sorgente di un programma controlla se c'è lo script `configure', in caso affermativo prova a eseguirlo. Potrebbe esserci un Makefile già pronto, in questo caso dovresti poter compilare il programma con il solo comando `make'.

    Ciao

    RispondiElimina
  9. Mi sa che devi scendere dal piedistallo, cocco.
    Qui siamo, almeno io , digiuni di linux , e sto ancora cercando di capire se ne vale la pena, o mandarlo a quel paese.
    Io sono abituato con i bellissimi .exe di windows, quindi invece di fare il filosofo del nulla, spiega come farlo funzionare, se non si puo' dire installare, codesto Tarball
    Giuseppe Scollo
    Modena

    RispondiElimina
  10. O il post è scritto in una qualsiasi lingua a te ignota (possibile) oppure non hai letto proprio il post. Ho provato a ripetere in ogni modo possibile che non esiste un metodo standard universale per compilare i programmi, ogni programma potrebbe avere, in linea di principio, un sistema di compilazione proprio. Non esiste un metodo unico per compilare implica che io ho ben poco da spiegare come si compila in generale, quindi non so cosa ti aspetti che ti dica. Per la mancanza di standardizzazione non te la devi prendere con me.

    Nonostante ciò, ho provato anche a spiegare, in breve, come si compila nei casi più diffusi, ovvero se il software fa uso del sistema Autotools (molti sviluppatori usano Autotools ma questo sistema è ben lontano da essere l'unico incontrastato nel mondo del software libero), suggerendo però di dare un'occhiata alle istruzioni presenti nel file INSTALL (se presente).

    Un utente all'inizio dei commenti riteneva che il mio post fosse troppo semplicistico, criticando anche la mia "lamentala" (per così dire) riguardo al fatto che le istruzioni sono quasi sempre in inglese, ma l'ho scritto proprio sapendo che il target di questo blog sono utenti non particolarmente ferrati nel campo dell'informatica. Ora tu mi vieni a dire che non spiego nulla (???) e mi ergo su un piedistallo. Purtroppo non vedo nessun piedistallo sotto i miei piedi, non capisco a cosa ti riferisci. Almeno mettevi d'accordo e decidete se questo post è troppo complesso o troppo semplicistico.

    Tra l'altro mi sorprende tutto questo bisogno di compilare programmi: sono ormai diversi anni che uso sistemi operativi GNU/Linux, il numero di volte che ho avuto bisogno di compilare un programma si aggira fra uno e due (e per di più di questi programmi oggi si trovano i pacchetti già compilati quindi oggi non avrei più bisogno di compilarli da solo). Le altre volte che ho compilato un programma è stato perché avevo desiderio di farlo (già, sono malato, ho desideri piuttosto bizzarri) o perché volevo "esercitarmi" a compilare quel programma, ma non per bisogno vero e proprio.

    Ciao

    RispondiElimina
    Risposte
    1. Ti chiedo scusa, putroppo forse ho ancora la mentalità troppo da "windows" , nel senso che io pensavo, e non so ancora se sono nel torto, che un tar.gz funzionasse semplicemente come un file .zip, che scoppatti e poi installi.
      Se poi e' una cosa complicata come dici tu, vale a dire che bisogna conoscere C++, Java e tante diavolerie simili, nel senso che odio la programmazione ad oggetti, visto che un tempo programmavo in linguaggi tipo Cobol o Basic, dove occorreva veramente ragionare, e non usare solo una gran mole di memoria e conoscere sintassi da loggia p5, beh allora i files tar.gz li lascio volentieri a chi li crea.
      Giuseppe Scollo
      Modena

      Elimina
    2. In generale non dovrebbe essere necessario avere conoscenze di programmazione per essere in grado di compilare un programma e io ne sono un esempio: ho scarsissime conoscenze di programmazione eppure non ho problemi a compilare programmi (o almeno provarci a farlo). Sarebbero necessarie se tu dovessi modificare manualmente il codice sorgente del programma, cosa che in effetti non è necessaria per la stragrande maggioranza dei programmi che si trovano in giro. Le conoscenze "richieste" direi che sono più di informatica che di programmazione, devi solo aver voglia di sperimentare e conoscere meglio come funziona il tuo computer.

      Tu dici che apprezzi molto il metodo "alla Windows", ma alcuni programmi sono distribuiti in maniera simile anche sui sistemi GNU/Linux e il caso più famoso è sicuramente quello di Firefox, Thunderbird & Co. di cui ho già parlato nel post: scompatti l'archivio e fai doppio clic sul programma, non c'è neanche bisogno di "installare" niente, funziona da solo (se tutto va bene), quindi è addirittura più semplice del metodo "alla Windows" in cui è necessario premere tante volte ciecamente su Avanti/Accetto.

      Sarebbe sicuramente molto utile (soprattutto per i neofiti) se anche altri sviluppatori di software libero distribuissero i loro programmi precompilati (oltre al codice sorgente) così come fa Mozilla. Il difetto di questo sistema di distribuzione dei programmi è che l'utente dovrebbe comunque installare da sé le eventuali librerie necessarie per il funzionamento del programma (a questo mi riferivo quando sopra ho scritto «se tutto va bene»). Qui entra in gioco l'utilità dei gestori pacchetti forniti dalle distribuzioni GNU/Linux. Questo problema non semplice è, spesso, risolto rozzamente dai programmi distribuiti su Windows impacchettando insieme programma vero e proprio e librerie necessarie per il suo funzionamento. Risultato: se un utente installa due (o più) programmi che fanno uso della stessa libreria si ritroverà installata nel proprio sistema due (o più) volte la stessa libreria (a volte anche con versioni leggermente differenti).

      Come puoi immaginare la gestione oculata dei programmi da installare su un sistema non è affatto banale (su Windows sembrerà facile ma il risultato può essere in realtà una porcheria, invisibile agli occhi degli utenti comuni e per loro di poco/nessun conto, ma comunque una porcheria) e non mi risulta che qualcuno abbia trovato la soluzione definitiva. In generale mi piace molto il sistema "alla Linux", con il gestore pacchetti che si occupa di recuperare al tuo posto il programma e andare a sistemare tutte le dipendenze connesse. Inoltre il sistema si occupa anche ti tenere aggiornati i tuoi software (in realtà lo fanno gli sviluppatori di quella distribuzione, il tuo sistema non fa altro che propagare il loro lavoro). Riconosco però che questo sistema abbia dei limiti: non sempre puoi scegliere in maniera arbitraria quale versione di un software utilizzare (perché per esempio non è compatibile con la versione di una libreria installata sul tuo sistema). Se mai si riuscirà a risolvere questo problema in maniera elegante penso che potrei affermare che il sistema di gestione dei programmi sui sistemi GNU/Linux sia quello perfetto, o almeno che sfiora la perfezione, potrei sempre cercare qualche altro difetto :-P

      Spero di aver chiarito un po' meglio la mia posizione.

      Ciao ;-)

      Elimina
  11. Risposta esauriente Elrond, vuol dire che sperimentero', del resto sto provando linux apposta per questo.
    Giuseppe Scollo
    Modena

    RispondiElimina
  12. Ciao ho scaricato reaver-1.4.tar.gz e l'ho copiato su una chiavetta USB.Ora vorrei installarlo su BackTrack 5 (dvd live) mi potresti spiegare come fare?in pratica lo devo installare offline...

    RispondiElimina
  13. Salve!
    Ho scaricato il file ...tar.gz. per la mia stampante Samsung xpress 2885 perché lo scanner non funziona.
    Ho aperto il pacchetto, ho aperto il file install.scanner.sh e ho trovato quanto segue:
    #!/bin/sh

    SCRIPTS_DIR=$(dirname "$0")/noarch

    # load 'scripting' run-time support utility functions
    . "${SCRIPTS_DIR}/scripting_utils"
    script_log_init $(basename "$0" ".sh")

    # load 'package' run-time support utility functions
    . "${SCRIPTS_DIR}/package_utils"
    environment_init $(basename "$0" ".sh")

    if sh "$SCRIPTS_DIR/pre_install.sh" "$@" ; then
    sh "$SCRIPTS_DIR/package_install.sh" "scanner-meta"
    sh "$SCRIPTS_DIR/post_install.sh" "$@"
    fi

    Adesso cosa devo fare?
    Grazie

    RispondiElimina

I commenti inseriti vengono lasciati dall'autore degli stessi accettandone ogni eventuale responsabilità civile e penale.
Il curatore del blog si riserva la possibilità di eliminare messaggi contenenti frasi offensive o spam.