Browse Source

Merge pull request #14063 from peter-stadler/etebase

[RFC] etebase: add package
lilik-openwrt-22.03
Rosen Penev 4 years ago
committed by GitHub
parent
commit
b4762c7e6f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 291 additions and 279 deletions
  1. +112
    -0
      net/etebase/Makefile
  2. +8
    -8
      net/etebase/files/81_setup-etebase
  3. +20
    -0
      net/etebase/files/etebase.locations
  4. +0
    -0
      net/etebase/files/uci.cfg
  5. +14
    -14
      net/etebase/files/uwsgi.ini
  6. +137
    -0
      net/etebase/files/uwsgi.init
  7. +0
    -108
      net/etesync-server/Makefile
  8. +0
    -13
      net/etesync-server/files/etesync.locations
  9. +0
    -136
      net/etesync-server/files/uwsgi.init

+ 112
- 0
net/etebase/Makefile View File

@ -0,0 +1,112 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=etebase
PKG_VERSION:=0.6.1
PKG_RELEASE:=1
PKG_SOURCE:=etebase-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/etesync/server/archive/v$(PKG_VERSION)
PKG_HASH:=4832c35fa1b46936bfde894a8c888989e9a37dd64ca588df22524825f3e568ec
PKG_LICENSE:=AGPL-3.0-only
PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=Peter Stadler <peter.stadler@student.uibk.ac.at>
PKG_BUILD_PARALLEL:=1
PYTHON3_PKG_BUILD:=0
PKG_UNPACK=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
include $(INCLUDE_DIR)/package.mk
include ../../lang/python/python3-package.mk
define Package/etebase
SECTION:=net
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
TITLE:=End-to-end encrypted backend
URL:=https://www.etebase.com/
DEPENDS:=+nginx-ssl +uwsgi +uwsgi-syslog-plugin +uwsgi-python3-plugin +python3-light \
+python3-asgiref +python3-cffi +python3-django-cors-headers +python3-django \
+python3-django-restframework +python3-drf-nested-routers +python3-msgpack \
+python3-pycparser +python3-pynacl +python3-pytz +python3-six +python3-sqlparse
# +psycopg2-binary would be needed for using postgres db.
USERID:=etebase=44312
endef
define Package/etebase/description
End-to-end encrypted backend
endef
Build/Compile:=:
define Py3Package/etebase/install
# OpenWrt specific:
$(INSTALL_DIR) $(1)/etc/uci-defaults/
$(CP) ./files/81_setup-etebase $(1)/etc/uci-defaults/
$(INSTALL_DIR) $(1)/etc/init.d/
$(INSTALL_BIN) ./files/uwsgi.init $(1)/etc/init.d/etebase
$(INSTALL_DIR) $(1)/etc/config/
$(INSTALL_CONF) ./files/uci.cfg $(1)/etc/config/etebase
# Server configuration:
$(INSTALL_DIR) $(1)/etc/nginx/conf.d/
$(INSTALL_CONF) ./files/etebase.locations $(1)/etc/nginx/conf.d/
$(INSTALL_DIR) $(1)/etc/uwsgi/vassals/
$(INSTALL_CONF) ./files/uwsgi.ini $(1)/etc/uwsgi/vassals/etebase.available
#init links etebase.available /var/etc/etebase/uwsgi.ini:
$(LN) /var/etc/etebase/uwsgi.ini $(1)/etc/uwsgi/vassals/etebase.ini
# Upstream application:
$(INSTALL_DIR) $(1)/usr/share/etebase/
$(INSTALL_BIN) $(PKG_BUILD_DIR)/manage.py $(1)/usr/share/etebase/
#init creates /var/etc/etebase/server.ini from uci.cfg:
$(LN) /var/etc/etebase/server.ini $(1)/usr/share/etebase/etebase-server.ini
$(INSTALL_DIR) $(1)/usr/share/etebase/django_etebase/
$(CP) $(PKG_BUILD_DIR)/django_etebase/* $(1)/usr/share/etebase/django_etebase/
$(INSTALL_DIR) $(1)/usr/share/etebase/etebase_server/
$(CP) $(PKG_BUILD_DIR)/etebase_server/* $(1)/usr/share/etebase/etebase_server/
$(INSTALL_DIR) $(1)/usr/share/etebase/myauth/
$(CP) $(PKG_BUILD_DIR)/myauth/* $(1)/usr/share/etebase/myauth/
$(INSTALL_DIR) $(1)/usr/share/etebase/templates/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/templates/* $(1)/usr/share/etebase/templates/
$(INSTALL_DIR) $(1)/www/etebase/static/
endef
Py3Package/etebase/filespec:=
define Package/etebase/postrm
#!/bin/sh
[ -n "$${IPKG_INSTROOT}" ] && exit 0
cd /usr/share/etebase/ && rmdir */*/*/*/* */*/*/* */*/* */* * 2>/dev/null
[ "$${PKG_UPGRADE}" = "1" ] && exit 0
rm -r /www/etebase/static
rmdir --ignore-fail-on-non-empty /www/etebase /var/etc/etebase
exit 0
endef
define Package/etebase/conffiles
/etc/config/etebase
/etc/nginx/conf.d/etebase.locations
/etc/uwsgi/vassals/etebase.available
endef
$(eval $(call Py3Package,etebase))
$(eval $(call BuildPackage,etebase))
$(eval $(call BuildPackage,etebase-src))

net/etesync-server/files/81_setup-etesync-server → net/etebase/files/81_setup-etebase View File


+ 20
- 0
net/etebase/files/etebase.locations View File

@ -0,0 +1,20 @@
location /etebase/static {
access_log off;
error_log /dev/null;
expires 1y;
try_files $uri $uri/ =404;
}
location /etebase/media {
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;
}

net/etesync-server/files/uci.cfg → net/etebase/files/uci.cfg View File


net/etesync-server/files/uwsgi.ini → net/etebase/files/uwsgi.ini View File


+ 137
- 0
net/etebase/files/uwsgi.init View File

@ -0,0 +1,137 @@
#!/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: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() {
cd /usr/share/etebase/ >/dev/null || return
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
}

+ 0
- 108
net/etesync-server/Makefile View File

@ -1,108 +0,0 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=etesync-server
PKG_VERSION:=0.3.0
PKG_RELEASE:=3
PKG_SOURCE:=etesync-server-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/etesync/server/archive/v$(PKG_VERSION)
PKG_HASH:=d0728effa898a8b7afb4ce7439e0d0fd46bc819008925f21788d7e113435b579
PKG_LICENSE:=AGPL-3.0-only
PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=Peter Stadler <peter.stadler@student.uibk.ac.at>
PKG_BUILD_PARALLEL:=1
PYTHON3_PKG_BUILD:=0
PKG_UNPACK=$(HOST_TAR) -C $(PKG_BUILD_DIR) --strip-components=1 -xzf $(DL_DIR)/$(PKG_SOURCE)
include $(INCLUDE_DIR)/package.mk
include ../../lang/python/python3-package.mk
define Package/etesync-server
SECTION:=net
CATEGORY:=Network
SUBMENU:=Web Servers/Proxies
TITLE:=End-to-End Encrypted Secure Data Sync
URL:=https://www.etesync.com/
DEPENDS:=+nginx-ssl +python3-light +python3-django \
+python3-django-restframework +python3-drf-nested-routers \
+python3-django-cors-headers +python3-django-etesync-journal \
+uwsgi +uwsgi-python3-plugin +uwsgi-syslog-plugin
USERID:=etesync=44312
endef
define Package/etesync-server/description
End-to-End Encrypted Secure Data Sync
endef
Build/Compile:=:
define Py3Package/etesync-server/install
$(INSTALL_DIR) $(1)/www/etesync/static/
$(INSTALL_DIR) $(1)/etc/uci-defaults/
$(CP) ./files/81_setup-etesync-server $(1)/etc/uci-defaults/
$(INSTALL_DIR) $(1)/etc/nginx/conf.d/
$(INSTALL_CONF) ./files/etesync.locations $(1)/etc/nginx/conf.d/
$(INSTALL_DIR) $(1)/etc/config/
$(INSTALL_CONF) ./files/uci.cfg $(1)/etc/config/etesync_server
$(INSTALL_DIR) $(1)/usr/share/etesync-server/templates/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/templates/* \
$(1)/usr/share/etesync-server/templates/
$(INSTALL_DIR) $(1)/usr/share/etesync-server/etesync_server/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/manage.py \
$(1)/usr/share/etesync-server/
$(INSTALL_DATA) $(PKG_BUILD_DIR)/etesync_server/* \
$(1)/usr/share/etesync-server/etesync_server/
$(LN) /var/etc/etesync-server/etesync-server.ini \
$(1)/usr/share/etesync-server/
#init creates /var/etc/etesync-server/etesync-server.ini from uci.cfg
$(INSTALL_DIR) $(1)/etc/uwsgi/vassals/
$(INSTALL_CONF) ./files/uwsgi.ini \
$(1)/etc/uwsgi/vassals/etesync-server.available
$(LN) /var/etc/etesync-server/uwsgi.ini \
$(1)/etc/uwsgi/vassals/etesync-server.ini
#init links etesync-server.available /var/etc/etesync-server/uwsgi.ini
$(INSTALL_DIR) $(1)/etc/init.d/
$(INSTALL_BIN) ./files/uwsgi.init $(1)/etc/init.d/etesync-server
endef
Py3Package/etesync-server/filespec:=
define Package/etesync-server/postrm
#!/bin/sh
[ -n "$${IPKG_INSTROOT}" ] && exit 0
rmdir --ignore-fail-on-non-empty /usr/share/etesync-server/etesync_server
[ "$${PKG_UPGRADE}" = "1" ] && exit 0
rm -r /www/etesync/static
rmdir /www/etesync
exit 0
endef
define Package/etesync-server/conffiles
/etc/config/etesync_server
/etc/nginx/conf.d/etesync.locations
/etc/uwsgi/vassals/etesync-server.available
endef
$(eval $(call Py3Package,etesync-server))
$(eval $(call BuildPackage,etesync-server))
$(eval $(call BuildPackage,etesync-server-src))

+ 0
- 13
net/etesync-server/files/etesync.locations View File

@ -1,13 +0,0 @@
location /etesync/static {
access_log off;
error_log /dev/null;
expires 1y;
try_files $uri $uri/ =404;
}
location /etesync {
access_log off;
error_log /dev/null;
include uwsgi_params;
uwsgi_pass unix:///var/run/etesync-server.socket;
}

+ 0
- 136
net/etesync-server/files/uwsgi.init View File

@ -1,136 +0,0 @@
#!/bin/sh /etc/rc.common
START=82
USE_PROCD=1
ETESYNC_INI="/var/etc/etesync-server/etesync-server.ini"
etesync_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
}
etesync_validate_global() {
cd /usr/share/etesync-server/ >/dev/null || return
uci_load_validate etesync_server django "global" "$1" \
'secret_file:file:secret.txt' \
'static_url:string:/etesync/static' \
'language_code:string:en-us' \
'time_zone:string:UTC' \
'debug:bool:false' \
;
}
etesync_print_global() {
printf "\n[global]\n"
echo "secret_file = ${secret_file}"
echo "static_root = /www/etesync/static" #sic!
echo "static_url = ${static_url}"
echo "language_code = ${language_code}"
echo "time_zone = ${time_zone}"
echo "debug = ${debug}"
}
etesync_validate_allowed_hosts() {
uci_load_validate etesync_server django "allowed_hosts" "$1" \
'uci_allow_all_ips_of:network' \
'allowed_host:host' \
;
}
etesync_print_allowed_hosts() {
printf "\n[allowed_hosts]\n"
local iface
for iface in ${uci_allow_all_ips_of}
do etesync_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
}
etesync_validate_database() {
cd /usr/share/etesync-server/ >/dev/null || return
uci_load_validate etesync_server django "database" "$1" \
'engine:hostname:django.db.backends.sqlite3' \
'name:file:db.sqlite3' \
;
}
etesync_print_database() {
printf "\n[database]\n"
echo "engine = ${engine}"
echo "name = ${name}"
}
etesync_init() { # This must print ONLY configuration lines:
echo "; This file is re-created from /etc/config/etesync_server "
etesync_validate_global etesync_print_global
etesync_validate_allowed_hosts etesync_print_allowed_hosts
etesync_validate_database etesync_print_database
} >"${ETESYNC_INI}"
start_service() {
mkdir -p /var/etc/etesync-server/
etesync_init
logger -p 'daemon.info' -t 'etesync-server_init' 'starting ...'
ln -sf /etc/uwsgi/vassals/etesync-server.available \
/var/etc/etesync-server/uwsgi.ini
}
stop_service() {
rm -f /var/etc/etesync-server/uwsgi.ini "${ETESYNC_INI}"
}
reload_service() {
etesync_init
logger -p 'daemon.info' -t 'etesync-server_init' 'reloading ...'
kill -SIGHUP "$(cat "/var/etc/etesync-server/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
etesync_validate_global "$@"
etesync_validate_allowed_hosts "$@"
etesync_validate_database "$@"
procd_close_validate
config_load etesync_server
config_list_foreach "allowed_hosts" "uci_allow_all_ips_of" \
procd_add_reload_interface_trigger
procd_add_reload_trigger etesync_server
}

Loading…
Cancel
Save