X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=build.common;h=a21d7093458da253e5788991ef4254b859ab65bc;hb=0e499a416e19f1290f78a69f52626415b8f97cc1;hp=6ebd55bc64974409bb5758739aed716f55dd1a1a;hpb=248321906bf3d97a125e6d5479b73f4198bbbb47;p=build.git diff --git a/build.common b/build.common index 6ebd55bc..a21d7093 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) +# incorporated (e.g., build, bootcd, nodeimage, sliceimage) # # 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 @@ -40,7 +38,7 @@ function pl_getRelease() { return 0 } -# returns stuff for vserver, i.e. something like 'f8' or 'centos5' +# returns distro shortname, something like 'f8' or 'centos5' function pl_getReleaseName () { distro=$1; shift release=$1; shift @@ -68,42 +66,44 @@ 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) -# the release name - for vserver build ... +# the release name - something like 'f8' or 'sl6' 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 @@ -172,8 +172,6 @@ function pl_root_makedevs() { # For pseudo ttys mkdir -p $vroot/dev/pts - # (Might have to remove the following for vserver-reference.) - # for tmpfs mount mkdir -p $vroot/dev/shm @@ -182,7 +180,7 @@ function pl_root_makedevs() { mknod -m 600 $vroot/dev/net/tun c 10 200 # For mkinitrd (in case a kernel is being installed) - # As well as for loop back mounting within a vserver. + # As well as for loop back mounting within a vm. for i in $(seq 0 255) ; do mknod -m 640 $vroot/dev/loop$i b 7 $i done @@ -194,7 +192,7 @@ function mkfedora_usage() { echo " Defaults are searched in .mirrors" echo " -v Be verbose" echo " -h This message" - echo " target selection (defaults based on current build vserver)" + echo " target selection (defaults based on current build VM context)" echo " -r release Fedora release number (default: $releasever)" echo " -a arch Fedora architecture (default: $basearch)" exit 1 @@ -212,7 +210,7 @@ function pl_root_mkfedora () { # Verbosity verbose=0 -# Release and architecture to install : defaults to current vserver's settings or previously parsed fedora_options +# Release and architecture to install : defaults to current vm settings or previously parsed fedora_options releasever=$pl_DISTRO_RELEASE basearch=$pl_DISTRO_ARCH @@ -243,15 +241,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 +261,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 +551,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] @@ -567,7 +569,7 @@ function pl_getGroups() { pl_parsePkgs group "$@" ; } # # values can contain @arch@, @fcdistro@ or @pldistro@ that are replaced with the current values # -# the reason for the -a option is for when we build the build vserver itself; in this case +# the reason for the -a option is for when we build the build vm itself; in this case # pl_DISTRO_ARCH is the one we obtain from the root context, and that's wrong # specify -sa arch AFTER keyword, so as to keep pl_getPackages and pl_getGroups simple # @@ -692,7 +694,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 +706,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 +720,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) @@ -751,7 +753,7 @@ $kexclude_line" $template > $dest_yumconf function yumconf_gpgkey () { dest_yumconf=$1; shift - values=$(grep -h '^gpgkey=' $dest_yumconf | sed -e s,gpgkey=,, | sed -e 's,$basearch,'"$pl_DISTRO_ARCH",g | xargs) + 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 @@ -760,8 +762,8 @@ function yumconf_gpgkey () { # 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 }