mid-kid
8 years ago
1 changed files with 174 additions and 0 deletions
@ -0,0 +1,174 @@ |
|||||
|
#!/bin/sh -e |
||||
|
|
||||
|
gpgkey='' |
||||
|
timestamp="$(LC_ALL=C date -u)" |
||||
|
cachedir='.cache' |
||||
|
|
||||
|
# Cleanup |
||||
|
if [ "$1" = 'clean' ]; then |
||||
|
rm -rf "$cachedir" ChangeLog.txt PACKAGES.TXT MANIFEST.bz2 FILELIST.TXT CHECKSUMS.md5 CHECKSUMS.md5.asc GPG-KEY |
||||
|
find . -regex '.*\.t[bglx]z$' | while read -r package; do |
||||
|
pkgbase="$(echo "$package" | sed 's?.*/??;s/\.t[bglx]z$//')" |
||||
|
rm -f "$(dirname "$package")/$pkgbase.txt" |
||||
|
rm -f "$package.asc" |
||||
|
done |
||||
|
|
||||
|
exit |
||||
|
fi |
||||
|
|
||||
|
mkdir -p "$cachedir" |
||||
|
|
||||
|
# Process all packages |
||||
|
find . -regex '.*\.t[bglx]z$' | while read -r package; do |
||||
|
case "$package" in |
||||
|
*.tgz) |
||||
|
tool=gzip |
||||
|
;; |
||||
|
*.tbz) |
||||
|
tool=bzip2 |
||||
|
;; |
||||
|
*.tlz) |
||||
|
tool=lzma |
||||
|
;; |
||||
|
*.txz) |
||||
|
tool=xz |
||||
|
;; |
||||
|
esac |
||||
|
|
||||
|
# See the pkgbase and package_name functions in /sbin/installpkg |
||||
|
pkgbase="$(echo "$package" | sed 's?.*/??;s/\.t[bglx]z$//')" |
||||
|
pkgdir="$(dirname "$package")" |
||||
|
pkgname="$(echo "$pkgbase" | sed 's?-[^-]*-[^-]*-[^-]*$??')" |
||||
|
|
||||
|
pkgtxt="$pkgdir/$pkgbase.txt" |
||||
|
pkgmeta="$cachedir/$pkgdir/$pkgbase.meta" |
||||
|
pkgmanifest="$cachedir/$pkgdir/$pkgbase.manifest" |
||||
|
pkgsize="$cachedir/$pkgdir/$pkgbase.size" |
||||
|
pkgusize="$cachedir/$pkgdir/$pkgbase.usize" |
||||
|
|
||||
|
[ -f "$pkgtxt" -a \ |
||||
|
-f "$pkgmeta" -a \ |
||||
|
-f "$pkgmanifest" -a \ |
||||
|
-f "$pkgsize" -a \ |
||||
|
-f "$pkgusize" ] && continue |
||||
|
[ "$gpgkey" -a -f "$package.asc" ] && continue |
||||
|
|
||||
|
echo "Adding $package..." |
||||
|
mkdir -p "$cachedir/$pkgdir" |
||||
|
|
||||
|
# Decompress the package |
||||
|
tmppkg="$(mktemp)" |
||||
|
$tool -cd "$package" > "$tmppkg" |
||||
|
|
||||
|
# Get package size |
||||
|
du -k "$package" | cut -f 1 > "$pkgsize" |
||||
|
du -k "$tmppkg" | cut -f 1 > "$pkgusize" |
||||
|
|
||||
|
# Generate .txt file (see /usr/bin/slackdtxt) |
||||
|
(tar xOf "$tmppkg" install/slack-desc 2> /dev/null || echo "$pkgname:") | egrep -v '^($|#| *\|)' > "$pkgtxt" |
||||
|
|
||||
|
# Create manifest for this package |
||||
|
cat > "$pkgmanifest" << EOF |
||||
|
++======================================== |
||||
|
|| |
||||
|
|| Package: $package |
||||
|
|| |
||||
|
++======================================== |
||||
|
$(tar tvvf "$tmppkg") |
||||
|
|
||||
|
|
||||
|
EOF |
||||
|
|
||||
|
# Create metadata for this package |
||||
|
# Source for the sed line: https://stackoverflow.com/questions/1444406/how-can-i-delete-duplicate-lines-in-a-file-in-unix#1444433 |
||||
|
cat > "$pkgmeta" << EOF |
||||
|
PACKAGE NAME: $(basename "$package") |
||||
|
PACKAGE LOCATION: $pkgdir |
||||
|
PACKAGE SIZE (compressed): $(cat "$pkgsize" | xargs) K |
||||
|
PACKAGE SIZE (uncompressed): $(cat "$pkgusize" | xargs) K |
||||
|
PACKAGE DESCRIPTION: |
||||
|
$(cat "$pkgtxt" | sed -e '$!N; /^\(.*\)\n\1$/!P; D') |
||||
|
|
||||
|
EOF |
||||
|
|
||||
|
# Sign the package |
||||
|
rm -f "$package.asc" |
||||
|
[ "$gpgkey" ] && gpg -bas --use-agent --batch -u "$gpgkey" "$package" |
||||
|
|
||||
|
# Remove decompressed package |
||||
|
rm -f "$tmppkg" |
||||
|
done |
||||
|
|
||||
|
# Generate shitty ChangeLog.txt |
||||
|
echo "$timestamp" > ChangeLog.txt |
||||
|
|
||||
|
# Create GPG-KEY |
||||
|
if [ "$gpgkey" ]; then |
||||
|
gpg --list-keys "$gpgkey" > GPG-KEY |
||||
|
gpg -a --export "$gpgkey" >> GPG-KEY |
||||
|
fi |
||||
|
|
||||
|
# Generate PACKAGES.TXT |
||||
|
echo "Generating PACKAGES.TXT..." |
||||
|
|
||||
|
cat > PACKAGES.TXT << EOF |
||||
|
|
||||
|
PACKAGES.TXT; $timestamp |
||||
|
|
||||
|
This file provides details on the Slackware packages found |
||||
|
in this directory. |
||||
|
|
||||
|
Total size of all packages (compressed): $(expr \( 0$(find "$cachedir" -type f -name '*.size' | xargs cat | xargs printf ' + %s') \) / 1024 || true) MB |
||||
|
Total size of all packages (uncompressed): $(expr \( 0$(find "$cachedir" -type f -name '*.usize' | xargs cat | xargs printf ' + %s') \) / 1024 || true) MB |
||||
|
|
||||
|
|
||||
|
EOF |
||||
|
|
||||
|
# https://stackoverflow.com/questions/4255603/sort-files-by-basename#4256095 |
||||
|
find "$cachedir" -type f -name '*.meta' | perl -e 'print sort{($p=$a)=~s!.*/!!;($q=$b)=~s!.*/!!;$p cmp$q}<>' | xargs cat >> PACKAGES.TXT |
||||
|
|
||||
|
echo >> PACKAGES.TXT |
||||
|
|
||||
|
# Generate MANIFEST.bz2 |
||||
|
echo "Generating MANIFEST.bz2..." |
||||
|
find "$cachedir" -type f -name '*.manifest' | sort | xargs cat | bzip2 -9 -z > MANIFEST.bz2 |
||||
|
|
||||
|
# Generate FILELIST.TXT |
||||
|
echo "Generating FILELIST.TXT..." |
||||
|
|
||||
|
cat > FILELIST.TXT << EOF |
||||
|
$timestamp |
||||
|
|
||||
|
Here is the file list for this directory. If you are using a |
||||
|
mirror site and find missing or extra files in the disk |
||||
|
subdirectories, please have the archive administrator refresh |
||||
|
the mirror. |
||||
|
|
||||
|
EOF |
||||
|
find . ! -path "./$cachedir/*" -a ! -name "$cachedir" | sort | xargs fakeroot ls -ld --time-style=long-iso > FILELIST.TXT |
||||
|
|
||||
|
# Generate CHECKSUMS.md5 |
||||
|
echo "Generating CHECKSUMS.md5..." |
||||
|
|
||||
|
cat > CHECKSUMS.md5 << EOF |
||||
|
These are the MD5 message digests for the files in this directory. |
||||
|
If you want to test your files, use 'md5sum' and compare the values to |
||||
|
the ones listed here. |
||||
|
|
||||
|
To test all these files, use this command: |
||||
|
|
||||
|
tail +13 CHECKSUMS.md5 | md5sum -c --quiet - | less |
||||
|
|
||||
|
'md5sum' can be found in the GNU coreutils package on ftp.gnu.org in |
||||
|
/pub/gnu, or at any GNU mirror site. |
||||
|
|
||||
|
MD5 message digest Filename |
||||
|
EOF |
||||
|
find . -type f -a ! -path "./$cachedir/*" | sort | xargs md5sum >> CHECKSUMS.md5 |
||||
|
|
||||
|
# Sign CHECKSUMS.md5 |
||||
|
rm -f CHECKSUMS.md5.asc |
||||
|
[ "$gpgkey" ] && gpg -bas --use-agent --batch -u "$gpgkey" CHECKSUMS.md5 |
||||
|
|
||||
|
# Remove tmpdir |
||||
|
rm -rf "$tmpdir" |
Loading…
Reference in new issue