diff --git a/online-werkzeuge-admin.pdf b/online-werkzeuge-admin.pdf index 7b55b5bc15c988ad16d713b83e464190133fd094..9d4d5a728fc3d610ed0385e6f48615d9cdf10123 100644 Binary files a/online-werkzeuge-admin.pdf and b/online-werkzeuge-admin.pdf differ diff --git a/online-werkzeuge-admin.tex b/online-werkzeuge-admin.tex index 0a690f33421c73e38aa4395a93dc5f3378a7c7ad..c52aa4c6b7211a173f076ee2e402fc7f5f748036 100644 --- a/online-werkzeuge-admin.tex +++ b/online-werkzeuge-admin.tex @@ -28,6 +28,13 @@ \newcommand{\sep}{~$\cdot$~} \newcommand{\mylicense}{CC-by-sa (Version 3.0) oder GNU GPL (Version 3 oder höher)} +\lstset{basicstyle=\color{blendedblue}, + language=bash, + captionpos=b, + gobble=4, + xleftmargin=1em, + columns=fullflexible, + moredelim=**[is][\color{darkred}]{¡}{¿}} \lstdefinestyle{terminal}{basicstyle=\small\ttfamily\color{darkgreen}, language={}, columns=fixed, @@ -467,7 +474,7 @@ (Audio-, Video- und Screensharing-Streams) notwendig und wird von \term{OpenMeetings} verwendet. Damit Medienströme weitergeleitet werden können, obwohl sich sowohl \term{OpenMeetings} als auch i.\,d.\,R.\ die Teilnehmenden hinter - einem NAT befinden, wird dieser so konfiguriert, dass er Zugriff auf + einem NAT befinden, wird dieser so konfiguriert, daß er Zugriff auf einen TURN-Server besitzt. Dies geschieht durch Ergänzen der Zeile @@ -513,119 +520,149 @@ erfolgt über die Web-Oberfläche. Da wir keine einfache Möglichkeit gefunden haben, - die Lehrenden jeweils automatisch zu Moderatoren zu machen, - wurden diese jeweils über das unten wiedergegebene Shell-Skript + die Lehrenden jeweils automatisch zu Moderatoren ernennen zu lassen, + werden diese jeweils über das hier wiedergegebene Shell-Skript \file{/usr/local/sbin/give\_rights\_to\_all\_lecture\_rooms} - zu Moderatoren jeden Raumes ernannt. - Nach Anwendung ist in der Ubuntu-VM einmalig - \lstinline[style=cmd]{/etc/init.d/tomcat3 restart} auszuführen. + zu Moderatoren jeden Raumes ernannt: \begin{lstlisting}[style=terminal] #!/bin/sh (for user in ¡2 5 6 7 8 12 30 31 32 33 34 35¿; do - for room in ¡$(seq 21 32)¿; do - echo "insert into room_moderator (roomId, user_id) values ($room, $user);" - done - done) | mysql --database=open503 -B + for room in ¡$(seq 21 32)¿; do + echo "insert into room_moderator" \ + "(roomId, user_id) values ($room, $user);" + done + done) | mysql --database=open503 -B \end{lstlisting} Die Zahlen sind die Benutzer- bzw.\ Raum-IDs in der SQL-Datenbank von \term{OpenMeetings\/} und müssen Ihrer Installation entsprechend angepaßt werden. - \section{NoVNC} - -\iffalse - -Installation mittels 'apt install novnc'. - -## systemd - -Um mehrere Räume bereitstellen zu können, wird ein entsprechendes Skript -für systemd geschrieben. Dies lässt NoVNC dauerhaft laufen, alternativ -wäre auch eine Aktivierung beim Kontaktaufbau zum entsprechenden -TCP-Socket denkbar. - -root@main-0:~# cat /etc/systemd/system/novnc@.service -[Unit] -Description = start noVNC service %i -After=syslog.target network.target - -[Service] -Type=simple -User=novnc -ExecStart = /usr/local/sbin/hsbo_novnc %i - -[Install] -WantedBy=multi-user.target - -root@main-0:~# cat /usr/local/sbin/hsbo_novnc -#!/bin/bash + Nach Anwendung ist in der Ubuntu-VM einmalig + \lstinline[style=cmd]{/etc/init.d/tomcat3 restart} auszuführen. -i=$1; shift -exec /usr/share/novnc/utils/launch.sh --listen $((6080 + $i)) --vnc localhost:$((5900 + $i)) $* + \section{NoVNC} -Wir wollen 13 Instanzen, diese werden mittels -root@main-0:~# for i in $(seq 0 12); do systemctl start novnc@$i; systemctl enable novnc@$i;done -gestartet und dauerhaft aktiviert (sodass sie nach einem Reboot wieder zur Verfügung stehen). + Wir installieren zunächst \term{noVNC\/} mittels + \lstinline[style=cmd]{apt install novnc}. -## Apache + \subsection{systemd} -NoVNC soll hinter einem Apache-Proxy bleiben. Zur Kommunikation werden WSS (secure Websockets) benötigt. -Daher müssen mittels 'a2enmod proxy_wstunnel proxy_http' die entsprechenden Module aktiviert werden. + Um mehrere Räume bereitstellen zu können, + wird ein entsprechendes Skript für \file{systemd} geschrieben. + Mit dieser Methode läuft \term{noVNC\/} dauerhaft im Hintergrund. + (Alternativ wäre auch eine Aktivierung + beim Kontaktaufbau zum entsprechenden TCP-Socket denkbar.) -Die entsprechende Apache-Konfiguration sieht so aus, die Verbindungen sollen grundsätzlich verschlüsselt passieren: + Das \file{systemd}-Skript wird auf dem Rechner \file{main-0}, + auf dem \term{noVNC\/} läuft, + in der Datei \file{/etc/systemd/system/novnc@.service} abgelegt: + \begin{lstlisting}[style=terminal] + [Unit] + Description = start noVNC service %i + After=syslog.target network.target -root@main-0:~# cat /etc/apache2/sites-enabled/novnc.cvh-server.de.conf -<VirtualHost _default_:80> - ServerAdmin webmaster@cvh-server.de - ServerName novnc.cvh-server.de - ServerAlias www.novnc.cvh-server.de + [Service] + Type=simple + User=novnc + ExecStart = /usr/local/sbin/hsbo_novnc %i - Redirect / https://novnc.cvh-server.de/ + [Install] + WantedBy=multi-user.target + \end{lstlisting} + Das \file{systemd}-Skript ruft ein Shell-Skript \file{hsbo\_novnc} auf, + das sich im Verzeichnis \file{/usr/local/sbin/hsbo\_novnc} befindet + und das eigentliche Launch-Skript von \term{noVNC\/} aufruft: + \begin{lstlisting} + #!/bin/bash - ErrorLog ${APACHE_LOG_DIR}/novnc.cvh-server.de-error.log - LogLevel warn - CustomLog ${APACHE_LOG_DIR}/novnc.cvh-server.de-access.log combined + i=$1; shift + exec /usr/share/novnc/utils/launch.sh --listen $((6080 + $i)) \ + --vnc localhost:$((5900 + $i)) $* + \end{lstlisting} + In unserem Beispiel starten wir 13 Instanzen von \term{noVNC}, + durchnumeriert von 0 bis 12. + Die Nummern sind gleichzeitig die Nummern der VNC-Server, + auf die \term{noVNC\/} als VNC-Client zugreift. -</VirtualHost> + Mit dem Shell-Befehl + \begin{lstlisting}[style=cmd] + for i in $(seq 0 12); do \ + systemctl start novnc@$i; \ + systemctl enable novnc@$i; \ + done + \end{lstlisting} + starten wir diese 13 Instanzen und aktivieren sie dauerhaft, + so daß sie nach einem Reboot wieder zur Verfügung stehen. -<VirtualHost _default_:443 _default_:8443> - ServerAdmin webmaster@cvh-server.de - ServerName novnc.cvh-server.de - ServerAlias www.novnc.cvh-server.de + \subsection{Apache} - ProxyPass /websockify ws://localhost:6080/websockify - ProxyPassReverse /websockify ws://localhost:6080/websockify + \term{noVNC\/} soll hinter einem Apache-Proxy bleiben. + Zur Kommunikation werden WSS (secure Websockets) benötigt. + Daher müssen mittels \lstinline[style=cmd]{a2enmod proxy_wstunnel proxy_http} + die entsprechenden Module aktiviert werden. - ProxyPass /websock/0/ ws://localhost:6080/websockify - ProxyPassReverse /websock/0/ ws://localhost:6080/websockify + Die entsprechende Apache-Konfiguration erfolgt in der Konfigurationsdatei + \file{/etc/apache2/sites-enabled/novnc.cvh-server.de.conf}: + \begin{lstlisting}[style=terminal] + <VirtualHost _default_:80> + ServerAdmin webmaster@cvh-server.de + ServerName novnc.cvh-server.de + ServerAlias www.novnc.cvh-server.de - ProxyPass /websock/1/ ws://localhost:6081/websockify - ProxyPassReverse /websock/1/ ws://localhost:6081/websockify + Redirect / https://novnc.cvh-server.de/ -… - ProxyPass /websock/12/ ws://localhost:6092/websockify - ProxyPassReverse /websock/12/ ws://localhost:6092/websockify + ErrorLog ${APACHE_LOG_DIR}/novnc.cvh-server.de-error.log + LogLevel warn + CustomLog ${APACHE_LOG_DIR}/novnc.cvh-server.de-access.log combined + </VirtualHost> - ProxyPass / http://localhost:6080/ - ProxyPassReverse / http://localhost:6080/ + <VirtualHost _default_:443 _default_:8443> + ServerAdmin webmaster@cvh-server.de + ServerName novnc.cvh-server.de + ServerAlias www.novnc.cvh-server.de - ErrorLog ${APACHE_LOG_DIR}/novnc.cvh-server.de-error.log - LogLevel warn - CustomLog ${APACHE_LOG_DIR}/novnc.cvh-server.de-access.log combined - SSLEngine on -</VirtualHost> + ProxyPass /websockify ws://localhost:6080/websockify + ProxyPassReverse /websockify ws://localhost:6080/websockify + ProxyPass /websock/0/ ws://localhost:6080/websockify + ProxyPassReverse /websock/0/ ws://localhost:6080/websockify -Auf die einzelnen Räume kann jetzt über URLs der Form + ProxyPass /websock/1/ ws://localhost:6081/websockify + ProxyPassReverse /websock/1/ ws://localhost:6081/websockify + \end{lstlisting} + [\,\dots] + \begin{lstlisting}[style=terminal] + ProxyPass /websock/12/ ws://localhost:6092/websockify + ProxyPassReverse /websock/12/ ws://localhost:6092/websockify -https://novnc.cvh-server.de/vnc.html?host=novnc.cvh-server.de&port=443&path=websock/0/&reconnect=1&resize=scale -https://novnc.cvh-server.de/vnc.html?host=novnc.cvh-server.de&port=443&path=websock/1/&reconnect=1&resize=scale -… -https://novnc.cvh-server.de/vnc.html?host=novnc.cvh-server.de&port=443&path=websock/12/&reconnect=1&resize=scale + ProxyPass / http://localhost:6080/ + ProxyPassReverse / http://localhost:6080/ -zugegriffen werden. + ErrorLog ${APACHE_LOG_DIR}/novnc.cvh-server.de-error.log + LogLevel warn + CustomLog ${APACHE_LOG_DIR}/novnc.cvh-server.de-access.log combined + SSLEngine on + </VirtualHost> + \end{lstlisting} + Dadurch wird sichergestellt, daß grundsätzlich alle Verbindungen + verschlüsselt werden. - \fi + Auf die einzelnen VNC-Kanäle kann jetzt über URLs der Form + \begin{lstlisting} + ¡¿https://novnc.¡$DOMAIN¿/vnc.html?host=novnc.¡$DOMAIN¿&port=443 + &path=websock/¡$CHANNEL¿/&reconnect=1&resize=scale + \end{lstlisting} + zugegriffen werden. + (\lstinline[style=cmd]{$CHANNEL} steht für die Nummer des VNC-Kanals. + Der Umbruch in der URL geschieht hier nur aus Platzgründen + und darf natürlich nicht in dieser Form übernommen werden.) + + Die Optionen \lstinline{&reconnect=1&resize=scale} + bewirken eine Vorkonfiguration des \term{noVNC\/}-Clients, + daß er sich bei Verbindungsabbruch automatisch wiederverbinden soll + und daß er das VNC-Bild auf die Größe des Browser-Fensters skalieren soll. + Diese Konfiguration läßt sich während der Benutzung von \term{noVNC\/} + ändern (Icon: Zahnrad-Symbol). \emph{(Fortsetzung folgt.)} @@ -641,7 +678,7 @@ zugegriffen werden. \setlength{\leftskip}{3cm} - Stand: 12.\ April 2020 + Stand: 13.\ April 2020 Copyright \copyright\ 2020\quad Peter Gerwinski\\ Lizenz: \mylicense