220 lines
5.7 KiB
Bash
220 lines
5.7 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
#
|
||
|
# Copyright (c) 2024, RT-Thread Development Team
|
||
|
#
|
||
|
# SPDX-License-Identifier: Apache-2.0
|
||
|
#
|
||
|
# Change Logs:
|
||
|
# Date Author Notes
|
||
|
# 2024-08-27 Supperthomas the first version
|
||
|
#
|
||
|
|
||
|
#这个脚本用于安装RT-Thread开发环境 请确保网络畅通
|
||
|
|
||
|
# 设置环境变量 如果希望生效请在当前shell中执行source install.sh
|
||
|
|
||
|
export RTT_ROOT=$(pwd)
|
||
|
export RTT_CC=gcc
|
||
|
|
||
|
echo "RTT_ROOT is set to: $RTT_ROOT"
|
||
|
|
||
|
|
||
|
check_if_china_ip() {
|
||
|
# 默认情况下不使用gitee
|
||
|
use_gitee=false
|
||
|
|
||
|
# 尝试通过IP地址判断
|
||
|
ip=$(curl -s https://ifconfig.me/ip)
|
||
|
if [ -n "$ip" ]; then
|
||
|
location=$(curl -s http://www.ip-api.com/json/$ip | grep -o '"country":"China"')
|
||
|
if [ "$location" == '"country":"China"' ]; then
|
||
|
use_gitee=true
|
||
|
echo "Detected China IP. Using gitee."
|
||
|
else
|
||
|
echo "IP location is not in China."
|
||
|
fi
|
||
|
else
|
||
|
echo "Failed to retrieve IP address. Falling back to timezone check."
|
||
|
|
||
|
# 通过时区判断
|
||
|
if [ $(($(date +%z)/100)) -eq 8 ]; then
|
||
|
use_gitee=true
|
||
|
echo "Detected timezone UTC+8. Using gitee."
|
||
|
else
|
||
|
echo "Timezone is not UTC+8."
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
echo $use_gitee
|
||
|
}
|
||
|
|
||
|
|
||
|
# 检测操作系统类型和发行版
|
||
|
detect_os() {
|
||
|
if command -v uname >/dev/null 2>&1; then
|
||
|
OS=$(uname -s)
|
||
|
else
|
||
|
if [ -f "/etc/os-release" ]; then
|
||
|
OS="Linux"
|
||
|
elif [ -f "/System/Library/CoreServices/SystemVersion.plist" ]; then
|
||
|
OS="macOS"
|
||
|
elif [[ -d "/mnt/c/Windows" || -d "/c/Windows" ]]; then
|
||
|
OS="WSL"
|
||
|
else
|
||
|
OS="UNKNOWN"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [ "$OS" == "Linux" ]; then
|
||
|
if [ -f /etc/os-release ]; then
|
||
|
. /etc/os-release
|
||
|
DISTRO=$ID
|
||
|
VERSION=$VERSION_ID
|
||
|
elif [ -f /etc/lsb-release ]; then
|
||
|
. /etc/lsb-release
|
||
|
DISTRO=$DISTRIB_ID
|
||
|
VERSION=$DISTRIB_RELEASE
|
||
|
else
|
||
|
DISTRO="UNKNOWN"
|
||
|
VERSION="UNKNOWN"
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
echo "Detected Operating System: $OS, Distribution: $DISTRO, Version: $VERSION"
|
||
|
}
|
||
|
|
||
|
# 修改的安装函数
|
||
|
install_on_ubuntu() {
|
||
|
echo "Installing on Debian/Ubuntu..."
|
||
|
use_gitee=$(check_if_china_ip)
|
||
|
|
||
|
# 根据检测结果决定是否使用--gitee参数
|
||
|
if [ "$use_gitee" = true ]; then
|
||
|
wget https://raw.githubusercontent.com/RT-Thread/env/master/install_ubuntu.sh
|
||
|
chmod 777 install_ubuntu.sh
|
||
|
echo "Installing on China gitee..."
|
||
|
./install_ubuntu.sh --gitee
|
||
|
else
|
||
|
wget https://raw.githubusercontent.com/RT-Thread/env/master/install_ubuntu.sh
|
||
|
chmod 777 install_ubuntu.sh
|
||
|
echo "Installing on no China..."
|
||
|
./install_ubuntu.sh
|
||
|
fi
|
||
|
rm install_ubuntu.sh
|
||
|
}
|
||
|
|
||
|
|
||
|
install_on_fedora() {
|
||
|
echo "Installing on Fedora..."
|
||
|
|
||
|
}
|
||
|
|
||
|
install_on_centos() {
|
||
|
echo "Installing on CentOS/RHEL..."
|
||
|
}
|
||
|
|
||
|
install_on_arch() {
|
||
|
echo "Installing on Arch Linux..."
|
||
|
}
|
||
|
|
||
|
install_on_macos() {
|
||
|
echo "Installing on macOS..."
|
||
|
use_gitee=$(check_if_china_ip)
|
||
|
|
||
|
# 根据检测结果决定是否使用--gitee参数
|
||
|
if [ "$use_gitee" = true ]; then
|
||
|
wget https://raw.githubusercontent.com/RT-Thread/env/master/install_macos.sh
|
||
|
chmod 777 install_macos.sh
|
||
|
echo "Installing on China gitee..."
|
||
|
./install_macos.sh --gitee
|
||
|
else
|
||
|
wget https://raw.githubusercontent.com/RT-Thread/env/master/install_macos.sh
|
||
|
chmod 777 install_macos.sh
|
||
|
echo "Installing on no China..."
|
||
|
./install_macos.sh
|
||
|
fi
|
||
|
rm ./install_macos.sh
|
||
|
}
|
||
|
|
||
|
install_on_wsl() {
|
||
|
echo "Installing on Windows Subsystem for Linux (WSL)..."
|
||
|
}
|
||
|
|
||
|
install_on_windows() {
|
||
|
echo "Installing on Windows using PowerShell..."
|
||
|
use_gitee=$(check_if_china_ip)
|
||
|
|
||
|
# 根据检测结果决定是否使用--gitee参数
|
||
|
if [ "$use_gitee" = true ]; then
|
||
|
wget https://raw.githubusercontent.com/RT-Thread/env/master/install_windows.ps1
|
||
|
echo "Installing on China gitee..."
|
||
|
./install_windows.ps1 --gitee
|
||
|
else
|
||
|
wget https://raw.githubusercontent.com/RT-Thread/env/master/install_windows.ps1
|
||
|
echo "Installing on no China..."
|
||
|
./install_windows.ps1
|
||
|
fi
|
||
|
rm ./install_windows.ps1
|
||
|
}
|
||
|
|
||
|
install_on_opensuse() {
|
||
|
echo "Installing on openSUSE..."
|
||
|
use_gitee=$(check_if_china_ip)
|
||
|
if [ "$use_gitee" = true ]; then
|
||
|
wget https://raw.githubusercontent.com/RT-Thread/env/master/install_suse.sh
|
||
|
chmod 777 install_suse.sh
|
||
|
echo "Installing on China gitee..."
|
||
|
./install_suse.sh --gitee
|
||
|
else
|
||
|
wget https://raw.githubusercontent.com/RT-Thread/env/master/install_suse.sh
|
||
|
chmod 777 install_suse.sh
|
||
|
echo "Installing on no China..."
|
||
|
./install_suse.sh
|
||
|
fi
|
||
|
rm ./install_suse.sh
|
||
|
}
|
||
|
# 主函数
|
||
|
main() {
|
||
|
detect_os
|
||
|
case "$OS" in
|
||
|
Linux)
|
||
|
case "$DISTRO" in
|
||
|
ubuntu|debian)
|
||
|
install_on_ubuntu
|
||
|
;;
|
||
|
fedora)
|
||
|
install_on_fedora
|
||
|
;;
|
||
|
centos|rhel)
|
||
|
install_on_centos
|
||
|
;;
|
||
|
arch)
|
||
|
install_on_arch
|
||
|
;;
|
||
|
*)
|
||
|
echo "Unsupported Linux distribution: $DISTRO"
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
;;
|
||
|
macOS)
|
||
|
install_on_macos
|
||
|
;;
|
||
|
WSL)
|
||
|
install_on_wsl
|
||
|
;;
|
||
|
Windows)
|
||
|
install_on_windows
|
||
|
;;
|
||
|
*)
|
||
|
echo "Unsupported Operating System: $OS"
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
echo "Installation completed!"
|
||
|
}
|
||
|
|
||
|
# 执行主函数
|
||
|
main
|