Truva Linux Geliştirici Kılavuzu

Truva Linux Wiki sitesinden
Atla: kullan, ara

Truva Linux Subversion Deposu

Truva Linux subversion deposu olarak Google Code hizmetini kullanmaktadır. Subversion deposuna sadece proje geliştiricileri ve diğer yetkisi olan kullanıcılar yazabilir. Normal kullanıcılar sadece okuma yetkisine sahiptir.


Google Code Proje Adresi

http://code.google.com/p/truvalinux/


Kaynak Kod Deposu Adresi

http://code.google.com/p/truvalinux/source/checkout


Svn depomuzu indirmek için aşağıdaki komutları uygulayabilirsiniz.

Geliştiriciler için

svn checkout https://truvalinux.googlecode.com/svn/trunk/ truvalinux --username kullanıcı_adı


Kullanıcılar için

svn checkout http://truvalinux.googlecode.com/svn/trunk/ truvalinux-read-only


Truva Linux Paketleri Hazırlamak

TruvaBuild Dosyası Hazırlamak

Bu başlık altında Truva Linux paketlerinin nasıl hazırlandığına dair ayrıntılı açıklamaları bulabileceksiniz. Böylece sizler de paket konusunda bize yardım edebileceksiniz.


Genel Bilgiler

Bu dokümanda Slackware Linux'ta kullanılan .SlackBuild dosyalarının Truva Linux Standartları anlatılmaktadır.

Truva Linux paketlerini hazırlamak için .TruvaBuild adını verdiğimiz dosyaları kullanıyoruz. Bu dosyaları rpm paketleri hazırlarken kullandığımız .spec dosyalarına benzetebiliriz. Build dosyası bildiğimiz kabuk programlama ile hazırlanmaktadır.

TruvaBuild dosyaları, bir paketin hazırlanabilmesi için gerekli bilgileri içermektedir. Örneğin program kaynak kod paketi tar.gz, tar.bz2, tgz veya rpm gibi dosya uzantısı ile programa ait bir web sitesinden veya yansısından indirilir. Eğer bir programa ait tar.bz2 dosyası varsa öncelikli olarak onu tercih edin. Çünkü daha yüksek sıkıştırma oranına sahiptir. Derleme ve ayar işlemleri yapılır. Ardından paket hazırlanıp TruvaBuild dosyasında belirtilen yerel paket deposuna test edilmek üzere otomatik olarak konur.


.TruvaBuild dosyasının genel yapısı

Aşağıda örnek bir .TruvaBuild dosyası görülmektedir. Biz bu örnek üzerinde paket yapımını açıklayacağız.

 #!/bin/sh

 NAMESRC=tvtime
 VERSION=1.0.2
 EXT=tar.gz
 ARCH=i486
 TARGET=i486
 BUILD=1
 REPO=/Truva-Repo/testing

 set -e -x

 if [ ! -r ${NAMESRC}-${VERSION}.$EXT ] ; then
     wget http://ovh.dl.sourceforge.net/sourceforge/tvtime/${NAMESRC}-${VERSION}.$EXT
 fi

 md5sum -c ${NAMESRC}-${VERSION}.$EXT.md5

 CWD=`pwd`
 if ["$TMP" = ""]; then
    TMP=/tmp
 fi

 PKG=$TMP/package-$NAMESRC

 if [ ! -d $TMP ]; then
    mkdir -p $TMP
 fi

 if [ ! -d $PKG ]; then
    mkdir -p $PKG
 fi

 if [ $EXT == tar.bz2 ]; then
    NAME=`tar jft $NAMESRC-$VERSION.tar.bz2 | head -1 | awk -F/ '{ print $1 }'`
 else
    NAME=`tar zft $NAMESRC-$VERSION.tar.gz | head -1 | awk -F/ '{ print $1 }'`
 fi

 if [ "$ARCH" = "i386" ]; then
    CPUOPT="-O2 -march=i386 -mcpu=i686"
 elif [ "$ARCH" = "i486" ]; then
    CPUOPT="-O2 -march=i486 -mcpu=i686"
 elif [ "$ARCH" = "s390" ]; then
    CPUOPT="-O2"
 elif [ "$ARCH" = "x86_64" ]; then
    CPUOPT="-O2"
 fi

 cd $TMP
 echo "Building $NAMESRC-$VERSION.$EXT..."
 if [ $EXT == tar.bz2 ]; then
    tar xjf $CWD/$NAMESRC-$VERSION.$EXT
 else
    tar xzf $CWD/$NAMESRC-$VERSION.$EXT
 fi

 cd $NAME
 CFLAGS=$CPUOPT \
 CXXFLAGS=$CPUOPT \
 ./configure --prefix=/usr \
             --sysconfdir=/etc \
             --enable-shared=yes \
             --enable-static=no \
             $TARGET-slackware-linux
 make
 make install DESTDIR=$PKG

 mkdir -p $PKG/usr/doc/$NAME
 install -m 644 \
  AUTHORS ChangeLog COPYING* INSTALL NEWS README \
  $PKG/usr/doc/$NAME
 mkdir -p $PKG/usr/doc/$NAME/html
 install -m 644 \
   docs/html/* \
   $PKG/usr/doc/$NAME/html

 mkdir -p $PKG/install
 cat $CWD/slack-desc > $PKG/install/slack-desc

 if [ -r $CWD/doinst.sh ] ; then
    cat $CWD/doinst.sh > $PKG/install/doinst.sh
 fi

 find $PKG/usr/man -type f | xargs gzip -9

 cd $PKG
 find . | xargs file | grep "ELF 32-bit LSB executable" | cut -f 1 -d : | xargs strip --strip-all

 cd $PKG
 if [ ! -d $REPO ]; then
    mkdir -p $REPO
 fi
 chown root:root . -R ;
 chown root:bin ./usr/bin -R ;
 makepkg -l y -c n $REPO/$NAMESRC-$VERSION-$ARCH-$BUILD.tgz ;

 if [ ! -f $TMP/$NAMESRC-$VERSION ]; then
    rm -rf $TMP/$NAMESRC-$VERSION
 fi

 if [ ! -f $PKG ]; then
    rm -rf $PKG
 fi


.TruvaBuild Dosyası Yapısının Ayrıntıları

#!/bin/sh

Bu kısım betiğin sh kabuğu ile çalıştırılacağını gösterir.


 NAMESRC=tvtime
 VERSION=1.0.2
 EXT=tar.gz
 ARCH=i486
 TARGET=i486
 BUILD=1
 REPO=/media/truva/Truva-Repo/repo/testing

Bu kısımda tanımlamalar yapılmaktadır.


 NAMESRC=tvtime

Bu paramatre yazılımın adını göstermektedir.


 VERSION=1.0.2

Bu parametre yazılımın versiyonunu göstermektedir.


 EXT=tar.gz

Bu parametre yazılım paketinin uzantısını göstermektedir. Uzantısı daha çok tar.gz veya tar.bz2 olmaktadır. Mümkün olduğu kadar tar.bz2 uzantısı kullanılmalıdır. Çünkü tar.bz2 paketleri daha küçük boyutlu olduğundan indirilmesi kolaylaşır hem de indirilen sunucunun bant genişliğinden fazla harcamamış oluruz.


 ARCH=i486

Bu parametre hazırlanacak paketin işlemci mimarisini göstermektedir.


 TARGET=i486

Bu parametre paketin derlenmesi esnasında işlemci mimarisine göre işlem yapılmasını sağlar.


 BUILD=1

Bu parametre paketin düzenlenme durumunu gösterir. "1" ile başlar ve paket üzerinde bir değişiklik yapıldığından bu sayı bir artırılır.


 REPO=/Truva-Repo/testing

Bu parametre hazırlanan paketin depolanacağı klasörü işaret eder. Truva Linux için paket geliştirecek arkadaşlar sabit disklerinde "/media/truva/Truva-Repo/repo/testing" klasörünü oluşturmak durumundadırlar.


 set -e -x

Bu kısım kabuk programlamanın özelliklerindendir. Çalıştırılan komutun önüne artı işareti koyarak takibi kolaylaştırmaktedır.


 if [ ! -r ${NAMESRC}-${VERSION}.$EXT ] ; then
    wget http://ovh.dl.sourceforge.net/sourceforge/tvtime/${NAMESRC}-${VERSION}.$EXT
 fi

Bu kısımda ${NAMESRC}-${VERSION}.$EXT ile belirtilen yazılım koduna ait paket yoksa sunucudan indirilmesi için wget komutu çalıştırılır. Paket .TruvaBuild dosyasının bulunduğu klasöre indirilir. NAMESRC, VERSION ve EXT ile ilgili açıklamaları daha önce yapmıştık.


 md5sum -c ${NAMESRC}-${VERSION}.$EXT.md5

Bu kısımda eğer yazılıma ait md5 dosyası ile yazılım paketinin bütünlük kontrolü yapılır. Bu kısımda bir kaç düzenleme daha yapılacaktır. Paket ilk kez indirildikten sonra md5 dosyasını elle oluşturmamız gerekiyor.


 CWD=`pwd`

Bu kısımda "pwd" komutu ile içerisinde bulunulan dizin bilgisi CWD değişkenine aktarılıyor.


 if ["$TMP" = ""]; then
    TMP=/tmp
 fi

Bu kısımda "TMP" değişkenine herhangi bir şey atanmamışsa "/tmp" dizini "TMP" değişkenine aktarılıyor.


 PKG=$TMP/package-$NAMESRC

Bu kısımda paketin derleme işlemi bittikten sonra dokümanların ve derlenen kodların atılacağı dizin belirtiliyor. Bu dizin yukarıdaki satırdan da anlaşılacağı üzere "TMP" değişkenine atanan dizinin altındaki package-$NAMESRC dizinidir. Örnek tam yazılımı /tmp/package-tvtime-1.0.2 şeklinde olur.


 if [ ! -d $TMP ]; then
    mkdir -p $TMP
 fi

Bu kısımda "TMP" değişkeni ile belirtilen dizin yoksa oluşturuluyor.


 if [ ! -d $PKG ]; then
   mkdir -p $PKG
 fi

Bu kısımda "PKG" ile belirtilen package-$NAMESRC dizini yoksa oluşturuluyor.


 if [ $EXT == tar.bz2 ]; then
    NAME=`tar jft $NAMESRC-$VERSION.tar.bz2 | head -1 | awk -F/ '{ print $1 }'`
 else
    NAME=`tar zft $NAMESRC-$VERSION.tar.gz | head -1 | awk -F/ '{ print $1 }'`
 fi

Bu kısımda NAME değişkenine paket adı bilgisi aktarılıyor. Her betikte bulunmayabilir.


 if [ "$ARCH" = "i386" ]; then
    CPUOPT="-O2 -march=i386 -mcpu=i686"
 elif [ "$ARCH" = "i486" ]; then
    CPUOPT="-O2 -march=i486 -mcpu=i686"
 elif [ "$ARCH" = "s390" ]; then
    CPUOPT="-O2"
 elif [ "$ARCH" = "x86_64" ]; then
    CPUOPT="-O2"
 fi

Bu kısımda derleme öncesi işlemci mimarisi ile ilgili ayarlar yapılmaktadır.


 cd $TMP
 echo "Building $NAMESRC-$VERSION.$EXT..."

Burada $TMP değişkeninin içerdiği dizine giriliyor. echo ile ekrana yapılan işlemle ilgili mesaj yazdırılıyor. echo komutunun eklenmesi şart değildir.


 if [ $EXT == tar.bz2 ]; then
    tar xjf $CWD/$NAMESRC-$VERSION.$EXT
 else
    tar xzf $CWD/$NAMESRC-$VERSION.$EXT
 fi 

Bu kısımda paket uzantısı kontrol ediliyor. $EXT içeriği tar.bz2 ise çalıştırılacak komut ve tar.bz2 değilse çalıştırılacak komut belirtiliyor.


 cd $NAME
 CFLAGS=$CPUOPT \
 CXXFLAGS=$CPUOPT \
 ./configure --prefix=/usr \
             --sysconfdir=/etc \
             --enable-shared=yes \
             --enable-static=no \
             $TARGET-slackware-linux
 make
 make install DESTDIR=$PKG 

Bu kısımda $NAME değişkenine aktarılan bilgiye göre ilgili dizine giriliyor. Derleme parametreleri ayarlanıyor. Paket derleniyor.


 mkdir -p $PKG/usr/doc/$NAME

Bu kısımda $PKG değişenini ile belirtilen dizininde /usr/doc/ dizini altına $NAME değişeninin içerdiği paket adına göre klasör oluşturuluyor.


 install -m 644 \
   AUTHORS ChangeLog COPYING* INSTALL NEWS README \
   $PKG/usr/doc/$NAME

 mkdir -p $PKG/usr/doc/$NAME/html
 install -m 644 \
  docs/html/* \
  $PKG/usr/doc/$NAME/html 

 mkdir -p $PKG/install
 cat $CWD/slack-desc > $PKG/install/slack-desc

Bu kısımda $PKG değişkeni ile belirtilen dizin altında install dizini oluşturuluyor. cat komutu ile slack-desc dosyası içeriği install dizini altına slack-desc dosyası olarak gönderiliyor.


 if [ -r $CWD/doinst.sh ] ; then
    cat $CWD/doinst.sh > $PKG/install/doinst.sh
 fi

Bu kısımda eğer doinst.sh dosyası varsa $PKG değişkeni ile belirtilen dizin altına doinst.sh dosyası olarak gönderiliyor. doinst.sh dosyası genellikle derleme sırasında oluşturulur fakat doinst dosyası oluşturulmamışsa ve paket kurulduktan sonra çalıştırılması gereken komutlar var bu dosya elle hazırlanabilir.


 find $PKG/usr/man -type f | xargs gzip -9 

Bu kısımda $PKG değişkeni ile belirtilen dizin altındaki man dosyaları sıkıştırılıyor.


 cd $PKG
 if [ ! -d $REPO ]; then
    mkdir -p $REPO
 fi

Bu kısımda $PKG değişkeni ile belirtilen dizine giriliyor. if komutu $REPO değişkeni ile belirtilen paket deposu dizininin diskinizde olup olmadığını kontrol ediyor. Eğer yoksa oluşturuluyor. Öntanımlı paket deposu dizinimiz REPO=/media/truva/Truva-Repo/repo/testing dizinidir. Bu dizini ister kendiniz oluşturursunuz isterseniz programa bırakırsınız o kendi oluşturur.


 chown root:root . -R
 chown root:bin ./usr/bin -R

Bu kısımda $PKG değişkeni ile belirtilen dizin altındaki dosyaların sahiplikleri ayarlanıyor.


 makepkg -l y -c n $REPO/$NAMESRC-$VERSION-$ARCH-$BUILD.tgz ;

Bu kısımda makepkg komutu belirtilen değişkenler aracılığı ile belirtilen dizin altında paketi oluşturur.

 if [ ! -f $TMP/$NAMESRC-$VERSION ]; then
    rm -rf $TMP/$NAMESRC-$VERSION
 fi

Bu kısımda $TMP değişkeni ile belirtilen dizin altında program kaynak koduna ait dosyaları içeren dizinin olup olmadığı kontrol ediliyor ve dizin varsa siliniyor.


 if [ ! -f $PKG ]; then
    rm -rf $PKG
 fi 

Bu kısımda $TMP değişkeni ile belirtilen dizin altında hazırlanacak pakete ait dosyaları içeren dizinin olup olmadığı kontrol ediliyor ve dizin varsa siliniyor.

Paket hazırlama betiğinin genel yapısı bu şekildedir. Bundan çok daha farklı kısımlar içeren betiklerde olabilir. Dikkat etmeniz gereken şey nerede ne tür işlemler yapıldığıdır. Yapamadığınız bir şey olması durumunda Truva Forum sayfamızdaki Paket Geliştirme ve Paket İstekleri kısmında sorularınızı sorabilirsiniz.


Paket Ayrıntısı Dosyası Hazırlamak (slack-desc)

slack-desc dosyası paket ile ilgili açıklama bilgilerini içeren dosyadır. Buradan paketin ne işe yaradığına air bilgileri öğrenebilirsiniz.


Genel Görünümü:

tvtime: tvtime (High quality television application)
tvtime:
tvtime: Tvtime is a high quality television application for use with video
tvtime: capture cards on Linux systems. TVtime processes the input from a
tvtime: capture card and displays it on a computer monitor or projector.
tvtime:
tvtime:
tvtime:
tvtime:
tvtime:
tvtime:


şeklindedir.


tvtime: tvtime (High quality television application)

Bu kısım genel açıklama satırıdır. Geri kalan kısımla beraber paket açıklamalarını içerir.

Dikkat edilmesi gereken noktalar;

  • 'tvtime:' kısmı paket adıyla aynı olmalıdır,
  • büyük-küçük harf ayrımına dikkat edilmelidir,
  • paket açıklamaları Türkçe olarak hazırlanmalıdır.


Paket Bağımlılıklarını Belirlemek (slack-required dosyası)

Hazırlamakta olduğunuz paketin bağımlılıklarını belirlemek için Requiredbuilder isimli yazılımı kullanabilirsiniz. Tgz paketlerinin paket bağımlılıkları slack-required dosyasında saklanır. Requiredbuilder yazılımı bu işi sizin yerinize otomatik olarak yapar. Kullanım şekli aşağıdaki gibidir.

requiredbuilder -v -y -s $CWD $PKG

Bu satırı paket hazırlama betiğinizdeki makepkg paket yapma komutunun bir üst satırına ekleyebilirsiniz. Bu şekilde pakete ait bağımlılıklar bulunur ve slack-required dosyası oluşturulup ilgili dizine gönderilir. $CWD ve $PKG değişkenlerine dikkat edin. $CWD hangi dizindeki program olduğunu, $PKG de oluşturulan slack-required dosyasının hangi dizine atılacağını gösterir.


TruvaBuild Betiğinin Test Edilmesi

Hazırlanan .TruvaBuild paket oluşturma betiğinin test edilmesine geldi sıra. Pakete ait bir klasör açıp .TruvaBuild dosyası, slack-desc dosyası ve varsa diğer dosyalar aynı dizine konur. Konsoldan


sh betik_adı.TruvaBuild


komutu ile çalıştırılır.

Pakete ait kaynak kod paketi yoksa indirilir ve MD5 dosyası yoksa program durur.

Bu durumda


md5sum paket_adı.md5


komutu ile MD5 değeri oluşturulur. Örneğin;


md5sum xmms-1.2.10.tar.gz.md5


Bu işlemden sonra


sh betik_adı.TruvaBuild


komutunu tekrar uygularsanız derleme işlemi başlayacaktır. Derleme sırasında bağımlılık sorunu yaşadığınıza dair bir mesaj alırsanız, ilgili paketi kurup tekrar denemelisiniz. Bu noktalarda yapılacak hatalar paketin kararlılığını etkileyeceğinden dikkatli olmakta fayda vardır.

Paket sorunsuz bir şekilde derlenirse .TruvaBuild dosyasında $REPO değişkeni ile belirtilen depo klasörü adresinde yerini alacaktır. Oluşan yeni paketi kurmadan önce paketin ve dosyanın sağlamlığını kontrol edin. Hatalı bir nokta gözünüze çarparsa hatayı düzeltip tekrar kontrol edin.

Son olarakta paketin test etmek için sisteminize kurup denemeler yapın. Paketin sağlam olduğuna kanaat getirirseniz depo yöneticisine başvurup paketi ftp üzerindeki depoya gönderilmesini sağlayınız.


Hazır Paket Yapma Betiklerini Kullanmak

Hazır .Build dosyası kullanmak isterseniz bu tür betikleri hazırlayan sitelere girip hazırlayacağınız paketin kaynak dosyalarını alır ve ufak tefek düzenlemeler ile TruvaBuild dosyasını hazırlayabilirsiniz. Hazır betikleri bulabileceğiniz bazı adresler :

http://repository.slacky.eu/slackware-12.0/
http://www.slackbuilds.com
http://www.slackbuilds.net


Hazır betiklerde yapmanız gereken slack-required dosyası varsa bakıp önce bağımlılıkları ayarlamak ve sonra paketi hazırlamaya geçmektir. Paket betikleri Slackware için paket_adı.SlackBuild şeklinde isimlendirilir. Biz Truva olarak bu .SlackBuild dosyasını .TruvaBuild olarak isimlendiriyoruz.

Belirtilen sitelerden paket yapma dosyaları ve kaynak kodlarını bir klasöre indirin. SOnra da konsoldan .SlackBuild veya düzenlenmiş hali olan .TruvaBuild dosyasını çalıştırın.

sh xmms.TruvaBuild

Build dosyası betikte verilen derleme değerlerini okur ve programı derleyip paket haline getirir. Paket derlenmesi esnasında hata mesajlarına dikkat edilmelidir. Hata verdiği yer büyük ihtimalle derleme bağımlılığından kaynaklanır. Sorunsuz bir şekilde paketi derlerseniz öncelikle siz test edersiniz. Sonrasında da size verilecek ftp deposuna paketi atar ve diğer kullanıcıların test etmesini sağlarsınız. En hızlı paket geliştirme yöntemi budur. Bir çok paketin zaten hazır build dosyası bulunmaktadır.


Truva Linux İso Dosyası Hazırlamak

Truva Linux isosu hazırlamak için komple paket deposunu elinizde bulundurmanız gereklidir. Paket deposunun tümünü bilgisayarınıza indirmek için şu anda hazırda bir sistemimiz yok. Örneğin Rsync gibi. Henüz dvd sürümde yayınlamadık fakat wget komutunun nimetlerinden faydalanmak isterseniz bu şekilde depoyu indirebilirsiniz. Wget'le indirmek için gereken komut;

wget -mc ftp://ftp.linux.org.tr/pub/truva/Surumler/Gelistirilen/truva/Paketler

İndirme işlemini tamamladıktan sonra depo yolunu aşağıda basedir değişkeni ile gösterilen adrese uygun hale getirin. Aşağıdaki betiği örneğin make_iso.sh adıyla paket deposu kök dizinine kayededin. (Betiğe göre kök dizin /media/disk/Truva/Release/new-current/packages/)


#!/bin/bash

#--------RENKLER-------------------
COLOROFF="\033[1;0m"
COLORON="\033[1;33m"

# Bu adresi kendi sisteminize göre düzenlemeniz gerekir.
basedir="/media/disk/Truva/Release/new-current/packages/Paketler"

for category in a ap araclar cokluortam d dokuman egitim extra gelistirme gnome grafik guvenlik internet kde kernel konsol kutuphane l lang masaustu n ofis oyunlar sistem sunucu suruculer t tcl temalar uygulama veritabani x xap xorg-app xorg-app-extra xorg-data xorg-extra xorg-font xorg-font-extra xorg-input xorg-lib xorg-proto xorg-util xorg-video; do 
	(
	for text in category ; do
		cd $basedir/$category
		echo ""
		echo -e "${COLORON}$category kategorisindeki *.meta dosyaları siliniyor...${COLOROFF}"
		echo ""
		cd $basedir/$category
        	rm *.meta

	done
	)
done

rm -rf Checksums.md5

echo ""
echo -e "${COLORON}Checksums.md5 dosyası oluşturuluyor...${COLOROFF}"
echo ""

find . -type f -not -name md5sums -not -name boot.cat \
-exec md5sum {} \; >> Checksums.md5


if [ "$1" = "" -o "$1" = "--help" -o "$1" = "-h" ]; then
  echo "This script will create bootable ISO from files in curent directory."
  echo "Current directory must be writable."
  echo "Ornek: $0 /mnt/hda5/truva.iso"
  exit
fi

CDLABEL="Truva Linux 2.0"
ISONAME="$1"

mkisofs -o "$ISONAME" -v -J -R -D -A "$CDLABEL" -V "$CDLABEL" \
-x .create-md5sums \
-x .make_iso.sh \
-x Todo \
-x ./Paketler/araclar \
-x ./Paketler/cokluortam \
-x ./Paketler/dokuman \
-x ./Paketler/extra \
-x ./Paketler/gelistirme \
-x ./Paketler/gnome \
-x ./Paketler/grafik \
-x ./Paketler/guvenlik \
-x ./Paketler/internet \
-x ./Paketler/kernel \
-x ./Paketler/konsol \
-x ./Paketler/kutuphane \
-x ./Paketler/lang \
-x ./Paketler/masaustu \
-x ./Paketler/ofis \
-x ./Paketler/oyunlar \
-x ./Paketler/sistem \
-x ./Paketler/sunucu \
-x ./Paketler/suruculer \
-x ./Paketler/uygulama \
-x ./Paketler/veritabani \
-x ./Paketler/xorg-app-extra \
-x ./Paketler/xorg-extra \
-x ./Paketler/xorg-font-extra \
-x ./Paketler/.meta_sil \
-x ./Paketler/.pkg-list \
-x ./Paketler/.pkg.py \
-x ./Paketler/.repo \
-x ./Paketler/.repo_builder \
-hide-rr-moved \
-no-emul-boot -boot-info-table -boot-load-size 4 \
-b boot/isolinux/isolinux.bin \
-c boot/isolinux/isolinux.boot \
-p "Truva Linux 2.0 - Beta" \
-A "Truva Linux 2.0 (Kurulum CD)" .


Kaydetme işlemi de konsolda deponun olduğu dizine girip

sh make_iso.sh /tmp/truva-deneme.iso 

komutunu verin. İso nuz /tmp dizininde hazırlanacaktır. Geriye artık test etmek kalıyor.


Linux Çekirdeği (Kernel) Derlemek

Sıfırdan Çekirdek Derlemek

Linux çekirdeği işletim sisteminin özünü oluşturur. Bu nedenle ne kadar sağlam bir çekirdeğiniz varsa o derece güvenli bir sisteminiz olur. Çekirdeği sık sık güncellemek sistem kararlılığını etkileyebilir bu nedenle çok sık kernel güncellemeniz önerilmez. Tabi ki güvenlik güncelleştirmeleri hariç.

Linux çekirdeğini derlemek için öncelikle Linux kaynak koduna ihtiyaç vardır. Kaynak kodunu http://www.kernel.org adresinden indirebilirsiniz ya da yakın bir yansıdan indirmek isterseniz ftp://ftp.linux.org.tr adresini kullanabilirsiniz. Aşağıda nasıl indirebileceğinize dair komutlar verilmiştir.

wget -c http://www.us.kernel.org/pub/linux/kernel/v2.6/linux-2.6.24.4.tar.bz2


Sıkıştırılmış kaynak kodlar /usr/src dizinine açılıyor.

tar -C /usr/src -jxvf linux-2.6.24.4.tar.bz2


/usr/src dizinine giriliyor ve eski kernele bağlı link silinip yeni derleyeceğimiz kernel dizinine bağlanıyor.

cd /usr/src
rm linux
ln -s linux-2.6.24.4 linux


Bundan sonra iki seçeneğiniz var. Ya hazır bir kernel config dosyası bulacaksınız ya da öntanımlı config dosyası üzerinden yeni bir config dosyası oluşturacaksınız. Eğer hazır bir config dosyası kullanmak isterseniz aşağıdaki gibi config dosyasını indirebilirsiniz.

wget http://slackware.mirrors.tds.net/pub/slackware/slackware-12.1/source/k/config-generic-smp-2.6.24.4-smp
cp config-generic-smp-2.6.24.4-smp /usr/src/linux/.config

Özellikle kernel menüsünü kullanamam diyenler öncelikle hazır config dosyaları ile kernel derlemeyi denemelidir. İlerleyen zamanlarda menü kullanımına alıştıkça istediğinizi ekleyip istediğinizi çıkarabilirsiniz.

İkinci bir hazır config kullanma yöntemi de eğer kullandığınız çekirdekte desteği verilmişse /proc dizininde config.gz adlı dosya bulunur. Sisteminizde tüm aygıtlar çalışır durumda ise o zaman /proc/config.gz sizin için daha iyi olacaktır. Bunu kullanmak isterseniz gerekli işlemler aşağıdadır.

zcat /proc/config.gz > /usr/src/linux/.config


Mevcut bir config dosyasında düzenleme yapacaksanız ya da öntanımlı config dosyası ile kendi config dosyanızı ayarlayacaksanız menüyü başlatmamız gerekir. Aşağıda iki ayrı menü komutu verilmiştir. make xconfig ile X ortamında, make menuconfig ile konsol ortamda menüyü başlatabilirsiniz.

make xconfig
make menuconfig


Derleme seçeneklerini ayarlama işlemi bittikten sonra kaydedip menüden çıkın. Kerneli ve modülleri derlemek için aşağıdaki komutu verin.

 make bzImage 
 make modules            


Modüller /lib/modules/<kernelversion> altına kurulur.

 make modules_install


Oluşan yeni kernel ve ek dosyalar ilgili dizinlere kopyalanır.

 cp arch/i386/boot/bzImage /boot/vmlinuz-custom-2.6.24.4
 cp System.map /boot/System.map-custom-2.6.24.4         
 cp .config /boot/config-custom-2.6.24.4                


System.map dosyası yenisi ile değiştirilir.

 cd /boot
 rm System.map                              
 ln -s System.map-custom-2.6.24.4 System.map


Yeni çekirdeği test edebilmemiz için açılış yöneticisinine çekirdeği bildirmemiz gerekir. Örneğin Truva Linux sisteminizde /dev/hda2 sürücüsünde kurulu ise /boot/grub/menu.lst girdisi aşağıdaki gibi olur. Sizde farklı bir yerde ise ona göre düzenlemeniz gerekir.

title Truva Linux 2.0 - 2.6.24.4
root (hd0,1)
kernel /boot/vmlinuz-2.6.24.4 root=/dev/hda2 ro vga=791 splash=silent

Sistemi yeniden başlatın ve yeni çekirdeğinizi test edin.


Hazır Betikle Çekirdek Derlemek

Truva Linux Ekibi'nin hazırladığı paketlerin kaynak kodları aşağıdaki adreste bulunmaktadır. Kaynak kodların tümünü aşağıdaki adresten wget ile topluca indirebilirsiniz.

ftp://ftp.linux.org.tr/pub/truva/Surumler/Gelistirilen/kaynak/linux-2.6.24.3/

Çekirdeğe Yama Uygulamak

Her yazılımda olduğu çekirdekte de hatalar veya eksiklikler Olbilir. Bu hataları gidermek veya olmayan özelliklerin eklenmesi için yama/yamalar uygulanabilir. Yama uygulamak için diff ya da patch yazılımları kullanılabilir.