#!/bin/sh # This script is not finished. It is a bunch of ideas for using the # OS package manager to create a spec file of virtual dependencies for # each OS package. I wish to only use tools which are installed in # the OS by default. PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb:/usr/bsd export PATH IGNORE_DIRS='@' date=`date` hostname=`uname -n` osname=`uname -s` # programs we run find_provides=/usr/lib/rpm/find-provides find_requires=/usr/lib/rpm/find-requires #find_provides=/devel/kestes/vendorc/tools/solaris.prov #find_requires=/devel/kestes/vendorc/tools/solaris.req u_pkg=/devel/kestes/vendorc/rpm/scripts/u-pkg.sh # where we write output spec_filedir=/tmp provides_tmp=/tmp/provides.$$ requires_tmp=/tmp/requires.$$ for pkg in `$u_pkg list_all_packages` do # find OS pkg information spec_filename=$spec_filedir/$pkg veryify_cmd=`$u_pkg print_cmd package_version $pkg | sed -e "s/\\$1/$pkg/" ` pkg_version=`$u_pkg package_version $pkg ` # find all the dependencies $u_pkg list_all_files_in_package $pkg | egrep -v \'$IGNORE_DIRS\' | \ $find_provides | sed -e 's/^/Provides: /' > $provides_tmp $u_pkg list_all_files_in_package $pkg | egrep -v \'$IGNORE_DIRS\' | \ $find_requires | sed -e 's/^/Requires: /' > $requires_tmp # create the spec file rm -f $spec_filename echo >> $spec_filename cat $provides_tmp | sort -u >> $spec_filename echo >> $spec_filename cat $requires_tmp | sort -u >> $spec_filename echo >> $spec_filename # Output the rest of the spec file. It is a template stored in this # here file. cat >> $spec_filename <<_EIEIO_ Name: vpkg-$pkg Version: $pkg_version %description This is a virtual RPM package. It contains no actual files. It uses the \`Provides' token from RPM 3.x and later to list many of the shared libraries and interpreters that are part of the base operating system and associated subsets for $osname. This virtual package was constructed based on the vendor/system software installed on the $osname machine named $hostname, as of the date $date. It is intended to supply dependency information about the OS package: $pkg, version: $pkg_version, %prep # nothing to do %build # nothing to do %install # nothing to do %clean # nothing to do %verifyscript PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb:/usr/bsd:/usr/local/bin export PATH expected_version='$pkg_version' current_version=\`$veryify_cmd\` if [ \$expected_version -ne \$current_version ]; then echo "RPM virtual package does not match OS pkg: $pkg" >&2 echo "installed packge version: \$current_verion" >&2 echo "expected package version: \$expected_version" >&2 exit 9 fi %files _EIEIO_ done