X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=build.common;h=36d363e6a62adab9c6d82de379be9a4de4c4ea33;hb=7e2224392d73b3a811fd2c79614332401fbabd02;hp=00165d4568a6641b5fba40eccd16a7158df6f71e;hpb=bd4283fe2d9fbbfcc5b63cdec1c0e6004c2a95a2;p=build.git diff --git a/build.common b/build.common index 00165d45..36d363e6 100644 --- a/build.common +++ b/build.common @@ -1,15 +1,13 @@ # -*-Shell-script-*- # -# $Id$ -# $URL$ -# # Common functions for build scripts used by various packages # incorporated (e.g., build, myplc, myplc-devel, vserver-reference) # # Marc E. Fiuczynski # Copyright (C) 2007 The Trustees of Princeton University +# Thierry Parmentelat INRIA # -# supported distros f8, f10, f12, centos5 +# supported distros f8, f10, f12, f14, f16, centos5, sl6 # # for locating pkgs.py export PATH=.:$PATH @@ -68,32 +66,37 @@ function pl_getReleaseName () { return 0 } -# on fedora 8 or above, we use libnl from the stock repos -# on centos5 we build it locally -function pl_getKexcludes () { - distroname=$1; shift - case $distroname in - ### there is an ugly hack going on around here - # with f12, the dependencies somehow require kernel 2.6.29 but our own kernel is 2.6.27 - # so the ugly workaround here is to let 'kernel-debug' get installed from the stock repos - # we then remove it manually after the image is done, look for kernel-debug below - # relyong on kernel-PAE for this trick won't work, as 64 bits distros don't have PAE of course - f*) - echo 'kernel kernel-PAE kernel-PAEdebug kernel-vserver kernel-devel kernel-headers kernel-debuginfo util-vserver* iptables iptables-ipv6 iproute drupal' ;; - centos5) - echo 'kernel kernel-vserver kernel-devel kernel-headers kernel-debuginfo util-vserver* iptables iproute drupal inotify-tools* libnl' ;; - sl*) - echo 'kernel kernel-debug kernel-debug-devel kernel-devel kernel-doc kernel-firmware kernel-headers iptables iproute' ;; - *) - echo "pl_DISTRO_NAME=$pl_DISTRO_NAME not supported in getexcludes.sh" ; exit 1 ;; - esac +# yum exclusions are now defined in yumexclude.pkgs +# so they can now depend both on the linux distro and the pl distro +function pl_yumexclude () { + keyword=$1; shift + fcdistro=$1; shift + pldistro=$1; shift + builddir=$1; shift + # search for file "yumexclude.pkgs" + yumexclude_file=$(pl_locateDistroFile $builddir $pldistro "yumexclude.pkgs") + # + # check if pkgs.py is in PATH + type -p pkgs.py >& /dev/null || export PATH=$builddir:$PATH + + # parse it + pl_parsePkgs $keyword $fcdistro $pldistro $yumexclude_file || \ + { echo pl_yumexclude failed with fcdistro=$fcdistro and pldistro=$pldistro; return 1 ; } } +# <> fcdistro pldistro builddir +# node side : use the 'nodeyumexclude' keywork in yumexclude.pkgs +function pl_nodeyumexclude () { pl_yumexclude 'nodeyumexclude' "$@" ; } +# server side : use the 'plcyumexclude' keywork in yumexclude.pkgs +function pl_plcyumexclude () { pl_yumexclude 'plcyumexclude' "$@" ; } + + # figure out which redhat distro we are using (fedora, centos, redhat) pl_DISTRO=$(pl_getDistro) # select basearch of the host devel environment - protected for macos for local tests -pl_DISTRO_ARCH=$(uname -i 2>/dev/null|| echo unknownarch) +# try arch for testing stuff on a mac +pl_DISTRO_ARCH=$(uname -i 2>/dev/null || arch 2> /dev/null || echo unknownarch) # the release number (plain number) pl_DISTRO_RELEASE=$(pl_getRelease) @@ -101,9 +104,6 @@ pl_DISTRO_RELEASE=$(pl_getRelease) # the release name - for vserver build ... pl_DISTRO_NAME=$(pl_getReleaseName $pl_DISTRO $pl_DISTRO_RELEASE) -# the packages to exclude -pl_KEXCLUDES=$(pl_getKexcludes $pl_DISTRO_NAME) - # get path to appropriate yumgroups.xml file # Thierry: quick & dirty improvement # this file is updated by the toplevel build, from the .pkgs files @@ -243,15 +243,18 @@ function pl_root_mkfedora () { pkgs_precious=$(pl_parsePkgs precious $fcdistro $pldistro $pkgsfile) # formerly related to mkfedora -k : packages to take from our own build # and thus need be excluded frem the stock repos - pkgs_kexcludes=$(pl_parsePkgs kexclude $fcdistro $pldistro $pkgsfile | sed -e s,@KEXCLUDE@,"$pl_KEXCLUDES",) + # locate builddir by looking for pkgs.py + builddir=$(dirname $(type -p pkgs.py)) + SUBST_NODEYUMEXCLUDE=$(pl_nodeyumexclude $fcdistro $pldistro $builddir) + pkgs_yumexclude=$(pl_parsePkgs yumexclude $fcdistro $pldistro $pkgsfile | sed -e s,@NODEYUMEXCLUDE@,"$SUBST_NODEYUMEXCLUDE",) # get mirrors if not specified with -l if [ -z "$mirrors" ] ; then mirrorsfile=$(pl_locateDistroFile ../build/ $pldistro "$pldistro.mirrors") mirrors=$(pl_parsePkgs mirror $fcdistro $pldistro $mirrorsfile) fi - kexclude_line="" - [ -n "$pkgs_kexcludes" ] && kexclude_line="exclude=$pkgs_kexcludes" + yumexclude_line="" + [ -n "$pkgs_yumexclude" ] && yumexclude_line="exclude=$pkgs_yumexclude" echo "$0: candidate mirrors" for mirror in $mirrors ; do @@ -260,7 +263,7 @@ function pl_root_mkfedora () { # the repo part of the final yum.conf yum_conf_repos=$vroot/xxxmkfedora-repos.confxxx - if ! yumconf_mirrors $yum_conf_repos ../build/ $fcdistro "$kexclude_line" $mirrors ; then + if ! yumconf_mirrors $yum_conf_repos ../build/ $fcdistro "$yumexclude_line" $mirrors ; then echo xxx -- error ; return 1 fi @@ -550,6 +553,7 @@ function pl_parsePkgs () { fcdistro=$1; shift pldistro=$1; shift + echo 1>&2 "pl_parsePkgs: using -a $target_arch -f $fcdistro -d $pldistro $keyword $@" pkgs.py -a $target_arch -f $fcdistro -d $pldistro $keyword "$@" } # usage: pl_getPackages [-a arch] fcdistro pldistro pkg-file[..s] @@ -692,7 +696,7 @@ function yumconf_mirrors () { dest_yumconf=$1; shift builddir=$1; shift fcdistro=$1; shift - kexclude_line="$1" ; shift + yumexclude_line="$1" ; shift mirrors="$@" template=$builddir/mirroring/$fcdistro/yum.repos.d/building.repo.in @@ -704,7 +708,7 @@ function yumconf_mirrors () { fi for mirror in $mirrors; do - if yumconf_mirror $dest_yumconf $template "$kexclude_line" $mirror; then + if yumconf_mirror $dest_yumconf $template "$yumexclude_line" $mirror; then return 0 fi done @@ -718,12 +722,12 @@ function yumconf_mirrors () { function yumconf_mirror () { dest_yumconf=$1; shift template=$1; shift - kexclude_line="$1" ; shift + yumexclude_line="$1" ; shift mirror=$1; shift sed -e "s,@MIRRORURL@,$mirror,g" \ -e "/baseurl=/i\\ -$kexclude_line" $template > $dest_yumconf +$yumexclude_line" $template > $dest_yumconf # capture all lines defining baseurl baseurl_defs=$(grep '^baseurl=' $dest_yumconf) @@ -747,23 +751,21 @@ $kexclude_line" $template > $dest_yumconf return 0 } -# from a yum.conf as generated above, computes the (first) gpgkey url +# from a yum.conf as generated above, computes the gpgkey urls function yumconf_gpgkey () { dest_yumconf=$1; shift - first_line=$(grep '^gpgkey=' $dest_yumconf | head -1) - values=$(echo $first_line | sed -e s,gpgkey=,,) - value=$(echo $values | sed -e 's,$basearch,'"$pl_DISTRO_ARCH",g) - [ -n "$value" ] || return 1 - echo $value + values=$(grep -h '^gpgkey=' $dest_yumconf | sed -e s,gpgkey=,, | sed -e 's,$basearch,'"$pl_DISTRO_ARCH",g | sed -e 's, ,\n,g' | sort | uniq | xargs) + [ -n "$values" ] || return 1 + echo $values return 0 } # patches a yum conf to insert an exclude line in each declared repo function yumconf_exclude () { repo=$1; shift - kexclude_line="$1" ; shift + yumexclude_line="$1" ; shift sed -i -e "/#baseurl=.*$/i\\ -$kexclude_line" $repo +$yumexclude_line" $repo }