Birçok Linux kullanıcısı patch'i çekirdek kodunu yamamak
için kullanır. Bunun için en kolay yol bir kabuk betiği olan
patch-kernel'i kullanmaktır. Bu betik çekirdeğin kaynak
kod dizini içinde scripts adlı altdizinde bulunur. Bu
betik Nick Holloway tarafindan 1995 yılında yazılmıştır. Birkaç yıl sonra
Adam Sulmicki bu betiğe bazı sıkıştırma algoritmaları desteğini eklemiştir.
Bunlar *.bz, *.bz2, compress, gzip ve normal metindir.
Bu betik sizin /usr/src/linux dizini içinde bulunduğunuzu
ve yamanızında bu dizinde olduğunu varsayar. Bu iki değeri komut satırında
patch-kernel [ kaynakdizini [yamadizini] ]
yazarak
değiştirebilirsiniz. patch-kernel, herhangi bir yama
başarısız olursa durur. Fakat eğer yama başarılı olursa find
komutunu çalıştırır ve bütün *.orig dosyalarını siler.
Eğer komutların çıktılarını görmek veya *.orig dosyalarını
saklamak istiyorsaniz patch komutunu doğrudan
uygulayabilirsiniz. Bu yöntem ben de dahil olmak üzere birçok kişi tarafından
daha güvenilir bulunuyor. Sıkıştırılmış yamayı açmadan uygulamak için aşağıdaki
borulama (pipe) kullanılabilir:
# gzip -cd patchXX.gz | patch -p1
veya
# bzip2 -dc patchXX.bz2 | patch -p1
Yama uygulandıktan sonra işlemin uygulanamadığı dosyaları bulmak için
find komutu aşağıdaki şekilde kullanılır.
Eğer find, *.rej dosyasını bulursa ismini ekrana basar.
Eğer find birşey bulamazsa yama doğru olarak uygulanmış demektir. Bir başka
işlem *.orig dosyalarını bulmak ve silmektir. Bunun için
find'i aşağıdaki şekilde kullanabiliriz:
# find . -name *.orig -print0 | xargs -0r rm -f
Eğer bu komutu her seferinde elle yazmak istemezseniz
.bash_profile, .bash_login veya .profile
dosyasına aşağıdaki şekilde bir alias ekleyebilirsiniz:
alias origbul="find .-name *.orig -print0 | xargs -0r rm -f"
Bu size origbul yazarak yukarıdaki komutu çalıştırmanızı
sağlar. Sistemden çıkmadan bu komutu çalıştırmanız için:
yazmanız yeterlidir.
Şimdi bu anlattıklarımıza örnek olması amacı ile
linux_dvd_2_2_12_diff.patch adlı yamayı uygulayalım ve
sonra bu yamayı kaldıralım:
# cd /usr/src/linux
# patch -p1 < linux_dvd_2.2.12_diff.patch
patching file drivers/block/ide-cd.c
Hunk #1 succeeded at 2097 (offset 10 lines).
Hunk #2 succeeded at 2631 (offset 2 lines).
patching file drivers/block/ide-cd.h
Hunk #2 succeeded at 666 (offset 4 lines).
Hunk #4 succeeded at 793 (offset 4 lines).
patching file include/linux/cdrom.h
# find . -name *.rej => (ekrana birşey basılmazsa işlem başarı ile tamamlanmış)
# find . -name *.orig
./drivers/block/ide-cd.c.orig
./drivers/block/ide-cd.h.orig => (yamanmış dosyaların orijinalleri)
# find . -name *.orig -print0 | xargs -0r rm -f => (bu dosyaları silmek için)
veya eğer yukarıdaki alias'ı tanımlamışsak:
Buraya kadar olan komutlar ile çekirdeği yamama işlemimiz bitiyor. Şimdi
bu yamayı kaldıralım:
# patch -p1 -R < linux_dvd_2_2_12_diff.patch
patching file drivers/block/ide-cd.c
Hunk #1 succeeded at 2097 (offset 10 lines).
Hunk #2 succeeded at 2308 (offset 2 lines).
patching file drivers/block/ide-cd.h.
Hunk #2 succeeded at 663 (offset 4 lines).
Hunk #4 succeeded at 784 (offset 4 lines).
patching file include/linux/cdrom.h.
# find . -name *.rej
# origbul
Böylece uygulamış olduğumuz yamayı kaldırmış olduk.