Files
2026-01-10 20:14:07 +08:00

697 строки
18 KiB
Rust
Исходник Постоянная ссылка Ответственный История

Этот файл содержит неоднозначные символы Юникода
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="4.6.1"
DOWNLOAD_HOST="https://github.com/EvilGenius-dot/RustMinerSystem/raw/main/linux/armv7"
ORIGIN_EXEC="rustminersystem-${VERSION}"
SERVICE_NAME="rustservice"
PATH_RUST="/root/rustminersystem"
PATH_EXEC="rustminersystem"
PATH_CONFIG="${PATH_RUST}/rust-config"
PATH_NOHUP="${PATH_RUST}/nohup.out"
PATH_ERR="${PATH_RUST}/err.log"
PATH_CUE="${PATH_RUST}/cue"
PATH_D_1="${PATH_RUST}/0.d1"
PATH_D_2="${PATH_RUST}/0.d1-shm"
PATH_D_3="${PATH_RUST}/0.d1-wal"
# 语言选择菜单
clear
echo "Please select your language / 请选择语言:"
# echo ""
echo "1. English"
echo "2. 中文"
# echo ""
read -p "$(echo -e "[1-2]")" lang_choice
if [ "$lang_choice" = "1" ]; then
prompt_title="---------- English Menu ----------"
prompt_install="1. Install"
prompt_update="2. Update"
prompt_start="3. Start software"
prompt_stop="4. Stop software"
prompt_restart="5. Restart software"
prompt_port="6. Modify startup port"
prompt_ulimit="7. Remove Linux system connection limit (requires server restart to take effect)"
prompt_auto_start="8. Set automatic startup"
prompt_disable_auto_start="9. Disable automatic startup..."
prompt_status="10. Check program running status"
prompt_error_log="11. View error log"
prompt_clear_log="12. Clear log files"
prompt_web_port="13. View current WEB access port"
prompt_uninstall="14. Uninstall"
prompt_reset_pwd="15. Reset account password"
prompt_target_version="16. Install specified version"
prompt_root_no="Please run this script as root!"
prompt_error_command="Invalid command entered. Please try again."
prompt_msg_1="Start installation"
prompt_msg_2="Disable firewall"
prompt_msg_3="Unknown operating system, failed to disable firewall"
m_4="Start program"
m_5="Program is already running, please do not start it again."
m_6="Program started successfully, WEB access port is"
m_7="Default account is qzpm19kkx default password is xloqslz913"
m_8="If you are using the default password and port, please change the account password and web access port in a timely manner through the web settings."
m_9="Password reset completed, changed to default account password qzpm19kkx xloqslz913"
m_10="Terminating process..."
m_11="Not found"
m_12="Process"
m_13="Terminated"
m_14="Set up automatic startup"
m_15="Disable automatic startup..."
m_16="Failed"
m_17="Environment variable configuration file not found, creating one now"
m_18="Modify system connection limit"
m_19="Connection limit has been changed to 65535, please restart the server for the change to take effect"
m_20="Current connection limit:"
m_21="Modification completed, please restart the server for the change to take effect"
m_22="Detected running"
m_23=", it must be stopped before continuing with the installation."
m_24="Enter 1 to stop the running"
m_25="and continue with the installation, enter 2 to cancel the installation."
m_26="Please choose"
m_27="Cancel installation"
m_28="Invalid input, cancelling installation."
m_29="Creating directory"
m_30="Directory already exists, no need to create it again, continuing with the installation."
m_31="Downloading..."
m_32="Downloading program"
m_33="Uninstall completed"
m_34="Press CTRL+C to run in the background"
m_35="Cleaning up logs"
m_36="Cleanup completed"
m_37="Current WEB access port is"
m_38="Enter the published version number to install:"
m_39="Please enter the version number:"
m_40="Program startup failure!!!"
elif [ "$lang_choice" = "2" ]; then
prompt_title="---------- 中文菜单 ----------"
prompt_install="1. 安装"
prompt_update="2. 更新"
prompt_start="3. 启动软件"
prompt_stop="4. 停止软件"
prompt_restart="5. 重启软件"
prompt_port="6. 修改启动端口"
prompt_ulimit="7. 解除Linux系统连接数限制(需要重启服务器生效)"
prompt_auto_start="8. 设置开机启动"
prompt_disable_auto_start="9. 关闭开机启动"
prompt_status="10. 查看程序运行状态"
prompt_error_log="11. 查看错误日志"
prompt_clear_log="12. 清理日志文件"
prompt_web_port="13. 查看当前WEB访问端口"
prompt_uninstall="14. 卸载"
prompt_reset_pwd="15. 重置认账号密码"
prompt_target_version="16. 安装指定版本"
prompt_root_no="请使用root用户运行此脚本!"
prompt_error_command="输入了错误的指令, 请重新输入。"
prompt_msg_1="开始安装"
prompt_msg_2="关闭防火墙"
prompt_msg_3="未知的操作系统, 关闭防火墙失败"
m_4="启动程序"
m_5="程序已经启动,请不要重复启动。"
m_6="程序启动成功, WEB访问端口"
m_7="默认账号 qzpm19kkx 默认密码 xloqslz913"
m_8="如果您是默认密码及默认端口, 请及时在网页设置中修改账号密码及web访问端口。"
m_9="重置密码完成, 已修改为默认账号密码 qzpm19kkx xloqslz913"
m_10="终止进程..."
m_11="未发现"
m_12="进程"
m_13="终止"
m_14="设置开机启动"
m_15="关闭开机启动..."
m_16="失败"
m_17="未发现环境变量配置文件, 开始创建"
m_18="修改系统连接数限制"
m_19="连接数限制已修改为65535,重启服务器后生效"
m_20="当前连接数限制:"
m_21="修改完成, 重启服务器后生效"
m_22="发现正在运行的"
m_23=", 需要停止才可继续安装。"
m_24="输入1停止正在运行的"
m_25="并且继续安装, 输入2取消安装。"
m_26="请选择"
m_27="取消安装"
m_28="输入错误, 取消安装。"
m_29="开始创建目录"
m_30="目录已存在, 无需重复创建, 继续执行安装。"
m_31="开始下载..."
m_32="下载程序"
m_33="卸载完成"
m_34="按住CTRL+C后台运行"
m_35="清理日志"
m_36="清理完成"
m_37="当前WEB访问端口"
m_38="输入已发布的版本来进行安装:"
m_39="请输入版本号:"
m_40="程序启动失败!!!"
else
echo "无效的选择"
exit 1
fi
clear
[ $(id -u) != "0" ] && { echo "$prompt_root_no"; exit 1; }
echo "$prompt_title"
echo "$prompt_install"
echo "$prompt_update"
echo "$prompt_start"
echo "$prompt_stop"
echo "$prompt_restart"
echo "$prompt_port"
echo "$prompt_ulimit"
echo "$prompt_auto_start"
echo "$prompt_disable_auto_start"
echo "$prompt_status"
echo "$prompt_error_log"
echo "$prompt_clear_log"
echo "$prompt_web_port"
echo "$prompt_uninstall"
echo "$prompt_reset_pwd"
echo "$prompt_target_version"
echo "17. 设置后台https访问"
update() {
stop
disable_autostart
installapp $VERSION
}
check_process() {
if [[ $(uname) == "Linux" ]]; then
if pgrep -x "$1" >/dev/null; then
return 0
else
return 1
fi
else
if ps aux | grep -v grep | grep "$1" >/dev/null; then
return 0
else
return 1
fi
fi
}
set_port() {
read -p "$(echo -e "请输入要设置的端口号:")" choose
setConfig START_PORT $choose
stop
start
}
set_https_admin() {
stop
start
}
set_https() {
echo "是否开启https后台访问? 请注意,开启后后台地址必须使用https://访问, 关闭后必须使用http://访问。"
echo "1. 不开启"
echo "2. 开启"
read -p "$(echo -e "请选择[1-2]?")" choose
case $choose in
1)
setConfig ENABLE_WEB_TLS 0
;;
2)
setConfig ENABLE_WEB_TLS 1
return
;;
*)
setConfig ENABLE_WEB_TLS 1
echo "输入错误, 默认不开启。"
return
;;
esac
}
get_ip(){
local IP=$( ip addr | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | egrep -v "^192\.168|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-2]\.|^10\.|^127\.|^255\.|^0\." | head -n 1 )
[ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipv4.icanhazip.com )
[ -z ${IP} ] && IP=$( wget -qO- -t1 -T2 ipinfo.io/ip )
[ ! -z ${IP} ] && echo ${IP} || echo
}
start() {
# set_https
echo $BLUE "${m_4}..."
check_process $PATH_EXEC
if [ $? -eq 0 ]; then
echo "${m_5}"
return
else
enable_autostart
sleep 1
check_process $PATH_EXEC
if [ $? -eq 0 ]; then
clear
port=$(getConfig "START_PORT")
https=$(getConfig "ENABLE_WEB_TLS")
http_h="http://"
http_t="未开启"
if [ $https = 0 ];then
http_t="当前后台为http协议访问, 请不要使用https访问, 如需使用https, 请运行脚本选择17进行设置。"
http_h="http://"
else
http_t="当前后台为https协议访问, 请不要使用http访问, 如需使用http, 请运行脚本选择17进行设置。"
http_h="https://"
fi
echo ""
echo ""
echo "|----------------------------------------------------------------|"
echo "程序启动成功, 版本号: ${VERSION}"
echo $http_t
echo "后台访问地址: ${http_h}$(get_ip):${port}"
echo "默认用户名为 qzpm19kkx"
echo "默认密码为 xloqslz913"
echo "如果您是默认密码及默认端口, 请及时在网页设置中修改账号密码及web访问端口。"
echo "|----------------------------------------------------------------|"
else
echo "${m_40}"
fi
fi
}
resetpass() {
stop
echo "删除配置文件"
rm -rf $PATH_D_1
rm -rf $PATH_D_2
rm -rf $PATH_D_3
start
echo "${m_9}"
}
restart() {
stop
start
}
stop() {
sleep 1
disable_autostart
sleep 1
echo "${m_10}"
kill_process $PATH_EXEC
sleep 1
}
kill_process() {
local process_name="$1"
local pids=($(pgrep "$process_name"))
if [ ${#pids[@]} -eq 0 ]; then
echo "${m_11} $process_name ${m_12}."
return 1
fi
for pid in "${pids[@]}"; do
echo "Stopping process $pid ..."
kill -TERM "$pid"
done
echo "${m_13} $process_name ."
sleep 1
}
# 设置开机启动且进程守护
enable_autostart() {
echo "${m_14}"
if [ "$(command -v systemctl)" ]; then
sudo tee /etc/systemd/system/$SERVICE_NAME.service > /dev/null <<EOF
[Unit]
Description=My Program
After=network.target
[Service]
Type=simple
ExecStart=$PATH_RUST/$PATH_EXEC
WorkingDirectory=$PATH_RUST/
Restart=always
StandardOutput=file:$PATH_RUST/nohup.out
StandardError=file:$PATH_RUST/err.log
TimeoutStopSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable $SERVICE_NAME.service
sudo systemctl start $SERVICE_NAME.service
else
sudo sh -c "echo '${PATH_RUST}/${PATH_EXEC} &' >> /etc/rc.local"
sudo chmod +x /etc/rc.local
fi
}
# 禁用开机启动函数
disable_autostart() {
echo "${m_15}"
if [ "$(command -v systemctl)" ]; then
sudo systemctl stop $SERVICE_NAME.service
sudo systemctl disable $SERVICE_NAME.service
sudo rm /etc/systemd/system/$SERVICE_NAME.service
sudo systemctl daemon-reload
else # 系统使用的是SysVinit
sudo sed -i '/\/root\/rustminersystem\/rustminersystem\ &/d' /etc/rc.local
fi
sleep 1
}
ISSUE() {
echo "请输入指定的版本号, 例如 3.5.0"
}
filterResult() {
if [ $1 -eq 0 ]; then
echo ""
else
echo "!!!!!!!!!!!!!!!ERROR!!!!!!!!!!!!!!!!"
echo "【${2}】${m_16}。"
if [ ! $3 ];then
echo "!!!!!!!!!!!!!!!ERROR!!!!!!!!!!!!!!!!"
exit 1
fi
fi
echo -e
}
getConfig() {
value=$(sed -n 's/^[[:space:]]*'$1'[[:space:]]*=[[:space:]]*\(.*[^[:space:]]\)\([[:space:]]*\)$/\1/p' $PATH_CONFIG)
echo $value
}
setConfig() {
if [ ! -f "$PATH_CONFIG" ]; then
echo "${m_17}"
touch $PATH_CONFIG
chmod -R 777 $PATH_CONFIG
echo "START_PORT=63521" >> $PATH_CONFIG
echo "ENABLE_WEB_TLS=0" >> $PATH_CONFIG
fi
if grep -q "^$1=" "$PATH_CONFIG"; then
# 如果key已经存在,则修改它的值
sed -i "s/^$1=.*/$1=$2/" "$PATH_CONFIG"
echo "已更新配置文件: $PATH_CONFIG"
else
# 如果key不存在,则添加新的key=value行
echo "$1=$2" >> "$PATH_CONFIG"
echo "已添加配置到文件: $PATH_CONFIG"
fi
echo "$1已修改为$2"
}
# 关闭防火墙
disable_firewall() {
os_name=$(grep "^ID=" /etc/os-release | cut -d "=" -f 2 | tr -d '"')
echo $prompt_msg_2
if [ "$os_name" == "ubuntu" ]; then
sudo ufw disable
elif [ "$os_name" == "centos" ]; then
sudo systemctl stop firewalld
sudo systemctl disable firewalld
else
echo $prompt_msg_3
fi
}
change_limit() {
echo "${m_18}"
changeLimit="n"
if [[ -f /etc/debian_version ]]; then
echo "soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "hard nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "fs.file-max = 100000" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# add PAM configuration to enable the limits for login sessions
if [[ -f /etc/pam.d/common-session ]]; then
grep -q '^session.*pam_limits.so$' /etc/pam.d/common-session || sudo sh -c "echo 'session required pam_limits.so' >> /etc/pam.d/common-session"
fi
fi
# set file descriptor limits for CentOS/RHEL
if [[ -f /etc/redhat-release ]]; then
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "fs.file-max = 100000" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
fi
# set file descriptor limits for macOS
if [[ "$(uname)" == "Darwin" ]]; then
sudo launchctl limit maxfiles 65535 65535
sudo sysctl -w kern.maxfiles=100000
sudo sysctl -w kern.maxfilesperproc=65535
fi
# set systemd file descriptor limits
if [[ -x /bin/systemctl ]]; then
echo "DefaultLimitNOFILE=65535" >>/etc/systemd/user.conf
echo "DefaultLimitNOFILE=65535" >>/etc/systemd/system.conf
systemctl daemon-reexec
fi
if [ $(grep -c "root soft nofile" /etc/security/limits.conf) -eq '0' ]; then
echo "root soft nofile 65535" >>/etc/security/limits.conf
echo "* soft nofile 65535" >>/etc/security/limits.conf
changeLimit="y"
fi
if [ $(grep -c "root hard nofile" /etc/security/limits.conf) -eq '0' ]; then
echo "root hard nofile 65535" >>/etc/security/limits.conf
echo "* hard nofile 65535" >>/etc/security/limits.conf
changeLimit="y"
fi
if [ $(grep -c "DefaultLimitNOFILE=65535" /etc/systemd/user.conf) -eq '0' ]; then
echo "DefaultLimitNOFILE=65535" >>/etc/systemd/user.conf
changeLimit="y"
fi
if [ $(grep -c "DefaultLimitNOFILE=65535" /etc/systemd/system.conf) -eq '0' ]; then
echo "DefaultLimitNOFILE=65535" >>/etc/systemd/system.conf
changeLimit="y"
fi
if [[ "$changeLimit" = "y" ]]; then
echo "${m_19}"
else
echo -n "${m_20}"
ulimit -n
fi
echo "${m_21}"
}
installapp() {
if [ -n "$1" ]; then
VERSION="$1"
ORIGIN_EXEC="rustminersystem-${1}"
fi
echo $ORIGIN_EXEC
echo "${prompt_msg_1}${ORIGIN_EXEC}"
disable_firewall
check_process $PATH_EXEC
if [ $? -eq 0 ]; then
echo "${m_22}${PATH_EXEC}${m_23}"
echo "${m_24}${PATH_EXEC}${m_25}"
read -p "$(echo -e "${m_26}[1-2]")" choose
case $choose in
1)
stop
;;
2)
echo "${m_27}"
return
;;
*)
echo "${m_28}"
return
;;
esac
fi
echo "${m_29}"
if [[ ! -d $PATH_RUST ]];then
mkdir $PATH_RUST
chmod 777 -R $PATH_RUST
else
echo $YELLOW "${m_30}"
fi
if [[ ! -d $PATH_NOHUP ]];then
touch $PATH_NOHUP
touch $PATH_ERR
chmod 777 -R $PATH_NOHUP
chmod 777 -R $PATH_ERR
fi
if [[ ! -f $PATH_CONFIG ]];then
setConfig START_PORT $((RANDOM%65535+1))
fi
echo "${m_31}"
wget -P $PATH_RUST "${DOWNLOAD_HOST}/${ORIGIN_EXEC}" -O "${PATH_RUST}/${PATH_EXEC}" 1>/dev/null
filterResult $? "${m_32}"
chmod 777 -R "${PATH_RUST}/${PATH_EXEC}"
# enable_autostart
start
}
uninstall() {
stop
rm -rf ${PATH_RUST}
disable_autostart
echo "${m_33}"
}
check_hub() {
echo "${m_34}"
tail -f $PATH_NOHUP
}
check_err() {
echo "${m_34}"
tail -f $PATH_ERR
}
clearlog() {
echo "${m_35}"
rm $PATH_NOHUP > /dev/null 2>&1
rm $PATH_ERR > /dev/null 2>&1
echo "${m_36}"
}
lookport() {
port=$(getConfig "START_PORT")
echo "${m_37}${port}"
}
install_target() {
echo "${m_38}"
echo ""
ISSUE
echo ""
read -p "$(echo -e "${m_39}")" choose
installapp $choose
}
read -p "$(echo -e "[1-17]")" choose
case $choose in
1)
installapp $VERSION
;;
2)
update
;;
3)
start
;;
4)
stop
;;
5)
restart
;;
6)
set_port
;;
7)
change_limit
;;
8)
enable_autostart
;;
9)
disable_autostart
;;
10)
check_hub
;;
11)
check_err
;;
12)
clearlog
;;
13)
lookport
;;
14)
uninstall
;;
15)
resetpass
;;
16)
install_target
;;
17)
set_https_admin
;;
*)
echo $prompt_error_command
;;
esac