Files
openGauss-server/simpleInstall/install.sh
2020-09-15 20:27:53 +08:00

248 lines
5.9 KiB
Bash

#!/bin/bash
readonly cur_path=$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd && cd - &>/dev/null)
source $cur_path"/common.sh"
user_name=$1
user_grp=$2
host_ip=$3
host_port=$4
host_name=`hostname -f`
system_name=`cat /etc/os-release | grep '^ID=".*' | grep -o -E '(openEuler|centos)'`
system_arch=`uname -p`
install_tar="/home/$user_name/openGaussTar" #安装包所在路径(可修改)
install_location="/opt/$user_name" #数据库安装位置(可修改)
function fn_get_openGauss_tar()
{
mkdir -p "$install_tar" 2>/dev/null
chown -R $user_name:$user_grp "$install_tar"
if [ "$system_name" == "openEuler" ] && [ "$system_arch" == "aarch64" ]
then
system_arch="arm"
elif [ "$system_name" == "centos" ] && [ "$system_arch" == "x86_64" ]
then
system_name="CentOS"
system_arch="x86"
else
echo "We only support CentOS+x86 and openEuler+arm by now."
return 1
fi
if [ "`find $cur_path/../ -maxdepth 1 -name "openGauss-1.0.0*tar.gz"`" == "" ]
then
cd "$install_tar"
if [ "`find . -maxdepth 1 -name "openGauss-1.0.0*tar.gz"`" == "" ]
then
url="https://opengauss.obs.cn-south-1.myhuaweicloud.com/1.0.0/${system_arch}/openGauss-1.0.0-${system_name}-64bit.tar.gz"
echo "Downloading openGauss tar from official website at ${install_tar}"
wget $url --timeout=30 --tries=3
if [ $? -ne 0 ]
then
echo "wget error."
return 1
else
echo "wget success."
fi
fi
else
cp "$cur_path/../openGauss-1.0.0-${system_name}-64bit.tar.gz" "$install_tar"
if [ $? -ne 0 ]
then
echo "copy Installation package error."
return 1
else
echo "copy Installation package success."
fi
fi
return 0
}
function fn_create_file()
{
host_ip=$1
host_name=$2
user_name=$3
host_port=$4
install_location=$5
mkdir -p $install_location
chmod -R 755 $install_location
chown -R $user_name:$user_grp $install_location
install_location=${install_location//\//\\\/}
if [ ! -e $cur_path/template.xml ]
then
echo "cannot find template.xml"
return 1
fi
sed 's/@{host_name}/'$host_name'/g' $cur_path/template.xml | sed 's/@{host_ip}/'$host_ip'/g' | sed 's/@{user_name}/'$user_name'/g' | sed 's/@{host_port}/'$host_port'/g' | sed 's/@{install_location}/'$install_location'/g' > $cur_path/single.xml
cp $cur_path/single.xml /home/$user_name/
echo "create config file success."
return 0
}
function fn_post_check()
{
fn_check_user
if [ $? -ne 0 ]
then
echo "Check user failed."
return 1
else
echo "Check user success."
fi
fn_check_input
if [ $? -ne 0 ]
then
echo "Check input failed."
return 1
else
echo "Check input success."
fi
fn_check_firewall $host_port
if [ $? -ne 0 ]
then
echo "Check firewall failed."
return 1
else
echo "Check firewall success."
fi
fn_selinux
if [ $? -ne 0 ]
then
echo "Set selinux failed."
return 1
else
echo "Set selinux success."
fi
fn_swapoff
if [ $? -ne 0 ]
then
echo "Swapoff failed."
return 1
else
echo "Swapoff success."
fi
return 0
}
function fn_check_input()
{
if [ ! "$user_name" -o ! "$user_grp" -o ! "$host_ip" -o ! "$host_port" ]
then
echo "Usage: sh install.sh user_name user_grp ip port"
return 1
fi
if [ "`netstat -anp | grep -w $host_port`" ]
then
echo "port $host_port occupied,please choose another."
return 1
fi
return 0
}
function fn_check_user()
{
if [ `id -u` -ne 0 ]
then
echo "Only a user with the root permission can run this script."
return 1
fi
return 0
}
function fn_install()
{
fn_tar
if [ $? -ne 0 ]
then
echo "Get openGauss Installation package or tar package failed."
return 1
else
echo "Get openGauss Installation package and tar package success."
fi
export LD_LIBRARY_PATH="${install_tar}/script/gspylib/clib:"$LD_LIBRARY_PATH
python3 "${install_tar}/script/gs_preinstall" -U $1 -G $2 -X '/home/'$1'/single.xml' --sep-env-file='/home/'$1'/env_single'
if [ $? -ne 0 ]
then
echo "Preinstall failed."
return 1
else
echo "Preinstall success."
fi
chmod 755 "/home/$1/single.xml"
chown $1:$2 "/home/$1/single.xml"
su - $1 -c "source /home/$1/env_single;gs_install -X /home/$1/single.xml"
if [ $? -ne 0 ]
then
echo "Install failed."
return 1
else
echo "Install success."
fi
return 0
}
function fn_tar()
{
fn_get_openGauss_tar
if [ $? -ne 0 ]
then
echo "Get openGauss Installation package error."
return 1
else
echo "Get openGauss Installation package success."
fi
cd "${install_tar}"
tar -zxf "openGauss-1.0.0-${system_name}-64bit.tar.gz"
if [ $? -ne 0 ]
then
echo "tar package error."
return 1
else
echo "tar package success."
fi
return 0
}
function main()
{
fn_post_check
if [ $? -ne 0 ]
then
echo "Post check failed."
return 1
else
echo "Post check success."
fi
fn_create_user $user_name $user_grp
if [ $? -ne 0 ]
then
echo "User test failed."
return 1
else
echo "User test success."
fi
fn_create_file $host_ip $host_name $user_name $host_port $install_location
if [ $? -ne 0 ]
then
echo "Create file failed."
return 1
else
echo "Create file success."
fi
fn_install $user_name $user_grp
if [ $? -ne 0 ]
then
echo "Installation failed."
return 1
else
echo "Installation success."
fi
return 0
}
main "$@"
exit $?