Commit cfe11d5f authored by Peter Gerwinski's avatar Peter Gerwinski
Browse files

online-werkzeuge-admin: noVNC

parent 599a9834
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment