#!/bin/sh # Copyright 1999 Patrick J. Volkerding, Moorhead, MN # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # For the "slackware" dir only, run this script this way: # mkPACKAGES ./slackware/*/*.t?z > PACKAGES.TXT # Return a package name that has been stripped of the dirname portion # and any of the valid extensions (only): pkgbase() { echo $(basename ${1/%.t[blxg]z/}) } TZ=/usr/share/zoneinfo/UTC export TZ rm -rf /tmp/packages$$ mkdir /tmp/packages$$ # Running K totals, later converted to MB: CTOTAL=0 UTOTAL=0 for file in $* ; do DIR=`dirname $file` # Avoid problems from using '.tgz' as an abbreviation for '.tar.gz' in # source packages: if echo $DIR | grep source 1> /dev/null 2> /dev/null ; then continue fi FILE=$(pkgbase $file) DATE="`ls -l $file | cut -b43-54`" COMPSIZE=$(du -s $file | cut -f 1) CTOTAL=`expr $CTOTAL + $COMPSIZE` if [ ! -d $HOME/.uncompressed-packages ]; then mkdir -p $HOME/.uncompressed-packages fi if [ -r $HOME/.uncompressed-packages/$FILE ]; then FULLSIZE=$(cat $HOME/.uncompressed-packages/$FILE) else # Determine extension: packageext="$( echo $file | rev | cut -f 1 -d . | rev)" # Determine compressor utility: case $packageext in 'tgz' ) packagecompression=gzip ;; 'tbz' ) packagecompression=bzip2 ;; 'tlz' ) packagecompression=lzma ;; 'txz' ) packagecompression=xz ;; esac cat $file | $packagecompression -dc | dd 1> /dev/null 2> $HOME/.uncompressed-packages/tmpsize$$ FULLSIZE="$(expr $(cat $HOME/.uncompressed-packages/tmpsize$$ | head -n 1 | cut -f 1 -d +) / 2)" echo $FULLSIZE > $HOME/.uncompressed-packages/$FILE rm -f $HOME/.uncompressed-packages/tmpsize$$ fi UTOTAL=`expr $UTOTAL + $FULLSIZE` SUFFIX=`basename $DIR` echo "PACKAGE NAME: $(basename $file)" > /tmp/packages$$/$FILE echo "PACKAGE LOCATION: $DIR" >> /tmp/packages$$/$FILE # echo "PACKAGE LAST MODIFIED: $DATE" >> /tmp/packages$$/$FILE echo "PACKAGE SIZE (compressed): $COMPSIZE K" >> /tmp/packages$$/$FILE echo "PACKAGE SIZE (uncompressed): $FULLSIZE K" >> /tmp/packages$$/$FILE echo "PACKAGE DESCRIPTION:" >> /tmp/packages$$/$FILE if [ -r $DIR/disk$SUFFIX ]; then grep -a "^$FILE:" $DIR/disk$SUFFIX | uniq >> /tmp/packages$$/$FILE elif [ -r $DIR/$FILE.txt ]; then cat $DIR/$FILE.txt | grep -a : | uniq >> /tmp/packages$$/$FILE else grep -a "^$FILE:" $DIR/package_descriptions 2> /dev/null | uniq >> /tmp/packages$$/$FILE fi echo >> /tmp/packages$$/$FILE done # Convert totals from K to MB: CTOTAL=`expr $CTOTAL / 1024` UTOTAL=`expr $UTOTAL / 1024` echo echo "PACKAGES.TXT; `date`" echo echo "This file provides details on the Slackware packages found" if echo $1 | grep -F slakware 1> /dev/null 2> /dev/null ; then echo "in the ./slakware/ directory." elif echo $1 | grep -F pasture 1> /dev/null 2> /dev/null ; then echo "in the ./pasture/ directory." elif echo $1 | grep -F extra 1> /dev/null 2> /dev/null ; then echo "in the ./extra/ directory." elif echo $1 | grep -F slackware64 1> /dev/null 2> /dev/null ; then echo "in the ./slackware64/ directory." elif echo $1 | grep -F slackware 1> /dev/null 2> /dev/null ; then echo "in the ./slackware/ directory." elif echo $1 | grep -F contrib 1> /dev/null 2> /dev/null ; then echo "in the ./contrib/ directory." elif echo $1 | grep -F testing 1> /dev/null 2> /dev/null ; then echo "in the ./testing/ directory." elif echo $1 | grep -F patches 1> /dev/null 2> /dev/null ; then echo "in the ./patches/ directory." else echo "in this directory." fi echo echo "Total size of all packages (compressed): $CTOTAL MB" echo "Total size of all packages (uncompressed): $UTOTAL MB" echo echo cat /tmp/packages$$/* echo rm /tmp/packages$$/* rmdir /tmp/packages$$