Merhabalar, Bildiğiniz gibi şimdiye kadar PARM çalışmalarını yerelimdeki bilgisayarımda yürüttüm. 2010'un sonlarına kadarki çalışmalarımı pardus oyun alanıma commit'ledim. Sonrasında PARM bir olgunluğa eriştikten sonra geliştiricilerin 2 ayrı kaynak depo ile uğraşmak zorunda kalcağını görüp bir tek kaynak depodan hem doğal hem de çapraz derleme yapmanın daha uygun olduğunu düşündüm ve Kurumsal 2 devel deposunun kaynak paketlerini tekrar düzenledim. pisi xml politikasını kontrol eden ismail.py betiği yaptığım commitleri kabul etmediğinden son çalışmalarımı commitleyemedim :)
Kurumsal 2 PARM için yapılacak az bir iş kaldığından artık pisi üzerinde gerekli değişiklikleri yapmamız gerektiğini düşünüyorum. Şimdiye kadarki pisi değişikliklerimi uludağ svn ambarındaki oyun alanıma commitledim [1]. Bu değişiklikler sık sık geri aldığım veya değiştirdiğim değişiklikler olduğundan orijinal pisi üzerine merge etmedim. Şmdi pisi üzerinde yapılması gereken kısımlardan bahsetmek istiyorum. * ExcludeArch ~~~~~~~~~~~~~ Kimi paketlerimiz (örneğin memtest86, libx86) yalnızca 8086 mimarisinde çalışmaktadır. Bu sebepten ötürü paketin pspec.xml dosyasına <ExcludeArch>arm.*</ExcludeArch> eklenmesi gerekmektedir. Şu anda desteklediğimiz ARM çekirdeğinin versiyonu 7, little endian (aka. armv7l). Eski pisi-spec kurallarında i686 ve x86_64 değerleri kabul edilmekte. Benim yaptığım düzenlemede ise bu değerler kurallı ifadeler (regex) ile alınmakta. Böylece arm.* değeri verildiğinde birdek çok ARM çekirdeklerini exclude edebiliriz zira daha ileri bir zamanda farklı bir ARM çekirdeği versiyonunu destekleyip desteklemeyeceğimizi bilmiyoruz. ExcludeArch eski hali: <!-- ExcludeArch --> <define name="ExcludeArch"> <element name="ExcludeArch"> <choice> <value>i686</value> <value>x86_64</value> </choice> </element> </define> ExcludeArch düzenlenmiş hali: <!-- ExcludeArch --> <define name="ExcludeArch"> <element name="ExcludeArch"> <choice> <value>i?86</value> <value>x86_64</value> <value>arm.*</value> </choice> </element> </define> Bu değerleri i586, i686, x86_64, armv7l, armv5te ... şeklinde ayrı ayrı da yazabiliriz tabi. Bence regex daha uygun (ekteki patch 0001). * pisi.conf değişikliği ~~~~~~~~~~~~~~~~~~~~~~~~ pisi.conf dosyası üzerinde çalışmakta olduğunuz sisteminiz için bilgiler içerir. Örneğin "destinationdirectory = /" , "host = x86_64-pc-linux-gnu". Çapraz derleme yaparken bu değerleri değiştirmemiz gerekiyor. İlk başlarda pisi üzerinde çapraz derleme yaparken bu değişiklikleri elle yapıyordum, sonradan bunun için şu şekilde bir workaround yaptım: "pisi" komutu çalıştırıldığında pisi.conf, pisi-armv7l komutu çalıştırıldığında pisi-armv7l.conf dosyası config dosyası olarak kullanılıyor. Eğer pisi-{ARCH} komutu çalıştırıldığında pisi-{ARCH}.conf yoksa fallback pisi.conf dosyası parse ediliyor. (ekteki patch 0002) Bu pis bir çözüm biliyorum :). Alternatif olarak, önerebileceğim çözümler şunlar: * "--config-file=" parametresi eklemek: pisi config dosyasının varsayılan değeri /etc/pisi/pisi.conf olur, pisi'ye bu parametrenin verilmesi halinde farklı bir config dosyası parse edilir. * "--arch=" parametresi eklemek: bu parametre verildiğinde /etc/pisi/arch/pisi-< arch parametresi değeri >.conf dosyası parse edilir. Öneriler? Alternatif fikirler? İkinci olarak pisi config dosyasına ek değerler koymam gerekmekte. Bunlar: * crosscompiling : True veya False, bu değere göre actionsapi'de ek parametreler vermek gerekebiliyor. * cppflags : inşa sırasında CPPFLAGS export etmem gerekebiliyor. Native build yapıldığında CPPFLAGS export edilmiyor. * build : autotools.py'de bu değerleri kullanmam gerekebiliyor. * target : autotools.py'de bu değerleri kullanmam gerekebiliyor. Bu değerleri config dosyasına eklememde sakınca var mıdır? ActionsApi için yaptığım değişiklikleri elden geçirmeden size sunmayayım dedim, biraz kirli :). Eklenen kısımlar için oyun alanımdaki pisiye bakabilirsiniz [2]. Kodları temizlediğimde patch leri review'ınıza sunarım (herkes ARM sürecine dahil olduğunda gerekli olacak kısım olduğundan aciliyeti yok). Şu anda PARM için oluşturmuş olduğum son kaynak depoyu eklemek için acil ihtiyacım yalnızca ExcludeArch desteği (ekteki patch 0001). Bu patch i uygulamamda sakınca gören var mıdır? PARM'ı denemek isteyenler için de bir QEMU imajı hazırlayacağım, şu anda PARM farmının oluşturmuş olduğu 1600-1700 ARM paketimiz hazır [3]. PARM ile ilgili geliştirici belgesinin **resmi olmayan** eski ve bitirmediğim hali şurada [4], belgeyi güncellediğimde buradan haber vereceğim ( Semen her gün sorar oldu, yakında bitiririm :) ). [1] http://svn.pardus.org.tr/uludag/trunk/playground/memre/pisi [2] http://svn.pardus.org.tr/uludag/trunk/playground/memre/pisi/pisi/actionsapi/ [3] http://cekirdek.pardus.org.tr/~memre/pardus-arm/armv7l/PardusCorporate2/repo/ [4] http://cekirdek.pardus.org.tr/~memre/obsolete/howto-draft.html -- ~ @memre <Mehmet Emre Atasever> __EOM
>From 0938fe4f4fffaf7629d10dd6660128e6e734159b Mon Sep 17 00:00:00 2001 From: Mehmet Emre Atasever <me...@pardus.org.tr> Date: Thu, 21 Apr 2011 15:24:00 +0300 Subject: [PATCH 1/2] pisi ExcludeArch regex support --- pisi-spec.rng | 3 ++- pisi/operations/build.py | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/pisi-spec.rng b/pisi-spec.rng index a4db427..33c174c 100644 --- a/pisi-spec.rng +++ b/pisi-spec.rng @@ -175,8 +175,9 @@ <define name="ExcludeArch"> <element name="ExcludeArch"> <choice> - <value>i686</value> + <value>i?86</value> <value>x86_64</value> + <value>arm.*</value> </choice> </element> </define> diff --git a/pisi/operations/build.py b/pisi/operations/build.py index 94530bb..faa12d6 100644 --- a/pisi/operations/build.py +++ b/pisi/operations/build.py @@ -311,11 +311,15 @@ class Builder: def build(self): """Build the package in one shot.""" + # excludeArch should accept regex. + # eg. <exludeArch>arm*</exludeArch> armv7l, armv5te matches + # <exludeArch>i?86</exludeArch> i586, i686 matches architecture = ctx.config.values.general.architecture - if architecture in self.spec.source.excludeArch: - raise ExcludedArchitectureException( - _("pspec.xml avoids this package from building for '%s'") - % architecture) + for arch in self.spec.source.excludeArch: + if re.match(arch, architecture): + raise ExcludedArchitectureException( + _("pspec.xml avoids this package from building for '%s'") + % architecture) ctx.ui.status(_("Building source package: %s") % self.spec.source.name) -- 1.7.3.4
>From b10e107e44cc6a98094c957b0146d8f459eb41fa Mon Sep 17 00:00:00 2001 From: Mehmet Emre Atasever <me...@pardus.org.tr> Date: Thu, 21 Apr 2011 16:05:22 +0300 Subject: [PATCH 2/2] get config file from tail of argv0 --- pisi/config.py | 13 ++++++++++++- 1 files changed, 12 insertions(+), 1 deletions(-) diff --git a/pisi/config.py b/pisi/config.py index 97502fc..a56123a 100644 --- a/pisi/config.py +++ b/pisi/config.py @@ -16,6 +16,7 @@ regular PiSi configurations. """ import os +import sys import copy import gettext @@ -46,8 +47,18 @@ class Config(object): __metaclass__ = pisi.util.Singleton def __init__(self, options = Options()): + # Dirty workaround to support multiple configuration files + # FIXME: remove me and find another way + prog_name = sys.argv[0] + arch = prog_name.split('-')[-1] + + # if program name is pisi-armv7l, then config file is pisi-armv7l.conf + cf_name = "/etc/pisi/pisi-%s.conf" % arch + if not os.access(cf_name, os.R_OK): + cf_name = "/etc/pisi/pisi.conf" + self.set_options(options) - self.values = pisi.configfile.ConfigurationFile("/etc/pisi/pisi.conf") + self.values = pisi.configfile.ConfigurationFile(cf_name) # get the initial environment variables. this is needed for # build process. -- 1.7.3.4
pgpZMxBVcR3KI.pgp
Description: PGP signature
_______________________________________________ Gelistirici mailing list Gelistirici@pardus.org.tr http://liste.pardus.org.tr/mailman/listinfo/gelistirici