Kaynak paketinde değişiklik

İçindekiler

4.3.1. Kütüphaneleri değiştirmek

Normal olarak programlar kendilerini /usr/local dizini altındaki dizinlere yükler. Fakat, bu kısım sistem yöneticilerinin (veya kullanıcıların) özel kullanımlarına ayrıldığı için, Debian paketleri bu dizini kullanmamalıdır. Bu da paketin derlenme sistemine, genel olarak da Makefile ile başlayarak bakmak demektir. Makefile, programın derlenmesini ve kurulmasını otomatikleştirecek bir make(1) betiğidir. Makefile ile ilgili daha ayrıntılı bilgi için rules dosyası bölümüne bakınız.

Eğer programınız GNU automake(1) ve/veya autoconf(1) kullanıyorsa, ki bu da kaynak paketinin Makefile.am ve/veya Makefile.in dosyalarını içermesi demektir, sırasıyla, bu dosyaları değiştirmeniz gerekir. Bunun sebebi, her bir automake çağrımının Makefile.am dosyasında üretilen bilgilerin Makefile.in dosyasına tekrar yazılmasını, her bir ./configure çağrımının da Makefile.in dosyalarında üretilen bilgi ile benzer işlemi Makefile dosyasıda gerçekleştirecek olmasıdır. Makefile.am dosyasını düzenlemek biraz yöntemleri vardır; çalıştırılabilirler $PATH'e eklenir, ayrıca belgeleri ve kılavuz sayfalarını da yaygın kullanılan yerlerde bulursunuz. Yine de, bu şekilde yaptığınız zaman, programınız sisteminizde var olan herşeyin arasına yüklenecektir. Bu da paketleme araçlarını zora sokacak ve hangi dosyalar pakete ait hangileri değil tespiti zorlaşacaktır.

Bunun için farklı bir şeyler yapmalısınız: programı, paketleme araçlarının çalışan bir .deb paketi yapabileceği bir geçici alt dizine kurun. Bir kullanıcının bu paketi kurmak istemesi durumunda, bu dizinin içerdiği herşey sistemine kurulacaktır, tek farkla ki, dpkg dosyaları geçici alt dizine değil kök dizin altına kuruyor olacaktır.

Bu geçici dizin kaynak dizin hiyerarşisi içinde, debian/ dizini olarak oluşturulur. Genelde debian/tmp veya debian/paketadı olarak isimlendirilir.

Program kurulumunu debian/paketadı içine yüklenmiş şekilde yapmanız gerekse de, kök dizin altına yerleştirilince de düzgün çalışması gerekmektedir, örn. bir .deb paketinden kurulum yaparken. Bu bakımdan paket dosyalarına derleme sisteminin /home/me/deb/gentoo-0.9.12/usr/share/gentoo gibi dizgeyi uygulamasına izin vermemelisiniz.

GNU autoconf'u kullanan programlarla bu biraz daha kolay olacaktır. Böyle programların çoğu, Örneğin /usr gibi belli bir öneki uhdesinde tutarken, kurulumun rasgele bir alt dizine yapılabilmesine imkan veren öntanımlı bir yapılandırma sistemine sahip Makefile dosyaları içeririrler. dh_make, programınızın autoconf kullandığını saptarsa, komutları bunu otomatik olarak yapması için ayarlayacaktır. Böylece, bu bölümün devamını okumadan geçebileceksiniz. Fakat diğer program türleri için Makefile dosyalarını incelemeniz ve gereken düzenlemeleri kendiniz yapmanız gerekecektir.

İşte gentoo'nun Makefile dosyasının ilgili kısmı:

# Where to put binary on 'make install'?
# 'make install' çalıştırılabilirleri nereye koyacak?
BIN     = /usr/local/bin

# Where to put icons on 'make install'?
# 'make install' simgeleri nereye koyacak?
ICONS   = /usr/local/share/gentoo

Dosyaların /usr/local altına yükleneceğini görüyoruz. Bu yolları şu şekilde değiştirin:

# Where to put binary on 'make install'?
BIN     = $(DESTDIR)/usr/bin

# Where to put icons on 'make install'?
ICONS   = $(DESTDIR)/usr/share/gentoo

Fakat neden bu dizin de bir başkası değil? Çünkü Debian paketleri dosyalarını asla /usr/local altına yüklemez - bu hiyerarşi sistem yöneticileri için ayrılmıştır. Bunun yerine, bu tür dosyalar Debian sistemlerinde /usr altına gider.

İkilikler, simgeler, belgelendirme, v.b. ile ilgili daha kesin yerleştirme bilgisi Dosyasistemi Hiyerarşisi Standardında (Filesystem Hierarchy Standard) belirtilmiştir. Size /usr/share/doc/debian-policy/fhs/ dizinindekileri okumanızı ve paketinizle ilgili kısımları incelemenizi tavsiye ederim.

O halde, ikilik dosyayı /usr/local/bin yerine /usr/bin'e, kılavuz sayfalarını /usr/local/man/man1 yerine /usr/share/man/man1'e, v.s. yüklemeliyiz. gentoo'nun makefile'ında bir kılavuz sayfası belirtilmediğini hatırlayın, fakat Debian Politika Kılavuzu her programın bir kılavuz sayfası olmasını gerektirdiğinden, ilerde bir tane yapıp /usr/share/man/man1 altına koyacağız.

Bazı programlar bu tür yolları belirtmek için makefile değişkenlerini kullanmaz. Bu da doğru yerleşimleri kullanmaları için asıl C kodunu düzenlemek zorunda kalacağınız anlamına gelir. Fakat nereyi araştıracaksınız, tam olarak ne için? Bunu aşağıdakini uygulayarak öğrenebilirsiniz:

grep -nr -e 'usr/local/lib' --include='*.[c|h]' .

Grep kaynak ağacında özyinelemeli olarak çalışacak ve arananla ilgili bir oluşum olduğunda size dosya adını ve satırı söyleyecektir.

Şu dosyaları düzenleyiniz ve /usr/local/* satırlarını usr/* ile değiştirin. Kodun geri kalan kısmına zarar vermediğinizden emin olun. :-)

Bundan sonra hedef yükleme yerini bulmalısınız (install: ile başlayan satırı araştırın, genelde işe yarar) ve tüm başvuruları yukarında Makefile dosyasında olduğu gibi yeniden adlandırın. Önceden, gentoo'nun kurulum hedefi şu şekilde idi:

install: gentoo
        install ./gentoo $(BIN)
        install icons/* $(ICONS)
        install gentoorc-example $(HOME)/.gentoorc

Değiştirdikten sonra şu şekilde olur:

install: gentoo-target
        install -d $(BIN) $(ICONS) $(DESTDIR)/etc
        install ./gentoo $(BIN)
        install -m644 icons/* $(ICONS)
        install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc

Elbetteki farketmişsinizdir, artık kural setindeki diğerlerinden önce bir install -d komutu bulunmaktadır. Orjinal makefile bunu içermemektedir, çünkü genelde make install'ın çalıştırdığı bir sistemde /usr/local/bin ve diğer dizinler bulunmaktadır. Yine de, kendi boş (varolmayan) dizinimize kurduğumuz için, bu dizinlerin herbirini oluşturmamız gerekecektir.

Kural kümesinin sonuna bazı başka şeyler de ekleyebiliriz, üst düzey geliştiricinin bazen atlatığı ek belgelendirmenin kurulumu gibi.

        install -d $(DESTDIR)/usr/share/doc/gentoo/html
        cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html

Dikkatli bir okuyucu install: satırındaki gentoo'yu gentoo-target'e çevirdiğimi farketmiştir. Buna ilişkisiz hata onarımı (unrelated bug fix) denir :-).

Her ne zaman Debian paketiyle ilgili bir değişiklik yaparsanız, üst düzey geliştiriciye de de bunu yollamayı unutmayın ki böylece programın yeni sürümünde yer alarak herkese faydalı olabilsin. Ayrıca, göndermeden önce yapacağınız düzeltmeleri sadece Debian ya da Linux'a (ve hatta Unix'e!) özgün olmaması gerektiğini unutmayın - onları taşınabilir yapın. Bu da düzeltmelerinizin uygulanması kolaylaştırır.

debian/* dosyalarını göndermeniz gerekmemektedir.