Nasıl Yaparsınız

Diyelim ki, eğitici bir GPL’d programı indirdik ve değiştirmeyi istediğimiz ve değişiklikleri bakımcıya göndereceğimiz kaynağa karar verdik. Biz, hello world programını örnek olarak kullanacağız. Bu programın 1.0 versiyonu üzerinde çalışacağız. gzip ile sıkıştırılmış tar şeklindeki helloworld-1.0.tar.gz dosyasını indirip onu açtığımız taktirde helloworld-1.0/ adlı dizini ve onun içinde helloworld.c adlı kaynak dosyasını bulacağız. Bu dosyanın içeriği şu şekildedir:

Asıl (helloworld-1.0/helloworld.c):

#include <stdio.h>  

int main(void)
{     
	prinf("Hello World!\n");     
	return(0); 
}

İlk adım olarak değiştireceğimiz kaynak kodu kopyalıyoruz:

cp -R helloworld-1.0/ helloworld-1.0.new/

Daha sonra, helloworld-1.0.new dizinindeki helloworld.c kopyasını değiştireceksiniz.

Düzenlenmiş (helloworld-1.0.new/helloworld.c):

#include <stdio.h>  

int main(void) 
{     
	printf("Hello World and little green visitors!\n")     
	return(0); 
}

Daha sonraki adım (yazılımdaki değişiklikleri test ettikten sonra) yama dosyası oluşturmak için diff kullanmaktır. Böylelikle değişiklikler dağıtılabilir. Yama dosyasını oluştururken, diff komutunu ‘urN’ bayrakları ile çağırırız. diff man sayfasına göre, bu bayrakların anlamı aşağıdaki gibidir:

-u
Birleşik çıktı formatını kullanma

-r
Dizinleri karşılaştırırken, bulunan her altdizini özyinelemeli olarak karşılaştırır.

-N veya --new-file
Dizin karşılaştırmasında, eğer bir dosya yalnızca bir dizinde bulunuyorsa, diğer dizinlerde var ama boş gibi davran.

Gördüğünüz gibi bu bayrakların kullanımıyla, dizin çiftlerinin altındaki tüm dosyaların özyinelemeli karşılaştırılmasına diff komutuyla imkan verilecektir. Varsayalım herhangi yeni dosya, gerekli eklemeler yapıldığında ve tek bir yama dosyası üretildiğinde hesaba katılmalıdır. Örneğimiz için çalıştırmak isteyeceğimiz komut şu şekildedir:

diff -urN helloworld-1.0/ helloworld-1.0.new/ > helloworld.patch

Bu komut, aşağıdaki içeriğe sahip bir yama dosyası üretecektir:

diff -urN helloworld-1.0/helloworld.c helloworld-1.0.new/helloworld.c 
--- helloworld-1.0/helloworld.c Sat Feb 19 13:11:35 2000 
+++ helloworld-1.0.new/helloworld.c     Sat Feb 19 13:11:12 2000 
@@ -2,6 +2,6 @@    

int main(void)  
 { 
-       prinf("Hello World!\n"); 
+       prinf("Hello World and little green visitors!\n");
	return(0);  
 }

Yamanın şekli belirgindir. Detay isterseniz, yama yardımcı programı kaynak koduna başvurabilirsiniz.

Daha sonra yama; paketlenerek bakımcıya e-mail ile gönderilebilir, Linux Kernel Mailing List gibi bir mail listesine yollanabilir ya da başkalarının onu indirebilmesi için web veya ftp sitesine gönderilebilir.

Yama daha sonra indirilebilir ve aşağıdaki komut ile kodun asıl sürümüne uygulanabilir:

patch -p0 < helloworld.patch

Burada 'p0' bayrağı ile patch komutuna helloworld-1.0/ dizininin sistemimizde, yamanın oluşturulduğu sistemdeki yamanın oluşturulduğu dizin ile aynı yerde oluğunu söylüyoruz. Veya daha basit ifade edersek, helloworld-1.0/ dizini, yama ile birlikte bizim şu anda çalışan dizinimizdedir. patch komutunun man sayfasında p bayrağı ve hangi yol konumunda çalıştığı ile ilgili ek bilgiler vardır.

Hepsi bu kadar. Şimdi birkaç GPL lisanslı yazılımı indirip, bazı yazılım hatalarını düzeltin, yamalar oluşturun ve bunları bakımcılara gönderin.