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
scripti. 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öntememake 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_URI
altı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. DEPEND
değ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, .spec_dosyalarını da gözden geçirin.
Yamalar ile Ebuild
Çoğunlukla yama uygulamamız gerekir. src_unpack
fonksiyonuna yardımcı olan epatch
fonksiyonu ile bu işlemi yapabiliriz. epatch
kullanmak için Portage’a eutils
sınıfını belirtmemiz gerekir. “” Bu işlem de başlangıçtaki inherit eutils
satı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_enable
satı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.