1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-04 04:42:30 +03:00
Files
mariadb-columnstore-engine/extra/cs_package_manager.sh

1147 lines
36 KiB
Bash

#!/bin/bash
# Documentation: bash cs_package_manager.sh help
# Variables
enterprise_token=""
dev_drone_key=""
if [ ! -f /var/lib/columnstore/local/module ]; then pm="pm1"; else pm=$(cat /var/lib/columnstore/local/module); fi;
pm_number=$(echo "$pm" | tr -dc '0-9')
action=$1
print_help_text() {
echo "Version 1.1
Example Remove:
bash $0 remove
bash $0 remove all
Example Install:
bash $0 install [enterprise|community|dev] [version|branch] [build num] --token xxxxxxx
bash $0 install enterprise 10.6.12-8 --token xxxxxx
bash $0 install community 11.1
bash $0 install dev develop cron/8629
bash $0 install dev develop-23.02 pull_request/7256
Example Check:
bash $0 check community
bash $0 check enterprise
"
}
wait_cs_down() {
retries=$1;
if [ $retries -gt 6 ]; then
printf "\n[!!!] Columnstore is still online ... exiting \n\n"
exit 2;
fi;
# if columnstore still online stop
if [ -z $(pidof PrimProc) ]; then
printf "[+] Confirmation: columnstore OFFLINE \n";
mcs_offine=true
return 1;
else
printf "\n[+] Columnstore is ONLINE - waiting 5s to retry, attempt: $retries...\n";
sleep 5
((retries++))
wait_cs_down $retries
fi;
}
print_and_delete() {
printf " - %-25s ..." "$1"
rm -rf $1
printf " Done\n"
}
init_cs_down() {
mcs_offine=false
if [ "$pm_number" == "1" ]; then
if [ -z $(pidof PrimProc) ]; then
# printf "\n[+] Columnstore offline already";
mcs_offine=true
else
# Adjust for package manager
cmapi_installed_command=""
case $package_manager in
yum )
cmapi_installed_command="yum list installed MariaDB-columnstore-cmapi &> /dev/null;";
;;
apt )
cmapi_installed_command="dpkg-query -s mariadb-columnstore-cmapi &> /dev/null;";
;;
*) # unknown option
echo "\npackage manager not implemented: $package_manager\n"
exit 2;
esac
# Check cmapi installed
if eval $cmapi_installed_command ; then
# Check for edge case
if [ "$(mcs cluster status | jq -r '.num_nodes')" == "0" ]; then
printf "[!!] Noticed cmapi installed but no nodes configured...\n"
add_primary_node_cmapi
sleep 1;
fi
# Stop columnstore
printf "\n[+] Stopping columnstore ... \n";
if command -v mcs &> /dev/null; then
if ! mcs_output=$(mcs cluster stop); then
echo "[!] Failed stopping via mcs ... trying cmapi curl"
stop_cs_cmapi_via_curl
fi
echo $mcs_output;
# Handle Errors with exit 0 code
if [ ! -z "$(echo $mcs_output | grep "Internal Server Error")" ];then
stop_cs_via_systemctl_override
fi
else
stop_cs_cmapi_via_curl
fi
else
stop_cs_via_systemctl
fi
fi
fi;
}
do_yum_remove() {
if ! command -v yum &> /dev/null ; then
printf "[!!] Cant access yum\n"
exit 1;
fi
init_cs_down
wait_cs_down 0
printf "[+] Removing packages - $(date) ... \n"
if yum list installed MariaDB-server &>/dev/null; then
systemctl stop mariadb
fi
if yum list installed MariaDB-columnstore-cmapi &>/dev/null; then
systemctl stop mariadb-columnstore-cmapi
fi
# remove any mdb rpms on disk
if ls MariaDB-*.rpm &>/dev/null; then
print_and_delete "MariaDB-*.rpm"
fi
# remove all current MDB packages
if yum list installed MariaDB-* &>/dev/null; then
yum remove MariaDB-* -y
fi
# remove offical & custom yum repos
print_and_delete "/etc/yum.repos.d/mariadb.repo"
print_and_delete "/etc/yum.repos.d/drone.repo"
if [ "$2" == "all" ]; then
printf "\n[+] Removing all columnstore files & dirs\n"
print_and_delete "/var/lib/mysql/"
print_and_delete "/var/lib/columnstore/"
print_and_delete "/etc/my.cnf.d/*"
print_and_delete "/etc/columnstore/*"
fi;
}
do_apt_remove() {
if ! command -v apt &> /dev/null ; then
printf "[!!] Cant access apt\n"
exit 1;
fi
if ! command -v dpkg-query &> /dev/null ; then
printf "[!!] Cant access dpkg-query\n"
exit 1;
fi
init_cs_down
wait_cs_down 0
printf "[+] Removing packages - $(date) ... \n"
if dpkg-query -s mariadb-server &>/dev/null; then
systemctl stop mariadb
fi
if dpkg-query -s mariadb-columnstore-cmapi &>/dev/null; then
systemctl stop mariadb-columnstore-cmapi
fi
# remove any mdb rpms on disk
if ls mariadb*.deb &>/dev/null; then
print_and_delete "mariadb*.deb"
fi
# remove all current MDB packages
if [ "$(apt list --installed mariadb-* 2>/dev/null | wc -l)" -gt 1 ]; then
if [ "$2" == "all" ]; then
printf "\n[+] Removing all columnstore files & dirs\n"
DEBIAN_FRONTEND=noninteractive apt mariadb-plugin-columnstore mariadb-columnstore-cmapi --purge -y
DEBIAN_FRONTEND=noninteractive apt remove --purge -y mariadb-*
print_and_delete "/var/lib/mysql/*"
else
if ! apt remove mariadb-columnstore-cmapi -y; then
printf "[!!] Failed to remove columnstore \n"
fi
if ! apt remove mariadb-* -y; then
printf "[!!] Failed to remove the rest of mariadb \n\n"
fi
fi
fi
# remove offical & custom yum repos
print_and_delete "/lib/systemd/system/mariadb.service"
print_and_delete "/lib/systemd/system/mariadb.service.d"
print_and_delete "/etc/apt/sources.list.d/mariadb.list"
print_and_delete "/etc/apt/sources.list.d/drone.list"
systemctl daemon-reload
}
do_remove() {
check_operating_system
check_package_managers
case $distro_info in
centos | rhel | rocky )
do_yum_remove "$@"
;;
ubuntu | debian )
do_apt_remove "$@"
;;
*) # unknown option
echo "\ndo_remove: os & version not implemented: $distro_info\n"
exit 2;
esac
printf "\n[+] Done\n\n"
}
check_package_managers() {
package_manager='';
if command -v apt &> /dev/null ; then
if ! command -v dpkg-query &> /dev/null ; then
printf "[!!] Cant access dpkg-query\n"
exit 1;
fi
package_manager="apt";
fi
if command -v yum &> /dev/null ; then
package_manager="yum";
fi
if [ $package_manager == '' ]; then
echo "[!!] No package manager found: yum or apt must be installed"
exit 1;
fi;
}
check_operating_system() {
distro_info=$(awk -F= '/^ID=/{gsub(/"/, "", $2); print $2}' /etc/os-release)
version_id_exact=$( grep 'VERSION_ID=' /etc/os-release | awk -F= '{gsub(/"/, "", $2); print $2}')
version_id=$( echo "$version_id_exact" | awk -F. '{print $1}')
echo "Distro: $distro_info"
echo "Version: $version_id"
# distros=(centos7 debian11 debian12 rockylinux8 rockylinux9 ubuntu20.04 ubuntu22.04)
case $distro_info in
centos | rhel )
distro="${distro_info}${version_id}"
;;
debian )
distro="${distro_info}${version_id_exact}"
;;
rocky )
distro="rockylinux${version_id}"
;;
ubuntu )
distro="${distro_info}${version_id_exact}"
;;
*) # unknown option
printf "\ncheck_operating_system: unknown os & version: $distro_info\n"
exit 2;
esac
distro_short="${distro_info:0:3}${version_id}"
}
check_cpu_architecture() {
architecture=$(uname -m)
echo "CPU: $architecture"
# arch=(amd64 arm64)
case $architecture in
x86_64 )
arch="amd64"
;;
aarch64 )
arch="arm64"
;;
*) # unknown option
echo "Error: Unsupported architecture ($architecture)"
esac
}
check_no_mdb_installed() {
packages=""
case $distro_info in
centos | rhel | rocky )
packages=$(yum list installed | grep -i mariadb)
;;
ubuntu | debian )
packages=$(apt list --installed mariadb-* 2>/dev/null | grep -i mariadb);
;;
*) # unknown option
printf "\ncheck_no_mdb_installed: os & version not implemented: $distro_info\n"
exit 2;
esac
if [ -n "$packages" ]; then
printf "\nMariaDB packages are installed. Please uninstall them before continuing.\n"
echo $packages;
printf "Example: bash $0 remove\n\n"
exit 2;
fi;
}
check_aws_cli_installed() {
if ! command -v aws &> /dev/null ; then
echo "[!] aws cli - binary could not be found"
echo "[+] Installing aws cli ..."
cli_url="https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"
case $architecture in
x86_64 )
cli_url="https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip"
;;
aarch64 )
cli_url="https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip"
;;
*) # unknown option
echo "Error: Unsupported architecture ($architecture)"
esac
case $distro_info in
centos | rhel | rocky )
rm -rf aws awscliv2.zip
yum install unzip -y;
curl "$cli_url" -o "awscliv2.zip";
unzip -q awscliv2.zip;
sudo ./aws/install;
mv /usr/local/bin/aws /usr/bin/aws;
aws configure set default.s3.max_concurrent_requests 70
;;
ubuntu | debian )
rm -rf aws awscliv2.zip
if ! sudo apt install unzip -y; then
echo "[!!] Installing Unzip Failed: Trying update"
sudo apt update -y;
sudo apt install unzip -y;
fi
curl "$cli_url" -o "awscliv2.zip";
unzip -q awscliv2.zip;
sudo ./aws/install;
mv /usr/local/bin/aws /usr/bin/aws;
aws configure set default.s3.max_concurrent_requests 70
;;
*) # unknown option
printf "\nos & version not implemented: $distro_info\n"
exit 2;
esac
fi
}
check_dev_build_exists() {
if ! aws s3 ls $s3_path --no-sign-request &> /dev/null; then
printf "Defined dev build doesnt exist in aws\n\n"
exit 2;
fi;
}
do_enterprise_apt_install() {
# Install MariaDB
apt-get clean
if ! apt install mariadb-server -y --quiet; then
printf "\n[!] Failed to install mariadb-server \n\n"
exit 1;
fi
sleep 2
systemctl daemon-reload
systemctl enable mariadb
systemctl start mariadb
# Install Columnstore
if ! apt install mariadb-plugin-columnstore -y --quiet; then
printf "\n[!] Failed to install columnstore \n\n"
exit 1;
fi
if ! apt install mariadb-columnstore-cmapi jq -y --quiet; then
printf "\n[!] Failed to install cmapi\n\n"
mariadb -e "show status like '%Columnstore%';"
else
systemctl daemon-reload
systemctl enable mariadb-columnstore-cmapi
systemctl start mariadb-columnstore-cmapi
mariadb -e "show status like '%Columnstore%';"
sleep 2
add_primary_node_cmapi
fi
}
do_enterprise_yum_install() {
# Install MariaDB
yum clean all
yum install MariaDB-server -y
sleep 2
systemctl enable mariadb
systemctl start mariadb
# Install Columnstore
if ! yum install MariaDB-columnstore-engine -y; then
printf "\n[!] Failed to install columnstore\n\n"
exit 1;
fi
# Install Cmapi
if ! yum install MariaDB-columnstore-cmapi jq -y; then
printf "\n[!] Failed to install cmapi\n\n"
else
systemctl enable mariadb-columnstore-cmapi
systemctl start mariadb-columnstore-cmapi
mariadb -e "show status like '%Columnstore%';"
sleep 1;
add_primary_node_cmapi
fi
}
enterprise_install() {
version=$3
check_set_es_token "$@"
if [ -z $enterprise_token ]; then
printf "\n[!] Enterprise token empty: $enterprise_token\n"
printf "edit $0 to add token \n"
printf "See: https://customers.mariadb.com/downloads/token/ \n\n"
exit 1;
fi;
if [ -z $version ]; then
printf "\n[!] Version empty: $version\n\n"
exit 1;
fi;
echo "Token: $enterprise_token"
echo "MariaDB Version: $version"
url="https://dlm.mariadb.com/enterprise-release-helpers/mariadb_es_repo_setup"
if $enterprise_staging; then
url="https://dlm.mariadb.com/$enterprise_token/enterprise-release-helpers-staging/mariadb_es_repo_setup"
fi
# Download Repo setup script
rm -rf mariadb_es_repo_setup
curl -LO "$url" -o mariadb_es_repo_setup;
chmod +x mariadb_es_repo_setup;
if ! bash mariadb_es_repo_setup --token="$enterprise_token" --apply --mariadb-server-version="$version"; then
printf "\n[!] Failed to apply mariadb_es_repo_setup...\n\n"
exit 2;
fi;
case $distro_info in
centos | rhel | rocky )
if [ ! -f "/etc/yum.repos.d/mariadb.repo" ]; then printf "\n[!] Expected to find mariadb.repo in /etc/yum.repos.d \n\n"; exit 1; fi;
if $enterprise_staging; then
sed -i 's/mariadb-es-main/mariadb-es-staging/g' /etc/yum.repos.d/mariadb.repo
sed -i 's/mariadb-enterprise-server/mariadb-enterprise-staging/g' /etc/yum.repos.d/mariadb.repo
printf "\n\n[+] Adjusted mariadb.repo to: mariadb-enterprise-staging\n\n"
fi;
do_enterprise_yum_install "$@"
;;
ubuntu | debian )
if [ ! -f "/etc/apt/sources.list.d/mariadb.list" ]; then printf "\n[!] Expected to find mariadb.list in /etc/apt/sources.list.d \n\n"; exit 1; fi;
if $enterprise_staging; then
sed -i 's/mariadb-enterprise-server/mariadb-enterprise-staging/g' /etc/apt/sources.list.d/mariadb.list
apt update
printf "\n\n[+] Adjusted mariadb.list to: mariadb-enterprise-staging\n\n"
fi;
do_enterprise_apt_install "$@"
;;
*) # unknown option
printf "\nenterprise_install: os & version not implemented: $distro_info\n"
exit 2;
esac
}
community_install() {
version=$3
if [ -z $version ]; then
printf "Version empty: $version\n"
exit 1;
fi;
echo "MariaDB Community Version: $version"
# Download Repo setup
rm -rf mariadb_repo_setup
if ! curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash -s -- --mariadb-server-version=mariadb-$version ; then
echo "version bad. exiting ..."
exit 2;
fi;
case $distro_info in
centos | rhel | rocky )
do_community_yum_install "$@"
;;
ubuntu | debian )
do_community_apt_install "$@"
;;
*) # unknown option
printf "\ncommunity_install: os & version not implemented: $distro_info\n"
exit 2;
esac
}
do_community_yum_install() {
# Install MariaDB then Columnstore
yum clean all
if ! yum install MariaDB-server -y; then
printf "\n[!] Failed to install MariaDB-server \n\n"
exit 1;
fi
sleep 2;
systemctl enable mariadb
systemctl start mariadb
# Install Columnstore
if ! yum install MariaDB-columnstore-engine -y; then
printf "\n[!] Failed to install columnstore \n\n"
exit 1;
fi
# Install Cmapi
if ! yum install MariaDB-columnstore-cmapi jq -y; then
printf "\n[!] Failed to install cmapi\n\n"
exit 1;
else
systemctl enable mariadb-columnstore-cmapi
systemctl start mariadb-columnstore-cmapi
mariadb -e "show status like '%Columnstore%';"
sleep 2
add_primary_node_cmapi
fi
}
do_community_apt_install() {
# Install MariaDB
apt-get clean
if ! apt install mariadb-server -y --quiet; then
printf "\n[!] Failed to install mariadb-server \n\n"
exit 1;
fi
sleep 2
systemctl daemon-reload
systemctl enable mariadb
systemctl start mariadb
# Install Columnstore
if ! apt install mariadb-plugin-columnstore -y --quiet; then
printf "\n[!] Failed to install columnstore \n\n"
exit 1;
fi;
if ! apt install mariadb-columnstore-cmapi jq -y --quiet ; then
printf "\n[!] Failed to install cmapi \n\n"
mariadb -e "show status like '%Columnstore%';"
else
systemctl daemon-reload
systemctl enable mariadb-columnstore-cmapi
systemctl start mariadb-columnstore-cmapi
mariadb -e "show status like '%Columnstore%';"
sleep 2
add_primary_node_cmapi
fi
}
get_set_cmapi_key() {
CMAPI_CNF="/etc/columnstore/cmapi_server.conf"
if [ ! -f $CMAPI_CNF ]; then
echo "[!!] No cmapi config file found"
exit 1;
fi;
# Add API Key if missing
if [ -z "$(grep ^x-api-key $CMAPI_CNF)" ]; then
if ! command -v openssl &> /dev/null ; then
api_key="19bb89d77cb8edfe0864e05228318e3dfa58e8f45435fbd9bd12c462a522a1e9"
else
api_key=$(openssl rand -hex 32)
fi
echo "[+] Setting API Key:"
if curl -s https://127.0.0.1:8640/cmapi/0.4.0/cluster/status \
--header 'Content-Type:application/json' \
--header "x-api-key:$api_key" -k ; then
sleep 2;
else
echo "Failed to set API key"
exit 1;
fi
else
api_key=$(grep ^x-api-key $CMAPI_CNF | cut -d "=" -f 2 | tr -d " ")
fi
}
add_node_cmapi_via_curl() {
node_ip=$1
if [ -z $api_key ]; then get_set_cmapi_key; fi;
# Add Node
printf "\n[+] Adding primary node via curl ... \n"
if curl -k -s -X PUT https://127.0.0.1:8640/cmapi/0.4.0/cluster/node \
--header 'Content-Type:application/json' \
--header "x-api-key:$api_key" \
--data "{\"timeout\": 120, \"node\": \"$node_ip\"}"; then
printf "\n[+] Success adding $node_ip\n"
else
echo "Failed adding node"
exit 1;
fi
}
start_cs_via_systemctl() {
if systemctl start mariadb-columnstore ; then
echo "[+] Started Columnstore"
else
echo "[!!] Failed to start columnstore"
exit 1;
fi;
}
start_cs_cmapi_via_curl() {
if [ -z $api_key ]; then get_set_cmapi_key; fi;
if curl -k -s -X PUT https://127.0.0.1:8640/cmapi/0.4.0/cluster/start \
--header 'Content-Type:application/json' \
--header "x-api-key:$api_key" \
--data '{"timeout":20}'; then
echo "[+] Started Columnstore"
else
echo " - [!] Failed to start columnstore"
echo " - Trying via systemctl ..."
start_cs_via_systemctl
fi;
}
stop_cs_via_systemctl_override() {
systemctl stop mariadb-columnstore-cmapi;
systemctl stop mcs-ddlproc;
systemctl stop mcs-dmlproc;
systemctl stop mcs-workernode@1;
systemctl stop mcs-workernode@2;
systemctl stop mcs-controllernode;
systemctl stop mcs-storagemanager;
systemctl stop mcs-primproc;
systemctl stop mcs-writeengineserver;
}
stop_cs_via_systemctl() {
if systemctl stop mariadb-columnstore ; then
echo "[+] Stopped Columnstore via systemctl"
else
echo "[!!] Failed to stop columnstore"
exit 1;
fi;
}
stop_cs_cmapi_via_curl() {
if [ -z $api_key ]; then get_set_cmapi_key; fi;
if curl -k -s -X PUT https://127.0.0.1:8640/cmapi/0.4.0/cluster/shutdown \
--header 'Content-Type:application/json' \
--header "x-api-key:$api_key" \
--data '{"timeout":20}'; then
echo "[+] Stopped Columnstore via curl"
else
echo " - [!] Failed to stop columnstore via cmapi"
echo " - Trying via systemctl ..."
stop_cs_via_systemctl
fi;
}
add_primary_node_cmapi() {
primary_ip="127.0.0.1"
get_set_cmapi_key
if ! command -v mcs &> /dev/null ; then
echo "mcs - binary could not be found"
add_node_cmapi_via_curl $primary_ip
echo "[+] Starting Columnstore ..."
start_cs_cmapi_via_curl
else
if [ "$(mcs cluster status | jq -r '.num_nodes')" == "0" ]; then
printf "\n[+] Adding primary node ...\n"
if timeout 30s mcs cluster node add --node $primary_ip; then
echo "[+] Success adding $primary_ip"
else
echo "[!] Failed ... trying cmapi curl"
add_node_cmapi_via_curl $primary_ip
fi;
fi;
echo "[+] Starting Columnstore ..."
mcs cluster start
fi
}
dev_install() {
if [ -z $dev_drone_key ]; then printf "Missing dev_drone_key: \n"; exit; fi;
check_aws_cli_installed
echo "Branch: $3"
echo "Build: $4"
dronePath="s3://$dev_drone_key"
branch="$3"
build="$4"
product="10.6-enterprise"
if [ -z "$branch" ]; then printf "Missing branch: $branch\n"; exit 2; fi;
if [ -z "$build" ]; then printf "Missing build: $branch\n"; exit 2; fi;
# Construct URLs
s3_path="$dronePath/$branch/$build/$product/$arch"
drone_http=$(echo "$s3_path" | sed "s|s3://$dev_drone_key/|https://${dev_drone_key}.s3.amazonaws.com/|")
echo "Locations:"
echo "Bucket: $s3_path"
echo "Drone: $drone_http"
echo "###################################"
check_dev_build_exists
case $distro_info in
centos | rhel | rocky )
s3_path="${s3_path}/$distro"
drone_http="${drone_http}/$distro"
do_dev_yum_install "$@"
;;
ubuntu | debian )
do_dev_apt_install "$@"
;;
*) # unknown option
printf "\ndev_install: os & version not implemented: $distro_info\n"
exit 2;
esac
add_primary_node_cmapi
}
do_dev_yum_install() {
echo "[drone]
name=Drone Repository
baseurl="$drone_http"
gpgcheck=0
enabled=1
" > /etc/yum.repos.d/drone.repo
yum clean all
# yum makecache
# yum list --disablerepo="*" --enablerepo="drone"
# ALL RPMS: aws s3 cp $s3_path/ . --recursive --exclude "debuginfo" --include "*.rpm"
aws s3 cp $s3_path/ . --recursive --exclude "*" --include "MariaDB-server*" --exclude "*debug*" --no-sign-request
# Confirm Downloaded server rpm
if ! ls MariaDB-server-*.rpm 1> /dev/null 2>&1; then
echo "Error: No MariaDB-server RPMs were found."
exit 1
fi
# Install MariaDB Server
if ! yum install MariaDB-server-*.rpm -y; then
printf "\n[!] Failed to install MariaDB-server \n\n"
exit 1;
fi
# Install Columnstore
if ! yum install MariaDB-columnstore-engine -y; then
printf "\n[!] Failed to install columnstore \n\n"
exit 1;
fi
# Install Cmapi
if ! yum install MariaDB-columnstore-cmapi jq -y; then
printf "\n[!] Failed to install cmapi\n\n"
exit 1;
else
systemctl start mariadb
systemctl enable mariadb-columnstore-cmapi
systemctl start mariadb-columnstore-cmapi
mariadb -e "show status like '%Columnstore%';"
sleep 2
add_primary_node_cmapi
fi
}
do_dev_apt_install() {
echo "deb [trusted=yes] ${drone_http} ${distro}/" > /etc/apt/sources.list.d/repo.list
cat << EOF > /etc/apt/preferences
Package: *
Pin: origin cspkg.s3.amazonaws.com
Pin-Priority: 1700
EOF
# Install MariaDB
apt-get clean
apt-get update
if ! apt install mariadb-server -y --quiet; then
printf "\n[!] Failed to install mariadb-server \n\n"
exit 1;
fi
sleep 2
systemctl daemon-reload
systemctl enable mariadb
systemctl start mariadb
# Install Columnstore
if ! apt install mariadb-plugin-columnstore -y --quiet; then
printf "\n[!] Failed to install columnstore \n\n"
exit 1;
fi;
if ! apt install mariadb-columnstore-cmapi jq -y --quiet ; then
printf "\n[!] Failed to install cmapi \n\n"
mariadb -e "show status like '%Columnstore%';"
else
systemctl daemon-reload
systemctl enable mariadb-columnstore-cmapi
systemctl start mariadb-columnstore-cmapi
mariadb -e "show status like '%Columnstore%';"
sleep 2
add_primary_node_cmapi
fi
}
do_install() {
check_operating_system
check_cpu_architecture
check_no_mdb_installed
repo=$2
enterprise_staging=false
echo "Repository: $repo"
case $repo in
enterprise )
# pull from enterprise repo
enterprise_install "$@" ;
;;
enterprise_staging )
enterprise_staging=true
enterprise_install "$@" ;
;;
community )
# pull from public community repo
community_install "$@" ;
;;
dev )
# pull from dev repo - requires dev_drone_key
dev_install "$@" ;
;;
*) # unknown option
echo "Unknown repo: $repo\n"
exit 2;
esac
printf "\nDone\n\n"
}
do_check() {
check_operating_system
check_cpu_architecture
repo=$2
dbm_tmp_file="mdb-tmp.html"
echo "Repository: $repo"
case $repo in
enterprise )
check_set_es_token "$@"
if [ -z $enterprise_token ]; then
printf "\n[!] Enterprise token empty: $enterprise_token\n"
printf "edit $0 to add token \n"
printf "See: https://customers.mariadb.com/downloads/token/ \n\n"
exit 1;
fi;
url_base="https://dlm.mariadb.com"
url_page="/browse/$enterprise_token/mariadb_enterprise_server/"
ignore="/login"
at_least_one=false
curl -s "$url_base$url_page" > $dbm_tmp_file
if [ $? -ne 0 ]; then
printf "\n[!] Failed to access $url_base$url_page\n\n"
exit 1
fi
if grep -q "404 - Page Not Found" $dbm_tmp_file; then
printf "\n[!] 404 - Failed to access $url_base$url_page\n"
printf "Confirm your ES token works\n"
printf "See: https://customers.mariadb.com/downloads/token/ \n\n"
exit 1
fi
major_version_links=$(grep -oP 'href="\K[^"]+' $dbm_tmp_file | grep $url_page | grep -v $ignore )
#echo $major_version_links
for major_link in ${major_version_links[@]}
do
#echo "Major: $major_link"
curl -s "$url_base$major_link" > $dbm_tmp_file
minor_version_links=$(grep -oP 'href="\K[^"]+' $dbm_tmp_file | grep $url_page | grep -v $ignore )
for minor_link in ${minor_version_links[@]}
do
if [ "$minor_link" != "$url_page" ]; then
#echo " Minor: $minor_link"
case $distro_info in
centos | rhel | rocky )
path="rpm/rhel/$version_id/$architecture/rpms/"
curl -s "$url_base$minor_link$path" > $dbm_tmp_file
package_links=$(grep -oP 'href="\K[^"]+' $dbm_tmp_file | grep "$path" | grep "columnstore-engine" | grep -v debug | tail -1 )
if [ ! -z "$package_links" ]; then
#echo "----------"
#echo "$package_links"
at_least_one=true
mariadb_version="${package_links#*mariadb-enterprise-server/}"
columnstore_version="${mariadb_version#*columnstore-engine-}"
mariadb_version="$( echo $mariadb_version | awk -F/ '{print $1}' )"
# unqiue to enterprise
standard_mariadb_version="${mariadb_version//-/_}"
columnstore_version="$( echo $columnstore_version | awk -F"${standard_mariadb_version}_" '{print $2}' | awk -F".el" '{print $1}' )"
printf "%-8s %-12s %-12s %-12s\n" "MariaDB:" "$mariadb_version" "Columnstore:" "$columnstore_version";
fi;
;;
ubuntu | debian )
path="deb/pool/main/m/"
curl -s "$url_base$minor_link$path" > $dbm_tmp_file
# unqiue - this link/path can change
mariadb_version_links=$(grep -oP 'href="\K[^"]+' $dbm_tmp_file | grep -v $ignore | grep -v cmapi | grep ^mariadb )
#echo "$url_base$minor_link$path"
for mariadb_link in ${mariadb_version_links[@]}
do
#echo $mariadb_link
path="deb/pool/main/m/$mariadb_link"
curl -s "$url_base$minor_link$path" > $dbm_tmp_file
package_links=$(grep -oP 'href="\K[^"]+' $dbm_tmp_file | grep "$path" | grep "columnstore_" | grep -v debug | grep $distro_short | tail -1 )
if [ ! -z "$package_links" ]; then
# echo "$package_links"
# echo "----------"
at_least_one=true
mariadb_version="${package_links#*mariadb-enterprise-server/}"
columnstore_version="${mariadb_version#*columnstore-engine-}"
mariadb_version="$( echo $mariadb_version | awk -F/ '{print $1}' )"
columnstore_version="$( echo $columnstore_version | awk -F"columnstore_" '{print $2}' | awk -F"-" '{print $2}' | awk -F"+" '{print $1}' )"
printf "%-8s %-12s %-12s %-12s\n" "MariaDB:" "$mariadb_version" "Columnstore:" "$columnstore_version";
fi;
done
;;
*) # unknown option
printf "\ndo_check: Not implemented for: $distro_info\n\n"
exit 2;
esac
fi;
done
done
if ! $at_least_one; then
printf "\n[!] No columnstore packages found for: $distro_short $arch \n\n"
fi
;;
community )
# pull from public community repo
url_base="https://dlm.mariadb.com"
url_page="/browse/mariadb_server/"
ignore="/login"
at_least_one=false
curl -s "$url_base$url_page" > $dbm_tmp_file
major_version_links=$(grep -oP 'href="\K[^"]+' $dbm_tmp_file | grep $url_page | grep -v $ignore )
for major_link in ${major_version_links[@]}
do
#echo "Major: $major_link"
curl -s "$url_base$major_link" > $dbm_tmp_file
minor_version_links=$(grep -oP 'href="\K[^"]+' $dbm_tmp_file | grep $url_page | grep -v $ignore )
for minor_link in ${minor_version_links[@]}
do
if [ "$minor_link" != "$url_page" ]; then
#echo " Minor: $minor_link"
case $distro_info in
centos | rhel | rocky )
path="yum/centos/$version_id/$architecture/rpms/"
curl -s "$url_base$minor_link$path" > $dbm_tmp_file
package_links=$(grep -oP 'href="\K[^"]+' $dbm_tmp_file | grep "$path" | grep "columnstore-engine" | grep -v debug | tail -1 )
if [ ! -z "$package_links" ]; then
# echo "$package_links"
# echo "----------"
at_least_one=true
mariadb_version="${package_links#*mariadb-}"
columnstore_version="${mariadb_version#*columnstore-engine-}"
mariadb_version="$( echo $mariadb_version | awk -F/ '{print $1}' )"
columnstore_version="$( echo $columnstore_version | awk -F_ '{print $2}' | awk -F".el" '{print $1}' )"
# echo "MariaDB: $mariadb_version Columnstore: $columnstore_version"
printf "%-8s %-12s %-12s %-12s\n" "MariaDB:" "$mariadb_version" "Columnstore:" "$columnstore_version";
fi;
;;
ubuntu | debian )
path="repo/$distro_info/pool/main/m/mariadb/"
curl -s "$url_base$minor_link$path" > $dbm_tmp_file
package_links=$(grep -oP 'href="\K[^"]+' $dbm_tmp_file | grep "$path" | grep "columnstore_" | grep -v debug | grep $distro_short | tail -1 )
if [ ! -z "$package_links" ]; then
# echo "$package_links"
# echo "----------"
at_least_one=true
mariadb_version="${package_links#*mariadb-}"
columnstore_version="${mariadb_version#*columnstore-engine-}"
mariadb_version="$( echo $mariadb_version | awk -F/ '{print $1}' )"
columnstore_version="$( echo $columnstore_version | awk -F"columnstore_" '{print $2}' | awk -F"-" '{print $2}' | awk -F'\+maria' '{print $1}' 2>/dev/null) "
# echo "MariaDB: $mariadb_version Columnstore: $columnstore_version"
printf "%-8s %-12s %-12s %-12s\n" "MariaDB:" "$mariadb_version" "Columnstore:" "$columnstore_version";
fi;
;;
*) # unknown option
printf "Not implemented for: $distro_info\n"
exit 2;
esac
fi;
done
done
if ! $at_least_one; then
printf "\n[!] No columnstore packages found for: $distro_short $arch \n\n"
fi
;;
dev )
printf "Not implemented for: $repo\n"
exit 1;
;;
*) # unknown option
printf "Unknown repo: $repo\n"
exit 2;
esac
}
global_dependencies() {
if ! command -v curl &> /dev/null; then
printf "\n[!] curl not found. Please install curl\n\n"
exit 1;
fi
}
check_set_es_token() {
while [[ $# -gt 0 ]]; do
parameter="$1"
case $parameter in
--token)
enterprise_token="$2"
shift # past argument
shift # past value
;;
*) # unknown option
shift # past argument
;;
esac
done
}
global_dependencies
case $action in
remove )
do_remove "$@" ;
;;
install )
do_install "$@";
;;
check )
do_check "$@"
;;
help | -h | --help | -help)
print_help_text;
exit 1;
;;
add )
add_node_cmapi_via_curl "127.0.0.1"
;;
*) # unknown option
printf "Unknown Action: $1\n"
print_help_text
exit 2;
esac