#!/bin/bash # 定义 sudo 密码 PASSWORD="jsfb" # 获取 setup.sh 所在的当前目录 CURRENT_DIR=$(pwd) # 定义要替换的路径和新路径 OLD_PATH="/home/jsfb/jsfb_ws/MassageRobot_Dobot" 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 "所有操作已完成。"