Files
drip/scripts/install.sh
Gouryella dface89e78 Documents (Readme): Updated installation instructions and merged client and server installation scripts
- Changed the previous separate client and server installation method to a unified entry point, distinguished by the `--client` or `--server` parameters.
- Provided examples of non-interactive installation commands.

- Synchronized the installation guidance in the English and Chinese README documents.

- Removed the separate `install-server.sh` script content display, as it has been integrated into the new `install.sh` script.
2025-12-06 22:18:35 +08:00

248 lines
6.8 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
set -euo pipefail
# Unified installer wrapper for Drip client and server
# Chooses language first, then lets the user pick client or server.
GITHUB_REPO="Gouryella/drip"
RAW_BASE="${RAW_BASE:-https://raw.githubusercontent.com/${GITHUB_REPO}/main/scripts}"
LANG_CODE="${LANG_CODE:-}"
TARGET=""
TARGET_ARGS=()
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m'
SCRIPT_DIR=""
if SCRIPT_DIR_TMP=$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd 2>/dev/null); then
SCRIPT_DIR="$SCRIPT_DIR_TMP"
fi
# ============================================================================
# Internationalization
# ============================================================================
msg_en() {
case "$1" in
banner_title) echo "Drip Installer";;
select_lang) echo "Select language / 选择语言";;
lang_en) echo "English";;
lang_zh) echo "中文";;
select_target) echo "Select install target";;
target_client) echo "Client";;
target_server) echo "Server";;
invalid_choice) echo "Invalid choice, using default";;
downloading_installer) echo "Downloading installer script...";;
download_failed) echo "Failed to download installer script";;
help_title) echo "Usage";;
help_line1) echo " install.sh [--lang en|zh] [--client|--server] [args...]";;
help_line2) echo "Arguments after the target are passed to the installer (e.g. --uninstall for client).";;
*) echo "$1";;
esac
}
msg_zh() {
case "$1" in
banner_title) echo "Drip 安装器";;
select_lang) echo "Select language / 选择语言";;
lang_en) echo "English";;
lang_zh) echo "中文";;
select_target) echo "选择安装目标";;
target_client) echo "客户端";;
target_server) echo "服务器";;
invalid_choice) echo "输入无效,使用默认选项";;
downloading_installer) echo "正在下载安装脚本...";;
download_failed) echo "下载安装脚本失败";;
help_title) echo "用法";;
help_line1) echo " install.sh [--lang en|zh] [--client|--server] [args...]";;
help_line2) echo "目标之后的参数会透传给对应安装脚本(例如客户端的 --uninstall。";;
*) echo "$1";;
esac
}
msg() {
if [[ "$LANG_CODE" == "zh" ]]; then
msg_zh "$1"
else
msg_en "$1"
fi
}
# ============================================================================
# Helpers
# ============================================================================
prompt_input() {
local __prompt="$1"
local __var_name="$2"
printf "%s" "$__prompt"
IFS= read -r "$__var_name" < /dev/tty
}
print_banner() {
echo -e "${GREEN}"
cat << "EOF"
____ _
/ __ \_____(_)___
/ / / / ___/ / __ \
/ /_/ / / / / /_/ /
/_____/_/ /_/ .___/
/_/
EOF
echo -e "${BOLD}$(msg banner_title)${NC}"
echo ""
}
usage() {
echo -e "${BOLD}$(msg help_title):${NC}"
echo "$(msg help_line1)"
echo "$(msg help_line2)"
}
# ============================================================================
# Selection
# ============================================================================
select_language() {
echo -e "${CYAN}$(msg select_lang)${NC}"
echo -e " ${GREEN}1)${NC} $(msg lang_en)"
echo -e " ${GREEN}2)${NC} $(msg lang_zh)"
prompt_input "Select [1]: " lang_choice
case "$lang_choice" in
2) LANG_CODE="zh" ;;
1|"") LANG_CODE="en" ;;
*) LANG_CODE="en";;
esac
echo ""
}
select_target() {
echo -e "${CYAN}$(msg select_target)${NC}"
echo -e " ${GREEN}1)${NC} $(msg target_client)"
echo -e " ${GREEN}2)${NC} $(msg target_server)"
prompt_input "Select [1]: " target_choice
case "$target_choice" in
2) TARGET="server" ;;
1|"") TARGET="client" ;;
*) echo -e "${YELLOW}$(msg invalid_choice)${NC}"; TARGET="client" ;;
esac
echo ""
}
# ============================================================================
# Runner helpers
# ============================================================================
download_and_run() {
local url="$1"
shift
echo -e "${CYAN}$(msg downloading_installer)${NC} $url"
local tmp_file
tmp_file=$(mktemp "/tmp/drip-install-XXXX")
if command -v curl >/dev/null 2>&1; then
if ! curl -fsSL "$url" -o "$tmp_file"; then
echo -e "${YELLOW}$(msg download_failed): $url${NC}"
exit 1
fi
elif command -v wget >/dev/null 2>&1; then
if ! wget -qO "$tmp_file" "$url"; then
echo -e "${YELLOW}$(msg download_failed): $url${NC}"
exit 1
fi
else
echo "curl or wget is required"
exit 1
fi
chmod +x "$tmp_file"
LANG_CODE="$LANG_CODE" SKIP_LANG_PROMPT=true "$tmp_file" "$@"
rm -f "$tmp_file"
}
run_client() {
local local_script=""
if [[ -n "$SCRIPT_DIR" && -f "${SCRIPT_DIR}/install-client.sh" ]]; then
local_script="${SCRIPT_DIR}/install-client.sh"
fi
if [[ -n "$local_script" ]]; then
LANG_CODE="$LANG_CODE" SKIP_LANG_PROMPT=true "$local_script" "${TARGET_ARGS[@]}"
else
download_and_run "${RAW_BASE}/install-client.sh" "${TARGET_ARGS[@]}"
fi
}
run_server() {
local local_script=""
if [[ -n "$SCRIPT_DIR" && -f "${SCRIPT_DIR}/install-server.sh" ]]; then
local_script="${SCRIPT_DIR}/install-server.sh"
fi
if [[ -n "$local_script" ]]; then
LANG_CODE="$LANG_CODE" SKIP_LANG_PROMPT=true "$local_script" "${TARGET_ARGS[@]}"
else
download_and_run "${RAW_BASE}/install-server.sh" "${TARGET_ARGS[@]}"
fi
}
# ============================================================================
# Main
# ============================================================================
parse_args() {
while [[ $# -gt 0 ]]; do
case "$1" in
--lang)
if [[ $# -ge 2 ]]; then
LANG_CODE="$2"
shift 2
else
shift
fi
;;
--client|client|-c)
TARGET="client"
shift
;;
--server|server|-s)
TARGET="server"
shift
;;
--help|-h)
usage
exit 0
;;
*)
TARGET_ARGS+=("$1")
shift
;;
esac
done
}
main() {
parse_args "$@"
clear
print_banner
[[ -z "$LANG_CODE" ]] && select_language
[[ -z "$TARGET" ]] && select_target
# Default to English if someone skips selection without setting LANG_CODE
LANG_CODE="${LANG_CODE:-en}"
if [[ "$TARGET" == "server" ]]; then
run_server
else
run_client
fi
}
main "$@"