|  |  | @ -5,6 +5,22 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | # T&M Hansson IT AB © - 2022, https://www.hanssonit.se/ |  |  |  | # T&M Hansson IT AB © - 2022, https://www.hanssonit.se/ | 
			
		
	
		
		
			
				
					
					|  |  |  | # GPLv3 or later. |  |  |  | # GPLv3 or later. | 
			
		
	
		
		
			
				
					
					|  |  |  | # |  |  |  | # | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | echo "Started at $(date +'%Y-%m-%d %H:%M:%S')" >> opensearch-installer.log | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | while getopts m: option | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | do | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	case "${option}" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	in | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		m) MODE=${OPTARG};; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 		\?) echo "Usage: sudo bash ./$0 [-m debug]" && exit;; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 	esac | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | done | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #DEBUG | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | if [ "$MODE" = "debug" ]; then | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     set -x | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | fi | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # Reset |  |  |  | # Reset | 
			
		
	
		
		
			
				
					
					|  |  |  | Color_Off='\e[0m'       # Text Reset |  |  |  | Color_Off='\e[0m'       # Text Reset | 
			
		
	
	
		
		
			
				
					|  |  | @ -18,6 +34,9 @@ Purple='\e[0;35m'       # Purple | 
			
		
	
		
		
			
				
					
					|  |  |  | Cyan='\e[0;36m'         # Cyan |  |  |  | Cyan='\e[0;36m'         # Cyan | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | MEM_AVAILABLE="$(grep MemTotal /proc/meminfo| grep -o '[0-9]\+')" |  |  |  | MEM_AVAILABLE="$(grep MemTotal /proc/meminfo| grep -o '[0-9]\+')" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | DIST=$(lsb_release -sc) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | TODAY=$(date +%s) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | NEXT_LTS_DATE=$(date -d 2024-04-01 +%s) | 
			
		
	
		
		
			
				
					
					|  |  |  | OPNSDIR="/opt/opensearch" |  |  |  | OPNSDIR="/opt/opensearch" | 
			
		
	
		
		
			
				
					
					|  |  |  | INDEX_USER="$(tr -dc '[:lower:]' < /dev/urandom | fold -w 24 | head -n1)" |  |  |  | INDEX_USER="$(tr -dc '[:lower:]' < /dev/urandom | fold -w 24 | head -n1)" | 
			
		
	
		
		
			
				
					
					|  |  |  | OPNSREST="$(tr -dc "a-zA-Z0-9" < /dev/urandom | fold -w 32 | head -n1)" |  |  |  | OPNSREST="$(tr -dc "a-zA-Z0-9" < /dev/urandom | fold -w 32 | head -n1)" | 
			
		
	
	
		
		
			
				
					|  |  | @ -27,9 +46,22 @@ fts_node="fts_os-node" | 
			
		
	
		
		
			
				
					
					|  |  |  | max_map_count="512000" |  |  |  | max_map_count="512000" | 
			
		
	
		
		
			
				
					
					|  |  |  | NL="$(printf '\n  ')" |  |  |  | NL="$(printf '\n  ')" | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | rename_distro() { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     if [ "$DIST" = "$1" ]; then | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         DIST="$2" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     fi | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #Trisquel distro upstream referencing. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | rename_distro nabia  focal | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | rename_distro aramo  jammy | 
			
		
	
		
		
			
				
					
					|  |  |  | printwc() { |  |  |  | printwc() { | 
			
		
	
		
		
			
				
					
					|  |  |  |     printf "%b$2%b" "$1" "${Color_Off}" |  |  |  |     printf "%b$2%b" "$1" "${Color_Off}" | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | print_title() { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     printwc "${Blue}" "\n#--------------------------------------------------" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     printwc "${Blue}" "\n# $1" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     printwc "${Blue}" "\n#--------------------------------------------------\n" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | install_if_not() { |  |  |  | install_if_not() { | 
			
		
	
		
		
			
				
					
					|  |  |  |     if [ "$(dpkg-query -W -f='${Status}' "$1" 2>/dev/null | \ |  |  |  |     if [ "$(dpkg-query -W -f='${Status}' "$1" 2>/dev/null | \ | 
			
		
	
		
		
			
				
					
					|  |  |  |         grep -c "ok installed")" == "1" ]; then |  |  |  |         grep -c "ok installed")" == "1" ]; then | 
			
		
	
	
		
		
			
				
					|  |  | @ -77,6 +109,14 @@ while [ $secs -gt 0 ]; do | 
			
		
	
		
		
			
				
					
					|  |  |  |    : $((secs--)) |  |  |  |    : $((secs--)) | 
			
		
	
		
		
			
				
					
					|  |  |  | done |  |  |  | done | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | wait_for_bootstrapping() { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | if [ "$(nproc)" -gt 2 ] | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | then | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     countdown "Waiting for Docker bootstrapping..." "30" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     countdown "Waiting for Docker bootstrapping..." "60" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | fi | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #Check if user is root |  |  |  | #Check if user is root | 
			
		
	
		
		
			
				
					
					|  |  |  | if ! [ "$(id -u)" = 0 ]; then |  |  |  | if ! [ "$(id -u)" = 0 ]; then | 
			
		
	
	
		
		
			
				
					|  |  | @ -84,11 +124,31 @@ if ! [ "$(id -u)" = 0 ]; then | 
			
		
	
		
		
			
				
					
					|  |  |  |    exit 0 |  |  |  |    exit 0 | 
			
		
	
		
		
			
				
					
					|  |  |  | fi |  |  |  | fi | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | printf "\nOS: %s" "$(lsb_release -sd)" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | if [ "$DIST" = "focal" ] || \ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |    [ "$DIST" = "jammy" ]; then | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     printf "\nGood, this is a supported platform!" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     printf "\nSorry, this platform is not supported... exiting" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     exit | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | fi | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | # Suggest 22.04 LTS release over 20.04 in April 2024 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | if [ "$DIST" = "focal" ]; then | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   if [ "$TODAY" -gt "$NEXT_LTS_DATE" ]; then | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     echo "  > $(lsb_release -sc), even when it's compatible and functional." | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     echo -n "    We suggest to use the next (LTS) release, for longer" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     echo " support and security reasons." | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     read -n 1 -s -r -p "Press any key to continue..."$'\n' | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     echo "Focal is supported." | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |   fi | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | fi | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # Check update |  |  |  | # Check update | 
			
		
	
		
		
			
				
					
					|  |  |  | apt-get update -q2 |  |  |  | apt-get update -q2 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # Test RAM size (4GB min) + CPUs (min 2) |  |  |  | # Test RAM size (4GB min) + CPUs (min 2) | 
			
		
	
		
		
			
				
					
					|  |  |  | #Check system resources |  |  |  | print_title "Check system resources" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | printf "\n\nVerifying System Resources:" |  |  |  | printf "\n\nVerifying System Resources:" | 
			
		
	
		
		
			
				
					
					|  |  |  | if [ "$(nproc --all)" -lt 2 ];then |  |  |  | if [ "$(nproc --all)" -lt 2 ];then | 
			
		
	
		
		
			
				
					
					|  |  |  |     printf "\nWarning!: The system do not meet the minimum CPU" |  |  |  |     printf "\nWarning!: The system do not meet the minimum CPU" | 
			
		
	
	
		
		
			
				
					|  |  | @ -134,7 +194,8 @@ printf '\nThis server will likely have issues due the lack of resources.\n' | 
			
		
	
		
		
			
				
					
					|  |  |  | printf '>>> We highly recommend to increase resources of this server. <<<\n' |  |  |  | printf '>>> We highly recommend to increase resources of this server. <<<\n' | 
			
		
	
		
		
			
				
					
					|  |  |  | fi |  |  |  | fi | 
			
		
	
		
		
			
				
					
					|  |  |  | sleep .1 |  |  |  | sleep .1 | 
			
		
	
		
		
			
				
					
					|  |  |  | # Set domain |  |  |  | 
 | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | print_title "Set CA domain" | 
			
		
	
		
		
			
				
					
					|  |  |  | while [ "$ANS_DMN" != "yes" ] |  |  |  | while [ "$ANS_DMN" != "yes" ] | 
			
		
	
		
		
			
				
					
					|  |  |  | do |  |  |  | do | 
			
		
	
		
		
			
				
					
					|  |  |  |     read -p "> Set your CA domain (or subdomain) here: $NL" -r DOMAIN |  |  |  |     read -p "> Set your CA domain (or subdomain) here: $NL" -r DOMAIN | 
			
		
	
	
		
		
			
				
					|  |  | @ -165,13 +226,15 @@ else | 
			
		
	
		
		
			
				
					
					|  |  |  |     fi |  |  |  |     fi | 
			
		
	
		
		
			
				
					
					|  |  |  | fi |  |  |  | fi | 
			
		
	
		
		
			
				
					
					|  |  |  | sleep .1 |  |  |  | sleep .1 | 
			
		
	
		
		
			
				
					
					|  |  |  | # Check & install docker |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | install_if_not docker.io |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | install_if_not docker-compose |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | print_title "Set system vm.max_map_count." | 
			
		
	
		
		
			
				
					
					|  |  |  | sysctl -w vm.max_map_count="$max_map_count" |  |  |  | sysctl -w vm.max_map_count="$max_map_count" | 
			
		
	
		
		
			
				
					
					|  |  |  | set_once_hash_comment "vm.max_map_count=$max_map_count" "/etc/sysctl.conf" |  |  |  | set_once_hash_comment "vm.max_map_count=$max_map_count" "/etc/sysctl.conf" | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | print_title "Install and setup Docker" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | install_if_not docker.io | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | install_if_not docker-compose | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | mkdir -p "$OPNSDIR" |  |  |  | mkdir -p "$OPNSDIR" | 
			
		
	
		
		
			
				
					
					|  |  |  | docker pull "$opens_fts" |  |  |  | docker pull "$opens_fts" | 
			
		
	
		
		
			
				
					
					|  |  |  | BCRYPT_HASH="$(docker run --rm -it $opens_fts \ |  |  |  | BCRYPT_HASH="$(docker run --rm -it $opens_fts \ | 
			
		
	
	
		
		
			
				
					|  |  | @ -295,23 +358,17 @@ networks: | 
			
		
	
		
		
			
				
					
					|  |  |  | #[1] https://github.com/opensearch-project/performance-analyzer |  |  |  | #[1] https://github.com/opensearch-project/performance-analyzer | 
			
		
	
		
		
			
				
					
					|  |  |  | YML_DOCKER_COMPOSE |  |  |  | YML_DOCKER_COMPOSE | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # Prepare certs |  |  |  | print_title "Prepare certs" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | create_certs "$DOMAIN" |  |  |  | create_certs "$DOMAIN" | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # Set permissions |  |  |  | # Set permissions | 
			
		
	
		
		
			
				
					
					|  |  |  | chmod 744 -R  $OPNSDIR |  |  |  | chmod 744 -R  $OPNSDIR | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # Launch docker-compose |  |  |  | print_title "Launch opensearch via docker-compose" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | cd $OPNSDIR |  |  |  | cd $OPNSDIR | 
			
		
	
		
		
			
				
					
					|  |  |  | docker-compose up -d |  |  |  | docker-compose up -d | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # Wait for bootstrapping |  |  |  | wait_for_bootstrapping | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | if [ "$(nproc)" -gt 2 ] |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | then |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     countdown "Waiting for Docker bootstrapping..." "30" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | else |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     countdown "Waiting for Docker bootstrapping..." "60" |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | fi |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # Make sure password setup is enforced. |  |  |  | # Make sure password setup is enforced. | 
			
		
	
		
		
			
				
					
					|  |  |  | docker-compose exec fts_os-node \ |  |  |  | docker-compose exec fts_os-node \ | 
			
		
	
	
		
		
			
				
					|  |  | @ -329,6 +386,17 @@ docker-compose exec fts_os-node \ | 
			
		
	
		
		
			
				
					
					|  |  |  |                         ../../../config/admin.pem \ |  |  |  |                         ../../../config/admin.pem \ | 
			
		
	
		
		
			
				
					
					|  |  |  |                         ../../../config/admin-key.pem" |  |  |  |                         ../../../config/admin-key.pem" | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | wait_for_bootstrapping | 
			
		
	
		
		
			
				
					
					|  |  |  | docker logs $fts_node |  |  |  | docker logs $fts_node | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | printwc "$Green" "\n\nYou can now use: \"http://${INDEX_USER}:${OPNSREST}@localhost:9200\"\n" |  |  |  | if curl -sXGET "http://${INDEX_USER}:${OPNSREST}@localhost:9200" | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | then | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     printwc "$Green" "\n\nYou can now use: " | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     printwc "$Cyan"  "'http://${INDEX_USER}:${OPNSREST}@localhost:9200'\n" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     printwc "$Red" "\n\nSetup have failed please report to: " | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     printwc "$Cyan" \ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     "'https://forge.switnet.net/switnet/simple-opensearch-installer'\n" | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | fi | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | }  > >(tee -a opensearch-installer.log) 2> >(tee -a opensearch-installer.log >&2) | 
			
		
	
	
		
		
			
				
					| 
						
						
						
						 |  | 
 |