Burathar
4 years ago
commit
5c67cf9b9c
26 changed files with 615 additions and 0 deletions
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
|
||||
# Byte-compiled / optimized / DLL files |
||||
__pycache__/ |
||||
*.py[cod] |
||||
*$py.class |
||||
|
||||
# vscode |
||||
.vscode/ |
||||
|
||||
# custom |
||||
|
||||
config.yml |
||||
venv/ |
@ -0,0 +1 @@
@@ -0,0 +1 @@
|
||||
Warning: YAML files must have a `.yaml` extention. `.yml` does **not** work. |
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
from os import environ |
||||
from pathlib import Path |
||||
import confuse |
||||
from flask import Flask |
||||
from flask_bootstrap import Bootstrap |
||||
|
||||
app = Flask(__name__) |
||||
Bootstrap(app) |
||||
|
||||
def read_config(): |
||||
config_template = { |
||||
'config' : { |
||||
'flask_development_server' : { |
||||
'flask_env' : confuse.OneOf(['development', 'production']), |
||||
'server_host' : confuse.String(pattern="^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$"), |
||||
'port' : confuse.Integer() |
||||
}, |
||||
'logging' : { |
||||
'infofile' : confuse.Filename(), |
||||
'errorfile' : confuse.Filename() |
||||
}, |
||||
'message' : confuse.String() |
||||
} |
||||
} |
||||
conf = confuse.Configuration('biscd', __name__) |
||||
valid = conf.get(config_template) |
||||
print('valid', valid) |
||||
print('dict', valid.__dict__) |
||||
print('message is', valid.config.message) |
||||
if False:#not conf.has_section('MISC'): |
||||
raise ValueError("Failed to open any configfile containing a MISC section. \ |
||||
Please make sure the script dir contains a config.yml, \ |
||||
or /etc/{__name__}.conf exists") |
||||
return conf['config'] |
||||
|
||||
config = read_config() |
||||
|
||||
from biscd import routes, errors |
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
config: |
||||
flask_development_server: |
||||
# Options: production, development |
||||
flask_env: development |
||||
# Options: 127.0.0.1 , 0.0.0.0 |
||||
server_host: 0.0.0.0 |
||||
port: 5000 |
||||
|
||||
logging: |
||||
infofile: info.log |
||||
errorfile: error.log |
||||
|
||||
message: Hoi |
@ -0,0 +1,24 @@
@@ -0,0 +1,24 @@
|
||||
from flask import render_template, request |
||||
from biscd import app, config, utils |
||||
|
||||
@app.errorhandler(400) |
||||
def bad_request(error): |
||||
return render_template('400.html', title='400', error=error), 400 |
||||
|
||||
@app.errorhandler(404) |
||||
def not_found_error(): |
||||
return render_template('404.html', title='404'), 404 |
||||
|
||||
@app.errorhandler(500) |
||||
def internal_error(error): |
||||
write_error(error) |
||||
return render_template('500.html', title='500'), 500 |
||||
|
||||
def write_error(error): |
||||
timestamp = utils.get_timestamp() |
||||
remote = utils.get_remote_addr() |
||||
logline = f"{remote} {timestamp} {str(error)} {error.__dict__} \n" |
||||
|
||||
logfile = config.get('LOGGING', "errorfile") |
||||
with open(logfile, 'a') as logfile: |
||||
logfile.write(logline) |
@ -0,0 +1,8 @@
@@ -0,0 +1,8 @@
|
||||
from flask import render_template, abort |
||||
from biscd import app, config, utils |
||||
|
||||
@app.route('/', methods=['GET']) |
||||
@app.route('/index', methods=['GET']) |
||||
def index(): |
||||
return render_template('index.html', message=config['message'].get()) |
||||
|
@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
|
||||
{% extends "base.html" %} |
||||
|
||||
{% block app_content %} |
||||
<h1>404 Page Not Found</h1> |
||||
<p><a href="{{ url_for('index') }}">Back</a></p> |
||||
|
||||
<h1>400 Bad Request</h1> |
||||
<h2>Error Message:</h2> |
||||
{{ error }} |
||||
{% endblock %} |
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
{% extends "base.html" %} |
||||
|
||||
{% block app_content %} |
||||
<h1>404 Page Not Found</h1> |
||||
<p><a href="{{ url_for('index') }}">Back</a></p> |
||||
{% endblock %} |
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
{% extends "base.html" %} |
||||
|
||||
{% block app_content %} |
||||
<h1>500 Internal Server Error</h1> |
||||
<p><a href="{{ url_for('index') }}">Back</a></p> |
||||
{% endblock %} |
@ -0,0 +1,28 @@
@@ -0,0 +1,28 @@
|
||||
{% extends 'bootstrap/base.html' %} |
||||
|
||||
{% block styles %} |
||||
{{ super() }} |
||||
{% endblock %} |
||||
|
||||
{% block title %} |
||||
{% if title %}{{ title }} - Biscd 🍪{% else %}Biscd 🍪{% endif %} |
||||
{% endblock %} |
||||
|
||||
{% block content %} |
||||
<div class="container"> |
||||
{% with messages = get_flashed_messages() %} |
||||
{% if messages %} |
||||
{% for message in messages %} |
||||
<div class="alert alert-info" role="alert">{{ message }}</div> |
||||
{% endfor %} |
||||
{% endif %} |
||||
{% endwith %} |
||||
|
||||
{# application content needs to be provided in the app_content block #} |
||||
{% block app_content %}{% endblock %} |
||||
</div> |
||||
{% endblock %} |
||||
|
||||
{% block scripts %} |
||||
{{ super() }} |
||||
{% endblock %} |
@ -0,0 +1,6 @@
@@ -0,0 +1,6 @@
|
||||
{% extends "base.html" %} |
||||
|
||||
{% block app_content %} |
||||
<h1>Biscd, what else would you like with your Gitea?</h1> |
||||
<h2>{{ message }}</h2> |
||||
{% endblock %} |
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
config: |
||||
flask_development_server: |
||||
# Options: production, development |
||||
flask_env: production |
||||
# Options: 127.0.0.1 , 0.0.0.0 |
||||
server_host: 127.0.0.1 |
||||
port: 5000 |
||||
|
||||
logging: |
||||
infofile: info.log |
||||
errorfile: error.log |
||||
|
||||
message: Hoi |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
projects: |
||||
- The Hunt: |
||||
url: thehunt |
||||
git_repo: https://git.sciuro.org/Burathar/The-Hunt |
||||
branch: master |
||||
secret: thisissecret |
||||
requirements-file: requirements.txt |
||||
tests: tests.py |
||||
|
@ -0,0 +1,15 @@
@@ -0,0 +1,15 @@
|
||||
aniso8601==8.1.0 |
||||
certifi==2020.12.5 |
||||
chardet==4.0.0 |
||||
click==7.1.2 |
||||
Flask==1.1.2 |
||||
Flask-RESTful==0.3.8 |
||||
idna==2.10 |
||||
itsdangerous==1.1.0 |
||||
Jinja2==2.11.2 |
||||
MarkupSafe==1.1.1 |
||||
pytz==2020.5 |
||||
requests==2.25.1 |
||||
six==1.15.0 |
||||
urllib3==1.26.3 |
||||
Werkzeug==1.0.1 |
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
#! /bin/bash |
||||
|
||||
script_dir="$(dirname $(readlink -f $0))" |
||||
app_name='biscd' |
||||
source "$script_dir/venv/bin/activate" |
||||
|
||||
get_conf () { |
||||
echo `grep -s "$1" /etc/$app_name.yml "$script_dir/biscd/config_default.yaml" | cut -d ':' -f 3 | head -n 1` |
||||
} |
||||
|
||||
enviroment=`get_conf 'flask_env'` |
||||
host=`get_conf 'server_host'` |
||||
port=`get_conf 'port'` |
||||
|
||||
export FLASK_APP="$script_dir/runserver.py" |
||||
export FLASK_ENV="$enviroment" |
||||
export APP_NAME="$app_name" |
||||
|
||||
flask run --host "$host" --port "$port" |
||||
|
||||
deactivate |
||||
exit 0 |
@ -0,0 +1,211 @@
@@ -0,0 +1,211 @@
|
||||
#! /bin/bash |
||||
|
||||
script_dir="$(dirname $(readlink -f $0))" |
||||
|
||||
install_dir_parent="/opt" |
||||
default_app_name='biscd' |
||||
start_script='run.sh' |
||||
|
||||
# exit when any command fails |
||||
set -e |
||||
|
||||
# Make sure running as root |
||||
if [ `id -u` -ne 0 ]; then |
||||
echo 'Please run as root' |
||||
exit 1 |
||||
fi |
||||
|
||||
function help () { |
||||
echo "Usage: $0 [OPTIONS] <application name>" |
||||
echo ' -w install this application as WSGI application. Overrules -d' |
||||
echo ' -d install this application to be run using the flask development webserver.' |
||||
echo ' -u update: ignore existing app/user/group warning (to update/overwrite already installed app).' |
||||
echo ' -p port: On which port the internal webserver runs. Default = 5000. Ignored in WSGI mode' |
||||
echo ' -h display this output.' |
||||
echo '' |
||||
echo "This script installs $default_app_name, by downloading dependancies when not present," |
||||
echo 'creating a python virtualenv, unpacking any necessary files and creates a systemd integration if the user wishes so.' |
||||
echo '' |
||||
echo 'For more info visit https://git.sciuro.org/Burathar/biscd' |
||||
exit 1 |
||||
} |
||||
|
||||
function echo_header () { |
||||
echo -e "\e[33m== $1 ==\e[0;m" |
||||
} |
||||
|
||||
unset use_wsgi |
||||
while getopts ':uhdwp:' opt ; do |
||||
case "$opt" in |
||||
u) ignore_name='true';; |
||||
d) use_wsgi='false';; |
||||
w) use_wsgi='true';; |
||||
p) internal_port="${OPTARG}";; |
||||
h) help ;; |
||||
:) |
||||
echo "$0: Must supply an argument to -$OPTARG." >&2 |
||||
exit 1 |
||||
;; |
||||
?) |
||||
echo "Invalid option: -${OPTARG}." |
||||
exit 2 |
||||
;; |
||||
esac |
||||
done |
||||
arg_name=${@:$OPTIND:1} |
||||
|
||||
if [ -n "$arg_name" ]; then |
||||
[[ $arg_name =~ ^[a-zA-Z0-9][a-zA-Z0-9_-]*$ ]] || { echo "'$arg_name' is not allowed as an app name. Please only use letters, numbers, underscores(_) and dashes(-). The first character must be a letter or number." && exit 1; } |
||||
if [ "$ignore_name" != 'true' ]; then |
||||
compgen -G "/etc/systemd/system/$arg_name.*" >/dev/null && echo "An app called '$arg_name' already exists. Please choose another name, or run with -u to update existing app with this name." && exit 1 |
||||
id -u "$arg_name" >/dev/null 2>&1 && echo "A user called '$arg_name' already exists. Please choose another name." && exit 1 |
||||
egrep "^$arg_name" /etc/group >/dev/null && echo "A group called '$arg_name' already exists. Please choose another name." && exit 1 |
||||
fi |
||||
app_name="$arg_name" |
||||
else |
||||
app_name="$default_app_name" |
||||
fi |
||||
|
||||
install_dir="$install_dir_parent/$app_name" |
||||
logging_dir="/var/log/$app_name" |
||||
|
||||
if [ -z "$use_wsgi" ]; then |
||||
echo "Should this application be installed as WSGI app (recommended), or as local daemon using flask's built-in webserver, with apache as a proxy?" |
||||
read -p "Use WSGI? (Y/n) " use_wsgi |
||||
[ -z "$use_wsgi" ] && use_wsgi='y' # if no input, assume yes |
||||
case ${use_wsgi:0:1} in |
||||
y|Y|1 ) |
||||
use_wsgi='true';; |
||||
* ) |
||||
use_wsgi='false';; |
||||
esac |
||||
fi |
||||
|
||||
if [ "$use_wsgi" != 'true' ]; then |
||||
echo "Do you want to daemonize this application using systemd? (you'll have to start it manually every login session if you choose no)" |
||||
read -p "Use Systemd? (Y/n) " use_systemd |
||||
[ -z "$use_systemd" ] && use_systemd='y' # if no input, assume yes |
||||
case ${use_systemd:0:1} in |
||||
y|Y|1 ) |
||||
use_systemd='true';; |
||||
* ) |
||||
use_systemd='false';; |
||||
esac |
||||
|
||||
if [ -z "$internal_port" ]; then |
||||
echo "Please specify an internal port for the built-in webserver. This port will only be used locally." |
||||
read -p "Port [5000]" internal_port |
||||
[ -z "$internal_port" ] && internal_port=5000 |
||||
fi |
||||
fi |
||||
|
||||
echo_header "Check if Apache2 is installed" |
||||
which apache2 >/dev/null 2>&1 && echo "Apache OK" || { echo "Apache2 doesn't seem te be installed. Please fix this before installing this application." && exit 1; } |
||||
|
||||
if [ "$use_wsgi" = 'true' ]; then |
||||
echo_header "Make sure mod-wsgi-py3 is installed" |
||||
apt-get install -y libapache2-mod-wsgi-py3 |
||||
fi |
||||
|
||||
echo_header "Copy over application files" |
||||
mkdir -vp "$install_dir" |
||||
cp -rv "$script_dir/$default_app_name/." "$install_dir" |
||||
sed -i "s+^app_name=.*+app_name='${flask_app_name}'+g" "$install_dir/run.sh" |
||||
|
||||
cp -v "$script_dir/$default_app_name/config_example.yml" "$install_dir/config.yml" |
||||
sed -i "s/^port =.*/port = $internal_port/g" "$install_dir/config.yml" |
||||
sed -i "s+^logfile :.*+logfile : $logging_dir/reports.log+g" "$install_dir/config.yml" |
||||
sed -i "s+^errorfile :.*+errorfile : $logging_dir/error.log+g" "$install_dir/config.yml" |
||||
|
||||
cp -v "$script_dir/bin/uninstall.sh" "$install_dir" |
||||
sed -i "s+^app_name=.*+app_name='${app_name}'+g" "$install_dir/uninstall.sh" |
||||
sed -i "s+^install_dir=.*+install_dir='${install_dir}'+g" "$install_dir/uninstall.sh" |
||||
|
||||
cp -v "$script_dir/version" "$install_dir" |
||||
cp -v "$script_dir/README.md" "$install_dir" |
||||
|
||||
|
||||
echo_header "Copy over and enable apache vhost" |
||||
if [ "$use_wsgi" = 'true' ]; then |
||||
cp -v "$script_dir/bin/$default_app_name-wsgi.conf" "/etc/apache2/sites-available/$app_name.conf" |
||||
sed -i "s/APPNAME/$app_name/g" "/etc/apache2/sites-available/$app_name.conf" |
||||
sed -i "s/USER/$app_name/g" "/etc/apache2/sites-available/$app_name.conf" |
||||
sed -i "s/GROUP/$app_name/g" "/etc/apache2/sites-available/$app_name.conf" |
||||
|
||||
ln -sfv "/etc/apache2/sites-available/$app_name.conf" "/etc/apache2/sites-enabled/$app_name.conf" |
||||
|
||||
echo_header "Installing wsgi-script" |
||||
mkdir -vp "/var/www/wsgi-scripts" |
||||
cp -v "$script_dir/bin/$default_app_name.wsgi" "/var/www/wsgi-scripts/app_name.wsgi" |
||||
sed -i "s+INSTALLDIR+$install_dir+g" "/var/www/wsgi-scripts/$app_name.wsgi" |
||||
sed -i "s/APPNAME/$flask_app_name/g" "/var/www/wsgi-scripts/$app_name.wsgi" |
||||
else |
||||
cp -v "$script_dir/bin/$default_app_name-proxy.conf" "/etc/apache2/sites-available/$app_name.conf" |
||||
sed -i "s/PORT/$internal_port/g" "/etc/apache2/sites-available/$app_name.conf" |
||||
|
||||
ln -sfv "/etc/apache2/sites-available/$app_name.conf" "/etc/apache2/sites-enabled/$app_name.conf" |
||||
fi |
||||
|
||||
|
||||
echo_header "Create $app_name user" |
||||
adduser --debug --system --home "$install_dir" --shell "/usr/sbin/nologin" --group --gecos "CSP violation report application" -q "$app_name" |
||||
usermod -a -G "$app_name" root # Add root to group to prevent warnings when editing config file |
||||
|
||||
|
||||
echo_header "Create logging directory" |
||||
mkdir -p "$logging_dir" |
||||
chown -v --from=root:root root:"$app_name" "$logging_dir" |
||||
chmod -v 770 "$logging_dir" |
||||
touch "$logging_dir/reports.log" |
||||
chown -v --from=root:root "$app_name":"$app_name" "$logging_dir/reports.log" |
||||
|
||||
|
||||
echo_header "Install Logrotate config" |
||||
cp -v "$script_dir/bin/logrotate-conf" "/etc/logrotate.d/$app_name" |
||||
sed -i "s/log-dir/$logging_dir/g" "/etc/logrotate.d/$app_name" |
||||
|
||||
|
||||
echo_header "Make sure python3 and virtualenv are installed" |
||||
python3 --version || apt-get install -y python3 |
||||
|
||||
# Testing to check if venv is installed does not work, venv command can respond to a versioncheck, and still not have neccesary libraries present. |
||||
apt-get install -y python3-venv |
||||
|
||||
|
||||
echo_header "Create virualenv" |
||||
[ -f "$install_dir/venv/bin/activate" ] || python3 -m venv "$install_dir/venv" |
||||
source "$install_dir/venv/bin/activate" |
||||
pip install setuptools wheel |
||||
pip install -r "$script_dir/$default_app_name/requirements.txt" |
||||
|
||||
python_version=`ls "$install_dir/venv/lib" | grep python3 | head -1` |
||||
echo "$install_dir/" > "$install_dir/venv/lib/$python_version/site-packages/$flask_app_name.pth" |
||||
[ "$use_wsgi" = 'true' ] && sed -i "s/PYTHON_VERSION/$python_version/g" "/var/www/wsgi-scripts/$default_app_name.wsgi" |
||||
|
||||
|
||||
echo_header "Give $app_name user ownership of application dir" |
||||
chown --recursive "$app_name":"$app_name" "$install_dir" |
||||
chown -v root:"$app_name" "$install_dir" |
||||
chmod -v 775 "$install_dir" |
||||
chmod -v 754 "$install_dir/run.sh" "$install_dir/runserver.py" |
||||
chmod -v 744 "$install_dir/uninstall.sh" |
||||
#chmod -v 660 "$install_dir/config.yml" |
||||
|
||||
|
||||
if [ "$use_wsgi" != 'true' ] && [ "$use_systemd" = 'true' ]; then |
||||
echo_header "Enable as systemd service" |
||||
cp "$script_dir/bin/$default_app_name.service" "/etc/systemd/system/$app_name.service" |
||||
sed -i "s+^ExecStart=.*+ExecStart=${install_dir}/${start_script}+g" "/etc/systemd/system/$app_name.service" |
||||
sed -i "s+^User=.*+User=${app_name}+g" "/etc/systemd/system/$app_name.service" |
||||
systemctl daemon-reload |
||||
systemctl enable "$app_name.service" |
||||
systemctl restart "$app_name.service" |
||||
systemctl status "$app_name.service" |
||||
fi |
||||
|
||||
|
||||
echo_header "$app_name is installed!" |
||||
|
||||
echo "If everything works, it is safe to remove this installation directory" |
||||
echo -e "\e[1;35mNow please review/edit /etc/apache2/sites-enabled/$app_name.conf, and then run 'systemctl restart apache2.service'\e[0m" |
||||
exit 0 |
@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
|
||||
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so |
||||
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so |
||||
|
||||
<VirtualHost *:80> |
||||
#ServerAdmin webmaster@localhost |
||||
#ServerName www.example.com |
||||
#ServerAlias example.com |
||||
|
||||
ErrorLog ${APACHE_LOG_DIR}/error.log |
||||
CustomLog ${APACHE_LOG_DIR}/access.log combined |
||||
|
||||
# Reverse Proxy definition |
||||
ProxyPass / http://127.0.0.1:PORT/ |
||||
ProxyPassReverse / http://127.0.0.1:PORT/ |
||||
|
||||
</VirtualHost> |
||||
|
||||
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet |
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so |
||||
|
||||
<VirtualHost *:80> |
||||
#ServerAdmin webmaster@localhost |
||||
#ServerName www.example.com |
||||
#ServerAlias example.com |
||||
|
||||
ErrorLog ${APACHE_LOG_DIR}/error.log |
||||
CustomLog ${APACHE_LOG_DIR}/access.log combined |
||||
|
||||
LogLevel info |
||||
|
||||
WSGIDaemonProcess APPNAME user=USER group=GROUP threads=5 |
||||
WSGIScriptAlias / /var/www/wsgi-scripts/APPNAME.wsgi |
||||
|
||||
<Directory /var/www/wsgi-scripts> |
||||
WSGIProcessGroup APPNAME |
||||
WSGIApplicationGroup %{GLOBAL} |
||||
|
||||
<IfVersion < 2.4> |
||||
Order allow,deny |
||||
Allow from all |
||||
</IfVersion> |
||||
<IfVersion >= 2.4> |
||||
Require all granted |
||||
</IfVersion> |
||||
</Directory> |
||||
|
||||
</VirtualHost> |
||||
|
||||
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet |
@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
|
||||
[Unit] |
||||
Description=Starts biscd, a light-weight ci-cd tool |
||||
# Require syslog.socket to make sure this doesn't start to soon after boot |
||||
Requires=syslog.socket |
||||
Documentation=https://git.sciuro.org/Burathar/biscd |
||||
StartLimitIntervalSec=10 |
||||
StartLimitBurst=3 |
||||
|
||||
[Service] |
||||
Type=simple |
||||
User=biscd |
||||
ExecStart=/opt/biscd/run.sh |
||||
Restart=always |
||||
RestartSec=1 |
||||
|
||||
[Install] |
||||
WantedBy=default.target |
||||
|
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
import site |
||||
site.addsitedir('INSTALLDIR/venv/lib/PYTHON_VERSION/site-packages') |
||||
#virtualenv = 'INSTALLDIR/venv/bin/activate' |
||||
#with open(virtualenv) as file_: |
||||
# exec(file_.read(), dict(__file__=virtualenv)) |
||||
|
||||
from APPNAME import app as application |
@ -0,0 +1,13 @@
@@ -0,0 +1,13 @@
|
||||
log-dir/info.log { |
||||
size 100k |
||||
rotate 2 |
||||
compress |
||||
missingok |
||||
} |
||||
|
||||
log-dir/error.log { |
||||
size 100k |
||||
rotate 2 |
||||
compress |
||||
missingok |
||||
} |
@ -0,0 +1,103 @@
@@ -0,0 +1,103 @@
|
||||
#! /bin/bash |
||||
|
||||
script_dir="$(dirname $(readlink -f $0))" |
||||
|
||||
app_name='biscd' |
||||
install_dir="/opt/$app_name" |
||||
logging_dir="/var/log/$app_name" |
||||
|
||||
systemd_service=`systemctl list-unit-files | cut -d ' ' -f 1 | grep -swcF "$app_name.service"` > 0 |
||||
|
||||
# exit when any command fails |
||||
set -e |
||||
|
||||
function help () { |
||||
echo "Usage: $0 [OPTIONS]" |
||||
echo " -f force uninstallation: Don't stop when something fails" |
||||
echo ' -l remove logfiles and logdirectory as well' |
||||
echo ' -h display this output.' |
||||
echo '' |
||||
echo "This script uninstalls $app_name. All application files will be removed," |
||||
echo 'as will the logrotate and apache config(section).' |
||||
echo 'Apache will be reloaded in this process.' |
||||
echo '' |
||||
echo 'For more info visit https://git.sciuro.org/Burathar/biscd' |
||||
exit 1 |
||||
} |
||||
|
||||
function echo_header () { |
||||
echo -e "\e[33m== $1 ==\e[0;m" |
||||
} |
||||
|
||||
while getopts 'flh' opt ; do |
||||
case "$opt" in |
||||
f) set +e; force='true';; |
||||
l) delete_logs='true';; |
||||
h) help ;; |
||||
esac |
||||
done |
||||
|
||||
# Make sure running as root |
||||
if [ `id -u` -ne 0 ]; then |
||||
echo 'Please run as root' |
||||
exit 1 |
||||
fi |
||||
|
||||
if [ "$force" != 'true' ]; then |
||||
read -p "Are you sure you want to delete $app_name? Apache will be reloaded during this process (y/N) " confirm_delete |
||||
[ -z "$confirm_delete" ] && confirm_delete='no' # if no input, assume no |
||||
case ${confirm_delete:0:1} in |
||||
n|N|0 ) |
||||
exit 0;; |
||||
esac |
||||
fi |
||||
|
||||
if [ "$delete_logs" != 'true' ]; then |
||||
read -p "Do you wish to delete any $app_name log files as well? (y/N) " delete_logs |
||||
[ -z "$delete_logs" ] && delete_logs='no' # if no input, assume no |
||||
case ${delete_logs:0:1} in |
||||
n|N|0 ) |
||||
delete_logs='false';; |
||||
*) |
||||
delete_logs='true';; |
||||
esac |
||||
fi |
||||
|
||||
echo_header "Removing Apache virtualhost" |
||||
rm -v "/etc/apache2/sites-enabled/$app_name.conf" |
||||
systemctl reload apache2.service |
||||
|
||||
|
||||
if [ "$systemd_service" -eq 1 ]; then |
||||
echo_header "Removing Systemd service" |
||||
systemctl stop "$app_name.service" |
||||
sleep 1s |
||||
systemctl disable "$app_name.service" |
||||
rm "/etc/systemd/system/$app_name.service" |
||||
systemctl daemon-reload |
||||
fi |
||||
|
||||
|
||||
echo_header "Removing $app_name user and group==" |
||||
deluser -q "$app_name" |
||||
delgroup -q "$app_name" && echo "group $app_name is removed, ignore previous warning" || true |
||||
|
||||
echo_header "Removing application files" |
||||
rm -v "/etc/logrotate.d/$app_name" |
||||
rm -v "/etc/apache2/sites-available/$app_name.conf" |
||||
rm -v "/var/www/wsgi-scripts/$app_name.wsgi" || true |
||||
rm -vd "/var/www/wsgi-scripts/" || true |
||||
rm -rf "$install_dir" && echo "removed '$install_dir'" |
||||
|
||||
if [ "$delete_logs" = 'true' ]; then |
||||
echo_header "Removing logfiles" |
||||
rm -vrf "$logging_dir" |
||||
fi |
||||
|
||||
echo_header "Remaining artifacts(feel free to remove these manually)" |
||||
dpkg -l | grep libapache2-mod-wsgi-py3 | awk '{print $2}' |
||||
echo python3-venv |
||||
|
||||
echo_header "$app_name is uninstalled!" |
||||
|
||||
exit 0 |
Loading…
Reference in new issue