mirror of
https://github.com/jtesta/ssh-audit.git
synced 2026-07-08 03:54:53 +02:00
112 lines
3.7 KiB
Bash
Executable File
112 lines
3.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
#
|
|
# The MIT License (MIT)
|
|
#
|
|
# Copyright (C) 2021-2026 Joe Testa (jtesta@positronsecurity.com)
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to deal
|
|
# in the Software without restriction, including without limitation the rights
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in
|
|
# all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
# THE SOFTWARE.
|
|
#
|
|
|
|
################################################################################
|
|
# build_snap.sh
|
|
#
|
|
# Builds a Snap package.
|
|
################################################################################
|
|
|
|
|
|
# Pre-requisites
|
|
echo "Installing pre-requisites..."
|
|
sudo apt install -y make
|
|
sudo snap install snapcraft --classic
|
|
sudo snap install review-tools lxd
|
|
|
|
# Initialize LXD.
|
|
echo -e "\nInitializing LXD..."
|
|
sudo lxd init --auto
|
|
|
|
# Reset local files that may have been changed through a previous run.
|
|
echo "Resetting local files..."
|
|
rm -f ssh-audit*.snap
|
|
git checkout snapcraft.yaml 2> /dev/null
|
|
git checkout src/ssh_audit/globals.py 2> /dev/null
|
|
|
|
# Add the built-in manual page.
|
|
echo "Processing man page..."
|
|
./add_builtin_man_page.sh
|
|
|
|
# Get the version from the globals.py file.
|
|
version=$(grep VERSION src/ssh_audit/globals.py | awk 'BEGIN {FS="="} ; {print $2}' | tr -d '[:space:]')
|
|
|
|
# Strip the quotes around the version (along with the initial 'v' character) and append "-1" to make the default Snap version (i.e.: 'v2.5.0' => '2.5.0-1')
|
|
default_snap_version="${version:2:-1}-1"
|
|
echo -e -n "\nEnter Snap package version [default: ${default_snap_version}]: "
|
|
read -r snap_version
|
|
|
|
# If no version was specified, use the default version.
|
|
if [[ $snap_version == '' ]]; then
|
|
snap_version=$default_snap_version
|
|
echo -e "Using default snap version: ${snap_version}\n"
|
|
fi
|
|
|
|
# Ensure that the snap version fits the format of X.X.X-X.
|
|
if [[ ! $snap_version =~ ^[0-9]\.[0-9]\.[0-9]\-[0-9]$ ]]; then
|
|
echo "Error: version string does not match format X.X.X-X!"
|
|
exit 1
|
|
fi
|
|
|
|
# Set the version field.
|
|
sed -i "s/version: \"\"/version: \"${snap_version}\"/" snapcraft.yaml
|
|
|
|
# Ensure we set the version field correctly.
|
|
grep "version: \"${snap_version}\"" snapcraft.yaml > /dev/null 2> /dev/null
|
|
if [[ $? != 0 ]]; then
|
|
echo "Failed to set version field in snapcraft.yaml."
|
|
exit 1
|
|
fi
|
|
|
|
# Set the SNAP_PACKAGE variable to True so that file permission errors give more user-friendly
|
|
sed -i 's/SNAP_PACKAGE = False/SNAP_PACKAGE = True/' src/ssh_audit/globals.py
|
|
|
|
# Clean any previous builds.
|
|
echo "Running 'snapcraft clean'..."
|
|
snapcraft clean
|
|
|
|
# Build the snap file.
|
|
echo "Running 'snapcraft pack --use-lxd'..."
|
|
snapcraft pack --use-lxd
|
|
if [[ $? != 0 ]]; then
|
|
echo -e "\nPack process failed: $?"
|
|
exit 1
|
|
else
|
|
echo -e "Pack process succeeded."
|
|
fi
|
|
|
|
# Run the linter on it.
|
|
echo "Running 'snapcraft lint' on *.snap..."
|
|
snapcraft lint --quiet *.snap
|
|
if [[ $? != 0 ]]; then
|
|
echo -e "\nLint process failed: $?"
|
|
exit 1
|
|
else
|
|
echo -e "Lint process succeeded."
|
|
fi
|
|
|
|
echo -e "\nDone!\n"
|