11.07.2015 Views

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

Amministrare GNU/Linux - Cia

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

172 CAPITOLO 5. AMMINISTRAZIONE STRAORDINARIA DEL SISTEMACon il comando patch si può invece compiere l’operazione inversa, e cioè applicare ad un certofile le differenze ottenute con il metodo precedente, in modo da convertirlo nella nuova versione.La cosa può essere effettuata anche ricorsivamente, su un intero albero di file e directory. Cosìse chi dispone dei nuovi sorgenti del kernel 2.4.24 mantiene anche quelli della versione 2.4.23,potrà generare un patch delle differenze, che applicato a questi ultimi li trasformerà in quellidel 2.4.24. L’utilità dei patch è che in questo modo anche chi cura la manutenzione di ulteriorifunzionalità non presenti nei kernel ufficiali potrà limitarsi a distribuire il patch che contiene lerelative aggiunte e modifiche, così che un utente possa, se lo desidera, applicarle senza doverscaricare tutto un nuovo albero dei sorgenti.Il meccanismo è del tutto generale, ed inoltre il comando patch è sufficientemente intelligenteda essere in grado di applicare anche più patch distinti in successione, fintanto che questi nonandranno ad operare esattamente sulle stesse righe degli stessi file eseguendo modifiche incompatibilifra di loro. Così diventa possibile inserire nel kernel anche più funzionalità aggiuntive,fintanto che queste non interferiscono fra loro, o saltare da una versione di kernel ad un altrache non sia la successiva applicando in successione più patch.Come accennato il comando per applicare un patch è appunto patch. Nel caso più semplicein cui si deve operare su un singolo file la sintassi è immediata e si può eseguire il comando conun qualcosa del tipo:patch original patch.diffnel qual caso, a meno che non si sia specificata l’opzione -b (o --backup) per richiedere unbackup, la nuova versione prenderà il posto dell’originale.Quando però si ha a che fare con un patch che coinvolge più file (come quelli che si applicanoad un albero di sorgenti) i nomi dei file cui esso va applicato è riportato nel file stesso, e nondevono quindi essere specificati; inoltre in questo caso il comando leggerà il contenuto del patchdallo standard input, per cui occorrerà usare una redirezione.In questo caso per capire il funzionamento del comando occorre rifarsi all’esempio di patchmostrato in precedenza, il comando ricerca (a partire dalla directory corrente) il file che considerala vecchia versione e cerca di applicarvi le differenze. Il problema che molto spesso ci si trovadi fronte è che si ha a disposizione solo la versione di partenza e non quella di arrivo, adesempio si sono scompattati i sorgenti nella directory linux-2.4.23 ma non si ha la directorylinux-2.4.24. Per questo motivo di norma bisogna dire al comando, usando l’opzione -p, daquale livello di directory nell’albero dei sorgenti si vuole partire per applicare il patch. Il livello 0usa semplicemente quanto specificato nel patch stesso, ma nel caso appena illustrato questo nonfunzionerebbe, in quanto non si sarebbe in grado di trovare il file di destinazione, se però ci siponesse direttamente dentro la directory linux-2.4.23 cancellando il primo livello di directorytutti i pathname relativi sarebbero risolti; pertanto di norma per applicare un patch sui sorgentidel kernel quello che si fa è:cd /usr/src/linuxpatch -p1 < /path/to/patch/patch.diffSi tenga presente che se non si specifica un livello, il default di patch è di utilizzare solo il nomedel file, ignorando le directory presenti nel pathname relativo, per cui in genere l’applicazionefallirà. Se il comando non riesce ad applicare un patch (ad esempio perché se ne è già applicatouno incompatibile, o si è sbagliato file) genererà dei automaticamente dei file terminanti in .rejche contengono le modifiche che è stato impossibile effettuare. Inoltre patch è in grado dirilevare il caso in cui si prodotto il patch invertendo le versioni, nel qual caso avvisa richiedendoil permesso di applicare il patch alla rovescia; questo può essere richiesto esplicitamente conl’opzione -R (o --reverse). Si tenga presente però che se si tenta di applicare lo stesso patchuna seconda volta si avrà proprio questo comportamento, ma proseguire nell’applicazione non

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!