From 757437111e67375a0b133457896aec9a04a7ea7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Thu, 14 Jul 2022 00:55:56 +0200 Subject: [PATCH] add build scripts. --- dev/build | 14 ++++++ dev/exec | 3 ++ dev/fmt | 12 +++++ dev/go | 25 ++++++++++ dev/lint | 14 ++++++ dev/rebuild | 32 ++++++++++++ dev/runtime/Dockerfile | 19 ++++++++ dev/runtime/config.yml | 95 ++++++++++++++++++++++++++++++++++++ dev/runtime/supervisord.conf | 11 +++++ dev/start | 45 +++++++++++++++++ 10 files changed, 270 insertions(+) create mode 100755 dev/build create mode 100755 dev/exec create mode 100755 dev/fmt create mode 100755 dev/go create mode 100755 dev/lint create mode 100755 dev/rebuild create mode 100644 dev/runtime/Dockerfile create mode 100644 dev/runtime/config.yml create mode 100644 dev/runtime/supervisord.conf create mode 100755 dev/start diff --git a/dev/build b/dev/build new file mode 100755 index 00000000..3a6ef04b --- /dev/null +++ b/dev/build @@ -0,0 +1,14 @@ +#!/bin/bash +cd "$(dirname "$0")" + +# +# aborting if any command returns a non-zero value +set -e + +GIT_COMMIT=`git rev-parse --short HEAD` +GIT_BRANCH=`git rev-parse --symbolic-full-name --abbrev-ref HEAD` + +docker build -t neko_server_build --target build --build-arg "GIT_COMMIT=$GIT_COMMIT" --build-arg "GIT_BRANCH=$GIT_BRANCH" .. +docker build -t neko_server_runtime --target runtime --build-arg "GIT_COMMIT=$GIT_COMMIT" --build-arg "GIT_BRANCH=$GIT_BRANCH" .. + +docker build -t neko_server_app --build-arg "BASE_IMAGE=neko_server_runtime" ./runtime diff --git a/dev/exec b/dev/exec new file mode 100755 index 00000000..e9d89421 --- /dev/null +++ b/dev/exec @@ -0,0 +1,3 @@ +#!/bin/bash + +docker exec -it neko_server_dev /bin/bash diff --git a/dev/fmt b/dev/fmt new file mode 100755 index 00000000..977f8802 --- /dev/null +++ b/dev/fmt @@ -0,0 +1,12 @@ +#!/bin/bash +cd "$(dirname "$0")" + +if [ "$(docker images -q neko_server_build 2> /dev/null)" == "" ]; then + echo "Image 'neko_server_build' not found. Run ./build first." + exit 1 +fi + +docker run -it --rm \ + --entrypoint="go" \ + -v "${PWD}/../:/src" \ + neko_server_build fmt ./... diff --git a/dev/go b/dev/go new file mode 100755 index 00000000..731d1d14 --- /dev/null +++ b/dev/go @@ -0,0 +1,25 @@ +#!/bin/bash +cd "$(dirname "$0")" + +if [ "$(docker images -q neko_server_build 2> /dev/null)" == "" ]; then + echo "Image 'neko_server_build' not found. Run ./build first." + exit 1 +fi + +docker run -it \ + --name "neko_server_go" \ + --entrypoint="go" \ + -v "${PWD}/../:/src" \ + neko_server_build "$@"; +# +# copy package files +docker cp neko_server_go:/src/go.mod "../go.mod" +docker cp neko_server_go:/src/go.sum "../go.sum" + +# +# commit changes to image +docker commit "neko_server_go" "neko_server_build" + +# +# remove contianer +docker rm "neko_server_go" diff --git a/dev/lint b/dev/lint new file mode 100755 index 00000000..a7aa6203 --- /dev/null +++ b/dev/lint @@ -0,0 +1,14 @@ +#!/bin/bash +cd "$(dirname "$0")" + +if [ "$(docker images -q neko_server_build 2> /dev/null)" == "" ]; then + echo "Image 'neko_server_build' not found. Run ./build first." + exit 1 +fi + +# +# build server +docker run --rm -it \ + -v "${PWD}/../:/src" \ + --entrypoint="/bin/bash" \ + neko_server_build -c '[ -f ./bin/golangci-lint ] || curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v1.31.0;./bin/golangci-lint run'; diff --git a/dev/rebuild b/dev/rebuild new file mode 100755 index 00000000..34ca4328 --- /dev/null +++ b/dev/rebuild @@ -0,0 +1,32 @@ +#!/bin/bash +cd "$(dirname "$0")" + +# +# aborting if any command returns a non-zero value +set -e + +# +# build server +docker run --rm -it \ + -v "${PWD}/../:/src" \ + --entrypoint="/bin/bash" \ + neko_server_build "./build" "$@"; + +# +# remove old plugins +docker exec neko_server_dev rm -rf /etc/neko/plugins + +# +# replace server binary in container +docker cp "${PWD}/../bin/neko" neko_server_dev:/usr/bin/neko + +# +# replace plugin binaries in container +if [ -d "${PWD}/../bin/plugins" ]; +then + docker cp "${PWD}/../bin/plugins" neko_server_dev:/etc/neko/plugins +fi + +# +# restart server +docker exec neko_server_dev supervisorctl restart neko diff --git a/dev/runtime/Dockerfile b/dev/runtime/Dockerfile new file mode 100644 index 00000000..e1d401b1 --- /dev/null +++ b/dev/runtime/Dockerfile @@ -0,0 +1,19 @@ +ARG BASE_IMAGE=neko_server_runtime:latest +FROM $BASE_IMAGE + +# +# install xfce +RUN set -eux; apt-get update; \ + apt-get install -y --no-install-recommends xfce4 xfce4-terminal firefox-esr sudo; \ + # + # add user to sudoers + usermod -aG sudo neko; \ + echo "neko:neko" | chpasswd; \ + echo "%sudo ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers; \ + # clean up + apt-get clean -y; \ + rm -rf /var/lib/apt/lists/* /var/cache/apt/* + +# +# copy configuation files +COPY supervisord.conf /etc/neko/supervisord/xfce.conf diff --git a/dev/runtime/config.yml b/dev/runtime/config.yml new file mode 100644 index 00000000..a37d7775 --- /dev/null +++ b/dev/runtime/config.yml @@ -0,0 +1,95 @@ +capture: + video: + codec: vp8 + ids: [ hq, lq ] + pipelines: + hq: + fps: 25 + gst_encoder: vp8enc + gst_params: + target-bitrate: (3072 * 650) + cpu-used: 4 + end-usage: cbr + threads: 4 + deadline: 1 + undershoot: 95 + buffer-size: (3072 * 4) + buffer-initial-size: (3072 * 2) + buffer-optimal-size: (3072 * 3) + keyframe-max-dist: 25 + min-quantizer: 4 + max-quantizer: 20 + lq: + fps: 25 + gst_encoder: vp8enc + gst_params: + target-bitrate: (1024 * 650) + cpu-used: 4 + end-usage: cbr + threads: 4 + deadline: 1 + undershoot: 95 + buffer-size: (1024 * 4) + buffer-initial-size: (1024 * 2) + buffer-optimal-size: (1024 * 3) + keyframe-max-dist: 25 + min-quantizer: 4 + max-quantizer: 20 + # video: + # codec: h264 + # ids: [ main ] + # pipelines: + # main: + # width: (width / 3) * 2 + # height: (height / 3) * 2 + # fps: 20 + # gst_prefix: "! video/x-raw,format=I420" + # gst_encoder: "x264enc" + # gst_params: + # threads: 4 + # bitrate: 4096 + # key-int-max: 15 + # byte-stream: true + # tune: zerolatency + # speed-preset: veryfast + # gst_suffix: "! video/x-h264,stream-format=byte-stream" + screencast: + enabled: true + +server: + pprof: true + +desktop: + screen: "1920x1080@60" + +member: + provider: "object" + object: + admin_password: "admin" + user_password: "neko" + # provider: "file" + # file: + # path: "/home/neko/members.json" + +session: + # Allows reconnecting the websocket even if the previous + # connection was not closed. Can lead to session hijacking. + merciful_reconnect: true + # Show inactive cursors on the screen. Can lead to multiple + # data sent via WebSockets and additonal rendering cost on + # the clients. + inactive_cursors: true + api_token: "neko123" + cookie: + # Disabling cookies will result to use Bearer Authentication. + # This is less secure, because access token will be sent to + # client in playload and accessible via JS app. + enabled: false + secure: false + +webrtc: + icelite: true + iceservers: + - urls: [ stun:stun.l.google.com:19302 ] + # username: foo + # credential: bar diff --git a/dev/runtime/supervisord.conf b/dev/runtime/supervisord.conf new file mode 100644 index 00000000..d14ef4ad --- /dev/null +++ b/dev/runtime/supervisord.conf @@ -0,0 +1,11 @@ +[program:xfce] +environment=HOME="/home/%(ENV_USER)s",USER="%(ENV_USER)s",DISPLAY="%(ENV_DISPLAY)s" +command=/usr/bin/startxfce4 +stopsignal=INT +autorestart=true +priority=500 +user=%(ENV_USER)s +stdout_logfile=/var/log/neko/xfce.log +stdout_logfile_maxbytes=100MB +stdout_logfile_backups=10 +redirect_stderr=true diff --git a/dev/start b/dev/start new file mode 100755 index 00000000..ad57f8a2 --- /dev/null +++ b/dev/start @@ -0,0 +1,45 @@ +#!/bin/bash +cd "$(dirname "$0")" + +if [ -z "$(docker images -q neko_server_app 2> /dev/null)" ]; then + echo "Image 'neko_server_app' not found. Running ./build first." + ./build +fi + +if [ -z $NEKO_PORT ]; then + NEKO_PORT="3000" +fi + +if [ -z $NEKO_MUX ]; then + NEKO_MUX="52100" +fi + +if [ -z $NEKO_NAT1TO1 ]; then + for i in $(ifconfig -l 2>/dev/null); do + NEKO_NAT1TO1=$(ipconfig getifaddr $i) + if [ ! -z $NEKO_NAT1TO1 ]; then + break + fi + done + + if [ -z $NEKO_NAT1TO1 ]; then + NEKO_NAT1TO1=$(hostname -i 2>/dev/null) + fi +fi + +echo "Using app port: ${NEKO_PORT}" +echo "Using mux port: ${NEKO_MUX}" +echo "Using IP address: ${NEKO_NAT1TO1}" + +# start server +docker run --rm -it \ + --name "neko_server_dev" \ + -p "${NEKO_PORT}:8080" \ + -p "${NEKO_MUX}:${NEKO_MUX}/tcp" \ + -p "${NEKO_MUX}:${NEKO_MUX}/udp" \ + -e "NEKO_WEBRTC_UDPMUX=${NEKO_MUX}" \ + -e "NEKO_WEBRTC_TCPMUX=${NEKO_MUX}" \ + -e "NEKO_WEBRTC_NAT1TO1=${NEKO_NAT1TO1}" \ + -v "${PWD}/runtime/config.yml:/etc/neko/neko.yml" \ + -e "NEKO_DEBUG=1" \ + neko_server_app:latest;