OpenEuler/almaLinux8 安装OSmind运维工具
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 $?
- 点赞
- 收藏
- 关注作者
评论(0)