Truva Linux Geliştirici Kılavuzu
Konu başlıkları
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.