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