X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=build.common;h=9cd25f2a8096e39d39d7d7875c78b37c557bc1e5;hb=cf459816394cf53a45173082a7b40436494cd4aa;hp=c04ef96cf96d72b531b6e5ace3325502818b1842;hpb=bb09ce31e7ceef55541964c7ccf63fcfa4e37e3e;p=build.git diff --git a/build.common b/build.common index c04ef96c..9cd25f2a 100644 --- a/build.common +++ b/build.common @@ -57,12 +57,12 @@ function pl_getReleaseName () { releasename=f$release fi ;; [Cc]entOS*) - if [ "$release" = "4.5" ] ; then - # centos 4.5 is just centos4 + enhancements - releasename=centos4 - else - releasename=centos$release - fi ;; + old_IFS="$IFS" + IFS="." + set -- $release + IFS="$old_IFS" + releasename=centos$1 + ;; *) releasename="unknown-name-for-${pl_DISTRO}-please-edit-build.common" echo 1>&2 "build.common: WARNING - releasename not set for distro=$distro" @@ -79,9 +79,6 @@ 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) -# let mkfedora select one of its mirrors -pl_DISTRO_URL="" - # the release number (plain number) pl_DISTRO_RELEASE=$(pl_getRelease) @@ -172,23 +169,10 @@ function pl_root_makedevs() { done } -# Default yum repositories to try -mirrors=( - file:///data/fedora - http://localhost/fedora - http://build.planet-lab.org/fedora - http://coblitz.codeen.org/coblitz.planet-lab.org/pub/fedora - ftp://mirror.cs.princeton.edu/pub/mirrors/fedora - ftp://mirror.stanford.edu/pub/mirrors/fedora - ftp://rpmfind.net/linux/fedora - ) - function mkfedora_usage() { echo "Usage: pl_root_mkfedora [OPTION]... basedir pldistro pkgsfile(s)" - echo " -l url Fedora mirror location. Default is to try:" - for mirror in "${mirrors[@]}" ; do - echo " $mirror" - done + echo " -l url Fedora mirror location." + echo " Defaults are searched in .mirrors" echo " -v Be verbose" echo " -h This message" echo " target selection (defaults based on current build vserver)" @@ -212,20 +196,13 @@ function pl_root_mkfedora () { # Release and architecture to install : defaults to current vserver's settings or previously parsed fedora_options releasever=$pl_DISTRO_RELEASE basearch=$pl_DISTRO_ARCH - [ -n "$pl_DISTRO_URL" ] && mirrors=($pl_DISTRO_URL) # Get options + mirrors="" while getopts "l:r:a:vh" opt ; do case $opt in l) - if echo $OPTARG | grep -q -i '^\(file\|http[s]*\)://' ; then - mirrors=($OPTARG) - else - # xxx rather use this as a .mirrors file, searched in config.pldistro/ - # that would use the pkgs syntax with mirror: - #mirrors=($(pl_parsePkgs mirror $(pl_locateDistroFile ../build/ $OPTARG.mirrors))) - mirrors=(file://$OPTARG) - fi + mirrors="$mirrors $OPTARG" ;; r) releasever=$OPTARG @@ -262,37 +239,75 @@ function pl_root_mkfedora () { pkgs_precious=$(pl_parsePkgs precious $fcdistro $pldistro $pkgsfile) # formerly related to mkfedora -k pkgs_kexcludes=$(pl_parsePkgs kexclude $fcdistro $pldistro $pkgsfile) + # 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 exclude_kernel="" - [ -n "$pkgs_kexcludes" ] && exclude_kernel="exclude=$pkgs_excludes" + # add them manually as the output of pl_parsePkgs is line-separated + if [ -n "$pkgs_kexcludes" ] ; then + exclude_kernel="exclude=" + for kexclude in $pkgs_kexcludes ; do + exclude_kernel="$exclude_kernel $kexclude" + done + fi function mkfedora_fetch () { curl --fail --silent --max-time 60 "$1" } - # set list of attempted locations according to releasever - if [ $releasever -ge 7 ] ; then - attempts=" + # set list of attempted locations according to target distro + # xxx all this should go into mirroring/ somehow + case $pl_DISTRO in + Fedora) + if [ $releasever -ge 7 ] ; then + # Plain Fedora comes with a new layout + attempts=" +fedora/releases/$releasever/Everything/$basearch/os linux/releases/$releasever/Everything/$basearch/os $releasever/Everything/$basearch/os core/$releasever/Everything/$basearch/os linux/core/$releasever/$basearch/os " - else - attempts=" - linux/core/$releasever/$basearch/os - core/$releasever/$basearch/os - $releasever/$basearch/os - " - fi + else + # Fedora Core + attempts=" +fedora/core/$releasever/$basearch/os +linux/core/$releasever/$basearch/os +core/$releasever/$basearch/os +$releasever/$basearch/os +" + fi + public_gpg_key=RPM-GPG-KEY-fedora + ;; + CentOS) + # xxx hacky for now + # you can use vbuild-fedora-mirror with -f centos5.1 + # which is hard-coded in mirroring/centos as well + # for now I do the mapping here, mmhh + case $releasever in + 4) actual=4.6 ;; + 5) actual=5.1 ;; + *) actual=$releasever ;; + esac + attempts=" +centos/$actual/os/$basearch +" + public_gpg_key=RPM-GPG-KEY-CentOS-$releasever + ;; + *) + echo "distro $pl_DISTRO not supported in build.common / mkfedora" ; exit 1 + esac echo "$0: candidate mirrors" - for mirror in "${mirrors[@]}" ; do + for mirror in $mirrors ; do echo "* candidate mirror $mirror" done baseurl="" - for mirror in "${mirrors[@]}" ; do + for mirror in $mirrors ; do for attempt in $attempts; do attempturl=$mirror/$attempt if mkfedora_fetch $attempturl/repodata/repomd.xml >/dev/null ; then @@ -306,7 +321,7 @@ linux/core/$releasever/$basearch/os echo "Error: $releasever/$basearch/os/repodata/repomd.xml" echo " could not be found in any of the following locations:" echo - for mirror in ${mirrors[@]} ; do + for mirror in $mirrors ; do for attempt in $attempts ; do echo $mirror/$attempt done @@ -370,7 +385,7 @@ EOF # Initialize RPM database in reference image mkdir -p $vroot/var/lib/rpm rpm --root $vroot --initdb - rpm --root $vroot --import $baseurl/RPM-GPG-KEY-fedora + rpm --root $vroot --import $baseurl/$public_gpg_key # Initialize yum in reference image mkdir -p $vroot/var/cache/yum $vroot/var/log @@ -451,18 +466,18 @@ fi # Go, baby, go if [ -n "$pkgs_packages" ] ; then - echo "* Installing optional packages" "$pkgs_packages" + echo "* Installing optional packages" $pkgs_packages yum -c $vroot/etc/yum.conf --installroot=$vroot -y $exclude_arg \ - install "$pkgs_packages" - if ! rpm --root $vroot -q "$pkgs_packages" >/dev/null ; then + 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" + rpm --root $vroot -q $pkgs_packages | grep "not installed" fi fi if [ -n "$pkgs_groups" ] ; then ## call yum sequentially to get finer-grained info on dependencies - for grp in "$pkgs_groups" ; do + for grp in $pkgs_groups ; do echo "* Installing optional group $grp" yum -c $vroot/etc/yum.conf --installroot=$vroot -y $exclude_arg \ groupinstall "$grp" @@ -592,7 +607,8 @@ function pl_fixdirs() { function pl_getPkgsAttribute () { keyword=$1; shift file=$1; shift - grep -v '^#' $file | grep --regexp="^${keyword}:" | sed -e "s,${keyword}:,," + # remove any initial white spaces from the result + grep -v '^#' $file | grep --regexp="^${keyword}:" | sed -e "s,${keyword}:,," -e "s,^[[:space:]][[:space:]]*,," } # for a given keyword like 'package' : @@ -658,14 +674,13 @@ function pl_locateDistroFile () { fi } -# experimental function yumgroups_from_pkgs () { builddir=$1; shift pldistro=$1; shift fcdistro=$1; shift pkgsnames=$@ -sedargs="-e s,@FCDISTRO@,$fcdistro,g" + sedargs="-e s,@FCDISTRO@,$fcdistro,g" cat <<__header @@ -689,9 +704,8 @@ __header $(echo $groupname|tr A-Z a-z) $groupname - true $groupdesc - false + true __group_header for package in $packages; do