187 lines
7.4 KiB
Bash
Executable File
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 "所有操作已完成。" |