OpenEuler/almaLinux8 安装OSmind运维工具

举报
江晚正愁余 发表于 2025/12/12 19:44:57 2025/12/12
【摘要】 OpenEuler/almaLinux 安装OSmind运维工具一,载安装包虚拟机中安装好openeuler2203或是almalinux,中间安装有些坑需要注意从官网下载安装包,上传到/opt目录下。二 ,配置系统环境1,python3.6不支持,有些pip安装的组件依赖能坑死人。 #  yum remove  -y python36这里我使用的python3.9这里是 需要的组件...

OpenEuler/almaLinux8 安装OSmind运维工具


一,载安装包

虚拟机中安装好openeuler2203或是almalinux8,中间安装有些坑需要注意

从官网下载安装包,上传到/opt目录下。

二 ,配置系统环境

1,python3.6不支持,有些pip安装的组件依赖能坑死人。

 #  yum remove  -y python36

这里我使用的python3.9

这里是 需要的组件 目录/etc/ITServiceTools/conf/requirements.txt。如果之前已经安装好了旧版的,可能需要单独uninstall,不然可以安装不了更高版本的。

下面是先给系统安装国内pgsql的源并禁用旧版本的。

   sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
   sed -i "s@https://download.postgresql.org/pub@https://mirrors.aliyun.com/postgresql@g" /etc/yum.repos.d/pgdg-redhat-all.repo 
  dnf -qy module disable postgresql
 


yum  install  -y "postgresql13-server" "postgresql"

ln -s /usr/bin/postgresql-13-setup /usr/bin/postgresql-setup 

#提前安装好pgsql并作个连接。



 #   yum install -y  python39*

 #   yum install -y vim net-tools unzip lrzsz dos2unix ntpdate

 
#  unzip ITServiceTools-1.0.0.zip 




2,解压主安装包后,找到 deploy.sh 中 get_os_name中的funciton中的内容,只保留下面的,不然安装提示系统报错

function get_os_name()
{
    local name
    name=$(grep -w NAME /etc/os-release | cut -d '"' -f 2)
    OS_NAME="openEuler${VERSION_ID}LTS"
    return 0
}


 


我这里数据库使用 pg13版本,与其它版本有些不同,所以deploy.sh 脚本内容作了一些修改,主要修改pg的命令与数据目录路径,具体看最后一节。



3,安装命令

上传安装包ITServiceTools-1.0.0.zip到主机/opt目录下进行解压,执行安装命令,

安装命令解析:

bash deploy.sh --postgresql --server_ip 192.168.137.122 --server_port 2233 --db_user osmind --db_passwd x2Euler@123

--postgresql           指定安装postgresql数据库,不指定默认使用sqlite作为ITServiceTools服务的数据库

--server_ip            设置ITServiceTools服务的IP
--server_port          设置ITServiceTools服务的端口号,即前端web页面管理端口
--db_user              用于ITServiceTools连接postgresql数据库的用户名
--db_passwd            用于ITServiceTools连接postgresql数据库的密码

 

安装过程如有报错,需要使用以下命令删除包:

 yum remove -y "postgresql-server" "postgresql"
 rm  -rf /usr/bin/postgresql-setup 
 rm -rf /var/lib/pgsql
 rpm -e ITServiceTools 

再重新执行安装命令。


4,报错解决方法

jango.db.utils.NotSupportedError: PostgreSQL 12 or later is required

可使用以下命令,给djiango降版本,然后再重新安装ITService Tools

pip uninstall django

pip install django==3.2.25

5,以下是完整脚本内容

#! /bin/bash


CURRENT_DIR=$(cd "$(dirname "$0")"; pwd)
TOOLS_PKG=$(find "${CURRENT_DIR}"  -type f -name "ITServiceTools-*.rpm")
REPO_BACKUP_PATH="/tmp/repo_backup"
INSTALL_PATH="/opt/ITServiceTools"
CONF_DIR="/etc/ITServiceTools/conf"
TOOL_CONF="${CONF_DIR}/config.conf"
DATABASE_CONF="${CONF_DIR}/database.conf"
EVERYTHING_MOUNT_PATH='/tmp/openEuler-everything_yum'
EVERYTHING_ISO_PATH='/opt'
EVERYTHING_ISO_FILE=''
EVERYTHING_REPO="IT_Service_Tools_Everything.repo"
# 0 is install, 1 is uninstall
DELETE=0
DATABASE=""
DB_NAME="os_manager"
DB_USER=""
DB_PASSWD=""
SERVER_IP=""
SERVER_PORT=""
OS_NAME=""
VERSION_ID=""
ARCH=$(uname -m)

function info() {
    local msg="$1"
    echo "Info: ${msg}"
}

function error()
{
    local msg="$1"
    echo "Error: ${msg}"
    try_remove_everything_repo
    exit 1
}

function error_and_usage()
{
    local msg="$1"
    echo "Error: ${msg}"
    print_usage
    exit 1
}

function print_usage()
{
    echo "Usage: deploy.sh --server_ip <ip> --server_port <port> [--postgresql --db_user <db_user>...]"
    echo "If you install offline on an openEuler OS or OS which based on openEuler,"
    echo "place the ISO file in the /opt directory or the directory specified by parameter iso_path."
    echo "    -r                           Remove ITServiceTools operation."
    echo "    -V                           The VERSION_ID of the current system based on openEuler, ex: 20.03."
    echo "    --server_ip                  The IP of ITServiceTools"
    echo "    --server_port                The port of ITServiceTools"
    echo "    --postgresql                 Install postgresql-server"
    echo "    --db_name                    The database name of ITServiceTools, default is os_manager"
    echo "    --db_user                    The user of database."
    echo "    --db_passwd                  The passwd of database."
    echo "    --iso_path                   The path of openEuler everything iso, default is /opt"
}

function write_config() {
    local config_file="$1"
    local section="$2"
    local key="$3"
    local value="$4"
    sed -i "/^\[$section\]/,/^\[.*\]/ s|^\($key *= *\).*|\1$value|" "$config_file"
}

function configure_ITServiceTools()
{
    write_config "${TOOL_CONF}" "server" "ip" "${SERVER_IP}"
    write_config "${TOOL_CONF}" "server" "port" "${SERVER_PORT}"
}

function configure_database()
{
    local python_env="${INSTALL_PATH}/python.env"
    write_config "${TOOL_CONF}" "database" "dbname" "${DATABASE}"
    write_config "${DATABASE_CONF}" "${DATABASE}" "user" "${DB_USER}"
    write_config "${DATABASE_CONF}" "${DATABASE}" "dbname" "${DB_NAME}"
    write_config "${DATABASE_CONF}" "${DATABASE}" "server" "${SERVER_IP}:5432"
    [[ -f "${python_env}" ]] && source "${python_env}"
    python3 "${INSTALL_PATH}/crypto.py" --passwd "${DB_PASSWD}"
}

function install_PostgresqlDB()
{
    [[ "${DATABASE}" == "PostgresqlDB" ]] || return 0
    local postgresql_conf="/var/lib/pgsql/13/data/postgresql.conf"
    info "Installing ${DATABASE}..."
    yum install -y "postgresql-server" && ln -s /usr/bin/postgresql-13-setup /usr/bin/postgresql-setup 1>/dev/null || error "Failed to install ${DATABASE}"
    info "Starting ${DATABASE}..."
    postgresql-setup initdb || {
        error "Failed to init ${DATABASE}. Please check manually."
    }
    systemctl enable --now "postgresql-13.service" || {
        error "Failed to start ${DATABASE}. Please check manually."
    }
    su postgres <<EOF
    # 创建数据库
    psql -c "CREATE DATABASE ${DB_NAME};" || {
        error "Failed to create database ${DB_NAME}. Please check manually."
    }
    # 创建用户
    psql -c "CREATE ROLE ${DB_USER} WITH LOGIN PASSWORD '${DB_PASSWD}';" || {
        error "Failed to create user ${DB_USER}. Please check manually."
    }
    # 赋予用户权限
    psql -c "ALTER DATABASE ${DB_NAME} OWNER TO ${DB_USER};" || {
        error "Failed to ALTER DATABASE ${DB_NAME} owner to user ${DB_USER}. Please check manually."
    }
    psql -c "GRANT ALL PRIVILEGES ON DATABASE ${DB_NAME} TO ${DB_USER};" || {
        error "Failed to grant privileges to user ${DB_USER}. Please check manually."
    }
    psql -c "GRANT ALL ON SCHEMA PUBLIC TO ${DB_USER};"
EOF
    # 配置
    if grep -qw "^[[:space:]]*listen_addresses *=" "${postgresql_conf}"; then
        sed -i "s/^[[:space:]]*listen_addresses *=.*/listen_addresses = '*'/" "${postgresql_conf}"
    else
        echo "listen_addresses = '*'" >> "${postgresql_conf}"
    fi
    echo "host ${DB_NAME} ${DB_USER} ${SERVER_IP}/32 md5" >> "/var/lib/pgsql/13/data/pg_hba.conf"
    info "Restarting ${DATABASE}..."
    systemctl restart postgresql-13 || {
        error "Failed to restart ${DATABASE}. Please check manually."
    }
    info "Successfully installed and configured ${DATABASE}."

    return 0
}

function uninstall_PostgresqlDB()
{
    [[ "${DATABASE}" == "PostgresqlDB" ]] || return 0
    systemctl stop "postgresql-13.service"
    yum remove -y "postgresql-server" "postgresql" 1>/dev/null
    [[ -d "/var/lib/pgsql" ]] && rm -rf "/var/lib/pgsql"
}

function try_create_everything_repo()
{
    local repo_path="/etc/yum.repos.d"
    [[ -f "${EVERYTHING_ISO_FILE}" ]] || return 0
    # 备份并清除已有yum源,保证安装顺利进行
    [[ -d "${REPO_BACKUP_PATH}" ]] && rm -rf "${REPO_BACKUP_PATH}"
    mkdir -p "${REPO_BACKUP_PATH}"
    [[ -s "${repo_path}" ]] && mv "${repo_path}"/* "${REPO_BACKUP_PATH}"
    [[ -d "${EVERYTHING_MOUNT_PATH}" ]] && rm -rf "${EVERYTHING_MOUNT_PATH}"
    mkdir -p "${EVERYTHING_MOUNT_PATH}"
    mount -o loop "${EVERYTHING_ISO_FILE}" "${EVERYTHING_MOUNT_PATH}" || {
        echo "Failed to mount ${EVERYTHING_ISO_FILE}."
        return 1
    }
    echo "[ITST_everything_repo]" > "${repo_path}/${EVERYTHING_REPO}"
    echo "name=ITST_everything_repo" >> "${repo_path}/${EVERYTHING_REPO}"
    echo "baseurl=file://${EVERYTHING_MOUNT_PATH}" >> "${repo_path}/${EVERYTHING_REPO}"
    echo "enabled=1" >> "${repo_path}/${EVERYTHING_REPO}"
    echo "gpgcheck=0" >> "${repo_path}/${EVERYTHING_REPO}"
    return 0
}

function try_remove_everything_repo()
{
    [[ -f "${EVERYTHING_ISO_FILE}" ]] || return 0
    # 恢复本地yum源
    [[ ! -s "${REPO_BACKUP_PATH}" ]] && mv "${REPO_BACKUP_PATH}"/* "/etc/yum.repos.d"
    rm -rf "${REPO_BACKUP_PATH}"
    umount "${EVERYTHING_MOUNT_PATH}"
    rm -f "/etc/yum.repos.d/${EVERYTHING_REPO}"
    return 0
}

function get_os_name()
{
    local name
    name=$(grep -w NAME /etc/os-release | cut -d '"' -f 2)
    OS_NAME="openEuler${VERSION_ID}LTS"
    return 0
}

function install_ITServiceTools_py_deps() {
    local deps_pkg
    local python3_deps="/opt/ITServiceTools_py_deps"
    deps_pkg=$(find /opt -type f -name 'ITServiceTools_*_PythonDeps*.zip')
    # 优先离线安装模式
    [[ -n "${deps_pkg}" && -f "${deps_pkg}" ]] && {
        unzip -d /opt "${deps_pkg}"
        [[ -d "${python3_deps}" ]] || error "Directory ${python3_deps} not found."
        pip3 install --no-index --find-links="${python3_deps}" -r "${CONF_DIR}/requirements.txt"
        return $?
    }
    pip3 install -r "${CONF_DIR}/requirements.txt"
    return $?
}

function deploy_ITServiceTools()
{
    info "Starting deploy ITServiceTools...."
    rpm -q "ITServiceTools" >/dev/null 2>&1 && {
        rpm -Uvh "${TOOLS_PKG}" || error "Failed to update ITServiceTools rpm pkg."
    } || {
        rpm -ivh "${TOOLS_PKG}" || error "Failed to install ITServiceTools rpm pkg."
    }

    install_ITServiceTools_py_deps || error "Failed to install ITServiceTools python3 deps."
    return 0
}

function main() {
    [[ "${DELETE}" -eq 0 ]] && {
        [[ -z "${SERVER_IP}" || -z "${SERVER_PORT}" ]] && error_and_usage "Missing --server_ip or --server_port"
        [[ -n "${DATABASE}" ]] && {
            [[ -z "${DB_USER}" || -z "${DB_PASSWD}" ]] && error_and_usage "Please input database user."
        }
        get_os_name
        deploy_ITServiceTools || error "Failed to deploy ITServiceTools."
        configure_ITServiceTools
        info "Deploy ITServiceTools successfully."
        [[ -n "${DATABASE}" ]] && {
            EVERYTHING_ISO_FILE=$(find "${EVERYTHING_ISO_PATH}" -type f -name "openEuler-*everything-*.iso")
            try_create_everything_repo
            install_${DATABASE}
            try_remove_everything_repo
            configure_database
        }
        bash "${INSTALL_PATH}/start_web.sh" "migrate"
        systemctl enable --now ITServiceTools.service
    }

    [[ "${DELETE}" -eq 1 ]] && {
        rpm -e "ITServiceTools"
        [[ -d "${INSTALL_PATH}" ]] && rm -rf "${INSTALL_PATH}"
        [[ -n "${DATABASE}" ]] && uninstall_${DATABASE}
    }
    return 0
}

OPTIONS="hrV:"
LONG_OPTIONS="server_ip:,server_port:,db_name:,db_user:,db_passwd:,postgresql,upgrade"

ARGS=$(getopt -a -o ${OPTIONS} --long ${LONG_OPTIONS} -- "$@")

if [[ $? -ne 0 ]]; then
    print_usage
    exit 1
fi

eval set -- "$ARGS"

while true; do
    case "$1" in
    -h)
        print_usage
        exit 0;;
    -r)
        DELETE=1
        shift ;;
    -V)
        VERSION_ID="$2"
        shift 2;;
    --server_ip)
        SERVER_IP="$2"
        shift 2;;
    --server_port)
        SERVER_PORT="$2"
        shift 2;;
    --iso_path)
        EVERYTHING_ISO_PATH="$2"
        shift 2;;
    --postgresql)
        DATABASE="PostgresqlDB"
        shift;;
    --db_name)
        DB_NAME="$2"
        shift 2;;
    --db_user)
        DB_USER="$2"
        shift 2;;
    --db_passwd)
        DB_PASSWD="$2"
        shift 2;;
    --)
        shift
        break;;
    *)
        print_usage
        exit 1;;
    esac
done

main "$@"
exit $?
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。