mirror of
https://github.com/novatiq/packages.git
synced 2026-04-30 15:38:40 +01:00
etesync-server: rename to etebase
Signed-off-by: Peter Stadler <peter.stadler@student.uibk.ac.at>
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
#!/bin/sh
|
||||
|
||||
cd /usr/share/etebase || exit 1
|
||||
|
||||
python3 manage.pyc migrate --noinput || exit 1
|
||||
|
||||
# setup minimal ini for collectstatic:
|
||||
mkdir -p /var/etc/etebase/ || exit 1
|
||||
printf "[global]\nSTATIC_ROOT=/www/etebase/static" >etesync-server.ini || exit 1
|
||||
python3 manage.pyc collectstatic --noinput || exit 1
|
||||
|
||||
ETEBASE_HAS_USER_PY3CMD="import sqlite3
|
||||
c = sqlite3.connect('db.sqlite3').cursor()
|
||||
c.execute('select * from auth_user')
|
||||
if c.fetchone()==None: print('0')
|
||||
else: print('1')"
|
||||
|
||||
echo
|
||||
|
||||
if [ "$(python3 -c "$ETEBASE_HAS_USER_PY3CMD" || exit 1)" = "0" ]
|
||||
then
|
||||
echo "===== First, create a superuser of the Webinterface by ====="
|
||||
[ -t 0 ] && python3 manage.pyc createsuperuser ||
|
||||
echo "===== python3 $(pwd)/manage.pyc createsuperuser ====="
|
||||
fi
|
||||
|
||||
chown -Rh etebase:nogroup . /www/etebase/ || exit 1
|
||||
|
||||
[ -x /etc/init.d/nginx ] || exit 1
|
||||
|
||||
/etc/init.d/nginx running && /etc/init.d/nginx reload || /etc/init.d/nginx start
|
||||
|
||||
router_ip() {
|
||||
local ifstat="$(ifstatus "lan")"
|
||||
|
||||
for ip in $(echo "${ifstat}" | jsonfilter -e '@["ipv4-address"].*.address')
|
||||
do echo "${ip}" && return
|
||||
done
|
||||
|
||||
for ip in $(echo "${ifstat}" | jsonfilter -e '@["ipv6-address"].*.address')
|
||||
do echo "[${ip}]" && return
|
||||
done
|
||||
|
||||
for ip in $(echo "${ifstat}" | \
|
||||
jsonfilter -e '@["ipv6-prefix-assignment"].*["local-address"].address')
|
||||
do echo "[${ip}]" && return
|
||||
done
|
||||
|
||||
echo '$ROUTER'
|
||||
}
|
||||
|
||||
echo "===== You can add users by https://$(router_ip)/etebase/admin/login ====="
|
||||
|
||||
exit 0
|
||||
@@ -0,0 +1,13 @@
|
||||
location /etebase/static {
|
||||
access_log off;
|
||||
error_log /dev/null;
|
||||
expires 1y;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
location /etebase {
|
||||
access_log off;
|
||||
error_log /dev/null;
|
||||
include uwsgi_params;
|
||||
uwsgi_pass unix:///var/run/etebase.socket;
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
|
||||
config django 'global'
|
||||
option static_url 'static/'
|
||||
option debug 'false'
|
||||
|
||||
config django 'allowed_hosts'
|
||||
list uci_allow_all_ips_of 'loopback'
|
||||
list uci_allow_all_ips_of 'lan'
|
||||
# list allowed_host "example.com"
|
||||
|
||||
config django 'database'
|
||||
option engine 'django.db.backends.sqlite3'
|
||||
option name 'db.sqlite3'
|
||||
@@ -0,0 +1,48 @@
|
||||
; The script /etc/init.d/etebase creates the second symlink in the
|
||||
; following chain when starting (and deletes it when stopping the service):
|
||||
; /etc/uwsgi/vassals/etebase.ini (letting the emperor load it on-demand)
|
||||
; -> /var/etc/etebase/uwsgi.ini (in RAM)
|
||||
; -> /etc/uwsgi/vassals/etebase.available (this file)
|
||||
|
||||
[uwsgi]
|
||||
strict = true
|
||||
|
||||
plugin = python
|
||||
manage-script-name = true
|
||||
chdir = /usr/share/etebase
|
||||
mount = /etebase=etesync_server.wsgi:application
|
||||
pidfile = /var/etc/etebase/master.pid
|
||||
|
||||
enable-threads = true
|
||||
thunder-lock = true
|
||||
post-buffering = 8192
|
||||
harakiri = 60
|
||||
lazy-apps = true
|
||||
master = true
|
||||
idle = 600
|
||||
|
||||
plugin = syslog
|
||||
; disable-logging only affects req-logger:
|
||||
disable-logging = true
|
||||
log-format=%(method) %(uri) => return %(status) (%(rsize) bytes in %(msecs) ms)
|
||||
req-logger = syslog:etebase_req
|
||||
|
||||
logger = etebase syslog:etebase_main
|
||||
ignore-sigpipe = true
|
||||
ignore-write-errors = true
|
||||
|
||||
if-env = UWSGI_EMPEROR_FD
|
||||
; the regular expression leaves for successful de/activation only one line each:
|
||||
log-route = etebase ^(?!... Starting uWSGI |compiled with version: |os: Linux|nodename: |machine: |clock source: |pcre jit |detected number of CPU cores: |current working directory: |writing pidfile to |detected binary path: |chdir.. to |your processes number limit is |your memory page size is |detected max file descriptor number: |lock engine: |thunder lock: |uwsgi socket |setgid.. to |setuid.. to |Python version: |Python main interpreter initialized at |python threads support |your server socket listen backlog is limited to |your mercy for graceful operations on workers is |mapped |... Operational MODE: |... uWSGI is running in multiple interpreter mode ...|spawned uWSGI worker |mounting |WSGI app |announcing my loyalty to the Emperor...|workers have been inactive for more than |SIGINT/SIGQUIT received...killing workers...|worker |goodbye to uWSGI.)
|
||||
end-if =
|
||||
|
||||
if-not-env = UWSGI_EMPEROR_FD
|
||||
log-route = etebase .*
|
||||
vacuum = true
|
||||
socket = /var/run/etebase.socket
|
||||
end-if =
|
||||
|
||||
chmod-socket = 660
|
||||
chown-socket = etebase:nogroup
|
||||
uid = etebase
|
||||
gid = nogroup
|
||||
@@ -0,0 +1,135 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=82
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
ETEBASE_INI="/var/etc/etebase/server.ini"
|
||||
|
||||
|
||||
etebase_print_uci_allow_all_ips_of() {
|
||||
local ifstat="$(ifstatus "$1")"
|
||||
|
||||
for ip in $(echo "${ifstat}" | jsonfilter -e '@["ipv4-address"].*.address')
|
||||
do echo "allowed_host_${ip//[^0-9]/_} = ${ip}"
|
||||
done
|
||||
|
||||
for ip in $(echo "${ifstat}" | jsonfilter -e '@["ipv6-address"].*.address')
|
||||
do echo "allowed_host_${ip//[^0-9A-Fa-f]/_} = [${ip}]"
|
||||
done
|
||||
|
||||
for ip in $(echo "${ifstat}" | \
|
||||
jsonfilter -e '@["ipv6-prefix-assignment"].*["local-address"].address')
|
||||
do echo "allowed_host_${ip//[^0-9A-Fa-f]/_} = [${ip}]"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
etebase_validate_global() {
|
||||
cd /usr/share/etebase/ >/dev/null || return
|
||||
|
||||
uci_load_validate etebase django "global" "$1" \
|
||||
'secret_file:file:secret.txt' \
|
||||
'static_url:string:/etebase/static' \
|
||||
'language_code:string:en-us' \
|
||||
'time_zone:string:UTC' \
|
||||
'debug:bool:false' \
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
etebase_print_global() {
|
||||
printf "\n[global]\n"
|
||||
|
||||
echo "secret_file = ${secret_file}"
|
||||
echo "static_root = /www/etebase/static" #sic!
|
||||
echo "static_url = ${static_url}"
|
||||
echo "language_code = ${language_code}"
|
||||
echo "time_zone = ${time_zone}"
|
||||
echo "debug = ${debug}"
|
||||
}
|
||||
|
||||
|
||||
etebase_validate_allowed_hosts() {
|
||||
uci_load_validate etebase django "allowed_hosts" "$1" \
|
||||
'uci_allow_all_ips_of:network' \
|
||||
'allowed_host:host' \
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
etebase_print_allowed_hosts() {
|
||||
printf "\n[allowed_hosts]\n"
|
||||
|
||||
local iface
|
||||
for iface in ${uci_allow_all_ips_of}
|
||||
do etebase_print_uci_allow_all_ips_of "${iface}"
|
||||
done
|
||||
|
||||
local host
|
||||
for host in ${allowed_host}
|
||||
do echo "allowed_host_${host//[^0-9A-Za-z]/_} = ${host}"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
etebase_validate_database() {
|
||||
cd /usr/share/etebase/ >/dev/null || return
|
||||
|
||||
uci_load_validate etebase django "database" "$1" \
|
||||
'engine:hostname:django.db.backends.sqlite3' \
|
||||
'name:file:db.sqlite3' \
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
etebase_print_database() {
|
||||
printf "\n[database]\n"
|
||||
echo "engine = ${engine}"
|
||||
echo "name = ${name}"
|
||||
}
|
||||
|
||||
|
||||
etebase_init() { # This must print ONLY configuration lines:
|
||||
echo "; This file is re-created from /etc/config/etebase "
|
||||
etebase_validate_global etebase_print_global
|
||||
etebase_validate_allowed_hosts etebase_print_allowed_hosts
|
||||
etebase_validate_database etebase_print_database
|
||||
} >"${ETEBASE_INI}"
|
||||
|
||||
|
||||
start_service() {
|
||||
mkdir -p /var/etc/etebase/
|
||||
|
||||
etebase_init
|
||||
|
||||
logger -p 'daemon.info' -t 'etebase_init' 'starting ...'
|
||||
ln -sf /etc/uwsgi/vassals/etebase.available /var/etc/etebase/uwsgi.ini
|
||||
}
|
||||
|
||||
|
||||
stop_service() {
|
||||
rm -f /var/etc/etebase/uwsgi.ini "${ETEBASE_INI}"
|
||||
}
|
||||
|
||||
|
||||
reload_service() {
|
||||
etebase_init
|
||||
|
||||
logger -p 'daemon.info' -t 'etebase_init' 'reloading ...'
|
||||
kill -SIGHUP "$(cat "/var/etc/etebase/master.pid")" 2>/dev/null
|
||||
#if the server is in on-demand mode, the ini files are reloaded then, too.
|
||||
}
|
||||
|
||||
|
||||
service_triggers() {
|
||||
procd_open_validate
|
||||
etebase_validate_global "$@"
|
||||
etebase_validate_allowed_hosts "$@"
|
||||
etebase_validate_database "$@"
|
||||
procd_close_validate
|
||||
|
||||
config_load etebase
|
||||
config_list_foreach "allowed_hosts" "uci_allow_all_ips_of" procd_add_reload_interface_trigger
|
||||
procd_add_reload_trigger etebase
|
||||
}
|
||||
Reference in New Issue
Block a user