salt/pkg/macos/prep_salt.sh
2023-01-25 10:05:16 -07:00

247 lines
6.9 KiB
Bash
Executable file

#!/bin/bash
################################################################################
#
# Title: Prep the Salt environment for Packaging
#
# Description: This prepares the Salt environment for packaging by removing
# unneeded files, staging configs and plist files, etc.
#
# Requirements:
# - Xcode Command Line Tools (xcode-select --install)
# or
# - Xcode
#
# Usage:
# This script takes no parameters:
#
# Example:
# The following will prepare the Salt environment for packaging:
#
# ./prep_salt.sh
#
################################################################################
#-------------------------------------------------------------------------------
# Script Functions
#-------------------------------------------------------------------------------
# _usage
#
# Prints out help text
_usage() {
echo ""
echo "Script to prep the Salt package:"
echo ""
echo "usage: ${0}"
echo " [-h|--help]"
echo ""
echo " -h, --help this message"
echo " -b, --build-dir the location of the build directory"
echo ""
echo " To build the Salt package:"
echo " example: $0"
}
# _msg
#
# Prints the message with a dash... no new line
_msg() {
printf -- "- %s: " "$1"
}
# _success
#
# Prints a green Success
_success() {
printf "\e[32m%s\e[0m\n" "Success"
}
# _failure
#
# Prints a red Failure and exits
_failure() {
printf "\e[31m%s\e[0m\n" "Failure"
echo "output >>>>>>"
cat "$CMD_OUTPUT" 1>&2
echo "<<<<<< output"
exit 1
}
#-------------------------------------------------------------------------------
# Get Parameters
#-------------------------------------------------------------------------------
while true; do
if [[ -z "$1" ]]; then break; fi
case "$1" in
-h | --help )
_usage
exit 0
;;
-b | --build-dir )
shift
BUILD_DIR="$*"
shift
;;
-* )
echo "Invalid Option: $1"
echo ""
_usage
exit 1
;;
* )
shift
;;
esac
done
#-------------------------------------------------------------------------------
# Script Variables
#-------------------------------------------------------------------------------
SRC_DIR="$(git rev-parse --show-toplevel)"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
if [ -z "$BUILD_DIR" ]; then
BUILD_DIR="$SCRIPT_DIR/build"
fi
CONF_DIR="$BUILD_DIR/etc/salt"
CMD_OUTPUT=$(mktemp -t cmd.log)
#-------------------------------------------------------------------------------
# Delete temporary files on exit
#-------------------------------------------------------------------------------
function finish {
rm "$CMD_OUTPUT"
}
trap finish EXIT
#-------------------------------------------------------------------------------
# Script Start
#-------------------------------------------------------------------------------
printf "=%.0s" {1..80}; printf "\n"
echo "Prepping Salt Package"
printf -- "-%.0s" {1..80}; printf "\n"
#-------------------------------------------------------------------------------
# Make sure this is the Salt Repository
#-------------------------------------------------------------------------------
if [[ ! -e "$SRC_DIR/.git" ]] && [[ ! -e "$SRC_DIR/scripts/salt" ]]; then
echo "This directory doesn't appear to be a git repository."
echo "The macOS build process needs some files from a Git checkout of Salt."
echo "Run this script from the 'pkg/macos' directory of the Git checkout."
exit 1
fi
#-------------------------------------------------------------------------------
# Copy salt-config from Salt Repo to /opt/salt
#-------------------------------------------------------------------------------
SALT_DIR="$BUILD_DIR/opt/salt"
if ! [ -d "$SALT_DIR" ]; then
# We only need this for relenv builds
mkdir -p "$SALT_DIR"
fi
if ! [ -f "$SALT_DIR/salt-config.sh" ]; then
_msg "Staging Salt config script"
cp "$SCRIPT_DIR/scripts/salt-config.sh" "$SALT_DIR/"
if [ -f "$SALT_DIR/salt-config.sh" ]; then
_success
else
_failure
fi
fi
#-------------------------------------------------------------------------------
# Copy Service Definitions from Salt Repo to the Package Directory
#-------------------------------------------------------------------------------
if ! [ -d "$BUILD_DIR/Library/LaunchDaemons" ]; then
_msg "Creating LaunchDaemons directory"
mkdir -p "$BUILD_DIR/Library/LaunchDaemons"
if [ -d "$BUILD_DIR/Library/LaunchDaemons" ]; then
_success
else
_failure
fi
fi
ITEMS=(
"minion"
"master"
"syndic"
"api"
)
for i in "${ITEMS[@]}"; do
FILE="$BUILD_DIR/Library/LaunchDaemons/com.saltstack.salt.$i.plist"
if ! [ -f "$FILE" ]; then
_msg "Copying $i service definition"
cp "$SCRIPT_DIR/scripts/com.saltstack.salt.$i.plist" "$FILE"
if [ -f "$FILE" ]; then
_success
else
_failure
fi
fi
done
#-------------------------------------------------------------------------------
# Remove unnecessary files from the package
#-------------------------------------------------------------------------------
ITEMS=(
"pkgconfig"
"share"
"__pycache__"
)
for i in "${ITEMS[@]}"; do
if [[ -n $(find "$BUILD_DIR" -name "$i" -type d) ]]; then
_msg "Removing $i directories"
find "$BUILD_DIR" -name "$i" -type d -prune -exec rm -rf {} \;
if [[ -z $(find "$BUILD_DIR" -name "$i" -type d) ]]; then
_success
else
_failure
fi
fi
done
if [[ -n $(find "$BUILD_DIR" -name "*.pyc" -type f) ]]; then
_msg "Removing *.pyc files"
find "$BUILD_DIR" -name "*.pyc" -type f -delete
if [[ -z $(find "$BUILD_DIR" -name "*.pyc" -type f) ]]; then
_success
else
_failure
fi
fi
#-------------------------------------------------------------------------------
# Copy Config Files from Salt Repo to the Package Directory
#-------------------------------------------------------------------------------
if ! [ -d "$CONF_DIR" ]; then
_msg "Creating config directory"
mkdir -p "$CONF_DIR"
if [ -d "$CONF_DIR" ]; then
_success
else
_failure
fi
fi
ITEMS=(
"minion"
"master"
)
for i in "${ITEMS[@]}"; do
if ! [ -f "$CONF_DIR/$i.dist" ]; then
_msg "Copying $i config"
cp "$SRC_DIR/conf/$i" "$CONF_DIR/$i.dist"
if [ -f "$CONF_DIR/$i.dist" ]; then
_success
else
_failure
fi
fi
done
#-------------------------------------------------------------------------------
# Script Completed
#-------------------------------------------------------------------------------
printf -- "-%.0s" {1..80}; printf "\n"
echo "Prepping Salt Package Completed"
printf "=%.0s" {1..80}; printf "\n"