smlinux/genpackagelist

125 lines
3.5 KiB
Bash
Executable file

#!/bin/sh
# Originally written by Jason Woodward, https://software.jaos.org/
# Modified for use in SMLinux
#
# This script creates PACKAGES.TXT, CHECKSUMS.md5 and .meta files for use with slapt-get
# Typical usage: put all the final packages inside a directory. copy genpackagelist to
# that directory and then run
# "./genpackagelist all"
#
# This will create PACKAGES.TXT{.gz},
# CHECKSUMS.md5{.gz} and all the .meta files. Copy those files to a suitable directory
# which will be queried by slapt-get.
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_checksums {
echo '' > CHECKSUMS.md5
find . -type f -regextype posix-egrep -regex '.*\.[tgblzikx]+$' -exec md5sum {} \; >> CHECKSUMS.md5
cat CHECKSUMS.md5 | gzip -9 -c - > CHECKSUMS.md5.gz
}
function gen_meta {
if [ ! -f $1 ]; then
echo "File not found: $1"
exit 1;
fi
if [ "`echo $1|grep -E '(.*{1,})\-(.*[\.\-].*[\.\-].*).[tgblzikx]{2,}[ ]{0,}$'`" == "" ]; then
return;
fi
PKGEXT=${1##*.}
case $PKGEXT in
tgz) DECOMPRESS=gzip ;;
tbz) DECOMPRESS=bzip2 ;;
tlz) DECOMPRESS=lzip ;;
txz) DECOMPRESS=xz ;;
esac
echo "Generating meta files, package lists and md5sum files for $1..."
# Create a unique temporary directory and untar the package inside it
TEMPDIR=$(mktemp -d $1.XXXXXX)
tar -xf $1 -C"$TEMPDIR"
NAME=$(echo $1 | sed -re "s/(.*\/)(.*.$PKGEXT)$/\2/")
LOCATION=$(echo $1 | sed -re "s/(.*)\/(.*.$PKGEXT)$/\1/")
SIZE=$(du -bk $1 | awk '{print $1}')
USIZE=$(expr $( $DECOMPRESS -dc $1 | wc -c) / 1024)
if [ ! -f "$TEMPDIR/install/slack-required" ]; then
echo "WARNING: slack-required was not found inside $1"
else
REQUIRED="$(cat "$TEMPDIR/install/slack-required" | xargs -r -iZ echo -n "Z," | sed -e "s/,$//")"
fi
if [ -f "$TEMPDIR/install/slack-conflicts" ]; then
CONFLICTS="$(cat "$TEMPDIR/install/slack-conflicts" | xargs -r -iZ echo -n "Z," | sed -e "s/,$//")"
fi
if [ -f "$TEMPDIR/install/slack-conflicts" ]; then
SUGGESTS=$(cat "$TEMPDIR/install/slack-suggests" | xargs -r)
fi
METAFILE=${NAME%$PKGEXT}meta
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
if [ ! -f "$TEMPDIR/install/slack-desc" ]; then
echo "WARNING: slack-desc was not found inside $1. "
else
cat "$TEMPDIR/install/slack-desc" | grep -E '\w+\:'| grep -v '^#' >> $LOCATION/$METAFILE
fi
echo "" >> $LOCATION/$METAFILE
echo "Done!"
rm -rf $TEMPDIR
}
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 -regex '.*\.[tgblzikx]+$' -print`
do
gen_meta $pkg
done
$0 PACKAGESTXT
$0 MD5
;;
new)
for pkg in `find . -type f -regex '.*\.[tgblzikx]+$' -print`
do
if [ ! -f ${pkg%${pkg##*.}}meta ]; then
gen_meta $pkg
fi
done
;;
PACKAGESTXT)
gen_packages_txt
;;
MD5)
gen_md5_checksums
;;
*)
echo "$0 [pkg [file]|all|new|PACKAGESTXT|MD5]"
;;
esac