[refactor]变更安装相关脚本的目录结构

This commit is contained in:
liang-ys 2026-03-24 15:36:16 +08:00
parent faa85fa295
commit 65f83b476d
10 changed files with 554 additions and 78 deletions

View File

@ -25,6 +25,33 @@ custom_rule_file=""
#系统设置开机执行文件路径
custom_cmd_file=""
# 命令行参数解析
DB_SERVICE_NAME=""
AUTO_CONFIRM=false
echo "INFO: 接收到的参数: $@"
# 解析命令行参数
while [[ $# -gt 0 ]]; do
case $1 in
-d|--database)
DB_SERVICE_NAME="$2"
shift 2
;;
-y|--yes)
AUTO_CONFIRM=true
shift
;;
-o|--os)
OS_DEFINE="$2"
shift 2
;;
*)
echo "未知参数: $1"
exit 1
;;
esac
done
#加载宏定义,用来判断平台
if [ -f "/etc/profile.d/iscs6000.sh" ]; then
source /etc/profile.d/iscs6000.sh
@ -63,52 +90,73 @@ echo "INFO:安装目录为: ${INSTALL_DIR} "
#判断原来目录下有文件,则删除
if [ -d "$INSTALL_DIR" ]; then
echo "WARNING:安装目录 $INSTALL_DIR 不为空!"
# 询问用户是否删除这些文件
read -p "INFO:是否删除这些文件或者取消安装?注意:安装前需要保证原系统停止运行!(y/c): " answer
# 如果启用了自动确认,直接删除;否则询问用户
if [ "$AUTO_CONFIRM" = true ]; then
echo "INFO:自动确认模式,删除原有文件..."
rm -rf $INSTALL_DIR
else
# 询问用户是否删除这些文件
read -p "INFO:是否删除这些文件或者取消安装?注意:安装前需要保证原系统停止运行!(y/c): " answer
case $answer in
[Yy]* )
rm -rf $INSTALL_DIR
;;
[Cc]* )
echo "INFO:安装操作已取消。"
exit 1
;;
* )
echo "INFO:无效的输入,安装操作已取消。"
exit 1
;;
esac
case $answer in
[Yy]* )
rm -rf $INSTALL_DIR
;;
[Cc]* )
echo "INFO:安装操作已取消。"
exit 1
;;
* )
echo "INFO:无效的输入,安装操作已取消。"
exit 1
;;
esac
fi
fi
mkdir $INSTALL_DIR
cp -r $initfile/* $INSTALL_DIR
EXPORT_DIR="${INSTALL_DIR}/backup"
DB_GROUP=""
DB_USER=""
CURRENT_OWNER=""
#开启配置数据库服务
if [ "kylin10d" = "$OS_DEFINE" ]; then
echo "INFO:kylin need to select db-service"
valid_input=false
while [ "$valid_input" = false ]; do
echo "请选择数据库服务名:"
echo "1) kingbase"
echo "2) mariadb"
read -p "请输入数字选择(默认: 1: " choice
# 如果没有通过命令行指定数据库类型,则进行交互式选择
if [ -z "$DB_SERVICE_NAME" ]; then
valid_input=false
while [ "$valid_input" = false ]; do
echo "请选择数据库服务名:"
echo "1) kingbase"
echo "2) mariadb"
read -p "请输入数字选择(默认: 1: " choice
case "$choice" in
1 | "") # 输入 1 或直接回车
DB_SERVICE_NAME="kingbase"
valid_input=true
;;
2)
DB_SERVICE_NAME="mariadb"
valid_input=true
;;
*)
echo "无效选择,请重新输入!"
;;
esac
done
case "$choice" in
1 | "") # 输入 1 或直接回车
DB_SERVICE_NAME="kingbase"
valid_input=true
;;
2)
DB_SERVICE_NAME="mariadb"
valid_input=true
;;
*)
echo "无效选择,请重新输入!"
;;
esac
done
else
# 验证命令行传入的数据库类型是否有效
if [ "$DB_SERVICE_NAME" != "kingbase" ] && [ "$DB_SERVICE_NAME" != "mariadb" ]; then
echo "ERROR:不支持的数据库类型: $DB_SERVICE_NAME,支持的类型: kingbase, mariadb"
exit 1
fi
fi
echo "INFO: 选择的数据库服务为 ${DB_SERVICE_NAME}"
@ -132,38 +180,86 @@ if [ "kylin10d" = "$OS_DEFINE" ]; then
fi
fi
#为数据库服务赋backup文件夹权限
CURRENT_OWNER="$(stat -c '%U' "$EXPORT_DIR")"
if systemctl show "$DB_SERVICE_NAME" >/dev/null 2>&1; then
#DB_USER="$(systemctl show "$DB_SERVICE_NAME" -p User --value 2>/dev/null || true)"
DB_GROUP="$(systemctl show "$DB_SERVICE_NAME" -p Group --value 2>/dev/null || true)"
fi
if [ -z "$DB_GROUP" ]; then
if id -u "$DB_SERVICE_NAME" >/dev/null 2>&1; then
DB_USER="$DB_SERVICE_NAME"
else
# 用进程表查第一个匹配到的用户(变量要正确传入 awk
DB_USER="$(ps -eo user,comm | awk -v svc="$DB_SERVICE_NAME" '$2 ~ svc {print $1; exit}')"
fi
if [ -n "$DB_USER" ] && id -u "$DB_USER" >/dev/null 2>&1; then
DB_GROUP="$(id -gn "$DB_USER")"
fi
fi
if [ -n "$DB_GROUP" ]; then
sudo chown "$CURRENT_OWNER":"$DB_GROUP" "$EXPORT_DIR"
sudo chmod 2775 "$EXPORT_DIR"
echo "INFO: ${EXPORT_DIR} 设置${DB_SERVICE_NAME} 权限完成."
else
echo "WARN: 无法获取 ${DB_SERVICE_NAME} 的 Group 配置!"
echo " ${EXPORT_DIR} 权限未设置,可能影响备份功能,请手动执行:"
fi
elif [ "oe2203" = "$OS_DEFINE" ] || [ "oe2203_aarch64" = "$OS_DEFINE" ]; then
echo "INFO:openEuler need to select db-service"
valid_input=false
while [ "$valid_input" = false ]; do
echo "请选择数据库服务名:"
echo "1) opengauss"
echo "2) mysqld"
read -p "请输入数字选择(默认: 1: " choice
# 如果没有通过命令行指定数据库类型,则进行交互式选择
if [ -z "$DB_SERVICE_NAME" ]; then
valid_input=false
while [ "$valid_input" = false ]; do
echo "请选择数据库服务名:"
echo "1) opengauss"
echo "2) mysqld"
read -p "请输入数字选择(默认: 1: " choice
case "$choice" in
1 | "") # 输入 1 或直接回车
DB_SERVICE_NAME="opengauss"
valid_input=true
;;
2)
DB_SERVICE_NAME="mysql"
valid_input=true
;;
*)
echo "无效选择,请重新输入!"
;;
esac
done
case "$choice" in
1 | "") # 输入 1 或直接回车
DB_SERVICE_NAME="opengauss"
valid_input=true
;;
2)
DB_SERVICE_NAME="mysqld"
valid_input=true
;;
*)
echo "无效选择,请重新输入!"
;;
esac
done
else
# 验证命令行传入的数据库类型是否有效
if [ "$DB_SERVICE_NAME" != "opengauss" ] && [ "$DB_SERVICE_NAME" != "mysqld" ]; then
echo "ERROR:不支持的数据库类型: $DB_SERVICE_NAME,支持的类型: opengauss, mysqld"
exit 1
fi
fi
echo "INFO: 选择的数据库服务为 ${DB_SERVICE_NAME}"
if [ "mysql" = "$DB_SERVICE_NAME" ]; then
if [ "mysqld" = "$DB_SERVICE_NAME" ]; then
mysql_path="/etc/my.cnf.d"
mysql_cof="${script_path}/others/z1-oe-mysql-custom.cnf"
if [ -d "$mysql_path" ] && [ -f "$mysql_cof" ]; then
sudo cp "$mysql_cof" "$mysql_path/z1-oe-mysql-custom.cnf"
sudo chmod 644 "$mysql_path/z1-oe-mysql-custom.cnf"
sudo chown root:root "$mysql_path/z1-oe-mysql-custom.cnf"
echo "INFO:mysql 自定义配置文件已复制到配置文件夹中"
else
echo "INFO:mysql 自定义配置文件无法生效原因找不到mysql的配置目录"
fi
if sudo systemctl is-active --quiet "$DB_SERVICE_NAME"; then
echo "INFO:${DB_SERVICE_NAME} 服务已开启。"
sudo systemctl restart mysqld.service
echo "INFO:${DB_SERVICE_NAME} 服务已开启,正在重启以应用新配置..."
else
systemctl enable mysqld.service
systemctl start mysqld.service
@ -180,12 +276,27 @@ elif [ "oe2203" = "$OS_DEFINE" ] || [ "oe2203_aarch64" = "$OS_DEFINE" ]; then
chown -R ${SUDO_USER}:${SUDO_USER} /var/lib/opengauss
echo "INFO:opengauss dir owner has changed "
sed -i "s/^User=.*/User=$SUDO_USER/" /usr/lib/systemd/system/opengauss.service
pg_conf="/var/lib/opengauss/data/single_node/postgresql.conf"
if grep -q "^behavior_compat_options" "$pg_conf"; then
sed -i "s/^behavior_compat_options.*/behavior_compat_options = 'accept_empty_str'/" "$pg_conf"
else
echo "behavior_compat_options = 'accept_empty_str'" >> "$pg_conf"
fi
sed -i '/^session_timeout/s/=.*/= 0/' ${pg_conf}
#sed -i "s/^User=.*/User=$SUDO_USER/" /usr/lib/systemd/system/opengauss.service
sed -i "s/^User=.*/User=$SUDO_USER/; s/^Group=.*/Group=$SUDO_USER/" /usr/lib/systemd/system/opengauss.service
if ! grep -q "^Group=" /usr/lib/systemd/system/opengauss.service; then
sed -i "/^\[Service\]/a Group=$SUDO_USER" /usr/lib/systemd/system/opengauss.service
fi
systemctl daemon-reload
systemctl restart opengauss.service
systemctl enable opengauss.service
check_service_path=${script_path}/checkOpengauss.sh
check_service_path=${script_path}/others/checkOpengauss.sh
chmod +x ${check_service_path}
${check_service_path}
if [ $? -eq 0 ]; then
@ -193,18 +304,46 @@ elif [ "oe2203" = "$OS_DEFINE" ] || [ "oe2203_aarch64" = "$OS_DEFINE" ]; then
else
echo "INFO:${DB_SERVICE_NAME} 服务开启失败。"
fi
fi
fi
#为数据库服务赋backup文件夹权限
CURRENT_OWNER="$(stat -c '%U' "$EXPORT_DIR")"
if systemctl show "$DB_SERVICE_NAME" >/dev/null 2>&1; then
DB_USER="$(systemctl show "$DB_SERVICE_NAME" -p User --value 2>/dev/null || true)"
DB_GROUP="$(systemctl show "$DB_SERVICE_NAME" -p Group --value 2>/dev/null || true)"
fi
if [ -z "$DB_GROUP" ]; then
if id -u "$DB_SERVICE_NAME" >/dev/null 2>&1; then
DB_USER="$DB_SERVICE_NAME"
else
# 用进程表查第一个匹配到的用户(变量要正确传入 awk
DB_USER="$(ps -eo user,comm | awk -v svc="$DB_SERVICE_NAME" '$2 ~ svc {print $1; exit}')"
fi
if [ -n "$DB_USER" ] && id -u "$DB_USER" >/dev/null 2>&1; then
DB_GROUP="$(id -gn "$DB_USER")"
fi
fi
echo "INFO :${DB_SERVICE_NAME} user:${DB_USER} group:${DB_GROUP}"
if [ -n "$DB_GROUP" ]; then
sudo chown "$CURRENT_OWNER":"$DB_GROUP" "$EXPORT_DIR"
sudo chmod 2775 "$EXPORT_DIR"
echo "INFO: ${EXPORT_DIR} 设置${DB_SERVICE_NAME} 权限完成."
else
echo "WARN: 无法获取 ${DB_SERVICE_NAME} 的 Group 配置!"
echo " ${EXPORT_DIR} 权限未设置,可能影响备份功能,请手动执行:"
fi
else
echo "INFO:数据库使用mariadb服务"
DB_SERVICE_NAME="mariadb"
if sudo systemctl is-active --quiet "$DB_SERVICE_NAME"; then
echo "INFO:${DB_SERVICE_NAME} 服务已开启。"
echo "INFO:${DB_SERVICE_NAME} 服务已开启。"
else
systemctl enable mariadb.service
systemctl enable mariadb.service
systemctl start mariadb.service
echo "INFO:${DB_SERVICE_NAME} 服务已开启。"
fi
@ -239,7 +378,7 @@ if [ "oe2203" = "$OS_DEFINE" ] || [ "kylin10d" = "$OS_DEFINE" ]; then
echo "INFO:polkit配置文件"$polkit_rule_path "自定义文件名称" $custom_rule_file
custom_rule_file_path=${script_path}/${custom_rule_file}
custom_rule_file_path=${script_path}/others/${custom_rule_file}
cp ${custom_rule_file_path} ${polkit_rule_path}/
chmod 644 ${polkit_rule_path}/${custom_rule_file}
systemctl restart polkit.service
@ -372,33 +511,106 @@ else
echo "INFO:${KEEPALIVE_SERVICE_NAME} 服务开启失败。"
fi
INFLUXD_PROGRAM_PATH=$(which influxd)
ln -sf "${INFLUXD_PROGRAM_PATH}" "${INSTALL_DIR}/product/$BIN_DIR_VER/"
# ota_server 配置
product_dir="$(dirname "$script_path")/product/$BIN_DIR_VER"
platform_dir="$(dirname "$script_path")/platform/$BIN_DIR_VER"
if [ "oe2203" = "$OS_DEFINE" ]; then
# 设置core_pattern
echo '/corefiles/core-%e-%p-%s-%t' >/proc/sys/kernel/core_pattern
# 检查操作是否成功
if [ $? -eq 0 ]; then
echo "core_pattern has been set successfully."
else
echo "Failed to set core_pattern."
fi
ota_script_path="$(dirname "$script_path")/installer/ota_server.sh"
if [ -f "$ota_script_path" ]; then
chmod +x "$ota_script_path"
CURRENT_OWNER="$(stat -c '%U' "$EXPORT_DIR")"
# 加载 ota_server.sh
source "$ota_script_path"
if config_ota_server "$CURRENT_OWNER" "$product_dir" "$platform_dir" "$OS_DEFINE"; then
echo "INFO: ota_server 配置完成"
else
echo "ERROR: ota_server 配置失败"
fi
fi
if sudo systemctl is-active --quiet "ota_server"; then
echo "INFO: ota_server 服务已开启"
else
echo "INFO: ota_server 服务开启失败"
fi
if [ "kylin10d" = "$OS_DEFINE" ]; then
profile_path="/etc/profile.d"
custom_cmd_file="customCmd.sh"
custom_cmd_file="others/customCmd.sh"
cp ${custom_cmd_file} ${profile_path}/
chmod +x ${profile_path}/${custom_cmd_file}
chmod +x ${profile_path}/customCmd.sh
echo "**********************"
echo "由于更改了系统设置,需要重启电脑或者注销用户然后重新登录才能生效!!!!!"
echo "**********************"
fi
#为所有用户创建应用菜单快捷方式 begin
cat <<EOF | tee /usr/share/applications/${app_name}.desktop >/dev/null
[Desktop Entry]
Name=$app_name
Exec=$exec_command
Icon=$(dirname "$script_path")/installer/rqeh6000.ico
Terminal=false
Type=Application
Categories=Utility;
EOF
chmod 644 /usr/share/applications/${app_name}.desktop
update-desktop-database
#为所有用户创建应用菜单快捷方式 end
#注册 sys_data_sync_server 到 systemd
#if [ "oe2203_aarch64" = "$OS_DEFINE" ]; then
SERVICE_NAME="sys_data_sync_server"
EXEC_PATH="$(dirname "$script_path")/product/$BIN_DIR_VER/sys_data_sync_server"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
if [ ! -f "$EXEC_PATH" ]; then
echo "ERROR: 未找到可执行文件 $EXEC_PATH"
else
echo "INFO: 开始注册 ${SERVICE_NAME} 到 systemd..."
chmod +x "$EXEC_PATH"
cat > "$SERVICE_FILE" <<EOF
[Unit]
Description=Sys Data Sync Server
After=network.target
[Service]
Type=simple
ExecStart=$EXEC_PATH
WorkingDirectory=$(dirname "$EXEC_PATH")
Restart=always
RestartSec=5
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
# 重新加载 systemd
systemctl daemon-reload
# 设置开机自启动
systemctl enable ${SERVICE_NAME}.service
# 启动服务
systemctl start ${SERVICE_NAME}.service
# 检查状态
if systemctl is-active --quiet "${SERVICE_NAME}"; then
echo "INFO:${SERVICE_NAME} 服务已成功启动并设置为开机自启"
else
echo "ERROR:${SERVICE_NAME} 启动失败,请执行:"
echo "journalctl -u ${SERVICE_NAME} -f"
fi
fi
#fi
echo "INFO安装成功$app_name"
exit 0

264
installer/ota_server.sh Normal file
View File

@ -0,0 +1,264 @@
#!/bin/bash
config_ota_server() {
local user="$1"
local product_dir="$2"
local platform_dir="$3"
local os_name="$4"
local target_dir="/opt/ota_server"
local service_name="ota_server"
if [ -z "$product_dir" ] || [ -z "$platform_dir" ]; then
echo "ERROR: 必须提供 product 和 platform 目录路径作为参数"
return 1
fi
echo "INFO: 开始配置 ota_server..."
echo "INFO: 源目录 - product: $product_dir, platform: $platform_dir"
echo "INFO: 目标目录: $target_dir"
echo "INFO: 目标用户: $user"
# 查找 ota_server 可执行文件
local ota_server_executable=""
local source_dirs=("$product_dir" "$platform_dir")
for source_dir in "${source_dirs[@]}"; do
if [ -f "$source_dir/ota_server" ]; then
ota_server_executable="$source_dir/ota_server"
break
fi
done
if [ -z "$ota_server_executable" ]; then
echo "ERROR: 在所有源目录中均未找到 ota_server 可执行文件"
return 1
fi
echo "INFO: 找到 ota_server: $ota_server_executable"
# 检查 ota_server 是否以系统服务方式运行
if systemctl is-active --quiet "$service_name"; then
echo "INFO: ota_server 服务正在运行,检查文件更新..."
# 检查是否有文件需要更新
local need_update=false
# 检查 ota_server 可执行文件是否有更新
# local target_server="$target_dir/ota_server"
# if [ -f "$target_server" ]; then
# source_size=$(stat -c%s "$ota_server_executable" 2>/dev/null || echo "0")
# target_size=$(stat -c%s "$target_server" 2>/dev/null || echo "0")
# source_hash=$(md5sum "$ota_server_executable" 2>/dev/null | cut -d' ' -f1)
# target_hash=$(md5sum "$target_server" 2>/dev/null | cut -d' ' -f1)
# if [ "$source_size" != "$target_size" ] && [ "$source_hash" != "$target_hash" ]; then
# echo "INFO: 检测到 ota_server 程序更新"
# echo " Source - Size: $source_size, Hash: $source_hash"
# echo " Target - Size: $target_size, Hash: $target_hash"
# need_update=true
# fi
# else
# echo "INFO: 目标目录中不存在 ota_server需要安装"
# need_update=true
# fi
# 检查依赖库是否有更新(只检查源目录下的库)
if [ "$need_update" = false ]; then
# 使用 ldd 查找 ota_server 的依赖库
local libs=$(ldd "$ota_server_executable" 2>/dev/null | grep "=>" | awk '{print $3}' | grep -v "not found")
for lib in $libs; do
if [ -n "$lib" ] && [ -f "$lib" ]; then
# 只处理位于两个源目录下的库,不处理系统库
if [[ "$lib" == "$product_dir"* ]] || [[ "$lib" == "$platform_dir"* ]]; then
lib_name=$(basename "$lib")
# 使用通配符匹配库文件的所有相关文件
lib_base=$(echo "$lib_name" | sed 's/\.so\..*$/.so*/' | sed 's/\.so$/.so*/')
lib_dir=$(dirname "$lib")
# 查找所有相关的库文件
for lib_file in "$lib_dir"/$lib_base; do
if [ -f "$lib_file" ]; then
target_lib="$target_dir/$(basename "$lib_file")"
# 检查库文件是否在目标目录中
if [ -f "$target_lib" ]; then
source_size=$(stat -c%s "$lib_file" 2>/dev/null || echo "0")
target_size=$(stat -c%s "$target_lib" 2>/dev/null || echo "0")
source_hash=$(md5sum "$lib_file" 2>/dev/null | cut -d' ' -f1)
target_hash=$(md5sum "$target_lib" 2>/dev/null | cut -d' ' -f1)
if [ "$source_size" != "$target_size" ] && [ "$source_hash" != "$target_hash" ]; then
echo "INFO: 检测到依赖库更新: $(basename "$lib_file")"
need_update=true
break 2
fi
else
echo "INFO: 检测到新依赖库: $(basename "$lib_file")"
need_update=true
break 2
fi
fi
done
fi
fi
done
fi
if [ "$need_update" = true ]; then
# 拷贝依赖库(只拷贝源目录下的库)
echo "INFO: 拷贝依赖库到 $target_dir"
local libs=$(ldd "$ota_server_executable" 2>/dev/null | grep "=>" | awk '{print $3}' | grep -v "not found")
for lib in $libs; do
if [ -n "$lib" ] && [ -f "$lib" ]; then
# 只拷贝位于两个源目录下的库,不拷贝系统库
if [[ "$lib" == "$product_dir"* ]] || [[ "$lib" == "$platform_dir"* ]]; then
lib_name=$(basename "$lib")
# 使用通配符匹配库文件的所有相关文件
lib_base=$(echo "$lib_name" | sed 's/\.so\..*$/.so*/' | sed 's/\.so$/.so*/')
lib_dir=$(dirname "$lib")
# 拷贝所有相关的库文件
for lib_file in "$lib_dir"/$lib_base; do
if [ -f "$lib_file" ]; then
# echo "INFO: 拷贝依赖库: $(basename "$lib_file")"
cp "$lib_file" "$target_dir/"
fi
done
fi
fi
done
# 设置目录和文件的所有权
# echo "INFO: 设置目录和文件的所有权为: $user"
# sudo chown -R "$user":root "$target_dir"
# sudo chmod 777 "$target_dir/"*
# echo "INFO: 服务已更新,需手动重启"
# echo "INFO: 启动 ota_server 服务..."
# systemctl start "$service_name"
# if systemctl is-active --quiet "$service_name"; then
# echo "INFO: ota_server 服务更新并启动成功"
# else
# echo "ERROR: ota_server 服务启动失败"
# return 1
# fi
else
echo "INFO: ota_server 及其依赖库无变化,无需更新"
fi
else
echo "INFO: ota_server 服务未运行,进行安装或更新..."
# 创建目标目录
mkdir -p "$target_dir"
# 拷贝 ota_server 可执行文件
echo "INFO: 拷贝 ota_server 可执行文件到 $target_dir"
cp "$ota_server_executable" "$target_dir/"
chmod +x "$target_dir/ota_server"
# 查找并拷贝 updater_linux.sh 脚本和 ota_server.yaml
local update_script_source=""
local ota_server_yaml=""
for source_dir in "${source_dirs[@]}"; do
if [ -f "$source_dir/updater_linux.sh" ]; then
update_script_source="$source_dir/updater_linux.sh"
fi
if [ -f "$source_dir/ota_server.yaml" ] && [ ! -f "$target_dir/ota_server.yaml" ]; then
ota_server_yaml="$source_dir/ota_server.yaml"
fi
done
if [ -n "$update_script_source" ] && [ -f "$update_script_source" ]; then
echo "INFO: 拷贝 updater_linux.sh 脚本到 $target_dir"
cp "$update_script_source" "$target_dir/"
chmod +x "$target_dir/updater_linux.sh"
else
echo "WARNING: 在所有源目录中均未找到 updater_linux.sh 脚本"
fi
if [ -n "$ota_server_yaml" ] && [ -f "$ota_server_yaml" ]; then
echo "INFO: 拷贝 ota_server.yaml 脚本到 $target_dir"
cp "$ota_server_yaml" "$target_dir/"
fi
# 拷贝依赖库(只拷贝源目录下的库)
echo "INFO: 拷贝依赖库到 $target_dir"
local libs=$(ldd "$ota_server_executable" 2>/dev/null | grep "=>" | awk '{print $3}' | grep -v "not found")
for lib in $libs; do
if [ -n "$lib" ] && [ -f "$lib" ]; then
# 只拷贝位于两个源目录下的库,不拷贝系统库
if [[ "$lib" == "$product_dir"* ]] || [[ "$lib" == "$platform_dir"* ]]; then
lib_name=$(basename "$lib")
# 使用通配符匹配库文件的所有相关文件
lib_base=$(echo "$lib_name" | sed 's/\.so\..*$/.so*/' | sed 's/\.so$/.so*/')
lib_dir=$(dirname "$lib")
# 拷贝所有相关的库文件
for lib_file in "$lib_dir"/$lib_base; do
if [ -f "$lib_file" ]; then
# echo "INFO: 拷贝依赖库: $(basename "$lib_file")"
cp "$lib_file" "$target_dir/"
fi
done
fi
fi
done
# 设置目录和文件的所有权
echo "INFO: 设置目录和文件的所有权为: $user"
sudo chown -R "$user":root "$target_dir"
sudo chmod 777 "$target_dir/"*
# 检查是否有 ota_server 可执行文件
if [ -f "$target_dir/ota_server" ] && [ -x "$target_dir/ota_server" ]; then
echo "INFO: 运行 ota_server 进行服务注册..."
echo "INFO: user="$user", os="$os_name""
# 运行 ota_server(首次运行会自动注册服务)
sudo "$target_dir"/ota_server --user "$user" --os "$os_name" > /dev/null 2>&1
sleep 2
# 检查服务是否成功注册
# if systemctl is-active --quiet "$service_name"; then
# echo "INFO: ota_server 服务注册并启动成功"
# # 杀死临时进程(服务已经在后台运行)
# kill $ota_pid 2>/dev/null || true
# else
# echo "WARNING: ota_server 可能未成功注册为系统服务"
# # 杀死临时进程
# kill $ota_pid 2>/dev/null || true
# # 尝试手动启动服务
# if systemctl start "$service_name" 2>/dev/null; then
# echo "INFO: ota_server 服务手动启动成功"
# else
# echo "ERROR: ota_server 服务启动失败"
# return 1
# fi
# fi
else
echo "ERROR: 在目标目录中找不到 ota_server 可执行文件"
return 1
fi
fi
return 0
}
# 如果脚本被直接执行,则显示用法
# if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
# if [ $# -eq 3 ]; then
# # 如果提供了3个参数直接执行配置
# config_ota_server "$1" "$2" "$3"
# else
# echo "Usage: $0 <user> <product_dir> <platform_dir>"
# echo "Example:"
# echo " $0 admin /opt/EnergyHub/product/oe2203_debug /opt/EnergyHub/platform/oe2203_debug"
# exit 1
# fi
# fi