Script che permette di compilare ed installare un qualsiasi pacchetto sorgente c

Sab, 23/08/2008 - 22:26

Script che permette di compilare ed installare un qualsiasi pacchetto sorgente c

Inviato da roberto_65 35 commenti

<br />#!/bin/bash<br /># MIB 21/08/2008 - By Roberto_65 Ver.1.1.0<br /># Procedura che permette di compilare ed installare un qualsiasi pacchetto sorgente compresso<br />help1(){<br />        echo<br />      echo "$0 - Ver.1.1.0"<br />     echo "M.I.B. - Mandriva Italia Backport - http://mib.pianetalinux.org"<br />    echo "Script che permette di compilare ed installare un qualsiasi pacchetto sorgente compresso."<br />  echo <br />     echo "SINTASSI:   $0 <opzione>  <nome_file_source_compresso>  [--cpc=opzione_config]  [--cpm=opzione_make]"<br />       echo "SINTASSI:   $0 <opzione>  <nome_directory>"<br /> echo <br />     echo "      Opzioni:"<br />     echo "          --installa      <nome_file_source_compresso>            Installa"<br /> echo "          --rimuovi       <nome_file_source_compresso>            Disintalla"<br />       echo "          --comprimi      <nome_directory>                        Comprime in .tar.gz"<br />      echo "          --decomprimi    <nome_file_source_compresso>            Decomprime senza compilare"<br />       echo <br />     echo "      Opzioni di compilazione:"<br />     echo "          --cpc=<opzione_config>          Opzione per il \"./configure\" (vedi file README del sorgente)."<br />  echo "          --cpm=<opzione_make>                    Opzione per il \"make\" (vedi file README del sorgente)."<br /> echo <br />     echo "ESEMPI:"<br />    echo "          $0 --install git-1.6.0.tar.bz2"<br />   echo "          $0 --rimuovi git-1.6.0.tar.bz2"<br />   echo "          $0 --comprimi miefunzioni"<br />        echo "          $0 --decomprimi miefunzioni.tar.gz"<br />       echo <br />}<br />flag="0"<br />uscita(){<br /> if [ $flag == "1" ]; then<br />         cd ${d1}<br />          echo && echo "La procedura ${m1} in modo corretto !!!"<br />    fi<br />        exit 0<br />}<br />if [ ! $1 ]; then<br />      help1<br />     exit 0<br />fi<br /><br />if [ ! $2 ]; then<br />       help1<br />     exit 0<br />fi<br />fts1="0"<br />if [ $1 == "--help" ]; then<br />     fts1="1"<br />fi<br />if [ $1 == "--installa" ]; then<br />     fts1="1"<br />fi<br />if [ $1 == "--rimuovi" ]; then<br />      fts1="1"<br />fi<br />if [ $1 == "--comprimi" ]; then<br />     fts1="1"<br />fi<br />if [ $1 == "--decomprimi" ]; then<br />   fts1="1"<br />fi<br />if [ $fts1 == "0" ]; then<br />   echo && echo "Parapetri errati."<br />  flag="0"<br />  uscita<br />fi<br />if [ $1 == "--help" ]; then<br />   flag="0"<br />  help1<br />     uscita<br />fi<br />par_c=" " && par_m=" "<br />if [ $3 ]; then<br />   pars3=$3<br />  par=expr "$3" : '=*\(.....\)'`<br />    if [ $par == "--cpc" ]; then<br />              par_c=${pars3:6}<br />  fi<br />        if [ $par == "--cpm" ]; then<br />              par_m=${pars3:6}<br />  fi<br />fi<br />if [ $4 ]; then<br />   pars4=$4<br />  par=expr "$4" : '=*\(.....\)'`<br />    if [ $par == "--cpc" ]; then<br />              par_c=${pars4:6}<br />  fi<br />        if [ $par == "--cpm" ]; then<br />              par_m=${pars4:6}<br />  fi<br />fi<br />suff="-"<br />controllo(){<br />        suff4=`expr "$pacchetto" : '.*\(........\)'`<br />      suff3=`expr "$pacchetto" : '.*\(.......\)'`<br />       suff2=`expr "$pacchetto" : '.*\(....\)'`<br />  suff1=`expr "$pacchetto" : '.*\(...\)'`<br />   if [ $pacchetto == "${pacchetto_esploso}${suff1}" ]; then<br />         flag="1"        <br />          suff=$suff1<br />       fi<br />        if [ $pacchetto == "${pacchetto_esploso}${suff2}" ]; then<br />         flag="1"        <br />          suff=$suff2<br />       fi<br />        if [ $pacchetto == "${pacchetto_esploso}${suff3}" ]; then<br />         flag="1"        <br />          suff=$suff3<br />       fi<br />        if [ $pacchetto == "${pacchetto_esploso}${suff4}" ]; then<br />         flag="1"        <br />          suff=$suff4<br />       fi<br />        flags="0"<br /> if [ $suff == ".tar.gz" ]; then<br />           flags="1"<br /> fi<br />        if [ $suff == ".tar.bz2" ]; then<br />          flags="1"<br /> fi<br />        if [ $suff == ".tar" ]; then<br />              flags="1"<br /> fi<br />        if [ $suff == ".gz" ]; then<br />               flags="1"<br /> fi<br />        if [ $suff == ".tgz" ]; then<br />              flags="1"<br /> fi<br />        if [ $suff == ".bz2" ]; then<br />              flags="1"<br /> fi<br />}<br /><br />pacchetto=$2<br />if [ $1 == "--comprimi" ]; then<br />    flag="1"<br />  compresso="tar -czvf "${pacchetto}".tar.gz "${pacchetto}"/"<br />       $compresso<br />        m1="è stata compressa"<br />   uscita<br />fi<br />if [ $1 == "--decomprimi" ]; then<br />     fdec="1"<br />   else<br />     fdec="0"<br />fi<br />if [ ! -f $pacchetto ]; then<br />    echo "pacchetto: $pacchetto non trovato !!!"<br />    exit 1<br />fi<br />if [ $fdec == "1" ]; then<br />   dir_source=` pwd `<br />   else<br />   dir_source="/source"<br />fi<br /><br />mkdir -p ${dir_source}<br />cp $pacchetto ${dir_source}"/"<br /><br />pacchetto_esploso=`echo $pacchetto | cut -d. -f1`<br />flag="0"<br />controllo<br />if [ $flags == "0" ] && [ $flag == "0" ]; then<br />  pacchetto_esploso=$pacchetto_esploso"."`echo $pacchetto | cut -d. -f2`<br />    controllo<br />fi<br />if [ $flags == "0" ] && [ $flag == "0" ]; then<br />     pacchetto_esploso=$pacchetto_esploso"."`echo $pacchetto | cut -d. -f3`<br />    controllo<br />fi<br />if [ $flags == "0" ] && [ $flag == "0" ]; then<br />     pacchetto_esploso=$pacchetto_esploso"."`echo $pacchetto | cut -d. -f4`<br />    controllo<br />fi<br />if [ $flags == "0" ] && [ $flag == "0" ]; then<br />     pacchetto_esploso=$pacchetto_esploso"."`echo $pacchetto | cut -d. -f5`<br />    controllo<br />fi<br />if [ $flags == "0" ] && [ $flag == "0" ]; then<br />     pacchetto_esploso=$pacchetto_esploso"."`echo $pacchetto | cut -d. -f6`<br />    controllo<br />fi<br />if [ $flags == "0" ] && [ $flag == "0" ]; then<br />     pacchetto_esploso=$pacchetto_esploso"."`echo $pacchetto | cut -d. -f7`<br />    controllo<br />fi<br />if [ $flags == "0" ] && [ $flag == "0" ]; then<br />     pacchetto_esploso=$pacchetto_esploso"."`echo $pacchetto | cut -d. -f8`<br />    controllo<br />fi<br />if [ $flags == "0" ] && [ $flag == "1" ]; then<br />     su=`expr "$suff" : '.\(..\)'`<br />     suff=`expr "$suff" : '.*\(....\)'`<br />        pacchetto_esploso=$pacchetto_esploso"."$su<br />fi<br /><br />d1=` pwd `<br />if [ $fdec == "0" ]; then<br />   cd ${dir_source}"/"<br />   else<br />  cd ${dir_source}<br />fi<br />if [ ! $1 == "--rimuovi" ]; then<br />    # (or tar xvzf package.tar.gz package.tar package.gz)<br />     if [ $suff == ".tar.gz" ]; then<br />           tar xvzf ${pacchetto}<br />     fi<br />        if [ $suff == ".tar" ]; then<br />              tar xvzf ${pacchetto}<br />     fi<br />        if [ $suff == ".tgz" ]; then<br />              tar xvzf ${pacchetto}<br />     fi<br />        if [ $suff == ".gz" ]; then<br />               tar xvzf ${pacchetto}<br />     fi<br />        # (or tar xvjf package.tar.bz2)<br />   if [ $suff == ".tar.bz2" ]; then<br />          tar xvjf ${pacchetto}<br />     fi<br />        if [ $suff == ".bz2" ]; then<br />              tar xvjf ${pacchetto}<br />     fi<br />fi<br />if [ $fdec == "1" ]; then<br /> flag="1"<br />  m1="è stata decompressa"<br /> uscita<br />fi<br /><br />if [ ! -d "${dir_source}/${pacchetto_esploso}" ]; then<br />  pacchetto_esploso=`echo $pacchetto | cut -d- -f1`<br />fi<br />if [ ! -d "${dir_source}/${pacchetto_esploso}" ]; then<br />     echo && echo "Uscita per errore."<br /> echo "La directory scompattata non coincide con il nome del pacchetto."<br />   echo && exit 1<br />fi<br />cd "${dir_source}/${pacchetto_esploso}"<br />flag="0"<br />if [ $1 == "--rimuovi" ]; then<br />     flag="1"<br />  if [ -f "configure" ]; then<br />           make uninstall<br />        fi<br />        cd ..<br />     rm -r ${pacchetto_esploso}/<br />       m1="è stato disinstallato e rimossa la directory sorgente"<br />fi<br />if [ $1 == "--installa" ]; then<br />  flag="1"<br />        if [ ! -f "configure" ]; then<br />           echo && echo "Non è possibile compilare !!!"<br />             echo && exit 1<br />        fi<br />        echo "Compilazione di $pacchetto_esploso" > ${dir_source}/errori.log && echo " - " >> ${dir_source}/errori.log<br />    ./configure ${par_c} 2>> ${dir_source}/errori.log && make ${par_m} 2>> ${dir_source}/errori.log && make install 2>> ${dir_source}/errori.log && echo && echo "Evviva!! Installazione completata !"<br />        echo && echo "Eventuali errori riportati dalla compilazione:" && echo ` cat ${dir_source}/errori.log `<br />    m1="è stato installato"<br />fi<br /><br />uscita<br />exit 0<br />


In:



Commenti

Ritratto di Moreno
#1

Inviato da Moreno il Dom, 24/08/2008 - 18:43.

Sempre di poche parole

Ciao

Visto che lo script è rivolto ai neofiti un minimo di spiegazioni sarebbe stato gradito.

Ovviamente questo script non può funzionare, checche ne dica l'autore, con tutti i programmi compilabili ma solo con quelli, la maggioranza, che si appoggiano su Configure - Make - Make Install.

Ciao Ciao, Moreno

Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.



Ritratto di roberto_65
#2

Inviato da roberto_65 il Dom, 24/08/2008 - 18:54.

Re: Sempre di poche parole

Si, ma questa è solo una prima versione !!!
In futuro dovrà essere in grado di generare dei semplici, ma funzionali file spec e degli rpm in binario !!!

Ciao Roberto

P.S. Le istruzioni non occorrono, è molto semplice il suo utilizzo e poi possiede un help.

L'unica direttiva che posso fornire è che genera una directory /source che non dovrà mai essere rimossa.



Ritratto di kurtz77
#3

Inviato da kurtz77 il Dom, 24/08/2008 - 19:09.

Re: Sempre di poche parole

Forse mi è sfuggito, ma non capisco del tutto l'utilità dello script.
Se la configurazione non va a buon fine per via di dipendenze che non sono soddisfatte dove sta la semplificazione all'utente inesperto?
Sarebbe opportuno che fornisse un output che "parlasse" in modo umano al neofita dicendogli, "Guarda che non posso compilare perché manca il tal pacchetto".
L'unica comodità che introduce sta nell'automatizzare alcuni operazioni ripetitive, ma non introduce alcuna semplificazione reale agli inesperti.
Correggetemi pure se sbaglio.

Ciao

kurtz77 8-)
blog: la linea d'ombra



Ritratto di Moreno
#4

Inviato da Moreno il Dom, 24/08/2008 - 19:24.

Re: Sempre di poche parole

Ciao

Si dal punto della compilazione non comporta alcun vantaggio, una leggera miglioria potrebbe essere:

./configure 2>errori.txt && make 2>>errori.txt && make install 2 >>errori.txt && echo "Evviva!! Installazione completata"

Gli errori vengono messi in errori.txt ed uno può analizzarseli con calma.

Diciamo che lo script aiuta a decomapattare e soprattutto a disinstallare i programmi compilati.

Ciao Ciao, Moreno

Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.



Ritratto di roberto_65
#5

Inviato da roberto_65 il Dom, 24/08/2008 - 22:10.

Re: Sempre di poche parole

Quote:

./configure 2>errori.txt && make 2>>errori.txt && make install 2 >>errori.txt && echo "Evviva!! Installazione completata"

Ottima idea !!!
Sarà messo nella prossima versione !!!

Purtroppo lavorando con un sistema non Debian, non è possibile fare in modo che le dipendenze potessero essere risolte installando eventuali librerie mancanti, ancora prima della compilazione in modo automatico.
Quest'operazione lo fa solo il dpkg e l'apt-get di Debian, dove la è veramente molto più semplice compilare e pacchettizzare, addirittura non esiste nemmeno lo specfile.

riferimenti:
http://fontaxweb.wordpress.com/2007/06/24/compilare-sorgenti-in-ubuntu/
http://wiki.ubuntu-it.org/Multimedia/Video/Mplayer/Compilazione

Allora si che con i sistemi derivati da Debian come Ubuntu si possono scrivere degli script come quello di sopra, ma molto più completi e funzionali e che funzionano per qualsiasi pacchetto !!!

Ciao ciao Roberto

P.S. Se avete delle idee su come fare proponete degli script alternativi a questo !!!



Ritratto di roberto_65
#6

Inviato da roberto_65 il Lun, 25/08/2008 - 10:50.

Modifica allo script SOURCE-INSTALL

Ho modificato lo script.
Adesso permette di inserire delle opzioni al Configure e al Make

Ciao Roberto



Ritratto di Moreno
#7

Inviato da Moreno il Lun, 25/08/2008 - 11:21.

Re: Modifica allo script SOURCE-INSTALL

Ciao

Se devi apportare modifiche alla guida mandami la nuova versione via MP, provvederò io ad aggiornarla.

Mi sembra comunque che ci sia un errore nello script, la parte
&& echo "Eventuali errori riportati dalla compilazione:" && echo ` cat ${dir_source}/errori.log

Viene eseguita solo quando la compilazione ha successo e cioè proprio quando non serve.

Modificherei l'ultima parte così:

<br />rm ${dir_source}/compileOK<br />echo &quot;Compilazione di $pacchetto_esploso&quot; &gt; ${dir_source}/errori.log &amp;&amp; echo &quot; - &quot; &gt;&gt; ${dir_source}/errori.log ./configure ${par_c} 2&gt;&gt; ${dir_source}/errori.log &amp;&amp; make ${par_m} 2&gt;&gt; ${dir_source}/errori.log &amp;&amp; make install 2&gt;&gt; ${dir_source}/errori.log &amp;&amp; echo &amp;&amp; echo &quot;Evviva!! Installazione completata !&quot; &amp;&amp; &gt; ${dir_source}/compileOK<br />        if [ ! -f ${dir_source}/compileOK ]; then<br />               less ${dir_source}/errori.log<br />         fi<br />

Se la compilazione va a buon fine viene generato ${dir_source}/compileOK se invece il file non viene trovato parte il less di ${dir_source}/errori.log

Ciao Ciao, Moreno

Addio, e grazie per tutto il pesce.
Avatar by moonlight-dream.



Ritratto di roberto_65
#8

Inviato da roberto_65 il Lun, 25/08/2008 - 11:28.

Re: Modifica allo script SOURCE-INSTALL

OK adesso il primo script da me postato in alto è corretto ed è stato riscritto nella guida
Non tenete conto delle discussioni fatte fino ad adesso !!!

Ciao Roberto



Ritratto di kurtz77
#10

Inviato da kurtz77 il Mer, 27/08/2008 - 11:18.

Re: Modifica allo script SOURCE-INSTALL

Se dico una eresia fustigatemi pure in sala mensa Laughing.
Ma, tramite lo script, non si potrebbe usufruire dei source-rpm di mandriva per scaricare il sorgente di quello che ci serve e le relative dipendenze?
Non ho idea di come sia strutturato un source-rpm quindi ipotizzo che assieme ai sorgenti esista già uno spec-file che includa le eventuali dipendenze qualora volessi trasformare il pacchetto in binario.
Magari si potrebbe partire da lì costruendo lo script affinchè compili i sorgenti nella giusta sequenza.
Se é una stron#@ta chiedo umilmente perdono Thinking

kurtz77 8-)
blog: la linea d'ombra