Initial commit. - bitreich-conference - Bitreich Conference System
(HTM) git clone git://bitreich.org/bitreich-conference git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/bitreich-conference
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
(DIR) LICENSE
---
(DIR) commit 4e45edcc18a5ec88c454ebbe6f695e36d382b325
(HTM) Author: Christoph Lohmann <20h@r-36.net>
Date: Fri, 8 Apr 2022 18:42:39 +0200
Initial commit.
Diffstat:
A README.md | 113 +++++++++++++++++++++++++++++++
A bin/bitreich-con-hold-presentation | 33 +++++++++++++++++++++++++++++++
A bin/bitreich-con-start-conference | 21 +++++++++++++++++++++
A bin/bitreich-con-stop-conference | 16 ++++++++++++++++
A bin/bitreich-con-teaser-shell | 45 +++++++++++++++++++++++++++++++
A bin/bitreich-con-view-presentation | 39 +++++++++++++++++++++++++++++++
A bin/bitreich-con-visitor-count | 4 ++++
7 files changed, 271 insertions(+), 0 deletions(-)
---
(DIR) diff --git a/README.md b/README.md
@@ -0,0 +1,113 @@
+# The Bitreich Conference System
+
+## Overview
+
+How do people perceive the conference content?
+
+ ssh visitor@bitreich.org
+
+On screen is shown what the presenter shows on the commandline. At the
+bitreich conferences this is mostly some slides shown using catpoint(1).
+(git://bitreich.org/pointtools)
+
+ mpv gopher://bitreich.org/9/radio/listen
+
+This is simple some audio stream of any kind, which is generated by the
+presenter or the audio server. Here at bitreich we use icecast and some
+simple frontend script for http2gopher.
+
+Overall this will require at maximum 120 kb/s per visitor. You could
+strip down audio quality even more. The ssh slides are bytes per second,
+if any.
+
+
+## Setup
+
+You will need to adapt all scripts to your needs. It is simple. So do not
+fear.
+
+1. Create a presenter account.
+2. Create a visitor account.
+3. Install abduco.
+5. Copy over the modified scripts from bin/ to your PATH.
+ 1. Modify in all scripts the prefix /br to your needs.
+ 2. Create the $PREFIX/con directory, where all communication is
+ handled.
+6. Run the scripts accordingly.
+
+7. Setup audio via icecast etc.
+
+## Visitor account.
+
+For /etc/ssh/sshd_config:
+
+ Match user visitor
+ AllowAgentForwarding no
+ AllowTcpForwarding no
+ GatewayPorts no
+ X11Forwarding no
+ PermitTunnel no
+ X11UseLocalhost no
+ PermitTTY yes
+ PasswordAuthentication yes
+ PermitEmptyPasswords yes
+ ForceCommand /path/to/bitreich-con-view-presentation
+
+Depending on how secure you want access, disabling any authentication for
+this account is possible.
+
+## Start a Conference
+
+ bitreich-con-start-conference
+
+The socket for visitor and presenter attachment is created. The teaser
+shell is run.
+
+## Watch the Presentation
+
+ bitreich-con-view-presentation
+
+See visitor account preparation above.
+
+## Hold a Presentation
+
+Presenter logs into presenter account and runs:
+
+ bitreich-con-hold-presentation
+
+In the teaser shell the presenter presses Enter to get into the presenter
+shell. There all possibilities of the presenter account on the
+commandline is possible.
+
+## bitreich-con-teaser-shell
+
+Please see in this script, how ads are shown. You can download examples
+from
+
+ gopher://bitreich.org/1/con/2019/ads
+
+It is all simple text, just cat(1)ed to the screen in an random order.
+
+When a presenter pressed Enter in the teaser shell, the presentation mode
+is started.
+
+## Stop a Conference
+
+ bitreich-con-stop-conference
+
+This will remove all sockets and remains of the conference.
+
+## bitreich-con-visitor-count
+
+This is a simple shell to show you how, after you have set up the
+conference system, visitors can be counted using standard shell commands.
+
+## Comments
+
+Send comments to:
+
+ Christoph Lohmann <20h@r-36.net> or on #bitreich-en
+ irc.bitreich.org
+
+Have fun!
+
(DIR) diff --git a/bin/bitreich-con-hold-presentation b/bin/bitreich-con-hold-presentation
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+if [ $# -lt 1 ];
+then
+ year="$(date +%Y)"
+else
+ year="$1"
+fi
+
+# Handled in bitreich-con-start-conference for a common value.
+#printf 'CONTERMCOL=%d\nCONTERMLIN=%d' "$(tput cols)" "$(tput lines)" \
+# > "/br/con/termres${year}"
+
+<<\. cat
+You will be connected to the conference holding terminal.
+There just type Enter and you will get a bash prompt to hold your
+presentation.
+
+It is advised to first resize your presentation terminal. The
+viewers were advised to resize their terminal to 100x35. That
+the space you have. So do not go beyond that.
+
+Type in ^\ (control+'\') to detach from it.
+
+To reconnect to it, simply run this script again.
+Press any key to continue.
+.
+
+read keypressed
+
+#env ABDUCO_SOCKET_DIR=/br/con/abduco abduco -A bitreichcon2017
+abduco -A "/br/con/sock/bitreichcon${year}"
+
(DIR) diff --git a/bin/bitreich-con-start-conference b/bin/bitreich-con-start-conference
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+if [ $# -lt 1 ];
+then
+ year="$(date +%Y)"
+else
+ year="$1"
+fi
+
+# Set a good default.
+printf "CONTERMCOL=%d\nCONTERMLIN=%d" "100" "35" \
+ > "/br/con/termres${year}"
+sudo -u presenter chmod g+w,g+r "/br/con/termres${year}"
+
+#env ABDUCO_SOCKET_DIR=/br/con/abduco abduco -A bitreichcon${year}
+sudo -u presenter abduco -n "/br/con/sock/bitreichcon${year}" /br/bin/bitreich-con-teaser-shell "${year}"
+sudo -u presenter chmod g+w,g+r "/br/con/sock/bitreichcon${year}"
+
+printf "The conference is now active and showing ads.\n"
+printf "Now run bitreich-hold-presentation on your behalf.\n"
+
(DIR) diff --git a/bin/bitreich-con-stop-conference b/bin/bitreich-con-stop-conference
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+if [ $# -lt 1 ];
+then
+ year="$(date +%Y)"
+else
+ year="$1"
+fi
+
+rm -f /br/con/sock/bitreichcon${year}
+rm -f /br/con/termres${year}
+pkill -u presenter -f "bitreichcon${year}"
+
+printf "All abduco sessions have been closed.\n"
+printf "All was fun! :)\n"
+
(DIR) diff --git a/bin/bitreich-con-teaser-shell b/bin/bitreich-con-teaser-shell
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+if [ $# -lt 1 ];
+then
+ year="$(date +%Y)"
+else
+ year="$1"
+fi
+
+function shell() {
+ cd "/home/presenter/con/${year}"
+ bash
+}
+
+adpath="/br/gopher/con/${year}/ads"
+
+while /bin/true;
+do
+ clear
+ adfile="${adpath}/$(ls -1 "${adpath}" | shuf -n 1)"
+
+ i=0
+ # Change the ad every 30 seconds.
+ while [ $i -lt 20 ];
+ do
+ tput cup 0 0
+ tput civis
+ cat "$adfile"
+ # Redisplay every second, in case someone freshly attached.
+ i=$(($i + 1))
+
+ userinput=""
+ read -t 1 userinput
+ if [ $? -eq 0 ];
+ then
+ # Be clear and clean.
+ clear
+ tput cvvis
+ shell
+ clear
+ tput civis
+ fi
+ done
+done
+
(DIR) diff --git a/bin/bitreich-con-view-presentation b/bin/bitreich-con-view-presentation
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+if [ $# -lt 1 ];
+then
+ year="$(date +%Y)"
+else
+ year="$1"
+fi
+
+if [ ! -f "/br/con/termres${year}" ]
+then
+ printf 'The conference has not started yet. Please retry later.\n'
+ exit 1
+fi
+
+. "/br/con/termres${year}"
+
+if [ "$(tput cols)" -lt "$CONTERMCOL" ] || [ "$(tput lines)" -lt "$CONTERMLIN" ]
+then
+ printf 'Input presentation terminal is %dx%d characters.\n' \
+ "$CONTERMCOL" "$CONTERMLIN"
+ printf 'You should adjust your terminal to it. Continue anyway? y/N: '
+ read yesno
+ if [ "$yesno" != 'y' ]
+ then
+ exit 1
+ fi
+fi
+
+printf '%s\n' 'You will be connected to the conference view-only terminal.' \
+ 'Type in ^'\\' (control+'\\') to detach from it.' \
+ 'Press any key to continue.'
+
+read
+
+abduco -r -l -a /br/con/sock/bitreichcon${year} || \
+ printf '%s\n' 'Could not connect to the conference. ' \
+ 'Please contact 20h on #bitreich-con on freenode.'
+
(DIR) diff --git a/bin/bitreich-con-visitor-count b/bin/bitreich-con-visitor-count
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+pgrep -u visitor abduco | wc -l
+