#!/bin/bash true <<'EOF'
Copyright (C) 2013-2020 Ole Tange and Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
This script downloads the latest version of GNU Parallel, checks the signature and installs it.
It first tries to install it globally.
If that fails, it does a personal installation.
If that fails, it copies to $HOME/bin
You can download and run the script directly by:
$ (wget -O - pi.dk/3 || lynx -source pi.dk/3 ||
curl pi.dk/3/ || fetch -o - http://pi.dk/3) > install.sh
$ sha1sum install.sh | grep 12345678
$ md5sum install.sh
$ sha512sum install.sh
Check the sums from https://gnu.org/s/parallel/checksums
Then run:
$ bash install.sh
EOF
run() {
# FreeBSD prefers 'fetch', MacOS prefers 'curl', Linux prefers 'wget'
get=$(
(lynx -source /dev/null && echo lynx -source) ||
(fetch -o /dev/null file:///bin/sh && echo fetch -o -) ||
(curl -h >/dev/null && echo curl -L) ||
(wget -h >/dev/null && echo wget -qO -) ||
echo 'No lynx, wget, curl, fetch: Please inform parallel@gnu.org what you use for downloading URLs' >&2
)
if test "$get" = ""; then
exit 1
fi
if ! perl -e 1; then
echo No perl installed. GNU Parallel depends on perl. Install perl and retry.
exit 1
fi
LANG=C
latest=$($get http://ftpmirror.gnu.org/parallel |
perl -ne '/.*(parallel-\d{8})/ and print $1."\n"' |
perl -e 'print ((reverse sort <>)[0])')
if test \! -e "$latest".tar.bz2; then
# Source tar does not exist
rm -f "$latest".tar.bz2 "$latest".tar.bz2.sig
$get http://ftpmirror.gnu.org/parallel/"$latest".tar.bz2 > "$latest".tar.bz2
$get http://ftpmirror.gnu.org/parallel/"$latest".tar.bz2.sig > "$latest".tar.bz2.sig
fi
fetch_keys() {
if gpg -h 2>/dev/null >/dev/null ; then
# GnuPG installed
# Setup .gnupg/gpg.conf if not already done
echo | gpg 2>/dev/null >/dev/null
if gpg --list-keys 0xFFFFFFF1 && gpg --list-keys 0x88888888 ; then
echo Keys fetched
# OK
return 0
else
keyserver1=keys.gnupg.net
keyserver2=pool.sks-keyservers.net
if gpg --keyserver "$keyserver1" --recv-key 0xFFFFFFF1 ||
gpg --keyserver "$keyserver2" --recv-key 0xFFFFFFF1 ; then
if gpg --keyserver "$keyserver1" --recv-key 0x88888888 ||
gpg --keyserver "$keyserver2" --recv-key 0x88888888; then
# OK
return 0
else
echo
echo "Cannot fetch keyID 0x88888888, so the signature cannot be checked."
return 1
fi
else
echo
echo "Cannot fetch keyID 0xFFFFFFF1, so the signature cannot be checked."
return 1
fi
fi
else
# GnuPG not installed
echo
echo "GnuPG (gpg) is not installed so the signature cannot be checked."
return 1
fi
}
# Check signature - in case ftpmirror.gnu.org is compromised
if fetch_keys; then
if gpg --with-fingerprint "$latest".tar.bz2.sig 2>&1 |
perl -e 'exit not grep /^Primary key fingerprint: BE9C B493 81DE 3166 A3BC 66C1 2C62 29E2 FFFF FFF1|^Primary key fingerprint: CDA0 1A42 08C4 F745 0610 7E7B D1AB 4516 8888 8888/, <>'; then
# Source code signed by Ole Tange