centos5.2
[build.git] / build.common
index 72b166c..22bb8c0 100644 (file)
@@ -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" 
@@ -264,39 +264,55 @@ function pl_root_mkfedora () {
     case $pl_DISTRO in
        Fedora)
            if [ $releasever -ge 7 ] ; then
+               public_gpg_key=RPM-GPG-KEY-fedora
                # Plain Fedora comes with a new layout
-               attempts="
+               attempts_base="
 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
+"
+               optionals="updates"
+               attempts_optional="
+fedora/@optional@/$releasever/$basearch
 "
            else
                # Fedora Core
-               attempts="
+               public_gpg_key=RPM-GPG-KEY-fedora
+               attempts_base="
 fedora/core/$releasever/$basearch/os 
 linux/core/$releasever/$basearch/os 
 core/$releasever/$basearch/os 
 $releasever/$basearch/os
+"
+               optionals="updates extras"
+               attempts_optional="
+linux/core/@optional@/$releasever/$basearch \
+core/@optional@/$releasever/$basearch \
+linux/@optional@/$releasever/$basearch \
+@optional@/$releasever/$basearch \
 "
            fi 
-           public_gpg_key=RPM-GPG-KEY-fedora
            ;;
        CentOS)
            # xxx hacky for now
-           # you can use vbuild-fedora-mirror with -f centos5.1
+           # you can use vbuild-fedora-mirror with -f centos5.2
            # which is hard-coded in mirroring/centos as well
            # for now I do the mapping here, mmhh
+           public_gpg_key=RPM-GPG-KEY-CentOS-$releasever
            case $releasever in
                4) actual=4.6 ;;
-               5) actual=5.1 ;;
+               5) actual=5.2 ;;
                *) actual=$releasever ;;
            esac
-           attempts="
+           attempts_base="
 centos/$actual/os/$basearch
 "
-           public_gpg_key=RPM-GPG-KEY-CentOS-$releasever
+           optionals="updates extras"
+           attempts_optional="
+linux/core/@optional@/$releasever/$basearch \
+core/@optional@/$releasever/$basearch \
+linux/@optional@/$releasever/$basearch \
+@optional@/$releasever/$basearch \
+"
            ;;
        *)
            echo "distro $pl_DISTRO not supported in build.common / mkfedora" ; exit 1
@@ -308,7 +324,7 @@ centos/$actual/os/$basearch
     done
     baseurl=""
     for mirror in $mirrors ; do
-       for attempt in $attempts; do 
+       for attempt in $attempts_base; do 
            attempturl=$mirror/$attempt
            if mkfedora_fetch $attempturl/repodata/repomd.xml >/dev/null ; then
                baseurl=$attempturl
@@ -322,7 +338,7 @@ centos/$actual/os/$basearch
        echo "       could not be found in any of the following locations:"
        echo
        for mirror in $mirrors ; do
-           for attempt in $attempts ; do
+           for attempt in $attempts_base ; do
                echo $mirror/$attempt
            done
        done
@@ -395,7 +411,9 @@ EOF
        corename=""
     fi
 
-    cat >$vroot/etc/yum.conf <<EOF
+# yum.conf is for building only - store in different location than /etc/yum.conf
+    yum_conf=$vroot/etc/mkfedora-yum.conf
+    cat > $yum_conf <<EOF
 [main]
 cachedir=/var/cache/yum
 debuglevel=2
@@ -417,23 +435,30 @@ baseurl=$baseurl/
 $exclude_kernel
 EOF
 
-    for optional in updates extras ; do
-       for optionalurl in \
-           $mirror/linux/core/$optional/$releasever/$basearch \
-           $mirror/core/$optional/$releasever/$basearch \
-           $mirror/linux/$optional/$releasever/$basearch \
-           $mirror/$optional/$releasever/$basearch ; do
+    for optional in $optionals ; do
+       found=""
+       # locating updates/extras
+       attempts=$(echo $attempts_optional | sed -e s,@optional@,$optional,g)
+       for attempt in $attemps; do
+           optionalurl=$mirror/$attempt
+           echo "* $optional : Trying to fetch $optionalurl"
             if mkfedora_fetch $optionalurl/repodata/repomd.xml ; then
-               cat >>$vroot/etc/yum.conf <<EOF
+               echo "* FOUND!"
+               cat >> $yum_conf <<EOF
 
 [$(basename $optional)]
 name=Fedora ${corename}${releasever} - $basearch - $(basename $optional)
 baseurl=$optionalurl/
 $exclude_kernel
 EOF
-                break
+               found=true
+               break
            fi
        done
+       if [ -z "$found" ] ; then
+           echo "pl_root_mkfedora cannot find repository for $optional"
+           exit 1
+       fi
     done
 
     # If we are being built as part of an automated RPM build, solve the
@@ -446,7 +471,7 @@ EOF
        if [ -n "$SUDO_USER" ] ; then
            chown -R $SUDO_USER $RPM_RPMS_DIR
        fi
-       cat >>$vroot/etc/yum.conf <<EOF
+       cat >> $yum_conf <<EOF
 
 [bootstrap]
 name=Bootstrap - $basearch - $RPM_RPMS_DIR/
@@ -454,6 +479,16 @@ baseurl=file://$RPM_RPMS_DIR/
 EOF
 fi
 
+    echo "========== Dumping $yum_conf"
+    cat $yum_conf
+    echo "========== EndDump $yum_conf"
+
+    yum_options=""
+    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"
@@ -462,13 +497,12 @@ fi
     # glibc must be specified explicitly for the correct arch to be
     # chosen.
     echo "* Installing glibc"
-    yum -c $vroot/etc/yum.conf --installroot=$vroot -y $exclude_arg install glibc
+    yum $yum_options $exclude_arg install glibc
 
     # Go, baby, go
     if [ -n "$pkgs_packages" ] ; then
        echo "* Installing optional packages" $pkgs_packages
-       yum -c $vroot/etc/yum.conf --installroot=$vroot -y $exclude_arg \
-           install $pkgs_packages
+       yum $yum_options $exclude_arg 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"
@@ -479,8 +513,7 @@ fi
        ## call yum sequentially to get finer-grained info on dependencies
        for grp in $pkgs_groups ; do
            echo "* Installing optional group $grp" 
-           yum -c $vroot/etc/yum.conf --installroot=$vroot -y $exclude_arg \
-               groupinstall "$grp"
+           yum $yum_options $exclude_arg groupinstall "$grp"
        done
     fi
 
@@ -499,7 +532,7 @@ fi
 
     # Clean yum cache
     echo "* Cleaning up"
-    yum -c $vroot/etc/yum.conf --installroot=$vroot -y clean all
+    yum $yum_options clean all
 
     # Clean RPM state
     rm -f $vroot/var/lib/rpm/__db*
@@ -510,6 +543,9 @@ fi
        ln -s /usr/share/zoneinfo/UTC $vroot/etc/localtime
     fi
 
+    echo "Dumping current list of rpms in /etc/mkfedora-rpms.txt"
+    chroot $vroot rpm -aq | sort > $vroot/etc/mkfedora-rpms.txt
+
     # remove trap handler, as we are about to call it directly.
     trap - ERR INT
 
@@ -607,7 +643,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' :
@@ -673,14 +710,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
 <?xml version="1.0"?>
@@ -704,9 +740,8 @@ __header
   <group>
     <id>$(echo $groupname|tr A-Z a-z)</id>
     <name>$groupname</name>
-    <default>true</default>
     <description>$groupdesc</description>
-    <uservisible>false</uservisible>
+    <uservisible>true</uservisible>
     <packagelist>
 __group_header
         for package in $packages; do