修改部署脚本

This commit is contained in:
Tian jianyong 2024-12-20 11:34:17 +08:00
parent 807bf0b0d0
commit e7b8895a60
4 changed files with 256 additions and 94 deletions

View File

@ -56,7 +56,7 @@ cd CollisionAvoidance
脚本会自动完成:
- 下载所需的系统依赖
- 下载所需的系统依赖
- 下载 Python 依赖包
- 创建完整的项目归档文件
@ -76,7 +76,18 @@ tar xzf CollisionAvoidance.tar.gz
cd CollisionAvoidance
```
3. 执行部署脚本
3. 删除 32 位依赖包
> 注意:由于系统是 64 位架构,我们需要删除所有 32 位i686的依赖包以避免安装冲突。这些包是在准备离线包时自动下载的但在 64 位系统上不需要。
```bash
# 删除所有 i686 架构的包
cd packages
rm -f *i686.rpm
cd ..
```
4. 执行部署脚本
```bash
sudo ./scripts/deploy.sh
@ -127,7 +138,7 @@ firewall-cmd --reload
### 3. 防火墙配置
- 如果使用其他防火墙,需要手动开放 8010 和 8081 端口
- 确认防火墙规是否生效:`firewall-cmd --list-all`
- 确认防火墙规<EFBFBD><EFBFBD><EFBFBD>是否生效:`firewall-cmd --list-all`
## 卸载

View File

@ -0,0 +1,172 @@
# 部署指南
本文档详细说明了如何在 CentOS 系统上部署碰撞避免系统。支持在线和离线两种部署方式。
## 目录
- [系统要求](#系统要求)
- [在线部署](#在线部署)
- [离线部署](#离线部署)
- [部署后配置](#部署后配置)
- [常见问题](#常见问题)
## 系统要求
- CentOS 7 或更高版本
- 至少 2GB 可用内存
- 至少 10GB 可用磁盘空间
- root 权限
- Python 3.6 或更高版本
## 在线部署
如果服务器可以访问互联网,可以直接使用在线部署方式。
1. 获取项目代码
```bash
git clone [项目仓库地址]
cd CollisionAvoidance
```
2. 执行部署脚本
```bash
sudo ./scripts/deploy.sh
```
## 离线部署
如果服务器无法访问互联网,需要使用离线部署方式。
### 准备阶段(在有网络的环境中进行)
1. 在有网络的 CentOS 环境中,获取项目代码
```bash
git clone [项目仓库地址]
cd CollisionAvoidance
```
2. 执行离线包准备脚本
```bash
./scripts/prepare_offline_packages.sh
```
脚本会自动完成:
- 下载所需的系统依赖包
- 下载 Python 依赖包
- 创建完整的项目归档文件
### 部署步骤
1. 将生成的归档文件传输到目标服务器
```bash
scp ../CollisionAvoidance.tar.gz root@target-server:/tmp/
```
2. 在目标服务器上解压
```bash
cd /tmp
tar xzf CollisionAvoidance.tar.gz
cd CollisionAvoidance
```
3. 删除 32 位依赖包
> 注意:由于系统是 64 位架构,我们需要删除所有 32 位i686的依赖包以避免安装冲突。这些包是在准备离线包时自动下载的但在 64 位系统上不需要。
```bash
# 删除所有 i686 架构的包
cd packages
rm -f *i686.rpm
cd ..
```
4. 执行部署脚本
```bash
sudo ./scripts/deploy.sh
```
## 部署后配置
### 服务管理
- 启动服务:`systemctl start collision-avoidance`
- 停止服务:`systemctl stop collision-avoidance`
- 重启服务:`systemctl restart collision-avoidance`
- 查看状态:`systemctl status collision-avoidance`
- 查看日志:`journalctl -u collision-avoidance -f`
### 配置文件
- 配置文件位置:`/etc/collision_avoidance/`
- WebSocket 服务端口8010
- Mock Server 端口8081
### 防火墙配置
如果使用 firewalld
```bash
# 开放 WebSocket 端口
firewall-cmd --permanent --add-port=8010/tcp
# 开放 Mock Server 端口
firewall-cmd --permanent --add-port=8081/tcp
firewall-cmd --reload
```
## 常见问题
### 1. 服务启动失败
- 检查服务日志:`journalctl -u collision-avoidance -n 50`
- 确认配置文件权限正确
- 验证端口 8010 和 8081 是否被占用
### 2. Mock Server 启动失<E58AA8><E5A4B1>
- 检查 Python 和依赖包是否正确安装
- 确认端口 8081 未被占用
- 检查 Mock Server 日志输出
### 3. 防火墙配置
- 如果使用其他防火墙,需要手动开放 8010 和 8081 端口
- 确认防火墙规则是否生效:`firewall-cmd --list-all`
### 4. 依赖包安装问题
- 如果遇到依赖包冲突,检查是否有 i686 架构的包未被删除
- 使用 `rpm -qa | grep i686` 命令检查系统中的 32 位包
- 如果发现 i686 包,使用 `rpm -e` 命令删除它们
## 卸载
如需卸载系统:
```bash
sudo ./scripts/uninstall.sh
```
卸载脚本会:
- 停止并禁用服务
- 删除系统服务配置
- 删除程序文件
- 删除配置文件
- 关闭防火墙端口
## 技术支持
如遇到问题,请:
1. 查看服务日志
2. 检查系统日志
3. 检查 Mock Server 日志
4. 联系技术支持团队

View File

@ -35,54 +35,48 @@ fi
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")"
# Detect system architecture
CURRENT_ARCH=$(uname -m)
case ${CURRENT_ARCH} in
x86_64|i686|i386)
log_info "System architecture: ${CURRENT_ARCH}"
;;
*)
log_error "Unsupported architecture: ${CURRENT_ARCH}"
exit 1
;;
esac
# Find the correct packages directory
PACKAGES_DIR="${PROJECT_ROOT}/packages_${CURRENT_ARCH}"
if [ ! -d "${PACKAGES_DIR}" ]; then
log_error "Packages directory not found for architecture ${CURRENT_ARCH}: ${PACKAGES_DIR}"
log_error "Please run prepare_offline_packages.sh with the correct architecture first"
exit 1
fi
# Check if offline packages exist
if [ -d "${PACKAGES_DIR}" ]; then
if [ -d "${PROJECT_ROOT}/packages" ]; then
log_info "检测到离线安装包目录,使用离线安装模式..."
# Install offline packages
log_info "安装离线依赖包..."
if [ -f "${PACKAGES_DIR}/offline-deps.txt" ]; then
while IFS= read -r pkg; do
if [ -f "${PACKAGES_DIR}/$pkg" ]; then
log_info "正在安装: $pkg"
rpm -ivh "${PACKAGES_DIR}/$pkg" || {
log_error "安装包失败: $pkg"
exit 1
}
else
log_error "找不到安装包: $pkg"
exit 1
fi
done < "${PACKAGES_DIR}/offline-deps.txt"
# Configure local repository
log_info "配置本地仓库..."
if [ -f "${PROJECT_ROOT}/packages/local.repo" ]; then
cp "${PROJECT_ROOT}/packages/local.repo" /etc/yum.repos.d/
yum clean all
yum makecache
else
log_error "找不到离线依赖包列表文件: offline-deps.txt"
log_error "找不到本地仓库配置文件: local.repo"
exit 1
fi
# Install packages from local repository
log_info "从本地仓库安装依赖包..."
yum install -y --disablerepo=* --enablerepo=local \
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 "${PACKAGES_DIR}/requirements.txt" ]; then
if [ -f "${PROJECT_ROOT}/packages/requirements.txt" ]; then
log_info "安装 Python 依赖包..."
pip3 install --no-index --find-links="${PACKAGES_DIR}/python_packages" -r "${PACKAGES_DIR}/requirements.txt" || {
pip3 install --no-index --find-links="${PROJECT_ROOT}/packages/python_packages" \
-r "${PROJECT_ROOT}/packages/requirements.txt" || {
log_error "安装 Python 包失败"
exit 1
}
@ -92,7 +86,7 @@ else
log_info "使用在线安装模式..."
log_info "正在安装依赖包..."
yum groupinstall -y "Development Tools"
yum install -y cmake3 nlohmann-json-devel boost-devel openssl-devel python3 python3-pip
yum install -y cmake3 json-devel boost-devel openssl-devel python3 python3-pip
# Install Python packages
log_info "安装 Python 依赖..."

View File

@ -58,24 +58,13 @@ PACKAGES_DIR="${PROJECT_ROOT}/packages"
log_info "Creating packages directory: ${PACKAGES_DIR}"
mkdir -p "${PACKAGES_DIR}"
# Install yum-plugin-downloadonly if not already installed
if ! rpm -q yum-plugin-downloadonly &>/dev/null; then
log_info "Installing yum-plugin-downloadonly..."
yum install -y yum-plugin-downloadonly || {
log_error "Failed to install yum-plugin-downloadonly"
exit 1
}
fi
# Function to get package dependencies
get_dependencies() {
local pkg=$1
yum deplist "$pkg" | grep provider: | awk '{print $2}' | sort -u
# Install necessary tools
log_info "Installing required tools..."
yum install -y yum-utils createrepo || {
log_error "Failed to install required tools"
exit 1
}
# Download system dependencies
log_info "Downloading system packages and their dependencies..."
# Define base packages
PACKAGES=(
"cmake3"
@ -84,6 +73,9 @@ PACKAGES=(
"openssl-devel"
"python3"
"python3-pip"
"python3-devel"
"python3-libs"
"python3-setuptools"
"gcc"
"gcc-c++"
"make"
@ -92,46 +84,36 @@ PACKAGES=(
"libtool"
)
# Create a temporary file for all packages including dependencies
TEMP_PKGS=$(mktemp)
# Get all dependencies
for pkg in "${PACKAGES[@]}"; do
log_info "Checking dependencies for $pkg..."
echo "$pkg" >> "$TEMP_PKGS"
get_dependencies "$pkg" >> "$TEMP_PKGS"
done
# Remove duplicates and sort
sort -u "$TEMP_PKGS" -o "$TEMP_PKGS"
# Download all packages
log_info "Downloading packages..."
DOWNLOAD_FAILED=0
while read -r pkg; do
log_info "Downloading $pkg..."
if ! yum install --downloadonly --downloaddir="${PACKAGES_DIR}" "$pkg"; then
log_error "Failed to download $pkg"
DOWNLOAD_FAILED=1
fi
done < "$TEMP_PKGS"
rm "$TEMP_PKGS"
# Check if any RPM files were downloaded
# Download packages
log_info "Downloading packages and their dependencies..."
cd "${PACKAGES_DIR}" || {
log_error "Failed to enter packages directory"
exit 1
}
if [ ! "$(ls -A *.rpm 2>/dev/null)" ]; then
if [ $DOWNLOAD_FAILED -eq 1 ]; then
log_error "Failed to download some packages. Please check your network connection and yum repository configuration."
else
log_error "No RPM packages were downloaded. Please check your yum configuration."
fi
for pkg in "${PACKAGES[@]}"; do
log_info "Downloading $pkg and its dependencies..."
yumdownloader --resolve --destdir="${PACKAGES_DIR}" --arch=x86_64 "$pkg" || {
log_error "Failed to download $pkg"
exit 1
}
done
# Create local repository
log_info "Creating local repository..."
createrepo "${PACKAGES_DIR}" || {
log_error "Failed to create local repository"
exit 1
fi
}
# Create repository configuration file
cat > "${PACKAGES_DIR}/local.repo" << EOL
[local]
name=Local Repository
baseurl=file://${PACKAGES_DIR}
enabled=1
gpgcheck=0
EOL
# Create Python requirements file
log_info "Creating Python requirements file..."
@ -200,10 +182,13 @@ echo -e "\n${GREEN}Offline package preparation completed!${NC}"
echo "Created files:"
echo " - ${PACKAGES_DIR}/offline-deps.txt (System package list)"
echo " - ${PACKAGES_DIR}/requirements.txt (Python package list)"
echo " - ${PACKAGES_DIR}/local.repo (Local repository configuration)"
echo " - ${PACKAGES_DIR}/*.rpm (System packages)"
echo " - ${PACKAGES_DIR}/repodata/* (Repository metadata)"
echo " - ${PACKAGES_DIR}/${PYTHON_PACKAGES_DIR}/* (Python packages)"
echo " - ${ARCHIVE_PATH} (Complete project archive)"
echo -e "\nNext steps:"
echo "1. Transfer ${ARCHIVE_NAME} to the target server"
echo "2. Extract the archive on the target server"
echo "3. Run the deployment script"
echo "3. Copy local.repo to /etc/yum.repos.d/ on the target server"
echo "4. Run the deployment script"