#!/bin/sh # # *************************************************************************** # * This program is free software; you can redistribute it and/or modify * # * it under the terms of the GNU General Public License as published by * # * the Free Software Foundation; either version 2 of the License, or * # * (at your option) any later version. * # * * # * This program is distributed in the hope that it will be useful, * # * but WITHOUT ANY WARRANTY; without even the implied warranty of * # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * # * GNU General Public License for more details. * #* * # * You should have received a copy of the GNU General Public License * # * along with this program; if not, write to the * # * Free Software Foundation, Inc., * # * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * # ***************************************************************************/ # # metagen.sh brought to you by JP # and Stefano Stabellini # tweaked for lzma support added by George Vlahavas # # DL_URL=http://your_remove_pkg_host.tld/packages/ # function gen_packages_txt { echo '' > PACKAGES.TXT find . -type f -name '*.meta' -exec cat {} \; >> PACKAGES.TXT cat PACKAGES.TXT | gzip -9 -c - > PACKAGES.TXT.gz } function gen_md5 { md5sum ${1} > ${1%t[glx]z}md5 cat ${1%t[glx]z}md5 >> CHECKSUMS.md5 sed -i "s| \.\(.*\)/\(.*\)| \2|" ${1%t[glx]z}md5 } function gen_meta { if [ ! -f $1 ]; then echo "File not found: $1" exit 1; fi if [ "`echo $1|grep -E '(.*{1,})\-(.*[\.\-].*[\.\-].*).t[glx]z[ ]{0,}$'`" == "" ]; then return; fi NAME=$(echo $1|sed -re "s/(.*\/)(.*.t[glx]z)$/\2/") LOCATION=$(echo $1|sed -re "s/(.*)\/(.*.t[glx]z)$/\1/") if [[ `echo $1 | grep "tgz$"` ]]; then SIZE=$( expr `gunzip -l $1 |tail -1|awk '{print $1}'` / 1024 ) USIZE=$( expr `gunzip -l $1 |tail -1|awk '{print $2}'` / 1024 ) elif [[ `echo $1 | grep "t[lx]z$"` ]]; then SIZE=$( expr `ls -l $1 | awk '{print $5}'` / 1024 ) #USIZE is only an appoximation, nothing similar to gunzip -l for lzma yet USIZE=$[$SIZE * 4 ] fi #REQUIRED=$(tar xfO $1 install/slack-required 2>/dev/null|xargs -r -iZ echo -n "Z,"|sed -e "s/,$//") #CONFLICTS=$(tar xfO $1 install/slack-conflicts 2>/dev/null|xargs -r -iZ echo -n "Z,"|sed -e "s/,$//") #SUGGESTS=$(tar xfO $1 install/slack-suggests 2>/dev/null|xargs -r ) METAFILE=${NAME%t[glx]z}meta if test -f $LOCATION/${NAME%t[glx]z}dep then REQUIRED="`cat $LOCATION/${NAME%t[glx]z}dep`" fi echo "PACKAGE NAME: $NAME" > $LOCATION/$METAFILE if [ -n "$DL_URL" ]; then echo "PACKAGE MIRROR: $DL_URL" >> $LOCATION/$METAFILE fi echo "PACKAGE LOCATION: $LOCATION" >> $LOCATION/$METAFILE echo "PACKAGE SIZE (compressed): $SIZE K" >> $LOCATION/$METAFILE echo "PACKAGE SIZE (uncompressed): $USIZE K" >> $LOCATION/$METAFILE echo "PACKAGE REQUIRED: $REQUIRED" >> $LOCATION/$METAFILE echo "PACKAGE CONFLICTS: $CONFLICTS" >> $LOCATION/$METAFILE echo "PACKAGE SUGGESTS: $SUGGESTS" >> $LOCATION/$METAFILE echo "PACKAGE DESCRIPTION:" >> $LOCATION/$METAFILE SOFTNAME=${NAME%-*}; SOFTNAME=${SOFTNAME%-*}; SOFTNAME=${SOFTNAME%-*} if test ! -f $LOCATION/${NAME%t[glx]z}txt then if [[ `echo $1 | grep "tgz$"` ]]; then tar xfO $1 install/slack-desc |grep -E '[^[:space:]]*\:'|grep -v '^#' > $LOCATION/${NAME%t[glx]z}txt elif [[ `echo $1 | grep "t[lx]z$"` ]]; then xz -c -d $1 | tar xO install/slack-desc |grep -E '[^[:space:]]*\:'|grep -v '^#' > $LOCATION/${NAME%t[glx]z}txt fi fi cat $LOCATION/${NAME%t[glx]z}txt >> $LOCATION/$METAFILE if [[ `echo $1 | grep "tgz$"` ]]; then echo -n "$SOFTNAME: Provided libs : " >> $LOCATION/$METAFILE tar -tf $1 | grep "usr/lib.*so" | sed -n 's@.*/\([^/]*\)$@\1@p' | tr '\n' ' ' >> $LOCATION/$METAFILE elif [[ `echo $1 | grep "t[lx]z$"` ]]; then echo -n "$SOFTNAME: Provided libs : " >> $LOCATION/$METAFILE xz -c -d $1 | tar -t | grep -E "usr/lib.*\.so" | sed -n 's@.*/\([^/]*\)$@\1@p' | tr '\n' ' ' >> $LOCATION/$METAFILE fi echo "" >> $LOCATION/$METAFILE } case "$1" in pkg) if [ -n "$2" ]; then gen_meta $2 else echo "$0 [pkg [file]|all|new|PACKAGESTXT|MD5]" fi ;; all) for pkg in `find . -type f -name '*.t[glx]z' -print` do gen_meta $pkg done $0 PACKAGESTXT ;; new) for pkg in `find . -type f -name '*.t[glx]z' -print` do if [ ! -f ${pkg%t[glx]z}meta ]; then gen_meta $pkg fi done ;; miss) [ ! "$2" ] && exit 1 for pkg in `find . -type f -name '*.t[glx]z' -print` do if [ ! "$(tar -tf $pkg | grep $2)" ]; then echo "no $2 in $pkg :(" fi done ;; provide) [ ! "$2" ] && exit 1 for pkg in `find . -type f -name '*.t[glx]z' -print` do if [ "$(tar -tf $pkg | grep $2)" ]; then echo "found $2 in $pkg :)" fi done ;; PACKAGESTXT) gen_packages_txt ;; MD5) echo '' > CHECKSUMS.md5 for pkg in `find . -type f -name '*.t[glx]z' -print` do gen_md5 ${pkg} done cat CHECKSUMS.md5 | gzip -9 -c - > CHECKSUMS.md5.gz ;; *) echo "$0 [pkg [file]|all|new|PACKAGESTXT|MD5|]" echo "$0 [miss|provide] pattern" ;; esac