修改部署脚本
This commit is contained in:
parent
b73f6a9894
commit
e954766881
@ -19,12 +19,6 @@ log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Check if running on CentOS
|
||||
if [ ! -f /etc/centos-release ]; then
|
||||
log_error "This script must be run on CentOS"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if running as root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
log_error "Please run as root"
|
||||
@ -35,124 +29,42 @@ fi
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")"
|
||||
|
||||
# Check if offline packages exist
|
||||
if [ -d "${PROJECT_ROOT}/packages" ]; then
|
||||
log_info "检测到离线安装包目录,使用离线安装模式..."
|
||||
|
||||
# Configure local repository
|
||||
log_info "配置本地仓库..."
|
||||
if [ -f "${PROJECT_ROOT}/packages/local.repo" ]; then
|
||||
# Backup existing repo files
|
||||
log_info "备份现有仓库配置..."
|
||||
mkdir -p /etc/yum.repos.d/backup
|
||||
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/ 2>/dev/null || true
|
||||
|
||||
# Copy local repo configuration
|
||||
cp "${PROJECT_ROOT}/packages/local.repo" /etc/yum.repos.d/
|
||||
|
||||
# Clean and update repo cache
|
||||
log_info "清理并更新仓库缓存..."
|
||||
yum clean all
|
||||
yum makecache
|
||||
else
|
||||
log_error "找不到本地仓库配置文件: local.repo"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Install packages from local repository
|
||||
log_info "从本地仓库安装依赖包..."
|
||||
yum install -y \
|
||||
cmake3 \
|
||||
json-devel \
|
||||
boost-devel \
|
||||
openssl-devel \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-devel \
|
||||
python3-libs \
|
||||
python3-setuptools \
|
||||
gcc \
|
||||
gcc-c++ \
|
||||
make \
|
||||
autoconf \
|
||||
automake \
|
||||
libtool || {
|
||||
log_error "安装依赖包失败"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Install Python packages
|
||||
if [ -f "${PROJECT_ROOT}/packages/requirements.txt" ]; then
|
||||
log_info "安装 Python 依赖包..."
|
||||
pip3 install --no-index --find-links="${PROJECT_ROOT}/packages/python_packages" \
|
||||
-r "${PROJECT_ROOT}/packages/requirements.txt" || {
|
||||
log_error "安装 Python 包失败"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
|
||||
# Restore original repo files
|
||||
log_info "恢复原有仓库配置..."
|
||||
rm -f /etc/yum.repos.d/local.repo
|
||||
mv /etc/yum.repos.d/backup/* /etc/yum.repos.d/ 2>/dev/null || true
|
||||
rmdir /etc/yum.repos.d/backup 2>/dev/null || true
|
||||
else
|
||||
# Online installation
|
||||
log_info "使用在线安装模式..."
|
||||
log_info "正在安装依赖包..."
|
||||
yum groupinstall -y "Development Tools"
|
||||
yum install -y cmake3 json-devel boost-devel openssl-devel python3 python3-pip
|
||||
|
||||
# Install Python packages
|
||||
log_info "安装 Python 依赖..."
|
||||
pip3 install flask==2.0.1
|
||||
fi
|
||||
# Install RPM packages
|
||||
log_info "Installing RPM packages..."
|
||||
cd "${PROJECT_ROOT}/deploy/rpm"
|
||||
# Install Python3 and its dependencies
|
||||
rpm -Uvh --nodeps python3*.rpm
|
||||
|
||||
# Create work directory
|
||||
WORK_DIR="/opt/collision_avoidance"
|
||||
log_info "创建工作目录: $WORK_DIR"
|
||||
log_info "Creating work directory: $WORK_DIR"
|
||||
mkdir -p $WORK_DIR
|
||||
cd $WORK_DIR || {
|
||||
log_error "无法进入工作目录"
|
||||
exit 1
|
||||
}
|
||||
mkdir -p $WORK_DIR/tools
|
||||
|
||||
# Compile project
|
||||
log_info "开始编译项目..."
|
||||
mkdir -p build
|
||||
cd build || {
|
||||
log_error "无法进入构建目录"
|
||||
exit 1
|
||||
}
|
||||
cmake ..
|
||||
make -j4
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
log_error "编译失败"
|
||||
exit 1
|
||||
fi
|
||||
# Copy files
|
||||
log_info "Copying files..."
|
||||
cp -r "${PROJECT_ROOT}/deploy/bin/"* "/usr/local/bin/"
|
||||
cp -r "${PROJECT_ROOT}/deploy/lib/"* "/usr/lib64/"
|
||||
cp -r "${PROJECT_ROOT}/deploy/python/"* "/tmp/"
|
||||
cp -r "${PROJECT_ROOT}/deploy/tools/"* "$WORK_DIR/tools/"
|
||||
|
||||
# Create config directory
|
||||
CONFIG_DIR="/etc/collision_avoidance"
|
||||
log_info "创建配置目录: $CONFIG_DIR"
|
||||
log_info "Creating config directory: $CONFIG_DIR"
|
||||
mkdir -p $CONFIG_DIR
|
||||
cp -r "${PROJECT_ROOT}/deploy/config/"* "$CONFIG_DIR/"
|
||||
|
||||
# Copy config files
|
||||
log_info "复制配置文件..."
|
||||
cp ../config/* $CONFIG_DIR/ || {
|
||||
log_error "复制配置文件失败"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Copy executable
|
||||
log_info "安装可执行文件..."
|
||||
cp collision_avoidance /usr/local/bin/ || {
|
||||
log_error "复制可执行文件失败"
|
||||
exit 1
|
||||
}
|
||||
# Install Python packages
|
||||
log_info "Installing Python packages..."
|
||||
cd /tmp
|
||||
for pkg in *.whl; do
|
||||
if [ -f "$pkg" ]; then
|
||||
pip3 install --no-index "$pkg"
|
||||
fi
|
||||
done
|
||||
|
||||
# Create service file
|
||||
log_info "创建系统服务..."
|
||||
log_info "Creating system service..."
|
||||
cat > /etc/systemd/system/collision-avoidance.service << EOL
|
||||
[Unit]
|
||||
Description=Collision Avoidance Service
|
||||
@ -166,48 +78,49 @@ User=root
|
||||
Restart=always
|
||||
RestartSec=3
|
||||
Environment=CONFIG_PATH=/etc/collision_avoidance
|
||||
Environment=LD_LIBRARY_PATH=/usr/lib64
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOL
|
||||
|
||||
# Configure firewall
|
||||
log_info "配置防火墙..."
|
||||
log_info "Configuring firewall..."
|
||||
if command -v firewall-cmd &> /dev/null; then
|
||||
firewall-cmd --permanent --add-port=8010/tcp
|
||||
firewall-cmd --permanent --add-port=8081/tcp
|
||||
firewall-cmd --reload
|
||||
else
|
||||
log_warn "未检测到 firewalld,请手动配置防火墙"
|
||||
log_warn "firewalld not detected, please configure firewall manually"
|
||||
fi
|
||||
|
||||
# Start service
|
||||
log_info "启动服务..."
|
||||
log_info "Starting service..."
|
||||
systemctl daemon-reload
|
||||
systemctl enable collision-avoidance
|
||||
systemctl start collision-avoidance
|
||||
|
||||
# Check service status
|
||||
if systemctl is-active --quiet collision-avoidance; then
|
||||
log_info "服务启动成功"
|
||||
log_info "Service started successfully"
|
||||
else
|
||||
log_error "服务启动失败,请检查日志"
|
||||
log_error "Service failed to start, check logs"
|
||||
journalctl -u collision-avoidance -n 50
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Display service status
|
||||
log_info "部署完成,服务状态:"
|
||||
log_info "Deployment completed, service status:"
|
||||
systemctl status collision-avoidance
|
||||
|
||||
# Display usage instructions
|
||||
echo -e "\n${GREEN}部署完成!${NC}"
|
||||
echo "使用以下命令管理服务:"
|
||||
echo " 启动服务:systemctl start collision-avoidance"
|
||||
echo " 停止服务:systemctl stop collision-avoidance"
|
||||
echo " 重启服务:systemctl restart collision-avoidance"
|
||||
echo " 查看状态:systemctl status collision-avoidance"
|
||||
echo " 查看日志:journalctl -u collision-avoidance -f"
|
||||
echo -e "\n配置文件位置:${CONFIG_DIR}"
|
||||
echo "WebSocket 服务端口:8010"
|
||||
echo "Mock Server 端口:8081"
|
||||
echo -e "\n${GREEN}Deployment completed!${NC}"
|
||||
echo "Use these commands to manage the service:"
|
||||
echo " Start service: systemctl start collision-avoidance"
|
||||
echo " Stop service: systemctl stop collision-avoidance"
|
||||
echo " Restart service: systemctl restart collision-avoidance"
|
||||
echo " Check status: systemctl status collision-avoidance"
|
||||
echo " View logs: journalctl -u collision-avoidance -f"
|
||||
echo -e "\nConfig files location: ${CONFIG_DIR}"
|
||||
echo "WebSocket port: 8010"
|
||||
echo "Mock Server port: 8081"
|
||||
@ -1,124 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Color definitions for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Logging functions
|
||||
log_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Check if running as root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
log_error "Please run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get script directory and project root
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")"
|
||||
|
||||
# Install RPM packages
|
||||
log_info "Installing RPM packages..."
|
||||
cd "${PROJECT_ROOT}/deploy/rpm"
|
||||
# Install Python3 and its dependencies
|
||||
rpm -Uvh --nodeps python3*.rpm
|
||||
|
||||
# Create work directory
|
||||
WORK_DIR="/opt/collision_avoidance"
|
||||
log_info "Creating work directory: $WORK_DIR"
|
||||
mkdir -p $WORK_DIR
|
||||
|
||||
# Copy files
|
||||
log_info "Copying files..."
|
||||
cp -r "${PROJECT_ROOT}/deploy/bin/"* "/usr/local/bin/"
|
||||
cp -r "${PROJECT_ROOT}/deploy/lib/"* "/usr/lib64/"
|
||||
cp -r "${PROJECT_ROOT}/deploy/python/"* "/tmp/"
|
||||
|
||||
# Create config directory
|
||||
CONFIG_DIR="/etc/collision_avoidance"
|
||||
log_info "Creating config directory: $CONFIG_DIR"
|
||||
mkdir -p $CONFIG_DIR
|
||||
cp -r "${PROJECT_ROOT}/deploy/config/"* "$CONFIG_DIR/"
|
||||
|
||||
# Install Python packages
|
||||
log_info "Installing Python packages..."
|
||||
cd /tmp
|
||||
for pkg in *.whl; do
|
||||
if [ -f "$pkg" ]; then
|
||||
pip3 install --no-index "$pkg"
|
||||
fi
|
||||
done
|
||||
|
||||
# Create service file
|
||||
log_info "Creating system service..."
|
||||
cat > /etc/systemd/system/collision-avoidance.service << EOL
|
||||
[Unit]
|
||||
Description=Collision Avoidance Service
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/local/bin/collision_avoidance
|
||||
WorkingDirectory=/usr/local/bin
|
||||
User=root
|
||||
Restart=always
|
||||
RestartSec=3
|
||||
Environment=CONFIG_PATH=/etc/collision_avoidance
|
||||
Environment=LD_LIBRARY_PATH=/usr/lib64
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOL
|
||||
|
||||
# Configure firewall
|
||||
log_info "Configuring firewall..."
|
||||
if command -v firewall-cmd &> /dev/null; then
|
||||
firewall-cmd --permanent --add-port=8010/tcp
|
||||
firewall-cmd --permanent --add-port=8081/tcp
|
||||
firewall-cmd --reload
|
||||
else
|
||||
log_warn "firewalld not detected, please configure firewall manually"
|
||||
fi
|
||||
|
||||
# Start service
|
||||
log_info "Starting service..."
|
||||
systemctl daemon-reload
|
||||
systemctl enable collision-avoidance
|
||||
systemctl start collision-avoidance
|
||||
|
||||
# Check service status
|
||||
if systemctl is-active --quiet collision-avoidance; then
|
||||
log_info "Service started successfully"
|
||||
else
|
||||
log_error "Service failed to start, check logs"
|
||||
journalctl -u collision-avoidance -n 50
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Display service status
|
||||
log_info "Deployment completed, service status:"
|
||||
systemctl status collision-avoidance
|
||||
|
||||
# Display usage instructions
|
||||
echo -e "\n${GREEN}Deployment completed!${NC}"
|
||||
echo "Use these commands to manage the service:"
|
||||
echo " Start service: systemctl start collision-avoidance"
|
||||
echo " Stop service: systemctl stop collision-avoidance"
|
||||
echo " Restart service: systemctl restart collision-avoidance"
|
||||
echo " Check status: systemctl status collision-avoidance"
|
||||
echo " View logs: journalctl -u collision-avoidance -f"
|
||||
echo -e "\nConfig files location: ${CONFIG_DIR}"
|
||||
echo "WebSocket port: 8010"
|
||||
echo "Mock Server port: 8081"
|
||||
@ -34,6 +34,7 @@ mkdir -p "${DEPLOY_DIR}/python"
|
||||
mkdir -p "${DEPLOY_DIR}/config"
|
||||
mkdir -p "${DEPLOY_DIR}/rpm"
|
||||
mkdir -p "${DEPLOY_DIR}/tools"
|
||||
mkdir -p "${DEPLOY_DIR}/scripts"
|
||||
|
||||
# Download Python3 RPM packages
|
||||
log_info "Downloading Python3 RPM packages..."
|
||||
@ -142,6 +143,11 @@ cp "${PROJECT_ROOT}/tools/mock_server.py" "${DEPLOY_DIR}/tools/"
|
||||
cp "${PROJECT_ROOT}/tools/map_websocket.html" "${DEPLOY_DIR}/tools/"
|
||||
cp "${PROJECT_ROOT}/tools/test_websocket.html" "${DEPLOY_DIR}/tools/"
|
||||
|
||||
# Copy deployment scripts
|
||||
log_info "Copying deployment scripts..."
|
||||
cp "${PROJECT_ROOT}/scripts/deploy.sh" "${DEPLOY_DIR}/scripts/"
|
||||
chmod +x "${DEPLOY_DIR}/scripts/"*.sh
|
||||
|
||||
# Create deployment archive
|
||||
log_info "Creating deployment archive..."
|
||||
cd "${PROJECT_ROOT}"
|
||||
@ -154,4 +160,5 @@ echo " - Required runtime libraries"
|
||||
echo " - Python3 RPM packages"
|
||||
echo " - Python dependencies"
|
||||
echo " - Configuration files"
|
||||
echo " - Tools"
|
||||
echo " - Tools"
|
||||
echo " - Deployment scripts"
|
||||
Loading…
Reference in New Issue
Block a user