2020-07-31 13:18:43 +02:00
|
|
|
#!/bin/bash
|
2017-02-17 23:13:49 +01:00
|
|
|
set -e -u
|
|
|
|
|
|
|
|
show_help() {
|
2017-10-01 21:42:37 +02:00
|
|
|
echo 'Usage: pkg command [arguments]'
|
2017-02-17 23:13:49 +01:00
|
|
|
echo ''
|
|
|
|
echo 'A tool for managing packages. Commands:'
|
|
|
|
echo ''
|
2017-03-10 15:34:17 +01:00
|
|
|
echo ' files <packages>'
|
|
|
|
echo ' install <packages>'
|
2017-02-17 23:13:49 +01:00
|
|
|
echo ' list-all'
|
|
|
|
echo ' list-installed'
|
2017-03-10 15:34:17 +01:00
|
|
|
echo ' reinstall <packages>'
|
2017-02-17 23:13:49 +01:00
|
|
|
echo ' search <query>'
|
2017-03-10 15:34:17 +01:00
|
|
|
echo ' show <packages>'
|
|
|
|
echo ' uninstall <packages>'
|
2017-02-17 23:13:49 +01:00
|
|
|
echo ' upgrade'
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2020-07-31 13:18:43 +02:00
|
|
|
select_mirror() {
|
|
|
|
local main_repo="https://dl.bintray.com/termux/termux-packages-24"
|
|
|
|
local top_mirrors="${main_repo} https://termux.mentality.rip/termux-packages-24 https://grimler.se/termux-packages-24 https://main.termux-mirror.ml"
|
|
|
|
|
|
|
|
local current_mirror
|
|
|
|
current_mirror=$(grep -P "^\s*deb\s+" @TERMUX_PREFIX@/etc/apt/sources.list | grep -oP 'https?://[a-z0-9/._-]+')
|
|
|
|
|
|
|
|
# Do not update mirror if:
|
|
|
|
# * Uses .cn domain - specific to Chinese users.
|
|
|
|
# * If $TERMUX_PKG_NO_MIRROR_SELECT was set.
|
|
|
|
if [ -n "${TERMUX_PKG_NO_MIRROR_SELECT-}" ] || grep -qP '.+\.cn/' <(echo "${current_mirror-x}"); then
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -n "$(find @TERMUX_PREFIX@/var/cache/apt/pkgcache.bin -mmin -180 2>/dev/null)" ]; then
|
|
|
|
# Mirrors are rotated if either they are not working or 180 minutes timeout
|
|
|
|
# has passed.
|
|
|
|
if [ -n "${current_mirror}" ] && curl --user-agent 'Termux-PKG/1.0 mirror-checker' --head --fail --location "${current_mirror}/dists/stable/Release" >/dev/null 2>&1; then
|
|
|
|
echo "Reusing mirror: ${current_mirror}"
|
|
|
|
return
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Shuffle mirrors and pick the first one which is accessible.
|
|
|
|
local m selected_mirror=""
|
|
|
|
for m in $(echo "$top_mirrors" | tr ' ' '\n' | shuf); do
|
|
|
|
echo "Trying mirror: $m"
|
|
|
|
if curl --user-agent 'Termux-PKG/1.0 mirror-checker' --head --fail --location "${m}/dists/stable/Release" >/dev/null 2>&1; then
|
|
|
|
selected_mirror="$m"
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ -n "${selected_mirror}" ]; then
|
|
|
|
echo "deb ${selected_mirror}/ stable main" > @TERMUX_PREFIX@/etc/apt/sources.list
|
|
|
|
else
|
|
|
|
echo "Using fallback mirror: ${main_repo}"
|
|
|
|
echo "deb ${main_repo}/ stable main" > @TERMUX_PREFIX@/etc/apt/sources.list
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
update_apt_cache() {
|
|
|
|
if [ -z "$(find @TERMUX_PREFIX@/var/cache/apt/pkgcache.bin -mmin -5 2>/dev/null)" ]; then
|
2019-11-10 15:29:05 +01:00
|
|
|
apt update
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
if [ $# = 0 ]; then
|
|
|
|
show_help
|
|
|
|
fi
|
|
|
|
|
2017-02-17 23:13:49 +01:00
|
|
|
CMD="$1"
|
|
|
|
shift 1
|
|
|
|
|
|
|
|
case "$CMD" in
|
2019-05-06 22:22:47 +02:00
|
|
|
f*) dpkg -L "$@";;
|
2017-03-10 15:22:44 +01:00
|
|
|
h*) show_help;;
|
2020-07-31 13:18:43 +02:00
|
|
|
add|i*)
|
|
|
|
select_mirror
|
|
|
|
update_apt_cache
|
|
|
|
apt install "$@"
|
|
|
|
;;
|
2019-05-06 22:22:47 +02:00
|
|
|
list-a*) apt list "$@";;
|
|
|
|
list-i*) apt list --installed "$@";;
|
2019-11-13 15:38:40 +01:00
|
|
|
rei*) apt install --reinstall "$@";;
|
2020-07-31 13:18:43 +02:00
|
|
|
se*)
|
|
|
|
select_mirror
|
|
|
|
update_apt_cache
|
|
|
|
apt search "$@"
|
|
|
|
;;
|
2019-05-06 22:22:47 +02:00
|
|
|
sh*) apt show "$@";;
|
2019-11-13 15:38:40 +01:00
|
|
|
un*|rem*|rm|del*) apt remove "$@";;
|
2020-07-31 13:18:43 +02:00
|
|
|
up*)
|
|
|
|
select_mirror
|
|
|
|
apt update
|
|
|
|
apt full-upgrade "$@"
|
|
|
|
;;
|
2019-11-10 15:29:05 +01:00
|
|
|
*) echo "Unknown command: '$CMD' (run 'pkg help' for usage information)"; exit 1;;
|
2017-02-17 23:13:49 +01:00
|
|
|
esac
|