feat: 更新系统管理工具脚本
This commit is contained in:
@@ -1,35 +1,34 @@
|
||||
#!/bin/bash
|
||||
# Ver: 1.0 by Endial Fang (endial@126.com)
|
||||
# Ver: 1.1 by Endial Fang (endial@126.com)
|
||||
#
|
||||
# shell 执行参数,分别为 -e(命令执行错误则退出脚本) -u(变量未定义则报错) -x(打印实际待执行的命令行)
|
||||
set -eux
|
||||
. /usr/local/scripts/liblog.sh
|
||||
|
||||
print_usage() {
|
||||
LOG "Usage: download_pkg <COMMAND> <PACKAGE-NAME> \"<URLS>\" [OPTIONS]"
|
||||
LOG ""
|
||||
LOG "Download and install Third-Part packages"
|
||||
LOG ""
|
||||
LOG "Commands:"
|
||||
LOG " download Download a package."
|
||||
LOG " install Download and install a package."
|
||||
LOG " unpack Download and unpack a package."
|
||||
LOG ""
|
||||
LOG "Options:"
|
||||
LOG " -g, --checkpgp Package release bucket."
|
||||
LOG " -s, --checksum SHA256 verification checksum."
|
||||
LOG " -h, --help Show this help message and exit."
|
||||
LOG ""
|
||||
LOG "PACKAGE-NAME: Name with extern name"
|
||||
LOG "URLS: String with URL list"
|
||||
LOG ""
|
||||
LOG "Examples:"
|
||||
LOG " - Unpack package"
|
||||
LOG " \$ download_pkg unpack redis-5.0.8.tar.gz \"http://download.redis.io/releases\""
|
||||
LOG ""
|
||||
LOG " - Verify and Install package"
|
||||
LOG " \$ download_pkg install redis-5.0.8.tar.gz \"http://download.redis.io/releases\" -s 42cf86a114d2a451b898fcda96acd4d01062a7dbaaad2801d9164a36f898f596"
|
||||
LOG ""
|
||||
echo "Usage: download_pkg <COMMAND> <PACKAGE-NAME> \"<URLS>\" [OPTIONS]"
|
||||
echo ""
|
||||
echo "Download and install Third-Part packages"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " download Download a package."
|
||||
echo " install Download and install a package."
|
||||
echo " unpack Download and unpack a package."
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " -g, --checkpgp Package release bucket."
|
||||
echo " -s, --checksum SHA256 verification checksum."
|
||||
echo " -h, --help Show this help message and exit."
|
||||
echo ""
|
||||
echo "PACKAGE-NAME: Name with extern name"
|
||||
echo "URLS: String with URL list"
|
||||
echo ""
|
||||
echo "Examples:"
|
||||
echo " - Unpack package"
|
||||
echo " \$ download_pkg unpack redis-5.0.8.tar.gz \"http://download.redis.io/releases\""
|
||||
echo ""
|
||||
echo " - Verify and Install package"
|
||||
echo " \$ download_pkg install redis-5.0.8.tar.gz \"http://download.redis.io/releases\" -s 42cf86a114d2a451b898fcda96acd4d01062a7dbaaad2801d9164a36f898f596"
|
||||
echo ""
|
||||
}
|
||||
|
||||
check_pgp() {
|
||||
@@ -40,10 +39,10 @@ check_pgp() {
|
||||
GNUPGHOME="$(mktemp -d)"
|
||||
if which gpg >/dev/null 2>&1; then
|
||||
for key in $keys; do
|
||||
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "${key}" ||
|
||||
gpg --batch --keyserver pgp.mit.edu --recv-keys "${key}" ||
|
||||
gpg --batch --keyserver keys.gnupg.net --recv-keys "${key}" ||
|
||||
gpg --batch --keyserver keyserver.pgp.com --recv-keys "${key}";
|
||||
gpg --batch --keyserver ha.pool.sks-keyservers.net --recv-keys "${key}" ||
|
||||
gpg --batch --keyserver pgp.mit.edu --recv-keys "${key}" ||
|
||||
gpg --batch --keyserver keys.gnupg.net --recv-keys "${key}" ||
|
||||
gpg --batch --keyserver keyserver.pgp.com --recv-keys "${key}";
|
||||
done
|
||||
gpg --batch --verify "$name_asc" "$name"
|
||||
command -v gpgconf > /dev/null && gpgconf --kill all
|
||||
@@ -109,28 +108,28 @@ PACKAGE_URLS=$3
|
||||
|
||||
cd $INSTALL_ROOT
|
||||
|
||||
LOG_I "Downloading $PACKAGE package"
|
||||
echo "Downloading $PACKAGE package"
|
||||
for url in $PACKAGE_URLS; do
|
||||
LOG_D "Try $url/$PACKAGE"
|
||||
echo "Try $url/$PACKAGE"
|
||||
if wget -O "$CACHE_ROOT/$PACKAGE" "$url/$PACKAGE" && [ -s "$CACHE_ROOT/$PACKAGE" ]; then
|
||||
if [ -n "${PACKAGE_KEYS:-}" ]; then
|
||||
wget -O "$CACHE_ROOT/$PACKAGE.asc" "$url/$PACKAGE.asc" || wget -O "$CACHE_ROOT/$PACKAGE.asc" "$url/$PACKAGE.sign" || :
|
||||
if [ ! -e "$CACHE_ROOT/$PACKAGE.asc" ]; then
|
||||
exit 1
|
||||
fi
|
||||
if [ -n "${PACKAGE_KEYS:-}" ]; then
|
||||
wget -O "$CACHE_ROOT/$PACKAGE.asc" "$url/$PACKAGE.asc" || wget -O "$CACHE_ROOT/$PACKAGE.asc" "$url/$PACKAGE.sign" || :
|
||||
if [ ! -e "$CACHE_ROOT/$PACKAGE.asc" ]; then
|
||||
exit 1
|
||||
fi
|
||||
break
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -n "${PACKAGE_SHA256:-}" ]; then
|
||||
LOG_I "Verifying package integrity"
|
||||
echo "$PACKAGE_SHA256 *$CACHE_ROOT/$PACKAGE" | sha256sum -c -
|
||||
echo "Verifying package integrity"
|
||||
echo "$PACKAGE_SHA256 *$CACHE_ROOT/$PACKAGE" | sha256sum -c -
|
||||
fi
|
||||
|
||||
if [ -e "$CACHE_ROOT/$PACKAGE.asc" ]; then
|
||||
LOG_I "Verifying package with PGP"
|
||||
check_pgp "$CACHE_ROOT/$PACKAGE.asc" "$CACHE_ROOT/$PACKAGE" "$PACKAGE_KEYS"
|
||||
echo "Verifying package with PGP"
|
||||
check_pgp "$CACHE_ROOT/$PACKAGE.asc" "$CACHE_ROOT/$PACKAGE" "$PACKAGE_KEYS"
|
||||
fi
|
||||
|
||||
# If the tarball has too many files, it can trigger a bug
|
||||
@@ -142,23 +141,23 @@ fi
|
||||
# 安装或解压软件
|
||||
case "$1" in
|
||||
download)
|
||||
LOG_I "Download success: $CACHE_ROOT/$PACKAGE"
|
||||
echo "Download success: $CACHE_ROOT/$PACKAGE"
|
||||
;;
|
||||
install)
|
||||
LOG_I "Installing $PACKAGE"
|
||||
cp $CACHE_ROOT/$PACKAGE /usr/local/bin/
|
||||
echo "Installing $PACKAGE"
|
||||
cp $CACHE_ROOT/$PACKAGE /usr/local/sbin/
|
||||
;;
|
||||
unpack)
|
||||
if ! tar -taf $CACHE_ROOT/$PACKAGE >/dev/null 2>&1; then
|
||||
LOG_E "Invalid or corrupt '$PACKAGE' package."
|
||||
echo "Invalid or corrupt '$PACKAGE' package."
|
||||
exit 1
|
||||
fi
|
||||
LOG_I "Unpacking $PACKAGE to $CACHE_ROOT"
|
||||
echo "Unpacking $PACKAGE to $CACHE_ROOT"
|
||||
cd $CACHE_ROOT
|
||||
if which bsdtar >/dev/null 2>&1; then
|
||||
bsdtar -xf $CACHE_ROOT/$PACKAGE
|
||||
bsdtar -xf $CACHE_ROOT/$PACKAGE
|
||||
else
|
||||
tar --no-same-owner -xaf $CACHE_ROOT/$PACKAGE
|
||||
tar --no-same-owner -xaf $CACHE_ROOT/$PACKAGE
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
@@ -25,34 +25,34 @@ fi
|
||||
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
print_usage
|
||||
exit 0
|
||||
;;
|
||||
print_usage
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
retry=0
|
||||
max=2
|
||||
until [ $retry -gt $max ]; do
|
||||
set +e
|
||||
(
|
||||
export DEBIAN_FRONTEND=noninteractive &&
|
||||
apt-get update &&
|
||||
apt-get upgrade -y &&
|
||||
apt-get install -y --no-install-recommends "$@"
|
||||
)
|
||||
CODE=$?
|
||||
set -e
|
||||
if [ $CODE -eq 0 ]; then
|
||||
break
|
||||
fi
|
||||
if [ $retry -eq $max ]; then
|
||||
exit $CODE
|
||||
fi
|
||||
echo "apt failed, retrying"
|
||||
retry=$(($retry + 1))
|
||||
set +e
|
||||
(
|
||||
export DEBIAN_FRONTEND=noninteractive &&
|
||||
apt-get update &&
|
||||
apt-get upgrade -y &&
|
||||
apt-get install -y --no-install-recommends "$@"
|
||||
)
|
||||
CODE=$?
|
||||
set -e
|
||||
if [ $CODE -eq 0 ]; then
|
||||
break
|
||||
fi
|
||||
if [ $retry -eq $max ]; then
|
||||
exit $CODE
|
||||
fi
|
||||
echo "apt failed, retrying"
|
||||
retry=$(($retry + 1))
|
||||
done
|
||||
|
||||
apt-get purge -y --auto-remove
|
||||
apt-get autoclean -y
|
||||
|
||||
rm -r /var/lib/apt/lists /var/cache/apt/archives || :
|
||||
rm -rf /var/lib/apt/lists /var/cache/apt/archives || :
|
||||
|
||||
Reference in New Issue
Block a user