PDA

Visualizza la versione completa : Installare patch


cristal
16-12-2008, 16:26
Salve a tutti, ho installato su centOS il server jabber: ejabberd.

Dovrei installare una patch per ejabberd con un file .diff:
ejabberd_local_address.diff

ma non riesco a capire come fare.
Voi sapete come fare?

grazie.

GunMan
16-12-2008, 16:36
non conosco centOS ma i comandi diff e patch sono usati in molti frangenti.

qualche spunto che spero possa essere utile

http://en.wikipedia.org/wiki/Patch_(Unix)

http://www.cpqlinux.com/patch.html

Z0rn
17-12-2008, 13:05
Neanch'io conosco centOS, ma di solito le patch si applicano AI SORGENTI dei programmi, qualcosa tipo (vado molto a memoria, che e' scarsa)
cat miapatch.diff | patch -p1
oppure patch -p1 < miapatch.diff
per poi compilare ed installare.

cristal
18-12-2008, 17:27
Si allora, io ho i sorgenti.
Ma non riesco a capire proprio il meccanismo...cio, questo file .diff deve andare a sostituire un altro file con lo stesso nome? Oppure devo aggiungerlo in qualche cartella?

sono riuscito solo a capire che un file diff rappresenta una differenza tra 2 file...ma come si applica ancora no.... :dh: :dh: :dh:

Z0rn
18-12-2008, 18:06
Allora... la cosa si fa dura...
Il file diff e' un condensato di differenze tra due file sorgente o adirittura tra due rami di sviluppo, e va interpretato da un programma che riporta le differenze nei posti giusti.
Ti riassumo come si fa di solito, ma devi capire tu a che punto sei del procedimento e con quali directory (LEGGI man patch):
1) Estrazione dei sorgenti in /tmp/mioprogramma-1.0
2) Copia di miapatch.diff in /tmp/mioprogramma-1.0
3) Da /tmp/mioprogramma-1.0 richiamo del comando: patch -p1 <miapatch.diff
4) Interpretazione dei risultati per verificare che le modifiche sono state riportate tutte.
5) Creazione dei binari con la compilazione

Il punto 3 presenta la prima difficolta', perche' quel -p1 dipende da come e' stata creata la patch.
il punto 4 presentala seconda: se ci sono problemi patch prova a rimediare, se non riesce a rimediare crea dei files per gestire il conflitto, quindi sarebbe meglio un po' capirne di programmazione...
Comunque leggi la documentazione di patch (man patch)

cristal
19-12-2008, 10:37
allora....
io mio programma si chiama ejabberd.
ho scompattato il source code nella cartella opt e mi uscita una cartella chiamata: ejabberd-2.0.2.

entro nella cartella ejabberd-2.0.2 e ho una serie di cartelle tra cui la cartella src nella quale ci sono tutti i sorgenti.

seguendo la guida di ejabberd sono entrato da terminale nella cartella src e ho digitato i comandi:
./configure
make

A questo punto dovrei applicare la patch...se ho capito bene quello che dici, metto il file ejabberd_local_address.diff all'interno della cartella dei sorgenti src.

da terminale (nella cartella src) digito:
patch -p1 <ejabberd_local_address.diff
oppure
patch -p0 <ejabberd_local_address.diff

mi dice....

"can't find file to patch at input line 5
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
---------------------------------
|diff --git a/src/ejabberd.cfg.example b/src/ejabberd.cfg.example
|index d03fb2d..8f17e76 100644
|--- a/src/ejabberd.cfg.example
|+++ b/src/ejabberd.cfg.example
---------------------------------
File to patch:"

e non so cosa mettere....


se invece digito
patch -p2 <ejabberd_local_address.diff
mi dice:
patching file ejabberd.cfg.example
Hunk #1 succeded at 191 with fuzz 2 (offset 46 lines).
patching file ejabberd_config.erl
Hunk #1 succeded at 146 with fuzz 2 (offset 38 lines).
patching file ejabberd_s2s_out.erl
Hunk #1 FAILED at 180.
1 out of 1 hunk FAILED --saving rejects to file ejabberd_s2s_out.erl.rej
patching file win32/ejabberd.cfg
patch: **** malformed patch at line 86:




riesci a percepire qualcosa?
premetto che la patch mi deve andare ad aggiungere una opzione nella connessione s2s...li dove mi ha dato errore....
grazie...

Z0rn
19-12-2008, 12:20
Intanto devi applicare la patch PRIMA di compilare, perche' la patch e' riferita al codice sorgente (il punto 3 viene prima del punto 5).
Direi che la patch viene generata a partire dalla dir che contiene src, quindi devi fare tutto da dentro ejabberd-2.0.2, non da dentro src.
A quel punto dovrebbe andare -p1.
Leggendo l'output di patch mi sorge un dubbio: controlla molto bene la patch che hai scaricato, perche' deve essere apposita per la versione di programma che hai (compresa la piattaforma). Vedo invece che nell'applicazione delle differenze il programma patch ha dovuto adattare le differenze al codice spostandole anche di parecchie righe (il significato di quel "offset 46 lines") e comunque si e' arreso con un file sotto win32, cioe' un file per piattaforma windows: tu non stai compilando sotto linux?

cristal
19-12-2008, 12:33
Si me ne sono reso conto, infatti ho rifatto tutto daccapo, cio ho scompattato ma non ho compilato.

Poi ho copiato la patch nella cartella ejabberd-2.0.2 e ho fatto il comando con -p1, quindi funziona, ma mi da le stesse linee di codice che ho scritto prima.

Comunque si, io sto compilando sotto linux.

Il rilascio della patch ufficiale e sta qui:
https://support.process-one.net/browse/EJAB-418

cavolo ho notato che nell'intesazione dice:
Affects Version/s: ejabberd 1.1.4

forse devo provare con quella versione dei codici sorgente??

grazie ancora...

cristal
19-12-2008, 14:28
Allora ti aggiorno:

ho rifatto tutti i passaggi per la versione ejabberd-1.1.4 e l'output mi dice:

patching file src/ejabberd.cfg.example
patching file src/ejabberd_config.erl
Hunk #1 succeded at 127 (offset 19 lines).
patching file src/ejabberd_s2s_out.erl
patching file src/win32/ejabberd.cfg
patch: **** malformed patch at line 86:



pensi che ora il patching sia stato fatto correttamente?

grazie...

Z0rn
24-12-2008, 09:05
Direi che quello che hai fatto tu e' corretto, ma il messaggio di errore mi ha un po' impensierito, e sono andato ad aprire il file patch: mi pare che ci siano delle righe vuote alla fine, e precisamente quelle pari dalla 80 compresa. Se apri il file con un visualizzatore di file diff (o un editor ti testi qualsiasi che evidenzi anche spazi e ritorni a capo) ti accorgi che tutto il resto del file non contiene righe vuote, questo perche' patch considera i primi caratteri come comandi da eseguire e in alcuni casi probabilmente non gestisce bene le righe che non comprendono questi comandi. Prova ad eliminarle e vedi cosa succede...

Loading