mirror of
https://github.com/Gouryella/drip.git
synced 2026-02-23 21:00:44 +00:00
- 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.
248 lines
6.8 KiB
Bash
Executable File
248 lines
6.8 KiB
Bash
Executable File
#!/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 "$@"
|