commit 77c332040f8f7dbaeb09a1fff2e20016d4084ed9 Author: bel Date: Tue Sep 14 06:41:25 2021 -0600 archive diff --git a/synapse-matrix/Dockerfile b/synapse-matrix/Dockerfile new file mode 100755 index 0000000..182ac63 --- /dev/null +++ b/synapse-matrix/Dockerfile @@ -0,0 +1,52 @@ +### BUILDER +FROM ubuntu:18.10 as builder +RUN apt -y update \ + && apt -y install gcc +COPY ./pause /pause +RUN cd /pause && gcc ./main.c -o pauser + +### RUNNER +FROM ubuntu:18.10 + +COPY --from=builder /pause/pauser /pauser + +### POSTGRES +RUN groupadd postgres && useradd -d /home/postgres -ms /bin/bash -g postgres -G sudo postgres +RUN apt -y update \ + && apt -y install \ + curl \ + rsync \ + cron \ + postgresql postgresql-contrib \ + && mkdir -p /mnt/save +USER postgres +RUN service postgresql start && sleep 10 \ + && psql --command "CREATE USER bel WITH SUPERUSER PASSWORD 'letme123in';" \ + && createdb -O bel letme123in \ + && psql --command "CREATE DATABASE db;" \ + && psql --command "GRANT ALL PRIVILEGES ON DATABASE db TO bel;" \ + && service postgresql stop && sleep 10 + +ENV DATABASE_URL=postgres://bel:letme123in@localhost/db?sslmode=disable +USER root + +### Synapse/matrix +RUN wget -qO - https://matrix.org/packages/debian/repo-key.asc \ + | apt-key add - \ + && add-apt-repository https://matrix.org/packages/debian/ \ + && apt install -y matrix-synapse + +### CRON BACKUPS +RUN true \ + && echo 'service postgresql stop && sleep 5 && b=$(date +%Y%m%d%H) && mkdir -p /mnt/save/$b && rsync -avzP --delete /var/lib/postgresql/10/main/ /mnt/save/$b/ && service postgresql start' > /backup.sh \ + && echo 'service postgresql stop && sleep 5 && b=$(find /mnt/save -mindepth 1 -maxdepth 1 | sort | tail -n 1); if [ -n "$b" ]; then rsync -avzP --delete "${b%/}/" /var/lib/postgresql/10/main/; fi && chown -R postgres /var/lib/postgresql && chmod -R 0700 /var/lib/postgresql && service postgresql start;' > /restore.sh \ + && echo '0 4,8,12,16,20 * * * bash /backup.sh >> /var/log/cronj.log 2>&1' > /etc/cron.d/backups \ + && echo '' >> /etc/cron.d/backups \ + && chmod 0644 /etc/cron.d/backups \ + && touch /var/log/cronj.log + +ENTRYPOINT \ + bash /restore.sh \ + && service postgresql start \ + && sleep 10 \ + && miniflux & exec /pauser diff --git a/synapse-matrix/miniflux.dockerfile b/synapse-matrix/miniflux.dockerfile new file mode 100755 index 0000000..407e49b --- /dev/null +++ b/synapse-matrix/miniflux.dockerfile @@ -0,0 +1,57 @@ +FROM ubuntu:18.10 as builder +RUN apt -y update \ + && apt -y install gcc +COPY ./pause /pause +RUN cd /pause && gcc ./main.c -o pauser + +FROM ubuntu:18.10 +RUN groupadd postgres && useradd -d /home/postgres -ms /bin/bash -g postgres -G sudo postgres +RUN apt -y update \ + && apt -y install \ + curl \ + rsync \ + cron \ + postgresql postgresql-contrib \ + && curl -L \ + https://github.com/miniflux/miniflux/releases/download/2.0.12/miniflux_2.0.12_amd64.deb \ + > /miniflux.deb \ + && dpkg -i /miniflux.deb \ + && mkdir -p /mnt/save +USER postgres +RUN service postgresql start && sleep 10 \ + && psql --command "CREATE USER mini WITH SUPERUSER PASSWORD 'pwd';" \ + && createdb -O mini pwd \ + && psql --command "CREATE DATABASE miniflux;" \ + && psql --command "GRANT ALL PRIVILEGES ON DATABASE miniflux TO mini;" \ + && service postgresql stop && sleep 10 + +ENV DATABASE_URL=postgres://mini:pwd@localhost/miniflux?sslmode=disable +ENV LISTEN_ADDR=:8032 +ENV RUN_MIGRATIONS=1 +ENV CREATE_ADMIN=1 +ENV ADMIN_USERNAME=username +ENV ADMIN_PASSWORD=password + +ENV RUN_MIGRATIONS=0 +ENV CREATE_ADMIN=0 + +COPY --from=builder /pause/pauser /pauser + +USER root +### CRON BACKUPS +RUN true \ + && echo 'service postgresql stop && sleep 5 && b=$(date +%Y%m%d%H) && mkdir -p /mnt/save/$b && rsync -avzP --delete /var/lib/postgresql/10/main/ /mnt/save/$b/ && service postgresql start' > /backup.sh \ + && echo 'service postgresql stop && sleep 5 && b=$(find /mnt/save -mindepth 1 -maxdepth 1 | sort | tail -n 1); if [ -n "$b" ]; then rsync -avzP --delete "${b%/}/" /var/lib/postgresql/10/main/; fi && chown -R postgres /var/lib/postgresql && chmod -R 0700 /var/lib/postgresql && service postgresql start;' > /restore.sh \ + && echo '0 4,8,12,16,20 * * * bash /backup.sh >> /var/log/cronj.log 2>&1' > /etc/cron.d/backups \ + && echo '' >> /etc/cron.d/backups \ + && chmod 0644 /etc/cron.d/backups \ + && touch /var/log/cronj.log + +ENTRYPOINT \ + bash /restore.sh \ + && service postgresql start \ + && sleep 10 \ + && miniflux -migrate \ + && miniflux -create-admin \ + && miniflux \ + & exec /pauser diff --git a/synapse-matrix/pause/main.c b/synapse-matrix/pause/main.c new file mode 100755 index 0000000..663dff2 --- /dev/null +++ b/synapse-matrix/pause/main.c @@ -0,0 +1,20 @@ +#include +#include +#include + +int main() { + int stat; + int sig; + sigset_t set; + sigemptyset(&set); + printf("add signal SIGINT: %i\n", sigaddset(&set, SIGINT)); + printf("add signal SIGKILL: %i\n", sigaddset(&set, SIGKILL)); + printf("add signal SIGTERM: %i\n", sigaddset(&set, SIGTERM)); + sigprocmask(SIG_BLOCK, &set, NULL); + printf("Waiting...\n"); + stat = sigwait(&set, &sig); + printf("Wait complete: %i (%i)\n", sig, stat); + printf("Stopped postgres: %i\n", system("service postgresql stop && sleep 5")); + printf("Saved postgres: %i\n", system("bash /backup.sh")); + return 0; +} diff --git a/synapse-matrix/riot.sh b/synapse-matrix/riot.sh new file mode 100755 index 0000000..8a47089 --- /dev/null +++ b/synapse-matrix/riot.sh @@ -0,0 +1,9 @@ +#! /bin/bash + +img="avhost/docker-matrix-riot:v1.0.0" + +docker run \ + --rm -it \ + -v $(pwd)/riot:/data \ + -p 8765:8765 \ + $img diff --git a/synapse-matrix/synapse.sh b/synapse-matrix/synapse.sh new file mode 100755 index 0000000..8287e44 --- /dev/null +++ b/synapse-matrix/synapse.sh @@ -0,0 +1,17 @@ +#! /bin/bash + +img="avhost/docker-matrix:v0.34.1.1" + +docker pull $img + +docker run -v $(pwd)/synapse:/data --rm -it -e SERVER_NAME=localhost -e REPORT_STATS=no $img generate + +sudo chmod 777 synapse/homeserver.yaml +f="$(mktemp)" +sed 's/enable_registration:.*/enable_registration: True/' synapse/homeserver.yaml > "$f" && sudo mv "$f" synapse/homeserver.yaml + +docker run --rm -it \ + -p 8443:8443 \ + -p 8008:8008 \ + -p 3478:3478 \ + -v $(pwd)/synapse:/data $img start diff --git a/synapse-matrix/template.dockerfile b/synapse-matrix/template.dockerfile new file mode 100755 index 0000000..19f1479 --- /dev/null +++ b/synapse-matrix/template.dockerfile @@ -0,0 +1,42 @@ +FROM ubuntu:18.10 as builder +RUN apt -y update \ + && apt -y install gcc +COPY ./pause /pause +RUN cd /pause && gcc ./main.c -o pauser + +FROM ubuntu:18.10 +RUN groupadd postgres && useradd -d /home/postgres -ms /bin/bash -g postgres -G sudo postgres +RUN apt -y update \ + && apt -y install \ + curl \ + rsync \ + cron \ + postgresql postgresql-contrib \ + && mkdir -p /mnt/save +USER postgres +RUN service postgresql start && sleep 10 \ + && psql --command "CREATE USER bel WITH SUPERUSER PASSWORD 'letme123in';" \ + && createdb -O bel letme123in \ + && psql --command "CREATE DATABASE db;" \ + && psql --command "GRANT ALL PRIVILEGES ON DATABASE db TO bel;" \ + && service postgresql stop && sleep 10 + +ENV DATABASE_URL=postgres://bel:letme123in@localhost/db?sslmode=disable + +COPY --from=builder /pause/pauser /pauser + +USER root +### CRON BACKUPS +RUN true \ + && echo 'service postgresql stop && sleep 5 && b=$(date +%Y%m%d%H) && mkdir -p /mnt/save/$b && rsync -avzP --delete /var/lib/postgresql/10/main/ /mnt/save/$b/ && service postgresql start' > /backup.sh \ + && echo 'service postgresql stop && sleep 5 && b=$(find /mnt/save -mindepth 1 -maxdepth 1 | sort | tail -n 1); if [ -n "$b" ]; then rsync -avzP --delete "${b%/}/" /var/lib/postgresql/10/main/; fi && chown -R postgres /var/lib/postgresql && chmod -R 0700 /var/lib/postgresql && service postgresql start;' > /restore.sh \ + && echo '0 4,8,12,16,20 * * * bash /backup.sh >> /var/log/cronj.log 2>&1' > /etc/cron.d/backups \ + && echo '' >> /etc/cron.d/backups \ + && chmod 0644 /etc/cron.d/backups \ + && touch /var/log/cronj.log + +ENTRYPOINT \ + bash /restore.sh \ + && service postgresql start \ + && sleep 10 \ + && miniflux & exec /pauser diff --git a/synapse-riot-discbridge/.gitmodules b/synapse-riot-discbridge/.gitmodules new file mode 100755 index 0000000..bdec5c6 --- /dev/null +++ b/synapse-riot-discbridge/.gitmodules @@ -0,0 +1,9 @@ +[submodule "docker-matrix"] + path = docker-matrix + url = https://github.com/AVENTER-UG/docker-matrix.git +[submodule "docker-matrix-riot"] + path = docker-matrix-riot + url = https://github.com/AVENTER-UG/docker-matrix-riot.git +[submodule "matrix-appservice-discord"] + path = matrix-appservice-discord + url = https://github.com/Half-Shot/matrix-appservice-discord.git diff --git a/synapse-riot-discbridge/README.md b/synapse-riot-discbridge/README.md new file mode 100755 index 0000000..199ca5c --- /dev/null +++ b/synapse-riot-discbridge/README.md @@ -0,0 +1,3 @@ +bash ./build.sh + +register with http://localhost:8008 or maybe 8448, http://localhost:3478 diff --git a/synapse-riot-discbridge/build.sh b/synapse-riot-discbridge/build.sh new file mode 100755 index 0000000..db53a20 --- /dev/null +++ b/synapse-riot-discbridge/build.sh @@ -0,0 +1,125 @@ +#! /bin/bash + +set -e +set -u + +VERSION=v0.0 +SYN_HTTP_PORT=8008 +SYN_HTTPS_PORT=8448 +DISC_PORT=9006 +RIOT_PORT=8889 +DOMAIN=localhost + +function main() { + cd "$(dirname "${BASH_SOURCE[0]}")" + setup_modules + build_modules | while read -r line; do + echo EVAL: $line + eval "$line" + done + run_modules +} + +function setup_modules() { + git submodule update + for i in $(cat ./.gitmodules | grep path | awk '{print $NF}'); do + pushd "./${i}" + echo SETUP $(basename "$i") + checkout_latest_tag + popd + done +} + +function checkout_latest_tag() { + git fetch --tags + local tag="$(git tag | sort | tail -n 1)" + git checkout $tag +} + +function build_modules() { + ( docker network create riot-matrix-net || true ) >&2 + for i in $(cat ./.gitmodules | grep path | awk '{print $NF}' | sed 's/docker-matrix-riot/docker-matrix-riot-ptt/' ); do + pushd "./${i}" >&2 + echo BUILD $(basename "$i") >&2 + build_module "$(basename "$i")" | tail -n 1 + popd >&2 + done +} + +function build_module() { + local basename="$1" + local img="bel/$basename:$VERSION" + local mnt="$(dirname "$(pwd)")/mnt/$basename" + local pre=() + local post=() + local run="" + local f=$(mktemp) + local g=$(mktemp) + case "$basename" in + docker-matrix ) + run="-p $SYN_HTTPS_PORT:$SYN_HTTPS_PORT -p $SYN_HTTP_PORT:$SYN_HTTP_PORT -p 3478:3478 $img start" + post+=("docker run --rm -i -e SERVER_NAME=$DOMAIN -e REPORT_STATS=no -v $mnt:/data $img generate") + post+=("sudo cp $mnt/homeserver.yaml $f") + post+=("sed 's/enable_registration:.*/enable_registration: True/' $f > $g; mv $g $f") + post+=("sed 's/enable_group_creation: false/enable_group_creation: true/' $f > $g; mv $g $f") + post+=("sed 's/ - port: 8008/ - port: $SYN_HTTP_PORT/' $f > $g; mv $g $f") + post+=("sed 's/ port: 8448/ port: $SYN_HTTPS_PORT/' $f > $g; mv $g $f") + post+=("sed 's/ bind_addresses:.*/ bind_addresses: [\"::\", \"0.0.0.0\"]/' $f > $g; mv $g $f") + post+=("sed 's/app_service_config_files.*$/app_service_config_files: [ \\/data\\/discord-registration.yaml ]/' $f > $g; mv $g $f") + post+=("echo 'auto_join_rooms: [ \"#welcome:$DOMAIN\" ]' >> $f") + post+=("sudo mv $f $mnt/homeserver.yaml") + ;; + docker-matrix-riot* ) + run="-p $RIOT_PORT:$RIOT_PORT $img" + post+=("touch $mnt/riot.im.conf") + post+=("echo '-p $RIOT_PORT' > $mnt/riot.im.conf") + post+=("echo '-A 0.0.0.0' >> $mnt/riot.im.conf") + post+=("echo '-c 3500' >> $mnt/riot.im.conf") + post+=("curl https://raw.githubusercontent.com/vector-im/riot-web/develop/config.sample.json > $mnt/config.json") + post+=("sed 's/\"default_hs_url\".*/\"default_hs_url\":\"http:\\/\\/docker-matrix:8008\",/' $mnt/config.json > $f; mv $f $mnt/config.json") + post+=("sed 's/\"default_is_url\".*/\"default_is_url\":\"http:\\/\\/docker-matrix:8008\",/' $mnt/config.json > $f; mv $f $mnt/config.json") + #post+=("echo '--ssl' >> $mnt/config.json") + #post+=("echo '--cert /data/cert.pem' >> $mnt/config.json") + #post+=("echo '--key /data/key.pem' >> $mnt/config.json") + ;; + matrix-appservice-discord* ) + run="-p $DISC_PORT:$DISC_PORT $img" + post+=("cp config/config.sample.yaml $mnt/config.yaml") + post+=("sed 's/ domain: .*$/ domain: $DOMAIN/' $mnt/config.yaml > $f; mv $f $mnt/config.yaml") + post+=("sed 's/ homeserverUrl: .*$/ homeserverUrl: http:\\/\\/$DOMAIN:$SYN_HTTP_PORT/' $mnt/config.yaml > $f; mv $f $mnt/config.yaml") + post+=("sed 's/ userStorePath:.*$/ userStorePath: \/data\/user-store.db/' $mnt/config.yaml > $f; mv $f $mnt/config.yaml") + post+=("sed 's/ roomStorePath:.*$/ roomStorePath: \/data\/room-store.db/' $mnt/config.yaml > $f; mv $f $mnt/config.yaml") + post+=("sed 's/ filename:.*$/ filename: \/data\/discord.db/' $mnt/config.yaml > $f; mv $f $mnt/config.yaml") + post+=("npm install") + post+=("npm run build") + post+=("node build/src/discordas.js -r -u 'http:\\/\\/$DOMAIN:$DISC_PORT' -c $mnt/config.yaml") + post+=("cp discord-registration.yaml ${mnt%$basename*}/docker-matrix/") + post+=("cp discord-registration.yaml $mnt/discord-registration.yaml") + ;; + * ) + return + ;; + esac + mkdir -p "$mnt" + for i in "${pre[@]:-}"; do + eval "$i" + done + docker build -t $img . + for i in "${post[@]}"; do + eval "$i" + done + rm -f "$f" "$g" + echo "docker run --name $basename --rm -d -v $mnt:/data --network riot-matrix-net --net-alias $basename $run" +} + +function run_modules() { + local run_cmds=("${@:-}") + for cmd in "${run_cmds[@]}"; do + echo RUN $(basename "$cmd") + echo $cmd + done +} + +if [ "$0" == "${BASH_SOURCE[0]}" ]; then + main "$@" +fi