Come si patcha con un file .diff ?

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
freax
Linux 1.x
Linux 1.x
Messaggi: 177
Iscritto il: lun 19 gen 2009, 0:29
Slackware: 13
Desktop: kde4

Come si patcha con un file .diff ?

Messaggio da freax »

allora faccio subito una premessa , il problema mi è nato su una NetBSD ma non essendoci forum di un certo livello sull'argomento , almeno a mia attuale conoscenza , e siccome la stessa utility è presente anche in ambito Linux , chiedo a voi come usarla .

allora io ho una Atheros 5007EG ( su un ASUS X50N ) , una scheda wifi che con i driver Atheros inclusi nel kernel non va e non è supportata ufficialmente , neanche dalla prossima FreeBSD 8 ( tanto per rimanere in ambito BSD ) a quanto pare ( HAL ritorna uno "status 13" ) , la stessa scheda è presente su un EEEPC e un tizio è riuscito a patchare qualcosa ... , diciamo che dal suo post non si evince molto , dice che ha un EEEPC 1000HA con la suddetta scheda e che la scheda wifi funziona perfettamente con NetBSD previa applicazione di questo file diff che patcha la distro ...

ok , adesso io ho un portatile diverso ma identico sistema operativo ( la patch andrebbe applicata su una NetBSD liscia ) , quante speranze ho di riciclare questa patch per il mio sistema ?

ftp://ftp.netbsd.org/pub/NetBSD/misc/mjf/ath_eee.diff

mi spiegate , anche velocemente , come fare ?

da quel poco che ho capito il comando prevede l'uso di 2 file , ma in realtà io ho solo la patch e non saprei neanche come usarla correttamente , considerato che non ho niente da perdere dato che appunto il mio sistema è fresco di installazione e potrei anche accettare di rifare tutto da 0 tanto ci metterei in più quei 5 minuti di installazione , mi azzardate qualche comando utile e qualche spiegazione ?

Avatar utente
tigerwalk
Linux 3.x
Linux 3.x
Messaggi: 895
Iscritto il: lun 25 feb 2008, 22:08
Nome Cognome: Giuliano della Vecchia
Slackware: 13.37-14.2
Kernel: 3.10.17-tiger / 4.4.88-smp
Desktop: kde4/xfce4
Località: Napoli

Re: Come si patcha con un file .diff ?

Messaggio da tigerwalk »

genericamente, devi copiare il file.diff nella directory dei sorgenti da patchare, spostarti nella directory e dare:
patch -p1 < file.diff

Avatar utente
freax
Linux 1.x
Linux 1.x
Messaggi: 177
Iscritto il: lun 19 gen 2009, 0:29
Slackware: 13
Desktop: kde4

Re: Come si patcha con un file .diff ?

Messaggio da freax »

tigerwalk ha scritto:genericamente, devi copiare il file.diff nella directory dei sorgenti da patchare, spostarti nella directory e dare:
patch -p1 < file.diff
quindi è plausibile che debba entrare nella directory con i sorgenti dei driver Atheros del kernel e ricompilare poi il kernel stesso ?

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2924
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: Come si patcha con un file .diff ?

Messaggio da 414N »

Occhio che quello non mi sembra un file diff prodotto da diff, quanto un file diff prodotto da git-diff (o simile).
Quindi può darsi che patch non riesca ad applicarlo senza qualche modifica.
Si tratta poi di tranciare le righe "descrittive", tipo

Codice: Seleziona tutto

Index: contrib/dev/ath/ah.h
===================================================================
RCS file: /cvsroot/src/sys/contrib/dev/ath/ah.h,v
retrieving revision 1.4
diff -u -r1.4 ah.h

Avatar utente
freax
Linux 1.x
Linux 1.x
Messaggi: 177
Iscritto il: lun 19 gen 2009, 0:29
Slackware: 13
Desktop: kde4

Re: Come si patcha con un file .diff ?

Messaggio da freax »

414N ha scritto:Occhio che quello non mi sembra un file diff prodotto da diff, quanto un file diff prodotto da git-diff (o simile).
Quindi può darsi che patch non riesca ad applicarlo senza qualche modifica.
Si tratta poi di tranciare le righe "descrittive", tipo

Codice: Seleziona tutto

Index: contrib/dev/ath/ah.h
===================================================================
RCS file: /cvsroot/src/sys/contrib/dev/ath/ah.h,v
retrieving revision 1.4
diff -u -r1.4 ah.h
ho provato a lanciare il comando

Codice: Seleziona tutto

patch < ath_eee.diff
sia nella directory con i driver atheros nei sorgenti del kernel , sia nella home , mi viene chiesto a quali file applicare la patch ... bella domanda , come faccio a capirlo ?

come capisco quali linee togliere per fare come dici te ?

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2924
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: Come si patcha con un file .diff ?

Messaggio da 414N »

freax ha scritto: ho provato a lanciare il comando

Codice: Seleziona tutto

patch < ath_eee.diff
sia nella directory con i driver atheros nei sorgenti del kernel , sia nella home , mi viene chiesto a quali file applicare la patch ... bella domanda , come faccio a capirlo ?

come capisco quali linee togliere per fare come dici te ?
Ti sei dimenticato di specificare la profondità del percorso dei file. Mi spiego meglio:
i file da modificare nei file diff sono specificati tramite un percorso che, a seconda delle esigenze (leggi "di dove sei te con la shell"), può essere tranciato a piacimento con l'opzione -pN, dove N è il numero di componenti del percorso da affettare a mo' di mortadella :p .
Tocciando dal file incriminato:

Codice: Seleziona tutto

--- contrib/dev/ath/ah.h	5 Jun 2006 05:14:38 -0000	1.4
+++ contrib/dev/ath/ah.h	4 Jan 2008 13:02:58 -0000
queste due righe dicono a patch di andare a modificare il file contrib/dev/ath/ah.h, relativamente al path corrente nel quale hai lanciato patch.
Supponendo che tu sia in /usr/src/linux (so che sei su BSD, ma è per fare un esempio), specificando

Codice: Seleziona tutto

patch -p0 ... 
patch cercherà il file /usr/src/linux/contrib/dev/ath/ah.h e lo modificherà come specificato nel seguito.
Se specifichi, invece,

Codice: Seleziona tutto

patch -p1 ... 
il file cercato da patch sarà /usr/src/linux/dev/ath/ah.h, ovvero verrà eliminato il primo componente del path specificato nel file diff.
Per poter applicare una patch (di tipo diff), devi innanzitutto sapere dove si trovano i file interessati. Comincia a cercare il file ah.h e/o la directory ath (non so se su BSD sia disponibile il find che usiamo su Linux...) per capire dove dovrai piazzarti per applicare la patch.
Venendo al discorso delle righe "superflue", il problema è dovuto al fatto che il diff che è lì è un diff prodotto da CVS (mi correggo ora, non era git), che patch molto probabilmente non riuscirà a gestire (c'è della fuffa in più che non si aspetta).
Prova a vedere se riesci a trovare lo script Python nel pacchetto "Ethereal" del quale si parla in questa pagina creato proprio per convertire diff di cvs in diff "lisci".

Rispondi