Files
hackacad/usr/local/bin/bastille

238 lines
7.8 KiB
Plaintext
Raw Normal View History

2018-11-07 10:36:54 -07:00
#!/bin/sh
2019-07-15 07:47:43 -06:00
#
# SPDX-License-Identifier: BSD-3-Clause
#
# Copyright (c) 2018-2025, Christer Edwards <christer.edwards@gmail.com>
2018-11-07 10:36:54 -07:00
# All rights reserved.
2020-04-14 11:52:29 +02:00
#
2018-11-07 10:36:54 -07:00
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
2020-04-14 11:52:29 +02:00
#
2018-11-07 10:36:54 -07:00
# * Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
2020-04-14 11:52:29 +02:00
#
2018-11-07 10:36:54 -07:00
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
2020-04-14 11:52:29 +02:00
#
2018-11-07 10:36:54 -07:00
# * Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
2020-04-14 11:52:29 +02:00
#
2018-11-07 10:36:54 -07:00
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PATH=${PATH}:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
2025-03-01 21:14:56 -07:00
. /usr/local/share/bastille/common.sh
## check for config existence
bastille_conf_check() {
if [ ! -r "/usr/local/etc/bastille/bastille.conf" ]; then
echo "[INFO] Configuration file not found. Do you want to create it with default values? [y/N]"
read answer
case "${answer}" in
[Nn][Oo]|[Nn]|"")
echo "[INFO] No configuration file has been generated. Exiting."
exit
;;
[Yy][Ee][Ss]|[Yy])
cp /usr/local/etc/bastille/bastille.conf.sample /usr/local/etc/bastille/bastille.conf
echo "[INFO] Configuration file has been generated. Continuing with default values"
;;
*)
echo "[ERROR] Invalid option. Please answer with 'y' or 'N'."
exit 1
;;
esac
fi
}
2019-07-15 07:44:45 -06:00
## bastille_prefix should be 0750
## this restricts file system access to privileged users
bastille_perms_check() {
if [ -d "${bastille_prefix}" ]; then
BASTILLE_PREFIX_PERMS=$(stat -f "%Op" "${bastille_prefix}")
if [ "${BASTILLE_PREFIX_PERMS}" != 40750 ]; then
error_notify "Insecure permissions on ${bastille_prefix}"
error_exit "Try: chmod 0750 ${bastille_prefix}"
2019-07-15 07:44:45 -06:00
fi
fi
}
2018-11-07 10:36:54 -07:00
usage() {
cat << EOF
2019-11-21 16:58:21 -07:00
Bastille is an open-source system for automating deployment and management of
containerized applications on FreeBSD.
2018-11-07 10:36:54 -07:00
Usage:
2019-11-21 16:58:21 -07:00
bastille command TARGET [args]
2018-11-07 10:36:54 -07:00
Available Commands:
bootstrap Bootstrap a FreeBSD release for container base.
2020-03-04 10:52:17 +01:00
clone Clone an existing container.
cmd Execute arbitrary command on targeted container(s).
config Get or set a config value for the targeted container(s).
2018-11-07 10:36:54 -07:00
console Console into a running container.
convert Convert a Thin container into a Thick container.
2025-01-21 07:48:09 -07:00
cp cp(1) files from host to jail(s).
create Create a new thin container or a thick container if -T|--thick option specified.
2019-10-24 17:02:50 -04:00
destroy Destroy a stopped container or a FreeBSD release.
edit Edit container configuration files (advanced).
etcupdate Update /etc directory to specified release.
export Exports a specified container.
help Help about any command.
2018-11-07 10:36:54 -07:00
htop Interactive process viewer (requires htop).
2025-01-21 07:48:09 -07:00
jcp cp(1) files from a jail to jail(s).
import Import a specified container.
limits Apply resources limits to targeted container(s). See rctl(8).
list List containers (running).
mount Mount a volume inside the targeted container(s).
2018-11-07 10:36:54 -07:00
pkg Manipulate binary packages within targeted container(s). See pkg(8).
2025-01-21 07:48:09 -07:00
rcp cp(1) files from a jail to host.
2020-02-01 15:58:02 +00:00
rdr Redirect host port to container port.
rename Rename a container.
2018-11-07 10:36:54 -07:00
restart Restart a running container.
2019-11-21 16:58:21 -07:00
service Manage services within targeted container(s).
setup Attempt to auto-configure network, firewall and storage on new installs.
2018-11-07 10:36:54 -07:00
start Start a stopped container.
stop Stop a running container.
sysrc Safely edit rc files within targeted container(s).
tags Add or remove tags to targeted container(s).
2019-11-21 16:58:21 -07:00
template Apply file templates to targeted container(s).
2018-11-07 10:36:54 -07:00
top Display and update information about the top(1) cpu processes.
umount Unmount a volume from within the targeted container(s).
2018-11-07 10:36:54 -07:00
update Update container base -pX release.
upgrade Upgrade container release to X.Y-RELEASE.
2019-07-15 07:44:45 -06:00
verify Compare release against a "known good" index.
2020-11-27 19:20:47 -05:00
zfs Manage (get|set) ZFS attributes on targeted container(s).
2018-11-07 10:36:54 -07:00
Use "bastille -v|--version" for version information.
Use "bastille command -h|--help" for more information about a command.
2025-03-01 21:21:18 -07:00
Use "bastille -c|--config command" to slecify a non-defaukt config file.
2018-11-07 10:36:54 -07:00
EOF
exit 1
}
2025-03-01 21:14:56 -07:00
bastille_conf_check
bastille_perms_check
BASTILLE_VERSION="0.13.20250126"
2025-03-01 21:21:18 -07:00
BASTILLE_CONFIG=/usr/local/etc/bastille/bastille.conf
export BASTILLE_CONFIG
2025-03-01 21:14:56 -07:00
# Handle options
while [ "$#" -gt 0 ]; do
case "${1}" in
-h|--help|help)
usage
;;
version|-v|--version)
info "${BASTILLE_VERSION}"
exit 0
;;
-c|--config)
BASTILLE_CONFIG="${2}"
if [ -r "${BASTILLE_CONFIG}" ]; then
info "Using custom config: ${BASTILLE_CONFIG}"
2025-03-01 21:21:18 -07:00
export BASTILLE_CONFIG
2025-03-01 21:14:56 -07:00
elif [ -r "/usr/local/etc/bastille/${BASTILLE_CONFIG}" ]; then
BASTILLE_CONFIG="/usr/local/etc/bastille/${BASTILLE_CONFIG}"
info "Using custom config: ${BASTILLE_CONFIG}"
2025-03-01 21:21:18 -07:00
export BASTILLE_CONFIG
2025-03-01 21:14:56 -07:00
else
error_exit "Not a valid config file: ${BASTILLE_CONFIG}"
fi
shift 2
;;
-*)
for _opt in $(echo ${1} | sed 's/-//g' | fold -w1); do
case ${_opt} in
x) enable_debug ;;
a) AUTO=1 ;;
*) error_exit "Unknown Option: \"${1}\"" ;;
esac
done
shift
;;
*)
break
;;
esac
done
if [ "$#" -lt 1 ]; then
usage
else
CMD="${1}"
shift
fi
2018-11-07 10:36:54 -07:00
# Handle special-case commands first.
case "${CMD}" in
bootstrap| \
clone| \
cmd| \
config| \
console| \
convert| \
cp| \
create| \
destroy| \
edit| \
etcupdate| \
export| \
htop| \
import| \
limits| \
list| \
mount| \
network| \
pkg| \
rcp| \
rdr| \
rename| \
restart| \
service| \
setup| \
start| \
stop| \
sysrc| \
tags| \
template| \
top| \
umount| \
update| \
upgrade| \
verify| \
zfs)
;;
*)
usage
;;
2018-11-07 10:36:54 -07:00
esac
2024-11-24 16:42:26 -05:00
# shellcheck disable=SC2154
2018-11-07 10:36:54 -07:00
SCRIPTPATH="${bastille_sharedir}/${CMD}.sh"
2019-07-15 07:44:45 -06:00
if [ -f "${SCRIPTPATH}" ]; then
2020-02-05 19:02:19 -07:00
: "${UMASK:=022}"
umask "${UMASK}"
2018-11-07 10:36:54 -07:00
2020-02-05 19:02:19 -07:00
: "${SH:=sh}"
2018-11-07 10:36:54 -07:00
if [ -n "${PARAMS}" ]; then
exec "${SH}" "${SCRIPTPATH}" "${PARAMS}"
else
exec "${SH}" "${SCRIPTPATH}" "$@"
fi
2019-07-15 07:44:45 -06:00
else
error_exit "${SCRIPTPATH} not found."
2019-07-15 07:44:45 -06:00
fi