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"
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
+ public_gpg_key=RPM-GPG-KEY-fedora
+ # Plain Fedora comes with a new layout
+ 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
"
- else
- attempts="
- linux/core/$releasever/$basearch/os
- core/$releasever/$basearch/os
- $releasever/$basearch/os
- "
- fi
+ optionals="updates"
+ attempts_optional="
+fedora/@optional@/$releasever/$basearch
+"
+ else
+ # Fedora Core
+ 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
+ ;;
+ 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
+ public_gpg_key=RPM-GPG-KEY-CentOS-$releasever
+ case $releasever in
+ 4) actual=4.6 ;;
+ 5) actual=5.1 ;;
+ *) actual=$releasever ;;
+ esac
+ attempts_base="
+centos/$actual/os/$basearch
+"
+ 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
+ esac
echo "$0: candidate mirrors"
for mirror in $mirrors ; do
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
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
# 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
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
$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
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/
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"
# 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"
## 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
# 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*
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
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' :
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"?>
<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