(*) generate as many groups in yumgroups as we have pkgs
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Thu, 13 Dec 2007 15:27:13 +0000 (15:27 +0000)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Thu, 13 Dec 2007 15:27:13 +0000 (15:27 +0000)
(*) uses groupname: and groupdesc: in .pkgs for that purpose
(*) could be used for additional stuf, like alpha / beta if needed
(*) not tested yet - might break the build

Makefile
build.common
config.planetlab/bootcd.pkgs
config.planetlab/bootstrapfs-production.pkgs
config.planetlab/bootstrapfs.pkgs
config.planetlab/devel.pkgs
config.planetlab/myplc.pkgs
config.planetlab/native-shell.pkgs
config.planetlab/vserver-planetflow.pkgs
config.planetlab/vserver.pkgs
yumgroups.sh

index 58d0fc6..38086ea 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -180,10 +180,10 @@ all: repo
 endif
 endif
 
-### yumgroups.xml : compute from bootstrapfs.pkgs
+### yumgroups.xml : compute from all known .pkgs files
 RPMS/yumgroups.xml: 
        mkdir -p RPMS
-       yumgroups.sh $(PLDISTRO) bootstrapfs.pkgs > $@
+       yumgroups.sh $(PLDISTRO) > $@
 
 createrepo = createrepo --quiet -g yumgroups.xml RPMS/ 
 
index ae938c3..9d5afa0 100644 (file)
@@ -658,6 +658,14 @@ function pl_fixdirs() {
 
 ########## .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
@@ -720,22 +728,32 @@ function pl_locateDistroFile () {
 
 # experimental
 function yumgroups_from_pkgs () {
-   groupname=$1; shift
-   groupdesc=$1; shift
-   pkgsfile=$1; shift
-   fcdistro=$pl_DISTRO_NAME
-   [[ -n "$@" ]] && fcdistro=$1; shift
-   if [[ -n "$@" ]] ; then 
-       echo "yumgroups_from_pkgs : wrong signature"
-       return 1
-   fi
-
-   packages=$(pl_getPackages $fcdistro $pkgsfile)
+    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>
@@ -743,24 +761,18 @@ function yumgroups_from_pkgs () {
     <description>$groupdesc</description>
     <uservisible>false</uservisible>
     <packagelist>
-__header
-
-    for package in $packages; do 
-       echo "<packagereq type=\"mandatory\">$package</packagereq>"
-    done
-
-cat <<__footer
+__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
 }
 
-function toplevel_yumgroups () {
-    pldistro=$1; shift
-    pkgsname=$1; shift
-    builddir=$(dirname $0)
-    pkgsfile=$(pl_locateDistroFile $builddir $pldistro $pkgsname)
-    yumgroups_from_pkgs 'PlanetLab' 'PlanetLab Node Root' $pkgsfile
-}
 
index f514714..3a0c970 100644 (file)
@@ -1,3 +1,5 @@
+groupname: PlanetLabBootcd
+groupdesc: PlanetLab BootCD
 # from prep.sh, was hardwired as packagelist
 package: filesystem
 package: udev
index df0ed88..e04994d 100644 (file)
@@ -1,3 +1,6 @@
+groupname: BootstrapfsProduction
+groupdesc: PlanetLab Production Node 
+
 # Install the "PlanetLab" group. This requires that the 
 # build system install the appropriate yumgroups.xml file 
 # -- currently build/groups/<pldistro>.xml --
index 351648c..1ea5f6b 100644 (file)
@@ -1,3 +1,7 @@
+# Keeping the old name as it might be referenced elsewhere (node update..)
+# groupname: Bootstrapfs
+groupname: PlanetLab
+groupdesc: PlanetLab Node Root
 package: kernel
 package: kernel-smp
 package: udev
index d1a616e..4900f38 100644 (file)
@@ -1,3 +1,5 @@
+groupname: PlanetLabDevel
+groupdesc: Building PlanetLab
 # general utilities
 package: sendmail sendmail-cf mailx 
 package: make install 
index cdfa0c2..17e606f 100644 (file)
@@ -1,4 +1,5 @@
-# first draft, extracted from plc_config.xml with --packages
+groupname: Myplc
+groupdesc: PlanetLab ServerSide Contents @FCDISTRO@
 ####
 # kernel-vserver is intended for the vserver-reference, but
 # serves the same useful purpose for MyPLC, namely, to
index 5ab7956..45ea732 100644 (file)
@@ -1,3 +1,5 @@
+groupname: PlanetLabNative
+groupdesc: Test Vserver for MyPlc Native
 package: openssh-clients curl
 package: emacs
 package: bind-utils
index 6f7b3ad..c304af8 100644 (file)
@@ -1 +1,3 @@
+groupname: PlanetFlowReference
+groupdesc: PlanetFlow Reference Image
 package: netflow
index 5f90b72..35770a2 100644 (file)
@@ -1,3 +1,5 @@
+groupname: PlanetLabSlice
+groupdesc: PlanetLab Slice Reference Image
 # define packages
 package: bash
 package: coreutils
index 28f9c49..1e8f506 100755 (executable)
@@ -7,8 +7,11 @@ function usage () {
     exit 1
 }
 
-[ "$#" = 2 ] || usage
+[ "$#" = 1 ] || usage
 pldistro=$1; shift
-pkgsname=$1; shift
 
-toplevel_yumgroups $pldistro $pkgsname
+# gather all known pkgs files
+here=$(pwd)
+all_pkgs=$( (cd $here/config.planetlab ; ls -1 *.pkgs ; cd $here/config.$pldistro; ls *.pkgs) | sort -u)
+
+yumgroups_from_pkgs $(dirname $0) $pldistro $pl_DISTRO_NAME $all_pkgs