X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=build.common;h=450163b4ce6226971859189f7eacb861045065ef;hb=f5cab4881fdf442e53eca4b697753f440e937e00;hp=2f5bacef727458576eca8d91106a6124efd36e83;hpb=a30ecf87bf42697f531e4dbdb796551433db6a8c;p=build.git diff --git a/build.common b/build.common index 2f5bacef..450163b4 100644 --- a/build.common +++ b/build.common @@ -11,10 +11,14 @@ # # supported distros f8, f10, f12, centos5 # +# for locating pkgs.py +export PATH=.:$PATH + # returns 'Fedora' or 'CentOS' for now function pl_getDistro() { if [ -f "/etc/redhat-release" ] ; then distro=$(awk ' { print $1 } ' /etc/redhat-release) + case $distro in Red*) distro="Redhat" ; esac else echo "build.common.pl_getDistro-unknown" exit 1 @@ -26,12 +30,13 @@ function pl_getDistro() { # returns something like 8, 10, or 5.3 function pl_getRelease() { if [ -f "/etc/redhat-release" ] ; then - release=$(awk ' { if ($1=="Fedora" && $2=="Core") print $4 ; if (($1=="Fedora" && $2!="Core")||$1=="CentOS") print $3 } ' /etc/redhat-release) + release=$(awk ' { if ($1=="Fedora" && $2=="Core") print $4 ; if (($1=="Fedora" && $2!="Core")||$1=="CentOS") print $3 ; if ($1=="Red") print $6 } ' /etc/redhat-release) else echo "build.common.pl_getRelease-unknown" exit 1 fi - echo "$release" + # keep only the major number + echo "$release" | cut -d. -f1 return 0 } @@ -43,6 +48,9 @@ function pl_getReleaseName () { [Ff]edora*) releasename=f$release ;; + [Re]edhat*) + releasename=rhel6 + ;; [Cc]entOS*) old_IFS="$IFS" IFS="." @@ -65,8 +73,13 @@ function pl_getReleaseName () { 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-vserver kernel-devel kernel-headers kernel-debuginfo util-vserver* iptables iptables-ipv6 iproute drupal' ;; + 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' ;; *) @@ -222,8 +235,6 @@ function pl_root_mkfedora () { fcdistro=${pl_DISTRO_NAME} pkgs_packages=$(pl_parsePkgs package $fcdistro $pldistro $pkgsfile) pkgs_groups=$(pl_parsePkgs group $fcdistro $pldistro $pkgsfile) - # packages to exclude - pkgs_excludes=$(pl_parsePkgs exclude $fcdistro $pldistro $pkgsfile) # what can get trashed to save space pkgs_junk=$(pl_parsePkgs junk $fcdistro $pldistro $pkgsfile) # but not this @@ -238,13 +249,7 @@ function pl_root_mkfedora () { fi kexclude_line="" - # add them manually as the output of pl_parsePkgs is line-separated - if [ -n "$pkgs_kexcludes" ] ; then - kexclude_line="exclude=" - for kexclude in $pkgs_kexcludes ; do - kexclude_line="$kexclude_line $kexclude" - done - fi + [ -n "$pkgs_kexcludes" ] && kexclude_line="exclude=$pkgs_kexcludes" echo "$0: candidate mirrors" for mirror in $mirrors ; do @@ -361,27 +366,22 @@ fi echo "========== EndDump $yum_conf" yum_options="" - yum --help | grep verbose &> /dev/null && yum_options="$yum_options --verbose" +# yum --help | grep verbose &> /dev/null && yum_options="$yum_options --verbose" yum_options="$yum_options -y" yum_options="$yum_options -c $yum_conf" yum_options="$yum_options --installroot=$vroot" - exclude_arg="" - for exclude in $pkgs_excludes; do - exclude_arg="$exclude_arg --exclude $exclude" - done - # glibc must be specified explicitly for the correct arch to be # chosen. echo "* Installing glibc" # ignore yum's return code that is basically undefined - yum $yum_options $exclude_arg install glibc || : + yum $yum_options install glibc || : # Go, baby, go if [ -n "$pkgs_packages" ] ; then echo "* Installing optional packages" $pkgs_packages # ignore yum's return code that is basically undefined - yum $yum_options $exclude_arg install $pkgs_packages || : + yum $yum_options install $pkgs_packages || : if ! rpm --root $vroot -q $pkgs_packages >/dev/null ; then echo "* Warning: Missing packages" rpm --root $vroot -q $pkgs_packages | grep "not installed" @@ -394,7 +394,7 @@ fi group=$(echo $group_plus | sed -e "s,+++, ,g") echo "* Installing optional group $group" # ignore yum's return code that is basically undefined - yum $yum_options $exclude_arg groupinstall "$group" || : + yum $yum_options groupinstall "$group" || : done fi @@ -413,6 +413,23 @@ fi # Clean yum cache echo "* Cleaning up" + + # NOTE: this hack is for Fedora >= 12. + # if kernel-debug is installed, clean it up + # we link to our version of kernel/initrd and clean up + # kernel-debug manually + if rpm --root $vroot --quiet -q kernel-debug ; then + echo "* Cleaning up kernel-debug - (workaround for f12)" + pushd $vroot/boot/ + rm -rf kernel-boot kernel-bootsmp initrd-boot initrd-bootsmp + ln -s vmlinuz-*${pldistro}* kernel-boot + ln -s vmlinuz-*${pldistro}* kernel-bootsmp + ln -s initrd-*${pldistro}* initrd-boot + ln -s initrd-*${pldistro}* initrd-bootsmp + rpm --root $vroot --nodeps -e kernel-debug || : + popd + fi + # ignore yum's return code that is basically undefined yum $yum_options clean all || : @@ -520,15 +537,23 @@ function pl_fixdirs() { } ########## .pkgs format -# comments start with a # - this is needed only if you use a keyword in a comment +# Usage: pl_parsePkgs keyword [-a arch] fcdistro pldistro pkgs-file[..s] +# pkgs.py should be found in PATH, like this file build.common +function pl_parsePkgs () { + target_arch=$pl_DISTRO_ARCH + keyword=$1;shift + [ "$1" == "-a" ] && { shift; target_arch="$1"; shift; } + fcdistro=$1; shift + pldistro=$1; shift -function pl_getPkgsAttribute () { - keyword=$1; shift - file=$1; shift - # remove any initial white spaces from the result - grep -v '^#' $file | grep --regexp="^${keyword}:" | sed -e "s,${keyword}:,," -e "s,^[[:space:]][[:space:]]*,," + pkgs.py -a $target_arch -f $fcdistro -d $pldistro $keyword "$@" } +# usage: pl_getPackages [-a arch] fcdistro pldistro pkg-file[..s] +function pl_getPackages() { pl_parsePkgs package "$@" ; } +function pl_getGroups() { pl_parsePkgs group "$@" ; } +############################## +### temporary - only for checking the new python version # for a given keyword like 'package' : # we support fcdistro-dependant format, for tokens (pkgname) without whitespace # you can e.g. use @@ -538,12 +563,11 @@ function pl_getPkgsAttribute () { # # values can contain @arch@, @fcdistro@ or @pldistro@ that are replaced with the current values # -# Usage: pl_parsePkgs keyword [-a arch] fcdistro pldistro pkgs-file[..s] # the reason for the -a option is for when we build the build vserver 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 # -function pl_parsePkgs () { +function pl_parsePkgs_old () { target_arch=$pl_DISTRO_ARCH keyword=$1;shift @@ -567,10 +591,7 @@ function pl_parsePkgs () { done return 0 } - -# usage: pl_getPackages [-a arch] fcdistro pldistro pkg-file[..s] -function pl_getPackages() { pl_parsePkgs package "$@" ; } -function pl_getGroups() { pl_parsePkgs group "$@" ; } +############################## # locates a pldistro-dependant file # tries first in build//, then in build/planetlab/ @@ -580,10 +601,13 @@ function pl_locateDistroFile () { pkgsfile=$1; shift pkgspath="" - # if config dir is missing but a .svnpath exists - if [[ -f "$builddir/config.${pldistro}.svnpath" && ! -d "$builddir/config.${pldistro}" ]] ; then - echo 1>&2 "Invoking make to extract remote config.${pldistro}" - make 1>&2 --silent --no-print-directory -C $builddir stage1=true config.${pldistro} + # if config dir is missing but a .svnpath or a .gitpath exists, use it to extract the config dir + configdir="$builddir/config.${pldistro}" + if [ ! -d $configdir ] ; then + if [ -f "${configdir}.svnpath" -o -f "${configdir}.gitpath" ] ; then + echo 1>&2 "Invoking make to extract remote config.${pldistro}" + make 1>&2 --silent --no-print-directory -C $builddir stage1=true config.${pldistro} + fi fi # locate it paths="$builddir/config.$pldistro/$pkgsfile $builddir/config.planetlab/$pkgsfile" @@ -623,8 +647,8 @@ __header pkgsfile=$(pl_locateDistroFile $builddir $pldistro $pkgsname) packages=$(pl_getPackages $fcdistro $pldistro $pkgsfile) - groupname=$(pl_getPkgsAttribute groupname $pkgsfile | sed $sedargs) - groupdesc=$(pl_getPkgsAttribute groupdesc $pkgsfile | sed $sedargs) + groupname=$(pkgs.py groupname $pkgsfile | sed $sedargs) + groupdesc=$(pkgs.py groupdesc $pkgsfile | sed $sedargs) if [ -z "$groupname" -o -z "$groupdesc" ] ; then echo "Cannot find groupname: and groupdesc: in $pkgsfile -- skipped" 1>&2 @@ -736,6 +760,6 @@ function yumconf_exclude () { repo=$1; shift kexclude_line="$1" ; shift - sed -i -e "/baseurl=.*$/i\\ + sed -i -e "/#baseurl=.*$/i\\ $kexclude_line" $repo }