Yeni mime türü (mime-type) oluşturma

Taze program yazan kişilerin başına dert olabilecek bir olay: Programınızın ürettiği dosyaların kde/gnome/xfce/blabla altında hiçbir ayar yapmadan, tıklayınca programınızla beraber çalışmasını istersiniz. Bilinen dosya türlerinden biri ile çalışmıyorsanız işiniz zor. Bilemiyorum bu işlemi herhangi bir geliştirme ortamı yardımıyla yapılan programlar otomatik olarak hallediyor mu ama, çift tıklayınca “ilişkilendirilmiş uygulama yok” hatasına kesin çözüm yollarından birisi olarak yepyeni, cillop gibi bir mimetype üretmeyi anlatacağım.

Programınızın ürettiği bir dosyanın mime türünü “file dosya_adi” komutu ile görebilirsiniz. Anlatacağım yöntem, olabilecek en kötü ihtimallerden olan, yalnızca “data” çıktısına sahip dosyalar için işe yaradı.

Programınızı çalıştırmak için gerekli komutun “programim” olduğunu varsayıyorum. Ürettiğiniz/açmak istediğiniz dosyanın uzantısı da “weq” olsun (nasıl salladım ama).

Bu arada programın komut satırından dosya açabildiğini bilmemiz gerek, “programim /home/blabla/dosya_adi” komutu ile açabiliyor olması gerek.

Yeni mime türü oluşturmaya başlayalım, öncelikle/usr/share/mime/packages/programim.xml diye bir dosya oluşturuyoruz. İçeriği şu şekilde ayarlıyoruz:

<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
   <mime-type type="application/programim">
     <comment>Programim</comment>
     <glob pattern="*.weq"/>
   </mime-type>
</mime-info>

sonra /usr/share/mime-info/programim.mime :

application/programim
	ext: weq

/usr/share/mime-info/programim.keys :

application/programim:
	description=Benim Programim Walla
	default_action_type=application
	short_list_application_ids_for_novice_user_level=programim
	category=Documents/Data

/usr/share/applications/programim.desktop :

[Desktop Entry]
Encoding=UTF-8
Name=Programım
Comment=Bu benim öyle gıcıklık olsun diye yazdığım bi program
Exec=programim %f
Icon=/usr/share/benim_simgem.png
Terminal=false
Type=Application
Categories=GNOME;GTK;Game; #(artık neyse kategoriniz yazarsınız)
StartupNotify=true
MimeType=application/programim;

Son olarak, /usr/share/application-registry/programim.applications :

programim
	command=programim
	name=Programim
	can_open_multiple_files=false
	expects_uris=false
	requires_terminal=false
	mime_types=application/programim

Bitirdikten sonra da root olarak “update-desktop-database” komutu verirseniz, artık “.weq” uzantılı dosyalara çift tıkladığınızda “programim” ile açılacaktır. Bunu da artık atarsınız kurulum prosedürünün bi kenarına, onu da mı anlatayım..

Linux Türkçe Quicksheet

Linux nedir?“, “çok kullanılan komutları nelerdir?” gibi sorulara cevap olabilecek,

Başlangıç seviyesi için,

Hızlıca göz atmaya ideal,

Önlü arkalı 2 sayfaya basım için tasarlanmış,

4 sayfalık bir pdf belgesi..

(Dersin birinden final ödevimdi..)

Umarım birilerinin işine yarar..

indir

Sed kullanımı örnekleri

Sed (veya GNU sed, gsed) , oldukça yetenekli bir yazı düzenleme editörüdür. Tek komutla sizi büyük bir iş yükünden kurtarabilir, işte bazı kullanım örnekleri:

BOŞLUK KOYMA

# içinde “deneme” geçen satırların üzerinde bir boş satır oluştur
sed ‘/deneme/{x;p;x;}’

# içinde “deneme” geçen satırların altında bir boş satır oluştur
sed ‘/deneme/G’

# içinde “deneme” geçen satırların hem üzerinde hem altında bir boş satır oluştur
sed ‘/deneme/{x;p;x;G;}’

# her 5 satırdan sonra bir boş satır ekler
gsed ‘0~5G’ # GNU sed
sed ‘n;n;n;n;G;’ # diğerleri

NUMARALANDIRMA

# her satırın başına satır numarası yazar, arada bir “tab” boşluk koyar
sed = dosya_adı | sed ‘N;s/\n/\t/’

# her satırın başına satır numarası yazar, solda sağa dayalı numaralar
sed = dosya_adı | sed ‘N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /’

# her satırın başına satır numarası yazar ancak eğer satır boşsa numara görünmez
sed ‘/./=’ dosya_adı | sed ‘/./N; s/\n/ /’

# satır sayısını yazdırır
sed -n ‘$=’

YAZI DÖNÜŞÜMÜ

# UNIX altında Windows satır sonlarını (CR/LF) Unix formatına dönüştürür
sed ’s/.$//’

# Windows/Dos altında Unix satır sonlarını Windows formatına dönüştürür
sed “s/$//”

# her satırın önündeki boş alanı (boşluk, tab) kaldırır
sed ’s/^[ \t]*//’

# her satırın sonundaki boş alanı (boşluk, tab) kaldırır
sed ’s/[ \t]*$//’

# her satırın sonundaki ve başındaki boş alanı (boşluk, tab) kaldırır
sed ’s/^[ \t]*//;s/[ \t]*$//’

# her satırın başına 5 boşluk karakteri koyar
sed ’s/^/ /’

# yazıyı 79-sütun genişliğin ortasına taşır, yöntem 1′de satır başındaki
# boşluklar önemsizdir, yöntem 2′de onlar da taşınır.
sed -e :a -e ’s/^.\{1,77\}$/ & /;ta’ # yöntem 1
sed -e :a -e ’s/^.\{1,77\}$/ &/;ta’ -e ’s/\( *\)\1/\1/’ # yöntem 2

# her satırda “foo”ları bulur ve “bar” olarak değiştirir
sed ’s/foo/bar/’ # satırdaki ilk foo’yu değiştirir
sed ’s/foo/bar/4′ # satırdaki 4. foo’yu değiştirir
sed ’s/foo/bar/g’ # satırdaki tüm foo’ları değiştirir

# yalnızca “baz” kelimesini bulduğu satırlarda
# “foo”ları bulur ve “bar” olarak değiştirir
sed ‘/baz/s/foo/bar/g’

# yalnızca “baz” kelimesini bulduğu satırlarda
# “foo”ları “bar” olarak değiştirmez, diğerlerini değiştirir
sed ‘/baz/!s/foo/bar/g’

# “scarlet”, “ruby” veya “puce” değerlerini “red” olarak değiştirir.
sed ’s/scarlet/red/g;s/ruby/red/g;s/puce/red/g’ # birçok sed’e göre
gsed ’s/scarlet\|ruby\|puce/red/g’ # sadece GNU sed’e göre

# satırları başaşağı eder, ilk satır sona, son satır başa
sed ‘1!G;h;$!d’ # yöntem 1
sed -n ‘1!G;h;$p’ # yöntem 2

# her satırı ters çevirir: ahmet > temha
sed ‘/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//’

# eğer bir satır ters taksim ile “\” biterse, altındaki satırı ona ekler
sed -e :a -e ‘/\$/N; s/\\n//; ta’

# eğer bir satır eşittir “=” ile başlıyorsa, onu önceki satırın sonuna ekler
# = işaretini de boşluk ile değiştirir
sed -e :a -e ‘$!N;s/\n=/ /;ta’ -e ‘P;D’

# rakam setlerine virgül ekler: “1234567″ > “1,234,567″
gsed ‘:a;s/\B[0-9]\{3\}>/,&/;ta’ # GNU sed
sed -e :a -e ’s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta’ # diğer sed’ler

BELLİ BİR BÖLÜMÜ YAZDIRMA

# Bir dosyanın ilk 10 satırını yazdırır
sed 10q

# Bir dosyanın ilk satırını yazdırır
sed q

# Bir dosyanın son 10 satırını yazdırır
sed -e :a -e ‘$q;N;11,$D;ba’

# Bir dosyanın son 2 satırını yazdırır
sed ‘$!N;$!D’

# Bir dosyanın son satırını yazdırır
sed ‘$!d’ # yöntem 1
sed -n ‘$p’ # yöntem 2

# sadece içinde “deneme” bulunan satırları yazdırır
sed -n ‘/deneme/p’ # yöntem 1
sed ‘/deneme/!d’ # yöntem 2

# sadece içinde “deneme” bulunmayan satırları yazdırır
sed -n ‘/deneme/!p’ # yöntem 1
sed ‘/deneme/d’ # yöntem 2

# sadece içinde “deneme” bulunan satırın bir üstündeki
# satırı yazdırır
sed -n ‘/deneme/{g;1!p;};h’

# sadece içinde “deneme” bulunan satırın bir altındaki
# satırı yazdırır
sed -n ‘/regexp/{n;p;}’

# içinde AAA, BBB ve CCC olan satırları yazdırır (sıra gözetmez)
sed ‘/AAA/!d; /BBB/!d; /CCC/!d’

# içinde sırasıyla AAA, BBB ve CCC olan satırları yazdırır
sed ‘/AAA.*BBB.*CCC/!d’

# içinde AAA veya BBB veya CCC bulunan satırları yazdırır
sed -e ‘/AAA/b’ -e ‘/BBB/b’ -e ‘/CCC/b’ -e d # diğer sed’ler
gsed ‘/AAA\|BBB\|CCC/!d’ # GNU sed

# AAA içeren paragrafları yazdırır (paragraf=boş satırlar arası)
sed -e ‘/./{H;$!d;}’ -e ‘x;/AAA/!d;’

# içinde AAA veya BBB veya CCC bulunan paragrafları yazdırır
sed -e ‘/./{H;$!d;}’ -e ‘x;/AAA/b’ -e ‘/BBB/b’ -e ‘/CCC/b’ -e d
gsed ‘/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d’ # GNU sed

# 65 karakter veya daha uzun olan satırları yazdırır
sed -n ‘/^.\{65\}/p’

# 65 karakterden daha kısa olan satırları yazdırır
sed -n ‘/^.\{65\}/!p’ # yöntem 1
sed ‘/^.\{65\}/d’ # yöntem 2

SEÇİLEN BÖLÜMLERİ SİLME

# Iowa ve Montana değerleri arasındakileri siler
sed ‘/Iowa/,/Montana/d’

# birbirinin aynısı olan satırları siler.
# en baştaki satır durur, diğerleri silinir
sed ‘$!N; /^\(.*\)\n\1$/!P; D’

# sadece birbirinin aynısı olan satırları silmez
sed ‘$!N; s/^\(.*\)\n\1$/\1/; t; D’

# yazının ilk 10 satırını siler
sed ‘1,10d’

# yazının son satırını siler
sed ‘$d’

# yazının son 2 satırını siler
sed ‘N;$!P;$!D;$d’

# yazının son 10 satırını siler
sed -e :a -e ‘$d;N;2,10ba’ -e ‘P;D’ # yöntem 1
sed -n -e :a -e ‘1,10!{P;N;D;};N;ba’ # yöntem 2

# her 8. satırı siler
gsed ‘0~8d’ # GNU sed
sed ‘n;n;n;n;n;n;n;d;’ # diğer sed’ler

# yazıdaki TÜM boş satırları siler
sed ‘/^$/d’ # yöntem 1
sed ‘/./!d’ # yöntem 2

# yazının başındaki boş satırları siler
sed ‘/./,$!d’

# yazının sonundaki boş satırları siler
sed -e :a -e ‘/^\n*$/{$d;N;ba’ -e ‘}’

Split / Cat ile dosya bölme ve birleştirme

split ve cat araçları ile bir dosyayı istediğiniz boyutta ve sayıda parçaya ayırabilir, geri birleştirebilirsiniz. Split, basit bir mantıkla işleyerek dosyayı belirtilen byte’dan itibaren böler. Bu sayede dosyalarınızı istediğiniz ortamlara sığdırabilirsiniz.

Bu mantıkla bölme işlemi yapan uygulamaların parça dosyalarını cat ile birleştirebilirsiniz (örn Windows altındaki HjSplit). Ancak rar gibi uygulamalar bölerken kendi yöntemini kullandığı için, birleştirdiğiniz dosya muhtemelen bozuk olacaktır.

Dosya Bölme

Diyelim ki elimizde 90 mB’lık bir dosya var.

~ $ ls -lh
toplam 90MB
-rw-rw-r--  1 seqizz users  90M Jul 23 18:18 deneme.avi

bölelim :) diyelim ki 10mB’lık parçalara ayıracağız. hemen bir hesap
10 * 1024 = 10240

~ $ split -b 10240k deneme.avi
~ $ ls -lh
toplam 180MB
-rw-rw-r--  1 seqizz users 90M Jul 23 18:18 deneme.avi
-rw-rw-r--  1 seqizz users 10M Jul 23 18:22 xaa
-rw-rw-r--  1 seqizz users 10M Jul 23 18:22 xab
-rw-rw-r--  1 seqizz users 10M Jul 23 18:22 xac
-rw-rw-r--  1 seqizz users 10M Jul 23 18:22 xad
-rw-rw-r--  1 seqizz users 10M Jul 23 18:22 xae
-rw-rw-r--  1 seqizz users 10M Jul 23 18:22 xaf
-rw-rw-r--  1 seqizz users 10M Jul 23 18:22 xag

işte parçalar

Dosya Birleştirme

Şimdi de cat ile xa ile başlayan ne var ne yok birleştirelim. Bildiğiniz gibi, bunun için alfabetik sıranın (a-z, 0-9) korunması gerek.

~ $ cat xa* > birlesmisdosya.avi

artık parçaları silebilirsiniz..

Ebuild yazmaya hızlı başlangıç

Bu yazı oldukça tanıtıcı ve hızlı bir şekilde ebuild yazma hakkında bir önbilgi oluşturmak ve temel işlevleri anlatmak amacıyla oluşturulmuştur.

Burda kullanılan ebuild’ler gerçekte kullanılan ebuild’ler veya onların biraz sadeleştirilmiş/kırpılmış halleridir.

İlk Ebuild

İlk örneğimiz Ctags aracının ebuild’i. Basitleştirilmiş dev-util/ctags/ctags-5.5.4.ebuild örneğini görüyorsunuz. (Portage ağacını inceleyerek gerçek ebuild’lere bakabilirsiniz).

# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

DESCRIPTION="Exuberant ctags generates tags files for quick source navigation"
HOMEPAGE="http://ctags.sourceforge.net"
SRC_URI="mirror://sourceforge/ctags/${P}.tar.gz"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~mips ~sparc ~x86"
IUSE=""

src_compile() {
    econf --with-posix-regex || die "econf failed"
    emake || die "emake failed"
}

src_install() {
    emake DESTDIR="${D}" install || die "install failed"

    dodoc FAQ NEWS README || die
    dohtml EXTENDING.html ctags.html
}

Temel Format

Gördüğünüz gibi, ebuild’ler sadece birer bash betiğidir. Tek farkları, özel bir ortam (portage) tarafından değerlendirilmeleri.

Ebuild’in en baştaki “header” kısmı, bütün ebuild’lerde sabit olan “başlık”tır.

Ebuild’ler tab boşlukları ile düzende tutulmaktadır. Ebuild File Format.

Bilgi değişkenleri

Ardından Portage’a paketin adını, sürümünü, lisansını vs. belirten bilgi amaçlı değişkenler gelir.

DESCRIPTION değişkeni, paket ile ilgili “kısa” bir tanımdan ibarettir.

HOMEPAGE, pakedin anasayfasına bir link içerir. (http:// bölümünü unutmayın).

LICENSE değişkeni GPL-2 (GPL lisansı sürüm 2)

SRC_URI değişkeni, Portage’a paketi kurarken hangi kaynak(lar)dan çekmesi gerektiğini söyler. Burdaki mirror://sourceforge/ tanımı, Sourceforge’a özel bir tanımdır. ${P} salt okunur bir değişkendir. Paketin adı ve sürümünü içerir. Bu örnekte ctags-5.5.4.

SLOT değişkeni, birden fazla sürümü aynı sisteme kurulabilen (çok kanallı) paketler için ayarlanır. Genelde paketler tek kanallı olduğundan “0“ (sıfır) değerine ayarlıdır.

KEYWORDS değişkeni, paketin kurulabileceği sistem mimarilerini (x86, amd64 vs) belirtir. Mimaride ~ karakteri kullanmak, paketin o yapı için henüz kararlı olmadığını/test aşamasında olduğunu belirtir. Bunun yanısıra “-” (eksi) kullanılarak o mimaride çalışmayacağını da belirtebilirsiniz.

-* değeri özel bir değerdir. Paketin belirtilen mimariler dışında çalıştırılamayacağını anlatır. Ayrıca mimari belirtiminde * veya ~* değerlerini asla kullanmamalısınız.

Derleme fonksiyonları

Sıradaki src_compile fonksiyonu, Portage’a bir paketi “derlemesi” derektiğini söyler. econf ./configure için, emake de “make” için bir genel kullanım değişkenidir. Her durumda kullanılan || die “birşeyler yanlış gitti”tarzındaki kullanım da, hata durumunda verilecek mesajı belirler.

src_install fonksiyonu, Portage’a paketi kurması gerektiğini söyler. Düz halde kök dizine kurmanın yanı sıra, eğer istenirse ${D} değişkeni ile belirtilen “hedef”e kurulum yapar. Burda da || die eklemesi ile hata çıktısı alınabilir.

Not

Standart Makefile dosyaları ile gerçekleştirilecek kurulumda bilinen yöntem emake DESTDIR=”${D}” install ‘dır. Eğer bu yöntem sandbox hatası veriyorsa yerineeinstall kullanın.

dodoc ve dohtml ise /usr/share/doc altına kurulacak dökümanlarda yardımcı olur.

Bağımlılıklarla bir Ebuild

ctags örneğinde kurulum sırasında paketin herhangi bir bağımlılığından söz etmedik. Çünkü ctags derlenmek ve kurulmak için temel komutlara ihtiyaç duyar. Bu yüzden oldukça basittir.

Bağımlılıklara paket eklerken şu tarz isimlendirme kullanılır:

~sys-apps/qux-1.0
=sys-apps/foo-1.2*
!sys-libs/gdbm

Buradaki “~” paketin erişilebilen son sürümünü kurmak ister. “=” ifadesi de tam olarak o sürümün kurulmasını gerektirir. Mesela buradaki örnekte foo pakedinin 1.2.7 ve 1.3 sürümleri erişilebilir ise, “=” ifadesine göre 1.2.7 sürümü seçilecektir. “!” ifadesi de, bu paketin kurulan paket ile çakıştığını belirtir. Bazı sebeplerden dolayı ikisi aynı anda sistemde bulunamayan paketler için kullanılır.Şimdi de app-misc/detox/detox-1.1.1.ebuild‘e bakalım:

# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

DESCRIPTION="detox safely removes spaces and strange characters from filenames"
HOMEPAGE="http://detox.sourceforge.net/"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"

LICENSE="BSD"
SLOT="0"
KEYWORDS="~hppa mips sparc x86"
IUSE=""

DEPEND="dev-libs/popt
    sys-devel/flex
    sys-devel/bison"
RDEPEND="dev-libs/popt"

src_compile() {
    econf --with-popt || die "econf failed"
    emake || die "emake failed"
}

src_install() {
    emake DESTDIR="${D}" install || die "install failed"
    dodoc README CHANGES || die
}

Burda da başlık ve bilgilendirme değişkenlerini görüyoruz. Buradaki SRC_URIaltındaki ${PN} değişkeni pakedin adını, sürüm numarası olmadan belirtir.

Burada da src_compile ve src_install fonksiyonları verilmiş.

DEPEND ve RDEPEND değişkenleri, paketin nelere ihtiyaç duyduğunu belirtir. DEPENDdeğişkeni, pakedin kurulması için gereken bağımlılıkları, RDEPEND de çalışması için gerekli bağımlılıkları içerir.

Bağımlılıkları adlandırırken dikkat etmeniz gereken bazı kurallar vardır. Mesela:

  • Her zaman kategori bölümünü de ekleyin.
    Örneğin >=x11-libs/gtk+-2 kullanın, >=gtk+-2 değil.
  • Büyük-küçük tanımları için çoklu seçim (*) kullanmayın.
    Örneğin >=x11-libs/gtk+-2 kullanımı, >=x11-libs/gtk+-2*‘dan daha mantıklıdır.
  • Asla bir meta pakete bağımlılık kullanmayın.
    gnome-base/gnome gibi yanında onlarca paketi kurmaya mecbur edenler yerine, özel tanımlar kullanın, libgnome kütüphanesi gibi.
  • Her satıra sadece bir bağımlılık yazın.
  • GTK: GTK+1 uygulamaları için daima =x11-libs/gtk+-1.2* bağımlılığını kullanın.
  • Bunların yanısıra sağlam bir ebuild bağımlılığı listesi için, kuracağınız paketin anasayfası ile beraber; configure.in, configure.ac, README, INSTALL, .specdosyalarını da gözden geçirin.

Yamalar ile Ebuild

Çoğunlukla yama uygulamamız gerekir. src_unpack fonksiyonuna yardımcı olanepatch fonksiyonu ile bu işlemi yapabiliriz. epatch kullanmak için Portage’aeutils sınıfını belirtmemiz gerekir. — Bu işlem de başlangıçtaki inherit eutilssatırı ile sağlanır. İşte örnek app-misc/detox/detox-1.1.0.ebuild:

# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

inherit eutils

DESCRIPTION="detox safely removes spaces and strange characters from filenames"
HOMEPAGE="http://detox.sourceforge.net/"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"

LICENSE="BSD"
SLOT="0"
KEYWORDS="~hppa ~mips ~sparc ~x86"
IUSE=""

DEPEND="dev-libs/popt
    sys-devel/flex
    sys-devel/bison"
RDEPEND="dev-libs/popt"

src_unpack() {
    unpack ${A}
    cd "${S}"

    epatch "${FILESDIR}"/${P}-destdir.patch
    epatch "${FILESDIR}"/${P}-parallel_build.patch
}

src_compile() {
    econf --with-popt || die "econf failed"
    emake || die "emake failed"
}

src_install() {
    emake DESTDIR="${D}" install || die "install failed"
    dodoc README CHANGES || die
}

Buradaki ${FILESDIR}/${P}-destdir.patch ibaresinin, Portage ağacında files/klasörü içindeki detox-1.1.0-destdir.patch dosyasına ait olduğuna dikkat edin. Büyük yamalar files/ klasörü yerine sunucularda tutulur.

USE Bayrakları ile Ebuild

Şimdiki örneğimiz, USE bayrağı kullanan dev-libs/libiconv/libiconv-1.9.2.ebuild dosyası.

# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

DESCRIPTION="GNU charset conversion library for libc which doesn't implement it"
SRC_URI="ftp://ftp.gnu.org/pub/gnu/libiconv/${P}.tar.gz"
HOMEPAGE="http://www.gnu.org/software/libiconv/"

SLOT="0"
LICENSE="LGPL-2.1"
KEYWORDS="~amd64 ~ppc ~sparc ~x86"
IUSE="nls"

DEPEND="virtual/libc
    !sys-libs/glibc"

src_compile() {
    econf $(use_enable nls) || die "econf failed"
    emake || die
}

src_install() {
    emake DESTDIR="${D}" install || die "install failed"
}

IUSE değişkenine dikkat edin. Bu, pakedin kullandığı (özel olmayan) bütün bayrakları listeler. Bunlar emerge -pv çıktısında görülür.

Bu paket derlenmesi sırasında ./configure betiğinde standart olarak –enable-nls veya –disable-nls değişkenlerini kullanıyor. Bu yüzden use_enable aracını kullanarak, USE bayraklarına bağlı olan bu değişkenlerin kullanılmasını sağlıyoruz.

Ebuild içinde USE bayrağına bağlı olarak bir işlem gerçekleştirecekseniz, şunu kullanabilirsiniz:

if use Z; then
  # Z bayrağı aktifse yapılacaklar..
fi

Sürekli olarak güncelllenen USE bayrakları listesi için buraya bakabilirsiniz.Biraz daha karmaşık bir örnek, bu kez mail-client/sylpheed/sylpheed-1.0.4.ebuild:

# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

inherit eutils

DESCRIPTION="A lightweight email client and newsreader"
HOMEPAGE="http://sylpheed.good-day.net/"
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2"

LICENSE="GPL-2"
KEYWORDS="alpha amd64 hppa ia64 ppc ppc64 sparc x86"
SLOT="0"

IUSE="crypt gnome imlib ipv6 ldap nls pda ssl xface"

DEPEND="=x11-libs/gtk+-1.2*
    nls? ( >=sys-devel/gettext-0.12.1 )
    crypt? ( >=app-crypt/gpgme-0.4.5 )
    gnome? ( media-libs/gdk-pixbuf )
    imlib? ( media-libs/imlib )
    ldap? ( >=net-nds/openldap-2.0.11 )
    pda? ( app-pda/jpilot )
    ssl? ( dev-libs/openssl )
    xface? ( >=media-libs/compface-1.4 )"
RDEPEND="${DEPEND}
    app-misc/mime-types
    x11-misc/shared-mime-info"

src_unpack() {
    unpack ${A}
    cd "${S}"

    epatch "${FILESDIR}"/${PN}-namespace.diff
    epatch "${FILESDIR}"/${PN}-procmime.diff
}

src_compile() {
    econf \
        $(use_enable nls) \
        $(use_enable ssl) \
        $(use_enable crypt gpgme) \
        $(use_enable pda jpilot) \
        $(use_enable ldap) \
        $(use_enable ipv6) \
        $(use_enable imlib) \
        $(use_enable gnome gdk-pixbuf) \
        $(use_enable xface compface) \
        || die

    emake || die
}

src_install() {
    einstall || die "einstall failed"
    dodir /usr/share/pixmaps
    insinto /usr/share/pixmaps
    doins *.png

    if use gnome ; then
        dodir /usr/share/gnome/apps/Internet
        insinto /usr/share/gnome/apps/Internet
        doins sylpheed.desktop
    fi

    dodoc [A-Z][A-Z]* ChangeLog* || die
}

Seçime bağlı olarak değişen (? işaretli) bağımlılıklara dikkat. Ayrıca use_enablesatırları 2 ayrı değişken içermekte. Bu özellik, eğer USE bayrağının ismi tam olarak./configure komutuna gelen değişkenle eşleşmiyorsa, yeniden adlandırma yapmak için kullanılır.

Fazladan bazı açıklamalar içeren skel.ebuild dosyasına bakabilirsiniz. (Genellikle/usr/portage altındadır.)

Ebuild’i denemek ve kullanmak

Oluşturduğunuz ebuild’i denemek için “ebuild ornek.ebuild test” komutu verebilirsiniz.

Normalde Portage ağaç yapısına göre kendi Ebuild dosyalarınızı da yerleştirip kullanabilirsiniz, ancak emerge –sync işleminin ardından /usr/portage altındaki bütün dosyalar yeniden yapılanır ve ekledikleriniz silinir. Bu yüzden/etc/make.conf altında belirleyebileceğiniz PORTDIR_OVERLAY değişkeni ile kendi ebuildlerinizi (aynı ağaç yapısında klasörleyerek) başka bir dizin altında tutup, sürekli olarak kullanabilirsiniz. (Örneğin /usr/local/portage)

Not: http://devmanual.gentoo.org/quickstart/index.html adresindeki resmi gentoo belgesinin aynı lisansa sahip çevirisidir.

Neden Gentoo? (Bölüm 3,yeter)

  • Güvenlik

Gentoo’da güvenlik açısından normal kullanıcı için pek sıkıntı çıkacağını sanmıyorum. Ha yok “ben normal kullanıcı değilim, sunucularım var, bana güvenlik lazım, bir de oturmuş senin yazını okuyorum” derseniz. Sizi hardened gentoo profili ile başbaşa bırakmak isterim..

Sisteminiz için bir profil seçmeniz durumunda, o profil için gerekli ve gereksiz olan bayraklar öntanımlı halde ayarlanır. Mesela “server” seçtiğinizde bir sunucuda pek de ihtiyaç olmayacak “kde, gnome, X” gibi bayraklar kapalı konuma gelir.

Ayrıca Gentoo Güvenlik Tavsiyeleri (GLSA) sayesinde “glsa-check -l affected” tarzında bir komut ile, sisteminizde kurulu paketlerden herhangi birisine ait güvenlik açığı tespit edilmiş ise haberdar olur ve güncellersiniz.

  • Kolay yönetim

Başlıklar birbirine karışıyor ama devam edelim. Gentoo’da sistem yönetimi oldukça kolaydır. Gentoo kullanıcılarının (bazı sunucu tutkunları hariç) grafiksel arayüze sahip sistem yönetim araçları kullanmamasının sebebi de biraz bundan kaynaklanıyor olabilir. Çünkü her yapılan grafiksel arayüzlü yönetim aracı, aynı işi konsolda yapan uygulamayı düşündüğümüz zaman yeterince basit ve kapsamlı değil. (Örneğin emerge arayüzü “olmaya çalışan” porthole ve kuroo)

  • Güncelleme yaptığınızda eğer ilgili programların – CONFIG_PROTECT ile belirttiğiniz klasörlerin içindeki (örneğin /etc) – ayar dosyalarının değişmesi gerekiyor ise, sistem güncellemenin ardından sizi uyarıyor ve etc-updatekomutu ile değişiklikleri onaylamanızı istiyor.
  • Artık portage ile paket setleri oluşturup birden çok paketi tek isim altında yönetmeniz mümkün.
  • gentoolkit diye bir paket var ki tadından yenmez.. Tek komutla bir dosyanın hangi pakete dahil olduğunu bulabilir, kırık kütüphane bağımlılıklarını halledebilir, kullanılan bayrakları ve tanımlarını listeleyebilir, gereksiz paketleri temizleyebilirsiniz..

Şimdilik bu kadar..

Daha da devam edebilirim, etmeyebilirim.. Geçen yazıda teknik detay dedim hiç detaya girmedim. Anlatacak o kadar çok şey var ki, “bu kadar yeter gerisini kurunca anlarsınız” demekle yetiniyorum..

Ha unutmadan. Aslında gentoo kullanmak için en önemli sebep Larry!

Neden Gentoo? (Bölüm 2)

Sıkıntıdan hemen 2. bölüme başlayayım dedim. Karşınızda Gentoo’nun eksileri..glogo

  • Derleme süresi

Evet, ilk bölümde “yıl olmuş 2009, hayvan gibi işlemcim var..” diyen arkadaşı buraya da davet ediyoruz.. Hızlı işlemcilerde süre tabi ki kısalıyor ama, openoffice’i derlemek de hiçbir makinada 1 dakika sürmez diye düşünüyorum. [bkz]

- Olası çözümler:

OpenOffice gibi büyük paketlerinin derlenmiş (-bin) sürümleri de portage’da bulunmakta, onları kullanabilirsiniz..

Birden fazla bilgisayarınız varsa distcc deneyebilirsiniz..

Tmpfs/ccache/psyco gibi hızlandırıcılar kullanabilirsiniz..

Derleyici seçenekleri ile oynayabilirsiniz..

  • Paket erişilebilirliği

Bir eksiliği kalmadı ama yine de belirteyim, ubuntu deposundaki paketler portage’dakinden fazla (sanırım).. Ancak gentoo destekli/desteksiz depolar (overlay) Gentoo’yu oldukça iyi beslemekte. Başka bir dağıtımda yan depoların bu kadar işlevsel olduğunu sanmıyorum. Belki Arch’ın AUR‘u bunun dışında tutulabilir.

Olası çözümler:

Yine de “illa paket yöneticisinden kurmak istiyorum bu pakedi, bugs veya overlay dahilinde bulamadım bir ebuild” diyorsanız, yeni bir ebuild yazmak PKGBUILD yazmak veya .deb, .rpm paketleri oluşturmaktan çok da zor değil..

  • Kullanıcıya aşırı özgürlük

Bu bir eksi midir? Yazmalı mıyım diye düşündüm.. Sonra şu hata bildirimini görünce “kesinlikle yazmalıyım” dedim [bkz]. Paketleri optimizasyonlu derlemek sistemi hızlandırabilir, ama bu işlem için sisteminizi iyi tanımanız ve ona özel ayarları kullanmanız gerek. “Ne bulursam doldurayım da uçsun sistem” diye birşey yok yani.. Shit! Buna olası çözüm falan eklemiyorum, arkadaş pardus kullansın, rahat..

  • Kaynak eksikliği

Cırmalıyoruz eniXma‘da wiki‘de Türkçe birkaç satır yazarak, ama şu da bir gerçek ki gentoo’da her aldığınız hatanın cevabını Türkçe olarak bulamazsınız diğer birçok dağıtımın aksine.. İngilizce + orta derecede sistem (*nix) bilgisi şart.. Sorry dude, it’s just a rule.. (Ama söylemeden geçemem, forum da sağlam [bkz])

Bir bölümün daha sonuna geldik. Gelecek bölümde biraz teknik detaylara girmek istiyorum; ama gelecek bölüm olur mu, o kadar sıkılır mıyım, bilmiyorum.. Gelecek yazıya kadar bol boş zamanlı günler.. cd gürkan && emerge -1 =playstation-2.0-r2

Neden Gentoo? (Bölüm 1)

gentoologoUzun zamandır aklımda gentoo ile ilgili birşeyler yazmak. Bari şu boş zamanımda aradan çıkarayım. Bazı insanlar gentoo’yu efsanelerden duyduğu için, gentoo kullanıcılarını da “yaratık” gibi görüyor. Bu yazıyı da aslında gentoo kullanmak için gayet makul sebeplerin olduğuna dikkat çekmek için yazıyorum. Evet, siz de buyrun kullanın, seveceksiniz.. (Siz dediysem, pardus kurabilen herkesten bahsetmiyorum, ciddiyim..)

Öncelikle bir önsöz: Bu yazının yazı dizisinin (detaylı olacak gibi) altına “windows daha iyi” tarzında yorumlar atacak düşük IQ’lu kişiler okumuyor bunu şu anda eminim (yani umarım.. ne olur öyle olsun yareppim..) Windows-Linux karşılaştırması değil bu, Linux içinde bir değerlendirme..

Artılarını sıralayalım önce.. Ama eski kaynaklarda okuduğunuz gibi kalıplar ile değil, açıklayarak (anlayana)..

  • Efendim biz kaynak koddan derliyoruz.

Ama tutup da elle “./configure, make, make install” komutları vermiyoruz (kaşınmazsak). Gentoo’nun paket yönetim sistemi portage sayesinde, “emerge amarok” tarzında 2 kelimelik bir komut ile amarok kurulumunu başlatıyoruz.

Peki bunun avantajı ne? Yani “yıl olmuş 2009, hayvan gibi işlemcim var, ha kaynak koddan kurmuşum ha derlenmiş paketten..” diyebilirsiniz.. Hız farkı gerçekten o derece hissedilebilir mi? Şüpheliyim.. Diğer dağıtımları kullanan arkadaşlardan “evet bu daha hızlı” yorumları alıyorum ama, diğer dağıtımları denediğimde hız öğesini gentoo’yu tercih etmek için pek de yeterli görmüyorum.. Kaynak koddan derlemenin 2 temel avantajını şöyle sıralayabilirim sanırım:

- Optimizasyon

Gentoo’nun aksine, binary (derlenmiş paketler) sunan diğer dağıtımlar için uygulamaların hızlı olmasından daha öncelikli olarak her ortamda çalışması gelir. Bu yüzden çoğu dağıtım 32 ve 64Bit gibi geniş destekli kollardan ilerler [bkz]. Örnek olarak indirdiğiniz 32Bit bir dağıtım i386 ve üzeri mimarileri destekler (ki i386 tarihi de 1985′e kadar dayanır). En iyi ihtimalle i686 ve üzeri mimari desteği bulunur (bu da ‘95 kökenli sanırım) ama bu kez de i586 ve önceki mimarilerde teoride garip sorunlarla karşılaşmaları gerekir, yoksa i686 işlemcilerinin özelliklerini tam olarak kullanamayan bir i686 sürümü biraz anlamsız kaçar..

Gentoo’da ise kaynak kodu ile elinize geçen bir programı şekillendirmek tamamen sizin elinizdedir. Öyle ki gcc’nin cevherleri olan (C/Cxx)FLAGS , LDFLAGS gibi üretilen kodu bilgisayarınız için en iyi şekilde optimize etmeye yarayan değişkenleri elle ayarlarsınız.

- Bağımlılıklar

Madem örneğimiz amarok oldu, devam edelim onunla. GNOME masaüstü kullandığımızı ve mp4, musicbrainz, real media kavramları ile işimiz olmadığını varsayalım. Diğer dağıtımlarda amarok kurmak istediğinizde qt gibi zorunlu paketlerin yanısıra mp4 çalmak için gerekli kütüphane (libmp4v2), musicbrainz etkileşimi için tunepimp, real için de realplayer vb. paketlerin kurulduğunu görürsünüz. Evet diğer dağıtımlarda bağımlılık sorunu artık ortadan kalktı, şu şununla çakışıyor diye sinir bozucu uyarılar almıyorsunuz artık. Ama saydığım gereksiz paketleri de kurmak zorundasınız (buna karşı cırmalayan dağıtımlar var tabi, mandriva gibi..).

Gentoo’da kullanacağınız ve işinize yaramayacak özellikleri tanımlayabileceğiniz bir sistem mevcut. USE bayrakları. Eğer sistemde “-mp4″ bayrağı var ise, amarok mp4 desteği olmadan derlenip kurulur. Detaylar için amarok ebuild‘inden bir parça, bkz:

RDEPEND="
 !<media-sound/amarok-1.4.10_p20090130-r2
 =dev-lang/ruby-1.8*
 >=media-libs/taglib-1.4
 >=media-libs/xine-lib-1.1.2_pre20060328-r8
 ifp? ( media-libs/libifp )
 ipod? ( >=media-libs/libgpod-0.5.2 )
 kde? ( kde-base/konqueror:3.5 )
 mp4? ( media-libs/libmp4v2 )
 mtp? ( >=media-libs/libmtp-0.3.0 )
 musicbrainz? ( media-libs/tunepimp )
 mysql? ( >=virtual/mysql-4.0 )
 njb? ( >=media-libs/libnjb-2.2.4 )
 opengl? ( virtual/opengl )
 postgres? ( virtual/postgresql-base )
 real? (
 media-libs/alsa-lib
 media-video/realplayer
 )
 visualization? (
 media-libs/libsdl
 =media-plugins/libvisual-plugins-0.4*
 )
"

Anladın sen..

İlk parçanın sonuna geldik. Sorularınız varsa çekinmeyin (ya da çekinin 2. bölüme kadar).. Bu kadar çuvaldızın ardından 2. bölümde detaylar ile elimize iğneyi alırken görüşmek üzere..

   Newer→