mirror of
https://github.com/kubescape/kubescape.git
synced 2026-02-14 18:09:55 +00:00
138 lines
3.8 KiB
Bash
Executable File
138 lines
3.8 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
BASE_DIR=~/.kubescape
|
|
KUBESCAPE_EXEC=kubescape
|
|
|
|
# Function to determine OS and architecture
|
|
determine_os_and_arch() {
|
|
osName=$(uname -s)
|
|
case $osName in
|
|
Linux*) osName=linux ;;
|
|
Darwin*) osName=darwin ;;
|
|
*MINGW*|*CYGWIN*|*MSYS*)
|
|
echo -e "\033[31mError: Windows is not supported by this script. Please use the PowerShell installer or download manually from:"
|
|
echo -e "\033[1;35;40mhttps://github.com/kubescape/kubescape/releases"
|
|
exit 1
|
|
;;
|
|
*)
|
|
echo -e "\033[31mError: Unsupported operating system: $osName"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
arch=$(uname -m)
|
|
case $arch in
|
|
x86_64|amd64) arch="amd64" ;;
|
|
aarch64|arm64) arch="arm64" ;;
|
|
*)
|
|
echo -e "\033[31mError: Unsupported architecture: $arch"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# Function to get the latest release version from GitHub API
|
|
get_latest_version() {
|
|
local latest_release
|
|
latest_release=$(curl -s "https://api.github.com/repos/kubescape/kubescape/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
|
|
if [ -z "$latest_release" ]; then
|
|
echo -e "\033[31mError: Failed to fetch latest release version"
|
|
exit 1
|
|
fi
|
|
echo "$latest_release"
|
|
}
|
|
|
|
# Function to remove old installations
|
|
remove_old_install() {
|
|
local exec_path=$1
|
|
if [ -f "$exec_path" ]; then
|
|
$SUDO rm -f "$exec_path" && echo -e "\033[32mRemoved old installation at $exec_path" || echo -e "\033[31mFailed to remove old installation at $exec_path"
|
|
fi
|
|
}
|
|
|
|
# Parse command-line arguments
|
|
VERSION=""
|
|
while getopts v: option; do
|
|
case ${option} in
|
|
v) VERSION="${OPTARG}";;
|
|
*) ;;
|
|
esac
|
|
done
|
|
|
|
echo -e "\033[0;36mInstalling Kubescape..."
|
|
|
|
determine_os_and_arch
|
|
|
|
# Get version (use provided or fetch latest)
|
|
if [ -z "${VERSION}" ]; then
|
|
VERSION=$(get_latest_version)
|
|
echo -e "\033[0;36mLatest version: $VERSION"
|
|
fi
|
|
|
|
# Remove 'v' prefix if present for the filename
|
|
VERSION_NUM="${VERSION#v}"
|
|
|
|
mkdir -p $BASE_DIR
|
|
|
|
OUTPUT=$BASE_DIR/$KUBESCAPE_EXEC
|
|
# New URL pattern: kubescape_{version}_{os}_{arch}
|
|
DOWNLOAD_URL="https://github.com/kubescape/kubescape/releases/download/${VERSION}/kubescape_${VERSION_NUM}_${osName}_${arch}"
|
|
|
|
echo -e "\033[0;36mDownloading from: $DOWNLOAD_URL"
|
|
curl --progress-bar -L $DOWNLOAD_URL -o $OUTPUT
|
|
|
|
# Verify download was successful
|
|
if [ ! -s "$OUTPUT" ]; then
|
|
echo -e "\033[31mError: Download failed or file is empty"
|
|
rm -f "$OUTPUT"
|
|
exit 1
|
|
fi
|
|
|
|
# Determine install directory
|
|
install_dir=/usr/local/bin
|
|
[ "$(id -u)" -ne 0 ] && install_dir=$BASE_DIR/bin && export PATH=$PATH:$BASE_DIR/bin
|
|
|
|
# Create install dir if it does not exist
|
|
mkdir -p $install_dir
|
|
|
|
chmod +x $OUTPUT
|
|
|
|
# Remove old installations
|
|
SUDO=""
|
|
[ "$(id -u)" -ne 0 ] && [ -n "$(which sudo)" ] && [ -f /usr/local/bin/$KUBESCAPE_EXEC ] && SUDO=sudo
|
|
|
|
remove_old_install "/usr/local/bin/$KUBESCAPE_EXEC"
|
|
remove_old_install "$BASE_DIR/bin/$KUBESCAPE_EXEC"
|
|
|
|
# Remove any old installations in user's PATH
|
|
IFS=':' read -ra ADDR <<< "$PATH"
|
|
for pdir in "${ADDR[@]}"; do
|
|
if [ "$pdir/$KUBESCAPE_EXEC" != "$OUTPUT" ]; then
|
|
remove_old_install "$pdir/$KUBESCAPE_EXEC"
|
|
fi
|
|
done
|
|
|
|
# Move the new executable to the install directory
|
|
mv $OUTPUT $install_dir/$KUBESCAPE_EXEC
|
|
|
|
echo -e "\033[32mFinished Installation."
|
|
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo -e "\033[1;35;32m\nRemember to add the Kubescape CLI to your path with:"
|
|
echo -e "\033[1;35;40m$ export PATH=\$PATH:$BASE_DIR/bin"
|
|
fi
|
|
|
|
# Check cluster access by getting nodes
|
|
if ! kubectl get nodes &> /dev/null; then
|
|
echo -e "\033[0;37;32m\nRun:"
|
|
echo -e "\033[1;35;40m$ $KUBESCAPE_EXEC scan"
|
|
echo
|
|
exit 0
|
|
fi
|
|
|
|
echo -e "\033[0;37;40m"
|
|
echo -e "\033[0;37;32mFinished Installation.\n"
|
|
$KUBESCAPE_EXEC version
|
|
echo -e "\033[0;37;35m\nUsage: $ kubescape scan"
|