Files
VoxVera/install.sh
2025-06-19 19:22:27 -04:00

164 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Detect package manager
if command_exists apt-get; then
PM="apt"
elif command_exists dnf; then
PM="dnf"
elif command_exists yum; then
PM="yum"
elif command_exists pacman; then
PM="pacman"
elif command_exists brew; then
PM="brew"
elif command_exists apk; then
PM="apk"
else
echo "Unsupported system: could not detect package manager" >&2
exit 1
fi
install_pkg() {
case "$PM" in
apt)
sudo apt-get update
sudo apt-get install -y "$@"
;;
dnf)
sudo dnf install -y "$@"
;;
yum)
sudo yum install -y "$@"
;;
pacman)
sudo pacman -Sy --noconfirm "$@"
;;
brew)
brew install "$@"
;;
apk)
sudo apk add --no-cache "$@"
;;
esac
}
require_pkg() {
local cmd=$1
local pkg=$2
if ! command_exists "$cmd"; then
install_pkg "$pkg"
fi
}
require_pkg tor tor
require_pkg onionshare-cli onionshare-cli
require_pkg jq jq
require_pkg qrencode qrencode
require_pkg convert imagemagick
download_binary() {
local url=$1
local dest=$2
if command_exists curl; then
local status
status=$(curl -w "%{http_code}" -fsSL "$url" -o "$dest" || true)
if [ "$status" = "404" ]; then
return 2
elif [ "$status" != "200" ]; then
return 1
fi
elif command_exists wget; then
local out
out=$(wget --server-response -q "$url" -O "$dest" 2>&1 || true)
if echo "$out" | grep -q "404 Not Found"; then
return 2
elif ! echo "$out" | grep -q "200 OK"; then
return 1
fi
else
echo "Install curl or wget to download voxvera" >&2
return 1
fi
chmod +x "$dest"
}
check_local_bin() {
if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
echo "Add \$HOME/.local/bin to your PATH to run VoxVera."
fi
}
pip_fallback() {
if command_exists pip; then
echo "Attempting pip install as fallback..."
if pip install --user voxvera; then
echo "VoxVera installed successfully via pip."
exit 0
fi
echo "pip installation failed." >&2
else
echo "pip not found for fallback installation" >&2
fi
exit 1
}
pip_repo_fallback() {
if command_exists pip; then
echo "Attempting pip install from repository as fallback..."
if pip install --user git+https://github.com/PR0M3TH3AN/VoxVera; then
echo "VoxVera installed successfully from repository."
exit 0
fi
echo "pip installation from repository failed." >&2
else
echo "pip not found for fallback installation" >&2
fi
exit 1
}
if command_exists pipx; then
if ! pipx install --force voxvera; then
echo "pipx install failed, downloading binary"
install_dir="$HOME/.local/bin"
mkdir -p "$install_dir"
url="https://github.com/PR0M3TH3AN/VoxVera/releases/latest/download/voxvera"
dest="$install_dir/voxvera"
if download_binary "$url" "$dest"; then
check_local_bin
else
rc=$?
echo "Binary download failed." >&2
if [ $rc -eq 2 ]; then
echo "Release asset not found, installing from repository." >&2
pip_repo_fallback
else
pip_fallback
fi
fi
fi
else
install_dir="$HOME/.local/bin"
mkdir -p "$install_dir"
url="https://github.com/PR0M3TH3AN/VoxVera/releases/latest/download/voxvera"
dest="$install_dir/voxvera"
if download_binary "$url" "$dest"; then
check_local_bin
else
rc=$?
echo "Binary download failed." >&2
if [ $rc -eq 2 ]; then
echo "Release asset not found, installing from repository." >&2
pip_repo_fallback
else
pip_fallback
fi
fi
fi
echo "VoxVera installed successfully."