go-cursor-help-v2/install.sh
Xx 38e027cf3f feat: Enhance installation script with improved configuration and error handling
- Updated `install.sh` to allow customizable download directory and binary retention options.
- Added argument parsing for `--keep-binary` and `--download-dir` to enhance user flexibility.
- Improved binary verification process with clearer error messages and executable permission settings.
- Streamlined download process by directly saving to the specified download path.
- Enhanced user feedback with instructions for making the downloaded file executable.

These changes improve the installation experience by providing users with more control and clearer guidance during the setup process.
2024-12-11 17:53:41 +08:00

228 lines
7.6 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
# Version / 版本号
VERSION="v2.0.0"
# Bilingual message functions / 双语消息函数
error() {
echo "❌ Error: $1"
echo "❌ 错误:$2"
exit 1
}
info() {
echo " $1"
echo " $2"
}
success() {
echo "$1"
echo "$2"
}
# Detect OS and architecture / 检测操作系统和架构
detect_platform() {
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)
case "$OS" in
linux*)
case "$ARCH" in
x86_64) BINARY_NAME="cursor_id_modifier_${VERSION}_linux_amd64" ;;
*) error "Unsupported Linux architecture: $ARCH" "不支持的Linux架构$ARCH" ;;
esac
;;
darwin*)
case "$ARCH" in
x86_64) BINARY_NAME="cursor_id_modifier_${VERSION}_darwin_amd64_intel" ;;
arm64) BINARY_NAME="cursor_id_modifier_${VERSION}_darwin_arm64_m1" ;;
*) error "Unsupported macOS architecture: $ARCH" "不支持的macOS架构$ARCH" ;;
esac
;;
msys*|mingw*|cygwin*)
case "$ARCH" in
x86_64) BINARY_NAME="cursor_id_modifier_${VERSION}_windows_amd64.exe" ;;
*) error "Unsupported Windows architecture: $ARCH" "不支持的Windows架构$ARCH" ;;
esac
;;
*)
error "Unsupported operating system: $OS" "不支持的操作系统:$OS"
;;
esac
}
# Check system requirements / 检查系统要求
check_requirements() {
info "Checking system requirements..." "正在检查系统要求..."
# 添加网络连接检查
if ! ping -c 1 github.com >/dev/null 2>&1; then
error "No network connection to GitHub" \
"无法连接到 GitHub"
fi
# Check curl
if ! command -v curl >/dev/null 2>&1; then
error "curl is required. Please install curl first." \
"需要安装 curl。请先安装 curl 后再运行此脚本。"
fi
# Check write permissions / 检查写入权限
if [ ! -w "$INSTALL_DIR" ]; then
error "No write permission for $INSTALL_DIR. Please run with sudo." \
"没有 $INSTALL_DIR 的写入权限。请使用 sudo 运行此脚本。"
fi
}
# Verify binary / 验证二进制文件
verify_binary() {
info "Verifying binary..." "正在验证二进制文件..."
if [ ! -f "$DOWNLOAD_PATH" ]; then
error "Binary file download failed or does not exist" \
"二进制文件下载失败或不存在"
fi
# 添加可执行文件格式检查
if ! file "$DOWNLOAD_PATH" | grep -q "executable"; then
error "Downloaded file is not an executable" \
"下载的文件不是可执行文件"
fi
# Check file size / 检查文件大小
local size=$(wc -c < "$DOWNLOAD_PATH")
if [ "$size" -lt 1000000 ]; then # At least 1MB / 至少1MB
error "Downloaded file size is abnormal, download might be incomplete" \
"下载的文件大小异常,可能下载不完整"
fi
# Set executable permissions / 设置可执行权限
info "Setting executable permissions..." "正在设置可执行权限..."
if ! chmod +x "$DOWNLOAD_PATH"; then
error "Failed to set executable permissions" "无法设置可执行权限"
fi
}
# 在文件开头添加配置项
KEEP_BINARY=true # 修改默认值为 true
DOWNLOAD_DIR="." # 默认下载到当前目录
# 在 main 函数之前添加参数解析
parse_args() {
while [[ $# -gt 0 ]]; do
case $1 in
--keep-binary)
KEEP_BINARY=true
shift
;;
--download-dir=*)
DOWNLOAD_DIR="${1#*=}"
shift
;;
*)
shift
;;
esac
done
}
# Main installation process / 主安装流程
main() {
info "Starting installation of cursor-id-modifier ${VERSION}..." \
"开始安装 cursor-id-modifier ${VERSION}..."
# Initialize installation / 初始化安装
detect_platform
INSTALL_DIR="/usr/local/bin"
if [ ! -d "$INSTALL_DIR" ]; then
if ! mkdir -p "$INSTALL_DIR" 2>/dev/null; then
error "Failed to create installation directory" \
"无法创建安装目录"
fi
fi
# Check requirements / 检查要求
check_requirements
# Create temp directory / 创建临时目录
info "Creating temporary directory..." \
"正在创建临时目录..."
TEMP_DIR=$(mktemp -d)
info "Note: Temporary directory will be automatically cleaned up after installation" \
"注意:临时目录将在安装完成后自动清理"
trap 'rm -rf "$TEMP_DIR"' EXIT
# 检查下载目录权限
if [ ! -w "$DOWNLOAD_DIR" ]; then
error "No write permission for download directory: $DOWNLOAD_DIR" \
"下载目录无写入权限:$DOWNLOAD_DIR"
fi
# 下载二进制文件
info "Downloading cursor-id-modifier ($OS-$ARCH)..." \
"正在下载 cursor-id-modifier ($OS-$ARCH)..."
# 定义下载 URL
DOWNLOAD_URL="https://github.com/yuaotian/go-cursor-help/raw/refs/heads/master/bin/$BINARY_NAME"
DOWNLOAD_PATH="$DOWNLOAD_DIR/$BINARY_NAME"
info "File will be downloaded to: $DOWNLOAD_PATH" \
"文件将下载到:$DOWNLOAD_PATH"
if ! curl -L --progress-bar "$DOWNLOAD_URL" -o "$DOWNLOAD_PATH"; then
error "Failed to download binary from: $DOWNLOAD_URL" \
"从以下地址下载二进制文件失败:$DOWNLOAD_URL"
fi
success "Download completed to: $DOWNLOAD_PATH" \
"下载完成,文件位置:$DOWNLOAD_PATH"
# 添加手动设置权限的提示
info "To make the file executable, run:" \
"要使文件可执行,请运行:"
info "chmod +x $DOWNLOAD_PATH" \
"chmod +x $DOWNLOAD_PATH"
info "Then you can run it with:" \
"然后可以通过以下命令运行:"
info "./$BINARY_NAME" \
"./$BINARY_NAME"
# 验证和安装
verify_binary
# 安装到系统目录
info "Installing binary..." "正在安装二进制文件..."
if ! cp "$DOWNLOAD_PATH" "$INSTALL_DIR/cursor-id-modifier"; then
error "Failed to install binary" "安装二进制文件失败"
fi
# 根据设置决定是否保留下载的文件
if [ "$KEEP_BINARY" = false ]; then
info "Binary file will be cleaned up after installation" \
"二进制文件将在安装后被清理"
info "Use --keep-binary flag to keep the downloaded file" \
"使用 --keep-binary 参数可以保留下载的文件"
info "Cleaning up downloaded file..." "正在清理下载的文件..."
rm -f "$DOWNLOAD_PATH"
else
info "Binary file is kept at: $DOWNLOAD_PATH" \
"二进制文件保留在:$DOWNLOAD_PATH"
fi
success "Installation successful! You can now run 'cursor-id-modifier' from anywhere." \
"安装成功!现在可以在任何位置运行 'cursor-id-modifier'。"
success "For help, run 'cursor-id-modifier --help'" \
"如需帮助,请运行 'cursor-id-modifier --help'"
}
cleanup_old_version() {
if [ -f "$INSTALL_DIR/cursor-id-modifier" ]; then
info "Removing old version..." "正在删除旧版..."
rm -f "$INSTALL_DIR/cursor-id-modifier" || \
error "Failed to remove old version" "删除旧版本失败"
fi
}
# 在主程序开始前解析参数
parse_args "$@"
# Start installation / 开始安装
main