#!/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