Kylix
Önceki Delphi'nin Linux'taki Kardeşi

Kylix İpuçları V1.1 Ağustos 2003
Tanju Taşçılar - tanju@elektronist.com
Registered Linux User #283274

Kylix Programlarını Dağıtmak.

Bir Linux programının çalışırken gerek duyduğu .so dosyalarının listesini ldd komutu ile görebiliriz.

   ldd program_adı

Bunun ardından programın kullandığı .so dosyaları listelenir. Bulunan dosyalar bulundukları yer belirtilerek gösterilirken bulunamayanlar için hata görüntülenir.

Kylix yüklü bir sistemde bir Kylix programının çalışması için gerekli olan .so dosyalarını Kylix'in yüklediği yerden kullanabiliyorduk. Kylix yüklü olmayan bir sistemde bunların dağıtım paketine eklenmesi gerekecektir. Eklenecek dosyaların hangi dosyalar olduğunu bulundukları yeri inceleyerek belirleyebiliriz.

Örnek olarak icpinsP programının kullandığı dosyalar aşağıdaki gibidir. (Bu liste LD_LIBRARY_PATH değişkeni /home/user_name/Kylix/bin dizinini de kapsayacak şekilde değiştirildikten sonra alınmıştır.)

   /lib/libNoVersion.so.1 => /lib/libNoVersion.so.1 (0x40016000)
   libqtintf-6.5-qt2.3.so => /home/user_name/Kylix/bin/libqtintf-6.5-qt2.3.so (0x40018000)
   libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x401c8000)
   libpthread.so.0 => /lib/libpthread.so.0 (0x40290000)
   libdl.so.2 => /lib/libdl.so.2 (0x402a6000)
   libc.so.6 => /lib/libc.so.6 (0x402a9000)
   libqt.so.2 => /home/user_name/Kylix/bin/libqt.so.2 (0x403e5000)
   /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
   libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40a97000)
   libm.so.6 => /lib/libm.so.6 (0x40aa6000)
   libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x40ac9000)
   libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x40ad2000)
   libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x40ae9000)
   libstdc++-libc6.1-1.so.2 => /usr/lib/libstdc++-libc6.1-1.so.2 (0x40b0a000)

Liste incelendiğinde dosyaların

   /lib
   /usr/lib
   /usr/X11R6/lib
   /home/user_name/Kylix/bin

dizinlerinde olduğunu görürüz. İlk iki dizin sistemin kendi dizinleri, üçünüsü olan /usr/X11R6/lib dizini /etc/ld.so.config dosyasında belirtilirken sonuncusu olan /home/user_name/Kylix/bin dizini Kylix'in dizinidir. Bu dizinde bulunan dosyalar Kylix ile kurulan dosyalar olduğu için, Kylix kurulu olmayan bir sistemde bulunmazlar ve program ile birlikte dağıtılmaları gereklidir. Örneğimizde libqtintf-6.5-qt2.3.so ve libqt.so.2 dosyaları dağıtıma eklenmelidir.

Programın ihtiyaç duyduğu ve sistem dizinlerinde bulunmuş olan dosyalara gelince; bunların da incelenmesi ve dağıtılan program için gerekli olduklarının bir şekilde kullanıcıya bildirilmesi gerekmektedir. Sisteme bu dosyaların paketler içinde kurulduğunu düşünürsek son kullanıcıya bu dosyaların içinde bulunduğu paketleri bildirerek, kurulu değiller ise kurulmalarını istemeliyiz.

Yukardaki örneğimizde kullanılması gereken paketler şunlardır.

   glibc-2.2.4
   XFree86-libs-4.2.0
   libstdc++2.10
   libjpeg62

Listede bulunan dosyaların hangi rpm paketine ait olduğunu bulmak için

   rpm -qf dosya_adı

komutunu kullanabiliriz.

Son kullanıcıya adı geçen paketlerin sistemlerinde kurulu olmasını bir 'okubeni' dosyası ile bildirebiliriz.

Bütün bunları tamamladıktan sonra öncelikle durumun doğruluğunu sınamalıyız. Bunun için Kylix ile gelen ve dağıtıma eklenmesi gereken dosyaları Kylix'in kurduğu yerden değil de dağıtım yapılmış gibi kurulacakları yerden çalıştırılmalarını görmemiz gerekir.

Deneme için programın kurulacağı bir dizin yaratırız ve buraya Kylix programını ve dağıtılacak .so dosyalarını kopyalarız. Son olarak da LD_LIBRARY_PATH değişkenini bu dizini de kapsayacak şekilde değiştiren ve programı çalıştıran bir script yazar ve programı bu script aracalığı ile çalıştırırız.

Dikkat...

Burada belirtilmesi gereken önemli bir nokta vardır. Linux'ta dosyalara dolaylı erişimi sağlayan link'ler bulunur. Linkler normal olarak işimizi kolaylaştırırken burada zorlaştırırlar. Yukarda dağıtımda bulunması gereken dosyaları libqtintf-6.5-qt2.3.so ve libqt.so.2 olarak belirtmiştik. Kylix programı bu isimli dosyaları aramakla birlikte sistemde bu isimli dosyalar birer linktir ve

   libqtintf-6.5-qt2.3.so -> libqtintf-6.5.0-qt2.3.so
   libqt.so.2 -> libqt.so.2.3.0

dosyalarını gösterirler. Bu durumda iki yol izleyebiliriz. Ya linkleri ve dosyaları birlikte kullanırız veya dosyaların isimlerini linklerde belirtilen isimlerle değiştiririz.

/home/user_name/KylixPrg/icpins dizinini oluşturup icpinsP programını ve dağıtımda verilecek .so dosyalarını bu dizine kopyalayalım. .so dosyalarının isimlerini link isimleri ile değiştirelim. Daha sonra bu duruma uygun olan aşağıdaki scripti yazalım.

   #!/bin/bash

   export LD_LIBRARY_PATH=/home/user_name/KylixPrg/icpins:$LD_LIBRARY_PATH
   /home/user_name/KylixPrg/icpins/icpinsP -ns

Yazdığımız scripti 'çalıştırılabilir' yapmayı unutmayalım. Script çalıştırıldığında eğer bir hata yapmamışsak veya eksik birşey bırakmamışsak programımız da çalışacaktır. Böylece kurulu bulunan Kylix dizinine gerek kalmadan programımızı çalıştırmış olduk.

Aynı işlemi başka bir sistemde de yapaptığımızda programımızı dağıtmış oluruz. Böyle bir dağıtım şekli için .tar.gz dosyaları uygundur. Programı ve gerekli dosyaları paketleyip kullanıcıya veririz. Ancak bu durumda son kullanıcının bizim yazdığımız scripti kendi yerleştirdiği dizine göre değiştirmesi gerekecektir. Böyle yaptığımızda da Linux karşıtlarının bize kıs kıs güldüğünü hissedebiliriz. Son kullanıcıya kolayca uygulayabileceği bir yöntem sunmalıyız. Kolay bir yöntem olarak son kullanıcının bir dizin oluşturmasını ve verdiğmiz .tar.gz dosyasını buraya açmasını ve burada bir scripti çalıştırmasını isteyebiliriz. Her Linux kullanıcısı bunu kolayca yapabilir. Yazacağımız script programımızın çalışmasını sağlayan scripti oluşturan bir script olacaktır. Aşağıdaki script bu işi basitçe hallediyor. Bu script GPL lisansı ile dağıtılan icpinsP programı için yazılmıştır.

   #!/bin/bash

   # This program is lisansed under GNU GPL. CopyRight(C) 2003
   # This file distributed without any expressed or implied WARRANTY
   # Written by Tanju TAŞÇILAR
   #
   # Bu program Tanju TAŞÇILAR tarafından yazılmıştır. GNU GPL lisansına uygun
   # olmak şartı ile programın yazarının isim hakkı korunarak
   # istenildiği gibi tekrar düzenlenip serbestçe dağıtılabilir.
   #
   #  Version 1.0 - Ocak 2003
   #
   # Bu program bir Kylix programının dağıtımında veya Kylix IDE dışında kullanımında
   # çalışmasını sağlamak üzere bir Bash Script'i oluşturur.
   #
   # Bunun için iki şartın yerine getirilmesi gereklidir. Bu iki şart yerine getirilmediği
   # durumda sonuç istenilen gibi olmayacaktır.
   #
   # 1 - Bu scriptin çalıştıracağı Kylix programının kurulacağı sistemde olmayan
   #     ve çalışması için gerekli bulunan bütün .so dosyalarının ve programın
   #     kendisinin aynı dizinde bu script ile birlikte
   #     eksiksiz olarak bulunması gerekmektedir.
   #
   # 2 - Bu script pwd komutunu kullanmaktadır ve bu yüzden bir konsoldan ve
   #     yukarda bahsedilen dizin seçilmiş olarak çalıştırılmalıdır.
   #
   # Bu script çalıştırıldığında oluşturulan Bash Script'i kullanılarak KDE veya Gnome'da
   # üzerine tıklayarak istenilen Kylix programı çalıştırılır.
   #


   echo '#'!/bin/bash > icp
   echo >> icp
   echo export LD_LIBRARY_PATH=$(pwd):'$'LD_LIBRARY_PATH >> icp
   echo $(pwd)/icpinsP -ns >> icp
   chmod a+x icp

Sriptin içinde de anlatıldığı gibi, bir konsoldan, program ve dosyaların bulunduğu dizine gelinerek çalıştırılması sonucunda icpinsP programının çalıştırıldığı icp adlı script oluşturulur. icp scripti yine yukardaki kurulum scripti içinde çalıştırılabilir özelliklerine de sahip olmaktadır. Son kullanıcı bu işlemleri kolayca yapar ve icp scriptini kullanarak programı çalıştırabilr.

Şüphesiz burada kullanılan yöntem bu iş için tek yöntem değildir. Yine de herkesin kolayca anlayıp kullanabileceği bir yöntemdir.

Kylix3 Farkı:

Yukarda anlatılanlar Kylix3 için uygulandığında bazı gariplikler olduğu görülür. İlginç bir şekilde Kylix3 programları ldd komutu ile yalnızca sistemde bulunan Kylix dışı .so dosyalarını listelerler. KHexEdit (Onaltılı Düzenleyici) ile bir Kylix3 dosyasını inceleyip '.so' dizisini aradığımızda, sisteme ait .so dosyalarının sonrasında Kylix'e ait .so dosyalarının isimlerini buluruz. Kullanım kılavuzunun derinlerinde bir yerde de dağıtılacak dosyaların isimleri verilmekte. Bunlar:

   libborqt-6.9-qt2.3.so -> libborqt-6.9.0-qt2.3.so
   libqtintf-6.9-qt2.3.so -> libqtintf-6.9.0-qt2.3.so
   libqt.so.2 -> libqt.so.2.3.0

dosyalarıdır. Ancak bunların hepsi birden gerekmiyor. Yalnızca birinciyi veya diğer ikisini dağıtmak yetiyor. Kylix3 programları dağıtılırken eğer kullanılıyorlarsa, bunlar da pakete eklenmelidir.

Kylix3 programını derlerken Project->Options sayfasında 'Build with runtime packages' yanındaki kutu işaretlenirse oluşan çalıştırılabilir dosya boyutu büyük ölçüde azalıyor. Ancak bu durumda libborqt-6.9-qt2.3.so dosyasının yanında

   bplrtl.so.6.9
   bplvisualclx.so.6.9

dosyalarının da dağıtıma eklenmesi gerekiyor. Örnek olarak icpins programını alırsak, büyük boyut yaklaşık 912 KB iken küçük boyut 99 KB kadardır.


Önceki Ön sayfa
Kylix programlarını IDE dışında çalıştırmak.

Bu ve ilişkilendirilmiş yazılar GPL lisansına göre yayınlanmaktadır. Bütün hakları yazarına aittir. Yazarının ismi belirtilerek serbestçe dağıtılabilir ve kullanılabilir. Ancak bunların hiçbiri, hiçbir şekilde ve şartta GPL lisansı haricinde kullanılamaz. Burada yer alanları bulundurmaktan, kullanmaktan veya alıntı yapmaktan dolayı hiçbir sunucu, servis veya protokol, yazı veya içeriği üzerinde hak iddia edemez. info@elektronist.com