original in de Mario M. Knopf
en to tr ONUR YILMAZ
Mario Linux, network ve güvenlikle ilgili konularla çalışmayı sever.
Test etmek istediğimiz bir program sadece tar.gz kaynak kodu olarak mevcuttur (rpm yada Debian paketi olarak değil) ve bu sık karşılaşılan bir durumdur. Bu gibi bir durumda, kaynak paketini indirirsiniz, onu açarsınız ve elle derlersiniz. Buraya kadar her şey yolunda. Fakat programı silmek isterseniz ne olur?
Programı kaldırmak için Makefile sadece birkaç durumda uygun yordam(routine) içerir. Tabii programı geçici bir dizine kurmak ve sonraki bir kaldırma için kurulum tarafından yaratılmış yada değiştirilmiş tüm dosyaları kağıda dökmek olasılığı da vardır. Eğer programlar sıklıkla kaynaklardan derleniyorsa, bu acı verici ve uzun bir süreçtir. CheckInstall aracı ( [1] Felipe Eduardo Sánchez Díaz Durán tarafından yazılan) bu problemi çözer.
Kural olarak GNU Autoconf uyumlu programı, yaygın olarak
bilinen bir komut sırası altında derler ve kurarsınız.
./configure && make && make
install.
configure kabuk betiği çeşitli sistem-bağımlı değişkenler
için doğru değerleri tahmin etmeye çalışır. Bu değerler daha sonra
derleme sırasında kullanılır. configure derleme için gerekenlerin
tamamlanıp tamalanmadığını kontrol eder ve tahmin ettiği değerleri paketin
her dizininde Makefile yaratmak için kullanır. Bunun dışında
configure betiği ilave dosyalar üretir. Özet olarak bunlar:
configure betiği tamamlandıktan sonra, paketi derlemek için make yazarsınız. Bu çalıştırılabilir binary(ikilik düzende) dosyaları üretir. make'in hemen ardından make check ile kendi testlerini(kontrollerini) çalıştırma olasılığı da vardır. Fakat bu isteğe bağlı bir adımdır; çünki paket bu işlemi desteklemelidir. Eğer make işini gerçekleştirirse, make install komutuyla derlenmiş olan programınızı kurabilirsiniz. -bu adım için imtiyazlı kullanıcı haklarına sahip olmanız gerekecek. (root olmalısınız) Program başarılı bir şekilde kurulduktan sonra, programın binary ve nesne dosyalarını kaynak kodu dizininden make clean yazarak silebilirsiniz. Eğer configure tarafından yaratılmış dosyaları da silmek isterseniz, make distclean yazın. Fakat son anlattığım iki adım make check gibi seçmeli ve normalde geliştirme ve test sırasında geliştirici tarafından kullanılıyor. Aynı zamanda hard disk kapasitesini tasarruflu kullanmak isteyen yada dizin yapısını temiz tutmak isteyen kullanıcı tarafından da kullanılabilir. Bunun dışında make distclean, paketi bir başka bilgisayar için derlemeyi, mümkün hale getirir.
GNU Autoconf hakkında detaylı bilgi Online-Manual(elkitabı)'da bulunabilir. [2]. Temel başlangıç bilgilerinin yanısıra, kendi configure betiklerini yapma, M4 'te programlama ve kendi makrolarınızı yaratma konularıyla GNU Build System (GNU Sistem Yapısı) hakkında daha fazlasını öğrenebilirsiniz.
Daha önce de belirttiğim gibi, kaynak kodundan GNU Autoconf uyumlu program kurmak için komut sırası şuydu:
./configure && make && make install
Bu noktada CheckInstall kullanmanın zamanıdır. Bu make install 'u kendi komutu checkinstall ile değiştirmek anlamına gelir. Diğer iki komut bundan etkilenmiyor ve normal olarak eskisi gibi kullanılıyor. Bu yüzden CheckInstall ile yeni komut sırası şöyle:
./configure && make && checkinstall
Fakat checkinstall komutu yinede make install 'u öntanımlı olarak başlatır ve kurulum tarafından yapılan tüm yazma olaylarını izler. CheckInstall bunun için, ilk olarak Pancrazio de Mauro tarafından yazılmış olan, Installwatch [3] programını kullanır. make install başarıyla tamamlandıktan sonra, CheckInstall bir Slackware-, Debian- yada RPM-Paketi yaratır ve bu paketi öntanımlı paket yöneticisiyle kurar. Paketin bir kopyasını o anki kaynak dizininde yada standart depolama dizininde bırakır. Üstelik yapılandırma(konfigürasyon) dosyasındaki PAK_DIR değişkenini değiştirerek öntanımlı depolama dizini değiştirmek de mümkündür. Bu paket, olası paket bağımlılıkları düşünülerek, ağ içindeki diğer makinelere de kurulabilir. Böylece kaynak paketinden her seferinde tekrar tekrar derlememiş oluruz.
CheckInstall sadece make install 'dan yararlanmaz. Diğer kurulum komutlarıyla da çalışır. Örneğin; kurulum betiği setup.sh ise, komut takımı şöyle olur:
./configure && make && checkinstall setup.sh
CheckInstall 'u çeşitli seçeneklerle başlatma imkanı vardır. Sıradaki komut var olan tüm seçenekleri çeşitli alt bölümlere ( Install options, Scripting options, Info display options, Package tuning options, Cleanup options ve About CheckInstall ) ayrılmış olarak gösterir:
# checkinstall -h
Eğer CheckInstall bu seçeneklerden biriyle başlarsa, yapılandırma dosyasındaki (checkinstallrc) değerleri geçersiz kılacaktır.
Fakat CheckInstall 'unda limitleri var. Statik olarak bağlanmış programları işleyemez; çünki Installwatch kurulum süreci boyunca değişen olayları izleyemez. Genel olarak iki tip program kütüphanesi vardır: statik yada dinamik bağlı kütüphaneler. Bunlar include-talimatıyla programa tümleştirilir. Statik olarak bağlı programlar tüm gerekli kütüphane fonksiyonlarına sahiptirler ve çalıştırma esnasında bunları RAM'e yüklememelidirler. Ayrıca hedef sisteme gerçekten kurulan kütüphanelerden bağımsızdırlar. Çünki derleme esnasında bir sözde Linker(bağlayıcı) kütüphaneleri çalıştırılabilir programa gömmüştür.
CheckInstall zaten uzun bir süre için büyük dağıtımların yazılım havuzlarının bir parçasıdır ve kendi paket yönetim sistemiyle kurulabilir. Bunun dışında uygun tar paketlerini yada çeşitli dağıtımlar için önceden inşa edilmiş paketleri proje websitesinden indirebilirsiniz.[4]
CheckInstall 'un kurulumu oldukça basit ve birkaç adımda çalışıyor. -fakat başarılı bir CheckInstall kurulumu için paradoksal olarak CheckInstall 'a ihtiyacınız olacak. Zorunlu komut make install 'dan sonra checkinstall yazabilirsiniz. Bu derlenmiş programdan uygun çalıştırılabilir paketi yaratır. Şimdi bu paketi paket yöneticinizle kurabilirsiniz ve tabii ki programı temiz bir şekilde kaldırmak da mümkün hale gelir. Fakat CheckInstall paketi yaratmadan önce, kullandığınız paket yöneticisiyle ilgili bir soruya cevap vermelisiniz ve bilgi alanlarının doğruluğunu kontrol etmelisiniz. Onlar daha sonra paket başlığında görünüyor.
Yeni beta sürümünü( checkinstall-1.6.0beta4.tgz ) kurma yöntemi sıradaki kod kutusunda gösteriliyor. Bu CheckInstall, Installwatch ve makepak 'i (makepkg 'nin değiştirilmiş versiyonu) kuracak. Eğer yeni sürümdeki değişiklikleri merak ediyorsanız, Release Notes 'a [5] (sürüm notları) yada Changelog 'a [6] bir göz atın.
$ tar xzf checkinstall-1.6.0beta4.tgz $ cd checkinstall-1.6.0beta4 checkinstall-1.6.0beta4 $ make [...] checkinstall-1.6.0beta4 $ su Password: checkinstall-1.6.0beta4 # make install [...] checkinstall-1.6.0beta4 # checkinstall checkinstall 1.6.0beta4, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran This software is released under the GNU GPL. Please choose the packaging method you want to use. Slackware [S], RPM [R] or Debian [D]? R ************************************* *** RPM package creation selected *** ************************************* This package will be built according to these values: 1 - Summary: [ CheckInstall installations tracker, version 1.6.0beta4 ] 2 - Name: [ checkinstall ] 3 - Version: [ 1.6.0beta4 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ Applications/System ] 7 - Architecture: [ i386 ] 8 - Source location: [ checkinstall-1.6.0beta4 ] 9 - Alternate source location: [ ] 10 - Provides: [ checkinstall ] 11 - Requires: [ ] Enter a number to change any of them or press ENTER to continue: Installing with make install... ========================= Installation results ========================= [...] ========================= Installation successful ====================== Copying documentation directory... ./ ./NLS_SUPPORT ./README ./FAQ ./TODO ./CREDITS ./INSTALL ./Changelog ./BUGS ./installwatch-0.7.0beta4/ ./installwatch-0.7.0beta4/README ./installwatch-0.7.0beta4/TODO ./installwatch-0.7.0beta4/VERSION ./installwatch-0.7.0beta4/INSTALL ./installwatch-0.7.0beta4/CHANGELOG ./installwatch-0.7.0beta4/BUGS ./installwatch-0.7.0beta4/COPYING ./RELNOTES ./COPYING Copying files to the temporary directory...OK Striping ELF binaries and libraries...OK Compressing man pages...OK Building file list...OK Building RPM package...OK NOTE: The package will not be installed Erasing temporary files...OK Writing backup package...OK Deleting temp dir...OK **************************************************************** Done. The new package has been saved to /usr/src/redhat/RPMS/i386/checkinstall-1.6.0beta4-1.i386.rpm You can install it in your system anytime using: rpm -i checkinstall-1.6.0beta4-1.i386.rpm **************************************************************** checkinstall-1.6.0beta4 # cd /usr/src/redhat/RPMS/i386/ i386 # rpm -i checkinstall-1.6.0beta4-1.i386.rpm i386 #
Debian tabanlı dağıtım kullanıcıları, paketi dpkg -i ile kurabilir. Slackware kullanıcıları bunun için installpkg 'yi kullanabilir.
Paket yöneticinizin sorgulama fonksiyonunu kullanarak, bu durumda RPM, paketin veritabanına doğru bir şekilde tümleşip tümleşmediğini öğrenebilir ve paket başlığının ek bilgi sahasını görüntüleyebilirsiniz.
$ rpm -qi checkinstall Name : checkinstall Relocations: (not relocatable) Version : 1.6.0beta4 Vendor : (none) Release : 1 Build Date : Mo 06 Dez 2004 17:05:45 CET Install Date: Di 07 Dez 2004 01:41:49 Build Host : deimos.neo5k.lan Group : Applications/System Source RPM : checkinstall-1.6.0beta4-1.src.rpm Size : 264621 License : GPL Signature : (none) Packager : checkinstall-1.6.0beta4 Summary : CheckInstall installations tracker, version 1.6.0beta4 Description : CheckInstall installations tracker, version 1.6.0beta4 CheckInstall keeps track of all the files created or modified by your installation script ("make install" "make install_modules", "setup", etc), builds a standard binary package and installs it in your system giving you the ability to uninstall it with your distribution's standard package management utilities.
İyi açıklamalı metin dosyasını ( /usr/lib/local/checkinstall/checkinstallrc ) CheckInstall 'un öntanımlı davranışını değiştirmek için oynayabilirsiniz.
CheckInstall her başlatılışta hangi paket tipini üreteceğini sorduğundan, bu değeri INSTYPE 'ı ayarlayarak kalıcı olarak eklemek akıllıca olacaktır. Ayrıca INSTALL, PAK_DIR ve RPM_FLAGS ( alternatif olarak DPKG_FLAGS ) değişkenlerine bakmak iyi bir fikir. Son iki değişkenle seçimlik kurulum noktaları belirleyebilirsiniz ve PAK_DIR 'ı değiştirerek paket kopyası için başka bir dizin belirtebilirsiniz. INSTALL size paketi yaratma ve/veya paketi kurma arasında karar verme imkanı sunar.
$ cat /usr/lib/local/checkinstall/checkinstallrc #################################################################### # CheckInstall configuration file # ######################################## #################################################################### # These are default settings for CheckInstall, modify them as you # # need. Remember that command line switches will override them. # #################################################################### # Debug level # 0: No debug # 1: Keep all temp files except the package's files # 2: Keep the package's files too DEBUG=0 # Location of the "installwatch" program INSTALLWATCH_PREFIX="/usr/local" INSTALLWATCH=${INSTALLWATCH_PREFIX}/bin/installwatch # Location of the makepkg program. "makepak" is the default, and is # included with checkinstall. If you want to use Slackware's native "makepkg" # then set this to "makepkg" MAKEPKG=/sbin/makepkg # makepkg optional flags. These are recommended if running a newer Slackware # version: "-l y -c n" MAKEPKG_FLAGS="-l y -c n" # Is MAKEPKG running interactively? If so, you might want # to see what it's doing: SHOW_MAKEPKG=0 # Where will we keep our temp files? BASE_TMP_DIR=/var/tmp ## Don't set this to /tmp or / !! # Where to place the installed document files DOC_DIR="" # Default architecture type (Leave it empty to allow auto-guessing) ARCHITECTURE="" # Default package type. Leave it empty to enable asking everytime # S : Slackware # R : RPM # D : Debian INSTYPE="R" # Storage directory for newly created packages # By default they will be stored at the default # location defined for the package type PAK_DIR="" # RPM optional flags RPM_FLAGS=" --force --nodeps --replacepkgs " # dpkg optional flags DPKG_FLAGS="" ## These are boolean. Set them to 1 or 0 # Interactively show the results of the install command (i.e. "make install")? # This is useful for interactive installation commands SHOW_INSTALL=1 # Show Slackware package installation script while it runs? Again, useful if # it's an interactive script SHOW_SLACK_INSTALL=0 # Automatic deletion of "doc-pak" upon termination? DEL_DOCPAK=1 # Automatic deletion of the spec file? DEL_SPEC=1 # Automatic deletion of "description-pak"? DEL_DESC=1 # Automatically strip all ELF binaries? STRIP_ELF=1 # Automatically strip all ELF shared libraries? # Note: this setting will automatically be set to "0" if STRIP_ELF=0 STRIP_SO_ELF=1 # Automatically search for shared libraries and add them to /etc/ld.so.conf? # This is experimental and could mess up your dynamic loader configuration. # Use it only if you know what you are doing. ADD_SO=0 # Automatically compress all man pages? COMPRESS_MAN=1 # Set the umask to this value CKUMASK=0022 # Backup files overwritten or modified by your install command? BACKUP=1 # Write a doinst.sh file that installs your description (Slackware)? AUTODOINST=1 # Are we going to use filesystem translation? TRANSLATE=1 # Reset the owner/group of all files to root.root? RESET_UIDS=0 # Use the new (8.1+) Slackware description file format? NEW_SLACK=1 # Comma delimited list of files/directories to be ignored EXCLUDE="" # Accept default values for all questions? ACCEPT_DEFAULT=0 # Use "-U" flag in rpm by default when installing a rpm package # This tells rpm to (U)pdate the package instead of (i)nstalling it. RPM_IU=U # Inspect the file list before creating the package CK_INSPECT=0 # Review the .spec file before creating a .rpm REVIEW_SPEC=0 # Review the control file before creating a .deb REVIEW_CONTROL=0 # Install the package or just create it? INSTALL=0
CheckInstall Linux yönetimini daha kolay yapmamızı sağlayan mükemmel bir araç. Özellikle programlar sık sık kaynaklarından derlenmeliyse CheckInstall size, sisteminizin kararlılığını bozmadan, programlarınızı temiz bir şekilde kaldırma imkanı verir. Bunun dışında oluşturulan bu paketleri başka makinalarada da tekrar tekrar derlemeye gerek kalmaksızın kurabilirsiniz. - tabii ki olası paket bağımlılıklarını düşünmek zorundasınız. Fakat bu genellikle özdeş makinalar için çok büyük problem değildir.
[1] http://asic-linux.com.mx/~izto/checkinstall/
[Home of CheckInstall]
[2] http://www.gnu.org/software/autoconf/manual/autoconf-2.57/autoconf.html
[GNU Autoconf Online Manual]
[3] http://asic-linux.com.mx/~izto/checkinstall/installwatch.html
[Installwatch]
[4] http://asic-linux.com.mx/~izto/checkinstall/download.php
[CheckInstall Downloads]
[5] http://asic-linux.com.mx/~izto/checkinstall/docs/RELNOTES
[Release Notes]
[6] http://asic-linux.com.mx/~izto/checkinstall/docs/Changelog
[Changelog]