gtkradiant

Ciao a tutti!
Sto smanettando da un po’, a tempo perso, per creare una versione pacchettizzata di gtkradiant. Seguendo la http://doc.fedoraonline.it/Installazione_e_Configurazione_GtkRadiant per fedora ho creato il file .spec, visionabile http://dl.dropbox.com/u/62048973/gtkradiant.spec, ancora incompleto nei dettagli.
Spiego brevemente quello che vorrei faccia il pacchetto: l’utente apre il file gtkradiant.desktop che rimanda a /usr/bin/gtkradiant (visionabile http://dl.dropbox.com/u/62048973/gtkradiant.sh), il quale copia il contenuto della cartella /usr/share/gtkradiant in una cartella nella home dell’utente (~/.gtkradiant-src/). Quindi entra nella cartella, procede alla compilazione e una volta finita preleva la cartella install/ (~/.gtkradiant/install/ ) e la sposta nella home con il nome ~/.gtkradiant/
Quello che dovrebbe fare adesso il lanciatore .desktop è, cliccandoci sopra una seconda volta dopo la compilazione, lanciare l’applicativo ~/.gtkradiant/radiant.bin.
Il problema che rilevo adesso è che non funziona il lanciatore /usr/bin/gtkradiant: come si può vedere dal link sopra faccio controllare se esiste o meno l’applicativo ~/.gtkradiant/radiant.bin: se non esiste, lo script esegue i processi di prima, altrimenti dovrebbe lanciare il processo; ma una volta che ha compilato la prima volta, rilanciando il lanciatore, questo continua a chiedere di voler compilare i sorgenti.

Come posso fare? Avete consigli, dettagli da sistemare?

Scusatemi ma è la prima volta che faccio un rpm e me ne intendo ancora poco, così come nella creazione di script.

Un commenti sullo script bash puoi usare la variabili $HOME per la home dell’utente, molto meglio.

Dopo la compilazione i file vengono generati correttamente?

Ciao MarioS, grazie per la pronta risposta.

Per quanto riguarda la var $HOME è una delle cose da sistemare, grazie mille.

Non ci sono problemi di sorta nella creazione sia del rpm che del src.rpm, infatti li creo dall’utente makerpm e li vado a testare in una sessione di virtualbox apposita. Il problema è quello descritto prima, non so come fare il “check” della presenza o meno del file ~/.gtkradiant/radiant.bin .
Esiste qualche opzione n modo da creare in bash una roba di questo tipo:

se $ELEMENTO c'é lancio dell'applicazione se $ELEMENTO non c'é esegui vari passaggi..
?
Questo ovviamente è solo un esempio per chiarezza

Grazie mille per l’attenzione

Scusami, per compilazione intendo esecuzione dello script bash. Non mi riferivo al file spec che per come è funziona (e ci hai dato conferma, al limite si può solo affinare la formattazione ed eventualmente alcune cosette ma nulla di che).
Il tuo if dovrebbe funzionare, per l’appunto. Probabilmente è l’if annidato che ti crea dei problemi?

Non penso, non ho mai visto problemi particolari con if annidati.
Consigli l’uso della funzione case o altre? O è meglio “spostare” il gruppo dei passaggi in una variabile e lanciarlo dopo l’if?

Una cosa del genere, per intenderci

[code]vari_passaggi="…"

se $ELEMENTO c’é
lancio dell’applicazione
se $ELEMENTO non c’é
$vari_passaggi[/code]
?

No, intendo che metti un secondo controllo per il quale non capisco l’utilità…

Perché chiedo all’utente se vuole procedere con la compilazione nella sua home dei file necessari, poiché ci mette un po’ a fare le sue robe. Però in effetti potrei anche rimuoverlo e mettere un semplice avviso, senza fare la domanda. Dici che potrebbe essere quello che fa “sballare” l’if?

No, scusami, io zenety non l’ho mai usato e ho letto il tuo codice e mi sono scordato la riga di questo, scusami.
Prova così:

#!/bin/bash

EXEC="radiant.bin"
FOLD="$HOME/.gtkradiant/"

if  ! -f $FOLD$EXEC ]; then
	zenity --question --text='	This is the first time you launch GTKRadiant.	
Now there will be some configurations in your home. Proceed?'
	if  $? == 0 ]]; then
		cp -Rf /usr/share/gtkradiant/ $HOME/.gtkradiant-src/
		cd $HOME/.gtkradiant-src/
		scons target=radiant,q3map2 config=release
		mv install/ $HOME/.gtkradiant/
		cd $HOME && rm -rf $HOME/.gtkradiant-src/
		# zenity --info --text='Now you can launch GTKRadiant. Restart it to enjoy!'
	else
		exit 0
	fi
fi
# lanci l'applicazione
$FOLD$EXEC

È perfetto! :smiley: grazie mille MarioS.

Per curiosità, dato che ci capisco poco o nulla, che cosa fa l’opzione di if if $? == 0 ]] ?
e dove posso trovare il man per leggere tutto?

Puoi leggere il man di bash.

Tu avevi usato un if ma non un operatore di confronto ma di assegnazione (= invece di ==). Il doppio ]] potenzia la funzionalità dell’operazione condizionale di bash. Ma il man è più esplicativo.

sotto la voce expression mi sembra di aver trovato qualcosa, procederò poi ad un attento esame :slight_smile:

Mi viene un grosso dubbio. Dato che il programma poi girerà all’interno della home non verrà influenzato da aggiornamenti dello stesso nelle cartelle di sistema. Quindi se l’utente vuole aggiornare all’ultima versione, dopo aver dato uno yum update, dovrà anche cancellare la directory ~/.gtkradiant manualmente. Stavo pensando di fare una comparazione tra due changelog (uno nella home e uno nella cartella di sistema) all’inizio dello script e se ci sono differenze chiedere all’utente se vuole rimuovere la cartella ~/.gtkradiant nella home per ricompilare il programma con gli aggiornamenti. Non so se sono stato chiaro.
La mia domanda quindi è: è possibile fare la comparazione di due file da terminale?

Si, è possibile, anzi potresti mettere un log all’interno di ~/.gtkradiant che indica la versione installata. Al momento dell’avvio controlli che versione è, se è più vecchio proponi la cancellazione e la ricreazione della directory e dell’applicativo.
Si può fare in molti modi differenti :slight_smile:

Stavo pensando ad inserire nello spec qualcosa del genere:

touch $RPM_BUILD_ROOT%{_datadir}/%{name}/rpm_version echo "%{version}-%{release}" > $RPM_BUILD_ROOT%{_datadir}/%{name}/rpm_version

No? Che ne dici?
E per fare la comparazione tra i due file che comando si può usare da terminale?

Puoi usare il comando diff…O fare un echo e fare la comparazione con un if…

non so come funzioni diff quindi mi sa che userò il tuo secondo metodo.
Inserirei nel file /usr/bin/gtkradiant questo:

[code]…
FOLD=…

VERS1=cat $FOLD/rpm_version
VERS2=cat /usr/share/gtkradiant/rpm_version

if $VERS1 != $VERS2 ]]; then
testo_che_chiede_all’utente_se_aggiornare_gtkad_nella_home
if $? == 0 ]]; then
rm -rf $FOLD
fi
fi

if ! -f $FOLD$EXEC ]; then
…[/code]

dovrebbe essere giusto.

Si, concettualmente si!

Allora, diciamo che era giusto, però le due variabili andavano inserite DOPO aver fatto la compilazione, altrimenti il lanciatore fa due volte la compilazione dato che non trova, ovviamente, il file ~/.gtkradiant/rpm_version, perché prima della compilaz non esiste.

Poi nello spec ho sistemato la parte della creazione del rpm_version, dato che va inserito nella cartella $RPM_BUILD_ROOT%{_datadir}/%{name}/install/rpm_version , che è quella che poi rimane nella home dell’utente. La parte dello spec diventa quindi così:

touch $RPM_BUILD_ROOT%{_datadir}/%{name}/install/rpm_version echo "%{version}-%{release}" > $RPM_BUILD_ROOT%{_datadir}/%{name}/install/rpm_version
Infine ho ripulito un po’ tutto e ho sistemato anche il file .desktop

Ho uppato tutto comunque anche qua: https://www.dropbox.com/s/xp34hviftv319ez/gtkradiant.sh, https://www.dropbox.com/s/lvm735k6thqw0uf/gtkradiant.desktop e https://www.dropbox.com/s/2dni7vif2mcbygn/gtkradiant.spec.

Appena posso carico anche il source e l’rpm.

Buona nottata a tutti! :smoke:

Ecco qua anche il sorgente (https://www.dropbox.com/s/sxlxfsiszwrwbxw/gtkradiant-1.6.2-2.fc16.src.rpm) e il pacchetto per fedora16 (https://www.dropbox.com/s/ut7z99zispxodm5/gtkradiant-1.6.2-2.fc16.noarch.rpm).

Chi vuole farmi da beta tester? :lol:
consiglio una sessione di virtualbox per sicurezza…

Inserisco qua anche il https://www.dropbox.com/sh/rrgfwzc8bcjg74h/RxjiNIJ4_S diretto alla cartella su dropbox così da poterla visionare come meglio credete.

Sto scrivendo una mail alla http://icculus.org/mailman/listinfo/gtkradiant per vedere se “apprezzano”… Vi farò sapere :slight_smile:

Ciao a tutti!
Un po’ di aggiornamenti:
ho aggiornato il sorgente alla versione 1.6.3 e quindi ho pacchettizzato nuovamente il tutto.
Ho caricato tutto https://www.dropbox.com/sh/rrgfwzc8bcjg74h/RxjiNIJ4_S.

Qualcuno sa come si fa a chiedere l’inclusione di un pacchetto nei repository? Bisogna aprire una discussione su bugzilla? Nel caso, dove? Non sono molto esperto di bugzilla…