mirror of
https://github.com/Z4nzu/hackingtool
synced 2026-05-22 08:28:57 +00:00
install.sh (new): - Standalone bash installer for curl | sudo bash one-liner - Detects package manager (apt-get, pacman, dnf, brew) - Installs prerequisites: git, python3, pip, venv - Checks Python >= 3.10 - Clones repo with --depth 1 (shallow, faster) - Creates venv + installs requirements - Creates /usr/bin/hackingtool launcher - Creates ~/.hackingtool/ dirs with correct ownership (SUDO_USER) install.py: - Add _is_source_dir() — detects if install.py is being run from a local clone (hackingtool.py exists alongside it) - install_source() replaces git_clone() — copies source to /usr/share/ instead of re-cloning when running from a local clone - Falls back to git clone --depth 1 when not in a source directory - Eliminates the redundant clone-after-clone pattern README.md / README_template.md: - Add one-liner install as primary method - Keep manual git clone + install.py as alternative - Remove sudo from hackingtool run command (launcher handles it)
153 lines
No EOL
6.6 KiB
Bash
Executable file
153 lines
No EOL
6.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# ──────────────────────────────────────────────────────────────────────────────
|
|
# HackingTool — One-liner installer
|
|
#
|
|
# Usage:
|
|
# curl -sSL https://raw.githubusercontent.com/Z4nzu/hackingtool/master/install.sh | sudo bash
|
|
#
|
|
# What it does:
|
|
# 1. Checks prerequisites (Python 3.10+, git, pip, venv)
|
|
# 2. Clones the repository to /usr/share/hackingtool
|
|
# 3. Creates a Python venv and installs requirements
|
|
# 4. Creates a launcher at /usr/bin/hackingtool
|
|
# 5. Creates user directories at ~/.hackingtool/
|
|
# ──────────────────────────────────────────────────────────────────────────────
|
|
set -euo pipefail
|
|
|
|
REPO_URL="https://github.com/Z4nzu/hackingtool.git"
|
|
INSTALL_DIR="/usr/share/hackingtool"
|
|
BIN_PATH="/usr/bin/hackingtool"
|
|
CONFIG_DIR="${SUDO_USER:+$(eval echo ~"$SUDO_USER")}/.hackingtool"
|
|
# Fallback if not run via sudo
|
|
: "${CONFIG_DIR:=$HOME/.hackingtool}"
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
BOLD='\033[1m'
|
|
RESET='\033[0m'
|
|
|
|
info() { echo -e "${CYAN}[*]${RESET} $1"; }
|
|
ok() { echo -e "${GREEN}[✔]${RESET} $1"; }
|
|
warn() { echo -e "${YELLOW}[!]${RESET} $1"; }
|
|
fail() { echo -e "${RED}[✘]${RESET} $1"; exit 1; }
|
|
|
|
# ── Root check ────────────────────────────────────────────────────────────────
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
fail "This installer must be run as root.\n Usage: curl -sSL <url> | ${BOLD}sudo${RESET} bash"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${BOLD}${CYAN} ⚔ HackingTool Installer${RESET}"
|
|
echo -e " ─────────────────────────────────────"
|
|
echo ""
|
|
|
|
# ── Detect package manager ────────────────────────────────────────────────────
|
|
if command -v apt-get &>/dev/null; then
|
|
PKG_MGR="apt-get"
|
|
PKG_UPDATE="apt-get update -qq"
|
|
PKG_INSTALL="apt-get install -y -qq"
|
|
elif command -v pacman &>/dev/null; then
|
|
PKG_MGR="pacman"
|
|
PKG_UPDATE="pacman -Sy --noconfirm"
|
|
PKG_INSTALL="pacman -S --noconfirm --needed"
|
|
elif command -v dnf &>/dev/null; then
|
|
PKG_MGR="dnf"
|
|
PKG_UPDATE="true"
|
|
PKG_INSTALL="dnf install -y -q"
|
|
elif command -v brew &>/dev/null; then
|
|
PKG_MGR="brew"
|
|
PKG_UPDATE="true"
|
|
PKG_INSTALL="brew install"
|
|
else
|
|
fail "No supported package manager found (need apt-get, pacman, dnf, or brew)."
|
|
fi
|
|
info "Package manager: ${BOLD}$PKG_MGR${RESET}"
|
|
|
|
# ── Install system prerequisites ──────────────────────────────────────────────
|
|
info "Installing prerequisites..."
|
|
$PKG_UPDATE 2>/dev/null || true
|
|
|
|
for pkg in git curl python3 python3-pip python3-venv; do
|
|
if [ "$PKG_MGR" = "pacman" ]; then
|
|
case "$pkg" in
|
|
python3) pkg="python" ;;
|
|
python3-pip) pkg="python-pip" ;;
|
|
python3-venv) continue ;; # included in python on Arch
|
|
esac
|
|
elif [ "$PKG_MGR" = "brew" ]; then
|
|
case "$pkg" in
|
|
python3-pip|python3-venv) continue ;; # included in python3 on macOS
|
|
esac
|
|
elif [ "$PKG_MGR" = "dnf" ]; then
|
|
case "$pkg" in
|
|
python3-venv) continue ;; # included in python3 on Fedora
|
|
esac
|
|
fi
|
|
$PKG_INSTALL "$pkg" 2>/dev/null || warn "Could not install $pkg — may already be present"
|
|
done
|
|
|
|
# ── Python version check ─────────────────────────────────────────────────────
|
|
PYTHON_VERSION=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")' 2>/dev/null || echo "0.0")
|
|
PYTHON_MAJOR=$(echo "$PYTHON_VERSION" | cut -d. -f1)
|
|
PYTHON_MINOR=$(echo "$PYTHON_VERSION" | cut -d. -f2)
|
|
|
|
if [ "$PYTHON_MAJOR" -lt 3 ] || { [ "$PYTHON_MAJOR" -eq 3 ] && [ "$PYTHON_MINOR" -lt 10 ]; }; then
|
|
fail "Python 3.10+ required. Found: Python $PYTHON_VERSION"
|
|
fi
|
|
ok "Python $PYTHON_VERSION"
|
|
|
|
# ── Clone repository ──────────────────────────────────────────────────────────
|
|
if [ -d "$INSTALL_DIR" ]; then
|
|
warn "$INSTALL_DIR already exists."
|
|
read -rp " Replace it? [y/N] " answer
|
|
if [[ "$answer" =~ ^[Yy] ]]; then
|
|
rm -rf "$INSTALL_DIR"
|
|
else
|
|
fail "Installation aborted."
|
|
fi
|
|
fi
|
|
|
|
info "Cloning repository..."
|
|
git clone --depth 1 "$REPO_URL" "$INSTALL_DIR" 2>/dev/null
|
|
ok "Cloned to $INSTALL_DIR"
|
|
|
|
# ── Python venv + requirements ────────────────────────────────────────────────
|
|
info "Creating virtual environment..."
|
|
python3 -m venv "$INSTALL_DIR/venv"
|
|
|
|
info "Installing Python dependencies..."
|
|
"$INSTALL_DIR/venv/bin/pip" install --quiet -r "$INSTALL_DIR/requirements.txt" 2>/dev/null
|
|
ok "Dependencies installed"
|
|
|
|
# ── Create launcher ──────────────────────────────────────────────────────────
|
|
cat > "$BIN_PATH" << 'LAUNCHER'
|
|
#!/bin/bash
|
|
source "/usr/share/hackingtool/venv/bin/activate"
|
|
python3 "/usr/share/hackingtool/hackingtool.py" "$@"
|
|
LAUNCHER
|
|
chmod 755 "$BIN_PATH"
|
|
ok "Launcher installed at $BIN_PATH"
|
|
|
|
# ── User directories ─────────────────────────────────────────────────────────
|
|
mkdir -p "$CONFIG_DIR/tools"
|
|
if [ ! -f "$CONFIG_DIR/config.json" ]; then
|
|
cat > "$CONFIG_DIR/config.json" << CONF
|
|
{
|
|
"tools_dir": "$CONFIG_DIR/tools",
|
|
"version": "2.0.0"
|
|
}
|
|
CONF
|
|
fi
|
|
# Fix ownership if run via sudo
|
|
if [ -n "${SUDO_USER:-}" ]; then
|
|
chown -R "$SUDO_USER:$SUDO_USER" "$CONFIG_DIR"
|
|
fi
|
|
ok "User config: $CONFIG_DIR"
|
|
|
|
# ── Done ──────────────────────────────────────────────────────────────────────
|
|
echo ""
|
|
echo -e "${GREEN}${BOLD} ✔ Installation complete!${RESET}"
|
|
echo -e " Type ${BOLD}${CYAN}hackingtool${RESET} to start."
|
|
echo "" |