2025-05-27 15:46:31 +08:00

187 lines
7.4 KiB
Bash
Executable File

#!/bin/bash
# 定义 sudo 密码
PASSWORD="jsfb"
# 获取 setup.sh 所在的当前目录
CURRENT_DIR=$(pwd)
# 定义要替换的路径和新路径
OLD_PATH="/home/jsfb/jsfb_ws/MassageRobot_aubo"
NEW_PATH="$CURRENT_DIR"
# Conda 环境名称
CONDA_ENV="CPU_robotarm"
# 激活 Conda 环境
echo "Activating Conda environment: $CONDA_ENV"
source ~/anaconda3/etc/profile.d/conda.sh
conda activate "$CONDA_ENV" || { echo "Failed to activate Conda environment: $CONDA_ENV"; exit 1; }
# 要检查并安装的包列表
packages=("watchdog" "pyzmq" "paho-mqtt" "schedule" "apscheduler")
# 检查并安装缺少的包
for package in "${packages[@]}"; do
echo "Checking if $package is installed..."
if ! pip show "$package" > /dev/null 2>&1; then
echo "$package not found, installing..."
pip install "$package" || { echo "Failed to install $package"; exit 1; }
else
echo "$package is already installed."
fi
done
echo "All packages are installed successfully."
# 编译所有 .py 文件为 .pyc 文件
echo "Compiling all .py files to .pyc..."
python -m compileall -q .
# 遍历所有 __pycache__ 目录,将 .pyc 移到原路径
echo "Reorganizing .pyc files..."
find . -type d -name "__pycache__" | while read -r cache_dir; do
# 获取 __pycache__ 目录中的所有 .pyc 文件
find "$cache_dir" -type f -name "*.pyc" | while read -r pyc_file; do
# 原始文件路径(去掉 __pycache__ 和 Python 版本后缀)
original_path=$(echo "$pyc_file" | sed -E "s|(.*/)__pycache__/(.+)\.cpython-[0-9]+\.pyc|\1\2.pyc|")
# 移动 .pyc 文件到原始路径
mv "$pyc_file" "$original_path"
done
# 删除空的 __pycache__ 目录
rm -rf "$cache_dir"
done
echo "VortXDB前路径是: $(pwd)"
# 编译C++版本的VortXDB
# 获取 setup.sh 所在的当前目录
CURRENT_DIR=$(pwd)
echo "编译 C++ 版本的 VortXDB..."
cd "$CURRENT_DIR/VortXDB" || { echo "Failed to change directory to VortXDB"; exit 1; }
echo "进入的 VortXDB 目录是: $(pwd)"
gcc -c client.c || { echo "Failed to compile client.c"; exit 1; }
echo "C++ 版本的 VortXDB 编译完成。"
echo "VortXDB后路径是: $(pwd)"
cd ..
echo "Step 1: 替换 service 文件中的旧路径为当前目录路径..."
# 函数:检查并替换路径
replace_path() {
local file=$1
local old_path=$2
local new_path=$3
# 检查是否已经是目标路径
if grep -q "WorkingDirectory=$new_path" "$file"; then
echo "$file 中的 WorkingDirectory 已经是目标路径,无需替换"
else
# 替换 WorkingDirectory 中的路径
sed -i "s|WorkingDirectory=$old_path|WorkingDirectory=$new_path|g" "$file"
echo "替换 $file 中的 WorkingDirectory 完成"
fi
# 替换 ExecStart 中的路径
if grep -q "ExecStart=.*$new_path" "$file"; then
echo "$file 中的 ExecStart 已经是目标路径,无需替换"
else
# 如果 ExecStart 中存在旧路径,则替换为新路径
sed -i "s|ExecStart=.*$old_path|ExecStart=/bin/bash -c \"source /opt/ros/noetic/setup.bash; echo \\\$PATH; exec /home/jsfb/anaconda3/envs/CPU_robotarm/bin/python $new_path|g" "$file"
echo "替换 $file 中的 ExecStart 完成"
fi
}
echo $PASSWORD | sudo -S usermod -a -G dialout jsfb
# 对每个 service 文件进行路径替换
replace_path UI_next/ui_next_app.service "$OLD_PATH/UI_next" "$NEW_PATH/UI_next"
replace_path Language/language.service "$OLD_PATH/Language" "$NEW_PATH/Language"
replace_path Massage/massage.service "$OLD_PATH/Massage" "$NEW_PATH/Massage"
replace_path IoT/iot.service "$OLD_PATH/IoT" "$NEW_PATH/IoT"
replace_path License/license_client.service "$OLD_PATH/License" "$NEW_PATH/License"
replace_path Massage/controller.service "$OLD_PATH/Massage" "$NEW_PATH/Massage"
echo "Step 2: 复制服务文件到 /etc/systemd/system/..."
# 复制文件到 /etc/systemd/system/
echo $PASSWORD | sudo -S systemctl stop massage*.service
echo "massage* 服务停止"
echo $PASSWORD | sudo -S rm -rf /etc/systemd/system/massage*.service
echo "删除 /etc/systemd/system/massage*.service 完成"
echo $PASSWORD | sudo -S cp Massage/massage.service /etc/systemd/system/
echo "复制 Massage/massage.service 完成"
echo $PASSWORD | sudo -S cp roscore.service /etc/systemd/system/
echo "复制 roscore.service 完成"
echo $PASSWORD | sudo -S systemctl stop language*.service
echo "Language* 服务停止"
echo $PASSWORD | sudo -S rm -rf /etc/systemd/system/language*.service
echo "删除 /etc/systemd/system/language*.service 完成"
echo $PASSWORD | sudo -S cp Language/language.service /etc/systemd/system/
echo "复制 Language/language.service 完成"
echo $PASSWORD | sudo -S systemctl stop ui_next_app*.service
echo "ui_next_app* 服务停止"
echo $PASSWORD | sudo -S rm -rf /etc/systemd/system/ui_next_app*.service
echo "删除 /etc/systemd/system/ui_next_app*.service 完成"
echo $PASSWORD | sudo -S cp UI_next/ui_next_app.service /etc/systemd/system/
echo "复制 UI_next/ui_next_app.service 完成"
echo $PASSWORD | sudo -S systemctl stop iot*.service
echo "iot* 服务停止"
echo $PASSWORD | sudo -S rm -rf /etc/systemd/system/iot*.service
echo "删除 /etc/systemd/system/iot*.service 完成"
echo $PASSWORD | sudo -S cp IoT/iot.service /etc/systemd/system/
echo "复制 IoT/iot.service 完成"
echo $PASSWORD | sudo -S systemctl stop license_client*.service
echo "license_client* 服务停止"
echo $PASSWORD | sudo -S rm -rf /etc/systemd/system/license_client*.service
echo "删除 /etc/systemd/system/license_client*.service 完成"
echo $PASSWORD | sudo -S cp License/license_client.service /etc/systemd/system/
echo "复制 License/license_client.service 完成"
echo $PASSWORD | sudo -S systemctl stop controller*.service
echo "controller* 服务停止"
echo $PASSWORD | sudo -S rm -rf /etc/systemd/system/controller*.service
echo "删除 /etc/systemd/system/controller*.service 完成"
echo $PASSWORD | sudo -S cp Massage/controller.service /etc/systemd/system/
echo "复制 Massage/controller.service 完成"
echo "Step 3: 重新加载 systemd 守护进程..."
# 重新加载 systemd 守护进程
echo $PASSWORD | sudo -S systemctl daemon-reload
echo "守护进程重新加载完成"
echo "Step 4: 设置 UI_next, Language, IoT, License 和 roscore 服务为开机自启动..."
# 设置 UI_next, Language 和 roscore 服务为开机自启动
echo $PASSWORD | sudo -S systemctl enable ui_next_app.service
echo "UI_next 服务设置为开机自启动"
echo $PASSWORD | sudo -S systemctl enable language.service
echo "Language 服务设置为开机自启动"
echo $PASSWORD | sudo -S systemctl enable iot.service
echo "IoT 服务设置为开机自启动"
echo $PASSWORD | sudo -S systemctl enable license_client.service
echo "License 服务设置为开机自启动"
echo $PASSWORD | sudo -S systemctl enable roscore.service
echo "Roscore 服务设置为开机自启动"
echo $PASSWORD | sudo -S systemctl enable controller.service
echo "Controller 服务设置为开机自启动"
echo "Step 5: 重启 UI_next 和 Language 服务"
# 重启 UI_next 和 Language 服务
echo $PASSWORD | sudo -S systemctl restart ui_next_app.service
echo "UI_next 服务重启"
echo $PASSWORD | sudo -S systemctl restart language.service
echo "Language 服务重启"
echo $PASSWORD | sudo -S systemctl restart iot.service
echo "IoT 服务重启"
echo $PASSWORD | sudo -S systemctl restart license_client.service
echo "License 服务重启"
echo $PASSWORD | sudo -S systemctl restart controller.service
echo "Controller 服务重启"
echo "所有操作已完成。"