function pl_root_rpm_macros () {
cat <<EOF
%_install_langs C:en_US:en
-%_netsharedpath /proc:/dev/pts
+%_netsharedpath /proc:/dev/pts:/usr/share/info
%_excludedocs 1
%__file_context_path /dev/null
EOF
)
function mkfedora_usage() {
- echo "Usage: mkfedora [OPTION]... [basedir]"
- echo " -l url Fedora mirror location. Defaults to try:"
+ echo "Usage: pl_root_mkfedora [OPTION]... basedir"
+ echo " -l url Fedora mirror location. Default is to try:"
for mirror in "${mirrors[@]}" ; do
echo " $mirror"
done
function pl_root_mkfedora () {
- echo "* Entering pl_root_mkfedora " "$@"
+ echo "* Entering pl_root_mkfedora" "$@"
+
+ if [ $UID -ne 0 ] ; then
+ echo "Error: You must run this script as root."
+ exit 1
+ fi
# Verbosity
verbose=0
done
shift $(($OPTIND - 1))
- if [ ! -d "$1" ] ; then
- mkfedora_usage
- fi
-
- vroot=$(cd $1 && pwd -P)
-
- if [ $UID -ne 0 ] ; then
- echo "Error: You must run this script as root."
- exit 1
- fi
+ [[ -n "$@" ]] || mkfedora_usage
+ vroot=$1 ; shift
+ vroot=$(cd $vroot && pwd -P)
+ [[ -z "$@" ]] || mkfedora_usage
+ [ -d $vroot ] || mkfedora_usage
function mkfedora_fetch ()
{
done
echo
mkfedora_usage
+ else
+ echo "* selecting mirror with baseurl=$baseurl"
fi
# Do not tolerate errors
options="$@"
pl_root_makedevs $root
- pl_root_mkfedora $root $options
+ pl_root_mkfedora $options $root
# Disable all services in reference image
chroot $root sh -c "/sbin/chkconfig --list | awk '{ print \$1 }' | xargs -i /sbin/chkconfig {} off"
fi
rm -rf ${root}/${datadir}
mkdir -p $(dirname ${root}/${datadir})
- ln -nsf /${store}/${datadir} ${root}/${datadir}
+ ln -nsf ${store}/${datadir} ${root}/${datadir}
done
}
(cd $root && tar cpf - .) | (cd $tmp && tar xpf -)
# Unmount it
- umount -l $tmp
+ umount $tmp
rmdir $tmp
trap - ERR INT
}
########## .pkgs format
# comments start with a # - this is needed only if you use a keyword in a comment
+
+function pl_getPkgsAttribute () {
+ keyword=$1; shift
+ file=$1; shift
+ grep -v '^#' $file | grep --regexp="^${keyword}:" | sed -e "s,${keyword}:,,"
+}
+
+
# for a given keyword like 'package' :
# we support fcdistro-dependant format, for tokens (pkgname) without whitespace
# you can e.g. use
# grab regular descriptions
all=$(grep -v '^#' "$@" | grep --regexp="^${keyword}:" | sed -e "s,${keyword}:,,")
# grab additions
- add=$(grep -v '^#' "$@" | grep --regexp="^${keyword}+${fcdistro}:" | sed -e "s,${keyword}\+${fcdistro}:,,")
+ add=$(grep -v '^#' "$@" | grep --regexp="^${keyword}+${fcdistro}:" | sed -e "s,${keyword}+${fcdistro}:,,")
# grab exclusions
- sub=$(grep -v '^#' "$@" | grep --regexp="^${keyword}\-${fcdistro}:" | sed -e "s,${keyword}\-${fcdistro}:,,")
+ sub=$(grep -v '^#' "$@" | grep --regexp="^${keyword}-${fcdistro}:" | sed -e "s,${keyword}-${fcdistro}:,,")
for i in $all $add; do
for exclude in $sub; do
return 0
fi
}
+
+# experimental
+function yumgroups_from_pkgs () {
+ builddir=$1; shift
+ pldistro=$1; shift
+ fcdistro=$1; shift
+ pkgsnames=$@
+
+sedargs="-e s,@FCDISTRO@,$fcdistro,g"
+
+ cat <<__header
+<?xml version="1.0"?>
+<!DOCTYPE comps PUBLIC "-//Red Hat, Inc.//DTD Comps info//EN" "comps.dtd">
+<comps>
+__header
+
+ for pkgsname in $pkgsnames; do
+ pkgsfile=$(pl_locateDistroFile $builddir $pldistro $pkgsname)
+ packages=$(pl_getPackages $fcdistro $pkgsfile)
+
+ groupname=$(pl_getPkgsAttribute groupname $pkgsfile | sed $sedargs)
+ groupdesc=$(pl_getPkgsAttribute groupdesc $pkgsfile | sed $sedargs)
+
+ if [ -z "$groupname" -o -z "$groupdesc" ] ; then
+ echo "Cannot find groupname: and groupdesc: in $pkgsfile -- skipped" 1>&2
+ continue
+ fi
+
+ cat << __group_header
+ <group>
+ <id>$(echo $groupname|tr A-Z a-z)</id>
+ <name>$groupname</name>
+ <default>true</default>
+ <description>$groupdesc</description>
+ <uservisible>false</uservisible>
+ <packagelist>
+__group_header
+ for package in $packages; do
+ echo "<packagereq type=\"mandatory\">$package</packagereq>"
+ done
+ cat << __group_footer
+ </packagelist>
+ </group>
+__group_footer
+ done
+cat <<__footer
+</comps>
+__footer
+}
+
+