Dateiverwaltung für die WebBox
ulrich
2021-01-24 644d91d296d1c55faac1e0aa47acf2142837647f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="generator" content="Asciidoctor 2.0.10">
<meta name="author" content="Ulrich Hilger">
<title>WebBox Einrichtung</title>
<link rel="stylesheet" href="asciidoctor.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body class="article toc2 toc-left">
<div id="header">
<h1>WebBox Einrichtung</h1>
<div class="details">
<span id="author" class="author">Ulrich Hilger</span><br>
<span id="email" class="email"><a href="mailto:ulrich.hilger@web.de">ulrich.hilger@web.de</a></span><br>
<span id="revnumber">version 3.1,</span>
<span id="revdate">24. Januar 2021</span>
</div>
<div id="toc" class="toc2">
<div id="toctitle">Inhalt</div>
<ul class="sectlevel1">
<li><a href="#wbx-ueber">1. Über die WebBox</a>
<ul class="sectlevel2">
<li><a href="#wbx-abgrenzung">1.1. Zielgruppe</a></li>
<li><a href="#wbx-lizenz">1.2. Lizenz</a></li>
</ul>
</li>
<li><a href="#wbx-inst">2. Installation</a>
<ul class="sectlevel2">
<li><a href="#wbx-sichern">2.1. WebBox sichern</a></li>
<li><a href="#wbx-zielsystem">2.2. Zielsystem einstellen</a></li>
</ul>
</li>
<li><a href="#wbx-start-stopp">3. Starten und Stoppen</a>
<ul class="sectlevel2">
<li><a href="#_starten">3.1. Starten</a></li>
<li><a href="#_stoppen">3.2. Stoppen</a></li>
<li><a href="#wbx-admin-aendern">3.3. Benutzer anlegen</a></li>
</ul>
</li>
<li><a href="#wbx-bedienung">4. Bedienung</a></li>
<li><a href="#wbx-eigenbau">5. Eigene Konfiguration</a>
<ul class="sectlevel2">
<li><a href="#wbx-dl">5.1. Beschaffung</a></li>
<li><a href="#wbx-einrichten">5.2. Zusammenbau</a></li>
<li><a href="#wbx-daten-apps">5.3. Daten und Apps</a></li>
</ul>
</li>
<li><a href="#wbx-tech-info">6. Technische Infos</a>
<ul class="sectlevel2">
<li><a href="#wbx-struktur">6.1. Ordnerstruktur</a></li>
<li><a href="#wbx-java-konf">6.2. Java</a></li>
<li><a href="#wbx-tc-konf">6.3. Tomcat</a></li>
<li><a href="#wbx-derby-konf">6.4. Derby</a></li>
<li><a href="#wbx-konf-um">6.5. Nutzerverwaltung</a></li>
<li><a href="#wbx-ablage">6.6. Datenablage</a></li>
<li><a href="#wbx-root-app">6.7. WebBox Startseite</a></li>
<li><a href="#wbx-konf-file-cms">6.8. Dateiverwaltung</a></li>
<li><a href="#wbx-lib">6.9. WebBox Lib</a></li>
<li><a href="#wbx-erweitern">6.10. WebBox erweitern</a></li>
</ul>
</li>
<li><a href="#_dokumenthistorie">7. Dokumenthistorie</a></li>
</ul>
</div>
</div>
<div id="content">
<div id="preamble">
<div class="sectionbody">
<div class="imageblock">
<div class="content">
<img src="bilder/File-Server-icon.png" alt="WebBox">
</div>
</div>
<div class="paragraph">
<p>Das Internet ist als Verbindung von Netzknoten konzipiert, die Inhalte bereit stellen. Die WebBox etabliert einen solchen Netzknoten als persönliche Instanz eines Nutzers und ermöglicht es, eigene Inhalte über das Netz zu verwalten und zu teilen.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="wbx-ueber"><a class="anchor" href="#wbx-ueber"></a>1. Über die WebBox</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Mit der WebBox können Inhalte so verwaltet werden, wie es Nutzer vom Desktop handelsüblicher Betriebssyteme her kennen. Zur Bedienung wird nicht mehr als ein Browser benötigt. Von überallher können Texte und Dokumente bearbeitet, Bilder, Musik oder Videos organisiert, kopiert, verschoben oder herauf- und heruntergeladen werden.</p>
</div>
<div class="paragraph">
<p>Die Kopie in einen öffentlichen Ordner genügt und Inhalte erscheinen für jedermann sichtbar im Netz. Der Rest bleibt im privaten Bereich nur für den Nutzer zugänglich, dem sie gehören. Rollen und Berechtigungen können über die Nutzerverwaltung verwaltet werden.</p>
</div>
<div class="paragraph">
<p>Die WebBox etabliert zudem ein relationales Datenbankmanagementsystem und lässt sich mit Java-Webanwendungen beliebig erweitern.</p>
</div>
<div class="sect2">
<h3 id="wbx-abgrenzung"><a class="anchor" href="#wbx-abgrenzung"></a>1.1. Zielgruppe</h3>
<div class="paragraph">
<p>Die Beschreibung in diesem Dokument beschränkt sich auf eine Nutzung mit Linux. Eine WebBox läuft darüber hinaus auch auf anderen Betriebssystemen wie Mac OS oder Windows.</p>
</div>
<div class="paragraph">
<p>Die WebBox ist mit dem Einsatz für einzelne Personen, Familien, oder kleine Arbeitsgruppen im Sinn entstanden. Sie funktioniert unverändert auch für eine größere Anzahl an Benutzern, allerdings ist ein großer Nutzerkreis eher etwas für das Zusammenspiel vieler WebBoxen.</p>
</div>
<div class="paragraph">
<p>Ein Betrieb vieler WebBoxen aus einer Hand erfordert zusätzliche Konfiguration für Cluster, weitere Infrastruktur und deren Orchestrierung. Der Betrieb in einem solchen Szenario ist möglich, aber in diesem Dokument nicht abgedeckt.</p>
</div>
</div>
<div class="sect2">
<h3 id="wbx-lizenz"><a class="anchor" href="#wbx-lizenz"></a>1.2. Lizenz</h3>
<div class="paragraph">
<p>Die WebBox wird unter den Bedingungen der <a href="https://www.gnu.org/licenses/agpl-3.0.de.html">GNU Affero General Public License</a> bereitgestellt.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="wbx-inst"><a class="anchor" href="#wbx-inst"></a>2. Installation</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Zur Installation einer WebBox werden eine Kommandozeile geöffnet und die folgenden Kommandos ausgeführt:</p>
</div>
<div class="listingblock">
<div class="title">Kommandos zur Installation einer WebBox in ein beispielhaftes Benutzerverzeichnis <code>/home/fred</code></div>
<div class="content">
<pre class="highlightjs highlight"><code data-lang="Bash" class="language-Bash hljs"># ins Benutzerverzechnis wechseln
cd /home/fred
 
# das Installationsskript laden
wget https://uhilger.de/data/pg/webbox/dl/make-wbx
 
# das Skript ausführbar machen
chmod ug+x make-wbx
 
# die Teile der WebBox laden und zusammenstellen
./make-wbx</code></pre>
</div>
</div>
<div class="paragraph">
<p>Es werden keine Eingriffe im System der Zielmaschine vorgenommen, alles beschränkt sich auf das Benutzerverzeichnis: Die obigen Kommandos legen im Ordner <code>/home/fred</code> einen neuen Ordner <code>wbx-inst</code> an, laden alle Bestandteile einer WebBox herunter und machen sie ausführbar. Über eine Internet-Verbindung mit 10 Mbit/s oder mehr dauert dieser Vorgang weniger als eine Minute.</p>
</div>
<div id="wbx-ordner" class="paragraph">
<p>Die ausführbare Fassung der WebBox liegt anschließend im Ordner <code>/home/fred/wbx-inst/wbx</code>. Dieser Ordner wird im weiteren Verlauf dieses Dokuments <code>$WBX-INST</code> genannt, d.h., wenn im Dokument <code>$WBX-INST</code> erscheint, ist  <code>/home/fred/wbx-inst/wbx</code> gemeint.</p>
</div>
<div class="paragraph">
<p>Die WebBox kann nun genutzt werden, sollte aber nach dem ersten Ausprobieren für einen produktiven Betrieb <a href="#wbx-sichern">abgesichert</a> werden. Der Start der WebBox erfolgt wie in Kapitel <a href="#wbx-start-stopp">Starten und Stoppen</a> beschrieben. Abweichend vom Betrieb laut Installation kann die WebBox auch mit einer <a href="#wbx-eigenbau">eigenen Konfiguration</a> ausgeführt werden.</p>
</div>
<div class="sect2">
<h3 id="wbx-sichern"><a class="anchor" href="#wbx-sichern"></a>2.1. WebBox sichern</h3>
<div class="paragraph">
<p>Die hier beschriebene Installation ist nur für Testzwecke geeignet. Um eine WebBox sicher <a href="bedienung.adoc#wbx-prod">produktiv zu benutzen</a>, sollte sie zusammen mit einem <a href="https://de.wikipedia.org/wiki/Proxy_(Rechnernetz)">Proxy</a> wie <a href="http://www.lighttpd.net/">Lighttpd</a> betrieben werden. Grob gesagt ist hierfür das Vorgehen wie folgt:</p>
</div>
<div class="olist arabic">
<ol class="arabic">
<li>
<p>Lighttpd installieren (auf <a href="https://wiki.ubuntuusers.de/lighttpd/">Ubuntu</a> z.B. mit <code>sudo apt-get install lighttpd</code>)</p>
</li>
<li>
<p>Ein <a href="https://de.wikipedia.org/wiki/Transport_Layer_Security">TLS</a>-Zertifikat erzeugen, z.B. bei <a href="https://letsencrypt.org/">Let&#8217;s Encrypt</a></p>
</li>
<li>
<p>Die verschlüsselte Kommunikation unter Verwendung des Zertifikats in der Konfiguration von Lighttpd <a href="https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_SSL">einrichten</a></p>
</li>
<li>
<p>In der Konfiguration von Lighttpd eine Weiterleitung auf die WebBox <a href="https://redmine.lighttpd.net/projects/lighttpd/wiki/Docs_ModProxy">eintragen</a></p>
</li>
</ol>
</div>
<div class="paragraph">
<p>Die Kommunikation erfolgt auf diese Weise verschlüsselt und ist abgesichert gegen das Mitlesen unbefugter Dritter.</p>
</div>
<div class="sect3">
<h4 id="_verschlüsselung_ohne_proxy"><a class="anchor" href="#_verschlüsselung_ohne_proxy"></a>2.1.1. Verschlüsselung ohne Proxy</h4>
<div class="paragraph">
<p>Die WebBox kann auch ohne Proxy verschlüsselt kommunizieren. Für diese Variante ist eine <code>.keystore</code>-Datei im Verzeichnis <code>$WBX-INST/.conf/prg/tc-base/conf</code> erforderlich, in die das <a href="https://de.wikipedia.org/wiki/Transport_Layer_Security">TLS</a>-Zertifikat eingetragen wird. In der Datei <code>$WBX-INST/.conf/prg/tc-base/conf/server.xml</code> muss dann ein Konnektor für <a href="https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol_Secure">HTTPS</a> konfiguriert werden.</p>
</div>
<div class="paragraph">
<p>Das Vorgehen hierfür ist z.B. im Beitrag <a href="https://uhilger.de/data/doc/2019/12/tomcat-mit-https.md">HTTPS bei Tomcat aktivieren</a> beschrieben.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="wbx-zielsystem"><a class="anchor" href="#wbx-zielsystem"></a>2.2. Zielsystem einstellen</h3>
<div class="paragraph">
<p>Das Installationsskript <code>make-wbx</code> ist im Auslieferungszustand für ein 64-Bit x86-Linux konfiguriert. Zur Verwendung auf Maschinen mit anderem Prozessor oder Betriebssystem muss der Uniform Resource Locator (URL) der passenden Java-Version ermittelt werden. Das kann z.B. bei <a href="https://www.azul.com/downloads/zulu-community">Azul</a> oder <a href="https://adoptopenjdk.net/">AdoptOpenJDK</a> geschehen.</p>
</div>
<div class="paragraph">
<p>Der URL muss vor der Ausführung im Parameter <code>JAVA_URL</code> des Skripts <code>make-wbx</code> eingetragen werden.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="wbx-start-stopp"><a class="anchor" href="#wbx-start-stopp"></a>3. Starten und Stoppen</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Die WebBox ist standardmäßig darauf eingerichtet, mit den <a href="#wbx-inst">installierten</a> Bestandteilen zu starten. Soll die Ablaufumgebung anders konfiguriert sein, muss vor dem ersten Start das Start- / Stoppskript der WebBox von Hand angepasst werden wie in <a href="#wbx-eigenbau">Eigene Konfiguration</a> beschrieben.</p>
</div>
<div class="sect2">
<h3 id="_starten"><a class="anchor" href="#_starten"></a>3.1. Starten</h3>
<div class="paragraph">
<p>Zum Starten der WebBox wird eine Kommandozeile geöffnet, in den <a href="#wbx-ordner">Ordner der WebBox</a> navigiert und das Kommando zum Start gegeben:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>cd /home/fred/wbx-inst/wbx
./wbx start</pre>
</div>
</div>
<div class="paragraph">
<p>Auf der Kommandozeile erscheint die Meldung <code>WebBox Startsequenz durchgeführt</code>, die WebBox kann <a href="bedienung.adoc#wbx-aufrufen">im Browser aufgerufen werden</a>. Vor der ersten Verwendung müssen noch <a href="#wbx-admin-aendern">Benutzer angelegt</a> werden.</p>
</div>
</div>
<div class="sect2">
<h3 id="_stoppen"><a class="anchor" href="#_stoppen"></a>3.2. Stoppen</h3>
<div class="paragraph">
<p>Das Stoppen der WebBox erfolgt mit folgenden Befehlen auf der Kommandozeile:</p>
</div>
<div class="listingblock">
<div class="content">
<pre>cd /home/fred/wbx-inst/wbx
./wbx stop</pre>
</div>
</div>
<div class="paragraph">
<p>Die WebBox wird heruntergefahren, auf der Kommandozeile erscheint die Meldung <code>WebBox Stoppsequenz durchgeführt</code>.</p>
</div>
</div>
<div class="sect2">
<h3 id="wbx-admin-aendern"><a class="anchor" href="#wbx-admin-aendern"></a>3.3. Benutzer anlegen</h3>
<div class="paragraph">
<p>Beim ersten Start der WebBox wird automatisch der Benutzer <code>admin</code> mit Kennwort <code>admin</code> erstellt. Dieser Nutzer sollte gleich als Erstes verwendet werden, um einen anderen Benutzer mit Administrationsrechten anzulegen. Der neue Administrator-Benutzer muss mindestens die Rolle <code>nutzerAdmin</code> erhalten.</p>
</div>
<div class="paragraph">
<p>Die dazu erforderliche Nutzerverwaltung wird auf der <a href="bedienung.adoc#wbx-startseite">Startseite</a> der WebBox über das Menü oben rechts aufgerufen. Die Bedienung der Nutzerverwaltung ist in der <a href="https://uhilger.de/data/pg/Nutzerverwaltung/anleitung.adoc#_nutzerverwaltung">Anleitung</a> beschrieben.</p>
</div>
<div class="paragraph">
<p>Sobald nach der Konfiguration die Anmeldung mit dem neu angelegten Adminstrator-Benutzer gelingt, kann später der Benutzer <code>admin</code> gelöscht werden.</p>
</div>
<div class="paragraph">
<p>Zur Bedienung der <a href="bedienung.adoc#wbx-file-cms">Dateiverwaltung</a> benötigen Benutzer zudem die Rolle <code>ownFileAdmin</code>. Zum Ändern des eigenen Kennwortes kann Benutzern die Rolle <code>nutzerProfil</code> zugewiesen werden.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="wbx-bedienung"><a class="anchor" href="#wbx-bedienung"></a>4. Bedienung</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Die Bedienung der WebBox ist in der <a href="bedienung.adoc">Bedienungsanleitung</a> beschrieben.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="wbx-eigenbau"><a class="anchor" href="#wbx-eigenbau"></a>5. Eigene Konfiguration</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Voraussetzungen für die Nutzung der WebBox sind das Installationspaket der WebBox sowie Java, Tomcat und Derby. Diese Bestandteile werden bei der <a href="#wbx-inst">Installation</a> geladen, sie können aber auch einzeln beschafft und zusammengebaut oder aus vorhandenen Beständen genutzt werden.</p>
</div>
<div class="paragraph">
<p>Dies wird hier beispielhaft im Home-Verzeichnis des Benutzers ausgeführt. Auf einem Linux-System sind Benutzerverzeichnisse im Pfad <code>/home</code> angelegt, sie werden deshalb auch Home-Verzeichnis genannt. Das Home-Verzeichnis eines Benutzers namens <code>fred</code> ist zum Beispiel <code>/home/fred</code>.</p>
</div>
<div class="sect2">
<h3 id="wbx-dl"><a class="anchor" href="#wbx-dl"></a>5.1. Beschaffung</h3>
<div class="paragraph">
<p>Alle Teile sind als Freie Software erhältlich. Die noch nicht auf der Zielmaschine vorhandenen Teile können von ihren Produktseiten im Internet heruntergeladen werden:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://www.azul.com/downloads/zulu-community/">Java</a></p>
</li>
<li>
<p><a href="https://tomcat.apache.org">Tomcat</a></p>
</li>
<li>
<p><a href="https://dp.apache.org/derby">Derby</a></p>
</li>
<li>
<p><a href="https://uhilger.de/data/pg/webbox/dl/wbx-3-dist.tar.xz">WebBox</a></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Die heruntergeladenen Dateien finden sich anschließend je nach Konfiguration des Browsers üblicherweise in <code>/home/fred/Downloads</code>, je nach ausgewählter Version unter Namen wie etwa</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Java: <code>zulu11.43.55-ca-jre11.0.9.1-linux_x64.tar.gz</code></p>
</li>
<li>
<p>Tomcat: <code>apache-tomcat-9.0.41.tar.gz</code></p>
</li>
<li>
<p>Derby: <code>db-derby-10.15.2.0-bin.tar.gz</code></p>
</li>
<li>
<p>WebBox: <code>wbx-3-dist.tar.xz</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Diese Dateien werden wie folgt entpackt:</p>
</div>
<div class="listingblock">
<div class="title">Kommandos zum Entpacken der Bestandteile einer WebBox</div>
<div class="content">
<pre class="highlightjs highlight"><code data-lang="Bash" class="language-Bash hljs">cd /home/fred
mkdir -p wbx-inst/{java,tc,db,wbx}
cd Downloads
tar -xf zulu11.43.55-ca-jre11.0.9.1-linux_x64.tar.gz -C ../wbx-inst/java --strip 1
tar -xf apache-tomcat-9.0.41.tar.gz -C ../wbx-inst/tc --strip 1
tar -xf db-derby-10.15.2.0-bin.tar.gz -C ../wbx-inst/db --strip 1
tar -xf wbx-3-dist.tar.xz -C ../wbx-inst/wbx --strip 1</code></pre>
</div>
</div>
<div class="paragraph">
<p>Damit sind die benötigten Programme bereit zur Verwendung. Der Ordner <code>/home/fred/wbx-inst/wbx</code> wird für den Rest dieses Dokuments <code>$WBX-INST</code> genannt. Im nächsten Abschnitt ist beschrieben, wie die WebBox zur Nutzung konfiguriert wird.</p>
</div>
</div>
<div class="sect2">
<h3 id="wbx-einrichten"><a class="anchor" href="#wbx-einrichten"></a>5.2. Zusammenbau</h3>
<div class="paragraph">
<p>Die WebBox ist standardmäßig so eingerichtet, wie es in <a href="#wbx-inst">Installation</a> und <a href="#wbx-prg-buendeln">Programme bündeln</a> beschrieben ist. Die von der WebBox benötigten Programme <a href="#wbx-eigenbau">Java, Tomcat und Derby</a> können aber auch anders eingebunden werden.</p>
</div>
<div class="sect3">
<h4 id="wbx-vorinst"><a class="anchor" href="#wbx-vorinst"></a>5.2.1. Vorhandene Programme verwenden</h4>
<div class="paragraph">
<p>Sind <a href="#wbx-eigenbau">Java, Tomcat und Derby</a> bereits vor der Installation der WebBox auf der Maschine vorhanden, ist in der Regel bei deren Installation ein systemweiter Pfadeintrag für <code>JAVA_HOME</code>, <code>CATALINA_HOME</code> oder <code>DERBY_HOME</code> gemacht worden. In diesen Fällen können die so vorliegenden Programme von der WebBox mitgenutzt werden. Die Pfadangabe im Start- / Stoppskript der WebBox kann dann auskommentiert bleiben, wie es im Auslieferungszustand der WebBox enthalten ist.</p>
</div>
<div class="listingblock">
<div class="title">Auslieferungszustand der WebBox: Die Ablageorte von Java, Tomcat und Derby sind auskommentiert</div>
<div class="content">
<pre class="highlightjs highlight"><code data-lang="Bash" class="language-Bash hljs"># export JAVA_HOME=
# export CATALINA_HOME=
# export DERBY_HOME=</code></pre>
</div>
</div>
<div class="paragraph">
<p>Diese Betriebsart entspricht der Anordnung gemäß folgendem Schaubild.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="bilder/wbx-3.png" alt="WebBox">
</div>
<div class="title">Abb. 1. die WebBox mit vorhandenen Programmen</div>
</div>
<div class="sect4">
<h5 id="_programme_von_anderer_stelle_einbinden"><a class="anchor" href="#_programme_von_anderer_stelle_einbinden"></a>Programme von anderer Stelle einbinden</h5>
<div class="paragraph">
<p>Sollen Teile der für die WebBox erforderlichen Ablaufumgebung anders eingebunden sein, müssen die Pfade zu <a href="#wbx-eigenbau">Java, Tomcat und Derby</a> im Start- und Stoppskript, der Datei <code>$WBX-INST/wbx</code>, eingetragen werden wie im folgenden Beispiel.</p>
</div>
<div class="listingblock">
<div class="title">Beispiel für die Angabe individueller Ablageorte von Java, Tomcat und Derby</div>
<div class="content">
<pre class="highlightjs highlight"><code data-lang="Bash" class="language-Bash hljs">export JAVA_HOME=/home/fred/wbx-inst/java
export CATALINA_HOME=/home/fred/wbx-inst/tc
export DERBY_HOME=/home/fred/wbx-inst/db</code></pre>
</div>
</div>
</div>
</div>
<div class="sect3">
<h4 id="wbx-prg-buendeln"><a class="anchor" href="#wbx-prg-buendeln"></a>5.2.2. Programme bündeln</h4>
<div class="paragraph">
<p>Eine weitere Variante ist es, <a href="#wbx-eigenbau">Java, Tomcat und Derby</a> in den Ordner der WebBox zu kopieren und mit der WebBox zu bündeln. Die dafür vorgesehenen Ordner sind</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>$WBX-INST/.conf/prg/java</code></p>
</li>
<li>
<p><code>$WBX-INST/.conf/prg/tc-home</code> (nur <code>CATLAINA_HOME/bin</code> und <code>CATLAINA_HOME/lib</code>)</p>
</li>
<li>
<p><code>$WBX-INST/.conf/prg/derby</code> (nur <code>lib</code>)</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Werden Java, Tomcat und Derby in die obigen Ordner der WebBox kopiert, kann das Start- / Stoppskript der WebBox im Auslieferungszustand belassen werden, mit auskommentierten Pfadangaben wie in <a href="#wbx-vorinst">Vorhandene Programme verwenden</a>. Die Nutzung der WebBox kann dann mit allen Bestandteilen aus einem Ordner heraus erfolgen wie im folgenden Schaubild.</p>
</div>
<div class="imageblock">
<div class="content">
<img src="bilder/wbx-4.png" alt="WebBox">
</div>
<div class="title">Abb. 2. die WebBox mit gebündelten Programmen</div>
</div>
<div class="paragraph">
<p>In dieser Variante lässt sich die WebBox mit allen Bestandteilen und Daten einfach transportieren. Es muss stets nur der WebBox-Ordner kopiert werden.</p>
</div>
</div>
</div>
<div class="sect2">
<h3 id="wbx-daten-apps"><a class="anchor" href="#wbx-daten-apps"></a>5.3. Daten und Apps</h3>
<div class="paragraph">
<p>Die Ablageorte für Daten und Apps sind standardmäßig auf die Ordner <code>$WBX-INST/data</code> und <code>$WBX-INST/apps</code> festgelegt. Sie können auf einen beliebigen anderen Ort umgestellt werden, indem im Start- und Stoppskript, der Datei <code>$WBX-INST/wbx</code>, die Einträge der Umgebungsvariablen <code>WBX_DATA</code> und <code>WBX_APPS</code> entsprechend geändert werden.</p>
</div>
<div class="paragraph">
<p>Diese Angaben werden zudem als Java-Systemvariablen <code>wbx.data</code> und <code>wbx.apps</code> an <a href="#wbx-eigenbau">Tomcat</a> weitergereicht. Auf diese Weise können sie 'von außen' auch dem Java-Prozess von Tomcat und allen Webapps übermittelt werden. Ein auf der WebBox laufendes Java-Programm kann die Pfade zu den Daten und Apps der WebBox mit <code>System.getProperty("wbx.data")</code> und <code>System.getProperty("wbx.apps")</code> ermitteln.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="wbx-tech-info"><a class="anchor" href="#wbx-tech-info"></a>6. Technische Infos</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Die WebBox kombiniert die folgendenden Einzelkomponenten zu einer ausführbaren Einheit.</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Java (Virtuelle Maschine und Ablaufumgebung)</p>
</li>
<li>
<p>Tomcat (Web- und Applikationsserver)</p>
</li>
<li>
<p>Derby (relationales Datenbanksystem)</p>
</li>
<li>
<p>WebBox Konfiguration</p>
<div class="ulist">
<ul>
<li>
<p>Nutzerverwaltung</p>
<div class="ulist none">
<ul class="none">
<li>
<p>Nutzerdatenbank</p>
</li>
</ul>
</div>
</li>
<li>
<p>Dateiverwaltung</p>
</li>
<li>
<p>Datenablage</p>
</li>
<li>
<p>Root App</p>
</li>
<li>
<p>WebBox Lib</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>Die Konfiguration dieser Komponenten ist nachfolgend beschrieben.</p>
</div>
<div class="sect2">
<h3 id="wbx-struktur"><a class="anchor" href="#wbx-struktur"></a>6.1. Ordnerstruktur</h3>
<div class="paragraph">
<p>Eine WebBox besitzt die folgende Struktur.</p>
</div>
<div class="listingblock">
<div class="content">
<pre>wbx ............... eine WebBox
 
  apps ............ Webanwendungen der WebBox-Nutzer
    ROOT .......... Startseite der WebBox
    jslib ......... zentrale JavaScript-Bibliotheken
    fonts ......... zentrale Schriftarten
    um ............ Nutzerverwaltung
    file-cms ...... Dateiverwaltung
 
  data ............ WebBox Datenablage
    db ............ relationale Datenbanken (von Derby verwaltet)
      udb ......... WebBox Nutzer und Rollen
    home .......... private Daten
    www ........... oeffentliche Daten
    logs .......... Logs
    tc-work ....... Tomcat Cache
    tc-temp ....... Temp-Verzeichnis für Webapps
 
  .conf ........... interne Inhalte der WebBox
    bin ........... WebBox-Skripte
    prg ........... WebBox-Software
      derby ....... Derby (optional)
      java ........ Java (optional)
      tc-home ..... Tomcat CATALINA_HOME (optional)
        bin ....... Tomcat-Skripte
        conf ...... leer/ungenutzt
        lib ....... Tomcat-Bibliotheken
        logs ...... leer/ungenutzt
        temp ...... leer/ungenutzt
        webapps ... leer/ungenutzt
        work ...... leer/ungenutzt
      tc-base ..... WebBox CATALINA_BASE
        bin ....... nur tomcat-juli.jar
        conf ...... Tomcat-Konfiguration für die WebBox
        lib ....... Bibliotheken für die WebBox
        logs ...... leer/ungenutzt
        temp ...... leer/ungenutzt
        webapps ... leer/ungenutzt
        work ...... leer/ungenutzt</pre>
</div>
</div>
<div class="paragraph">
<p>Der Ordner <code>data</code> ist für veränderliche Daten des Nutzers vorgesehen, die Konfiguration ist in <a href="#wbx-ablage">Datenablage</a> näher erläutert.</p>
</div>
</div>
<div class="sect2">
<h3 id="wbx-java-konf"><a class="anchor" href="#wbx-java-konf"></a>6.2. Java</h3>
<div class="paragraph">
<p>An der Konfiguration von Java macht die WebBox keine Änderungen.</p>
</div>
</div>
<div class="sect2">
<h3 id="wbx-tc-konf"><a class="anchor" href="#wbx-tc-konf"></a>6.3. Tomcat</h3>
<div class="paragraph">
<p>Die Konfiguration von Tomcat wurde für die WebBox angepasst und befindet sich in <code>$WBX-INST/.conf/prg/tc-base</code>. Die folgenden Änderungen an der Standardkonfiguration von Tomcat wurden unternommen.</p>
</div>
<div id="wbx-port" class="dlist">
<dl>
<dt class="hdlist1">Port</dt>
<dd>
<p>Der Port der WebBox ist in der Datei <code>$WBX-INST/.conf/prg/tc-base/conf/server.xml</code> eingestellt. Dort ist im Element <code>Connector</code> das Attribut <code>port</code> standardmäßig auf <code>8089</code> gesetzt. An dieser Stelle kann ohne Auswirkung auf die Konfiguration der WebBox ein beliebiger anderer Port eingetragen werden.</p>
</dd>
<dt class="hdlist1">JarScanner</dt>
<dd>
<p>In <code>$WBX-INST/.conf/prg/tc-base/conf/context.xml</code> wurde der Eintrag <code>&lt;JarScanner scanManifest="false"/&gt;</code> hinzugefügt (Quelle: <a href="http://www.skybert.net/java/tomcat-fails-to-scan-jar-file-that-i-never-asked-for/" class="bare">http://www.skybert.net/java/tomcat-fails-to-scan-jar-file-that-i-never-asked-for/</a> ).</p>
</dd>
<dt class="hdlist1">Datenbanktreiber</dt>
<dd>
<p>Zur Verwendung von Derby Datenbanken über den ClientDriver müssen ab Derby 10.15 die folgenden JARs im Classpath sein: <code>derbyclient.jar</code>, <code>derbyshared.jar</code> und <code>derbytools.jar</code>. Diese sind in <code>$WBX-INST/.conf/prg/tc-base/lib</code> abgelegt.</p>
</dd>
<dt class="hdlist1">Ablageort der Log-Dateien</dt>
<dd>
<p>In der Datei <code>$WBX-INST/.conf/prg/tc-base/conf/logging.properties</code> wurden die Ablageorte für Log-Dateien auf das Verzeichnis <code>${wbx.data}/logs</code> umgestellt. In <code>$WBX-INST/.conf/prg/tc-base/conf/server.xml</code> wurde das Attribut <code>directory</code> für das <code>AccessLogValve</code> auf den Ordner <code>${wbx.data}/logs</code> umgestellt.</p>
</dd>
<dt class="hdlist1">Ablageort für Apps</dt>
<dd>
<p>In <code>$WBX-INST/.conf/prg/tc-base/conf/server.xml</code> wurde das Attribut <code>appBase</code> für den Host <code>localhost</code> auf <code>${wbx.apps}</code> umgestellt.</p>
</dd>
<dt class="hdlist1">Tomcat Work-Ordner</dt>
<dd>
<p>In <code>$WBX-INST/.conf/prg/tc-base/conf/server.xml</code> wurde im Element <code>Host</code> der Engine <code>Catalina</code> das Attribut <code>workDir</code> hinzugefügt. Es verweist auf <code>${wbx.data}/tc-work/Catalina</code>, damit nicht ins <code>CATALINA_BASE</code>-Verzeichnis geschrieben wird.</p>
</dd>
<dt class="hdlist1">Kontexte <code>data</code> und <code>home</code></dt>
<dd>
<p>In <code>$WBX-INST/.conf/prg/tc-base/conf/Catalina/localhost</code> wurden die Dateien <code>data.xml</code> und <code>home.xml</code> angelegt. Sie verweisen auf <code>${wbx.data}/www</code> sowie <code>${wbx.data}/home</code> und sorgen so dafür, dass Tomcat die Inhalte dieser beiden Datenverzeichnisse ausgibt. Deren Anlage beschreibt das Kapitel Dateiverwaltung. Ihre Konfiguration ist im Kapitel Datenablage beschrieben.</p>
</dd>
<dt class="hdlist1">Single Sign-On</dt>
<dd>
<p>In <code>$WBX-INST/.conf/prg/tc-base/conf/server.xml</code> wurde das SingleSignOn valve eingeschaltet. Eine Benutzeranmeldung wirkt über alle Webanwendungen der WebBox hinweg.</p>
</dd>
</dl>
</div>
<div class="sect3">
<h4 id="wbx-tc-klein"><a class="anchor" href="#wbx-tc-klein"></a>6.3.1. Tomcat verkleinern</h4>
<div class="paragraph">
<p>Das Installationspaket von Tomcat ist mehr als 16 MB groß. Für die WebBox ist nur der Inhalt in den Ordnern <code>bin</code> und <code>lib</code> erforderlich. Diese beiden Ordner allein erfordern nur 10 MB. Verzichtet man auch auf Java Server Pages (JSP), lässt sich Tomcat auf 4,8 MB verkleinern.</p>
</div>
<div class="paragraph">
<p>Beim Verzicht auf JSP können alle Klassenbibliotheken weggelassen werden ausser den folgenden:</p>
</div>
<div class="dlist">
<dl>
<dt class="hdlist1">Tomcat-Ordner <code>lib</code></dt>
<dd>
<p>annotations-api.jar, catalina.jar, catalina-ant.jar, jaspic-api.jar, serlet-api.jar, tomcat-api.jar, tomcat-coyote.jar, tomcat-dbcp.jar, tomcat-jdbc.jar, tomcat-jni.jar, tomcat-util-scan.jar</p>
</dd>
</dl>
</div>
<div class="sect4">
<h5 id="wbx-jsp-aus"><a class="anchor" href="#wbx-jsp-aus"></a>JSP ausschalten</h5>
<div class="paragraph">
<p>Wenn JSP weggelassen werden, müssen diese in der Datei <code>$WBX-INST/.conf/prg/tc-base/conf/web.xml</code> deaktiviert werden. Dazu wird das JSP-Servlet und das JSP-Servlet-Mapping auskommentiert, damit die fehlenden JSP-Bibliotheken nicht zu Abbrüchen beim Start des Servers führen.</p>
</div>
</div>
</div>
</div>
<div class="sect2">
<h3 id="wbx-derby-konf"><a class="anchor" href="#wbx-derby-konf"></a>6.4. Derby</h3>
<div class="paragraph">
<p>Mit dem Start der WebBox wird ein <a href="https://db.apache.org/derby/papers/DerbyTut/ns_intro.html">Derby Network Server</a> auf Port 1528 gestartet. Der Port kann im Startskript, der Datei <code>$WBX-INST/.conf/bin/dns</code>, in der Variablen <code>DERBY_PORT</code> geändert werden.</p>
</div>
<div class="paragraph">
<p>Ein geänderter Port für Derby muss auch allen Anwendungen bekannt gegeben werden, die eine Datenbank benutzen. Im Auslieferungszustand der WebBox betrifft das</p>
</div>
<div class="ulist">
<ul>
<li>
<p>Tomcat, Element <code>GlobalNamingResources</code> in der Datei <code>$WBX-INST/.conf/prg/tc-base/conf/server.xml</code></p>
</li>
<li>
<p>die Nutzerverwaltung, Datei <code>$WBX-INST/apps/um/META-INF/context.xml</code></p>
</li>
</ul>
</div>
<div class="paragraph">
<p>Die oben erwähnte Datei <code>context.xml</code> der Nutzerverwaltung ist ein Beispiel für das Einbinden einer Derby-Datenbank in andere Webanwendungen, die auf der WebBox laufen. Webanwendungen können mit <code>META-INF/context.xml</code> eine JDBC-Datenquelle deklarieren und müssen damit im Programmcode nur den Namen der Datenquelle laut Attribut <code>name</code> verwenden. Einzelheiten der Konfiguration werden so wirksam aus dem Programmcode ferngehalten.</p>
</div>
<div class="paragraph">
<p>Die Verwendung von Derby-Datenbanken in Java-Programmen ist beispielsweise in der <a href="https://uhilger.de/data/pg/baselink/anleitung.adoc">Dokumentation von BaseLink</a> beschrieben.</p>
</div>
</div>
<div class="sect2">
<h3 id="wbx-konf-um"><a class="anchor" href="#wbx-konf-um"></a>6.5. Nutzerverwaltung</h3>
<div class="paragraph">
<p>Die Nutzerverwaltung ist ein zentraler Bestandteil der WebBox, der Hand in Hand mit der Container Managed Security des Servlet Containers geht. Die WebBox ist in diesem Punkt konform mit der Java-Spezifikation: Webanwendungen auf der Grundlage der Java-Spezifikation können die Authentifizierung und Autorisierung der WebBox nahtlos einbinden.</p>
</div>
<div class="paragraph">
<p>Für die WebBox werden Benutzer und Rollen über eine mitgelieferte Webanwendung in einer relationalen Datenbank gespeichert und verwaltet. Die Konfiguration zur Verwendung der Nutzerdatenbank ist in der <a href="https://uhilger.de/data/pg/Nutzerverwaltung/anleitung.adoc#tc-realm">Anleitung</a> beschrieben und so wie dort beschrieben in der Konfiguration der WebBox im Ordner <code>.conf/prg/tc-base/conf</code> eingerichtet.</p>
</div>
<div class="paragraph">
<p>Die Kennworte von Benutzern werden in der Nutzerdatenbank der WebBox verschlüsselt gespeichert. Sie können bei Einblick in die Datenbank nicht im Klartext gelesen werden.</p>
</div>
</div>
<div class="sect2">
<h3 id="wbx-ablage"><a class="anchor" href="#wbx-ablage"></a>6.6. Datenablage</h3>
<div class="paragraph">
<p>In <code>$WBX-INST/data/home</code> liegen Daten, die die WebBox nur an den angemeldeten Benutzer ausgibt. Der Ordner <code>$WBX-INST/data/www</code> enthält öffentliche Daten, die von der WebBox als öffentliche Inhalte ohne Einschränkung ausgeliefert werden. Die Einstellungen hierfür sind in den in ihnen befindlichen Ordnern namens <code>WEB-INF</code> konfiguriert. Diese sind in der Dateiverwaltung der WebBox nicht sichtbar. Ihr Name oder Inhalt darf nicht verändert werden.</p>
</div>
<div class="paragraph">
<p>Die Datenablage kann allerdings so wie sie ist an einen beliebigen anderen Ort verschoben werden. Der neue Ablageort muss dann in der Konfiguration der WebBox vermerkt werden, wie in <a href="#wbx-daten-apps">Daten und Apps</a> beschrieben.</p>
</div>
</div>
<div class="sect2">
<h3 id="wbx-root-app"><a class="anchor" href="#wbx-root-app"></a>6.7. WebBox Startseite</h3>
<div class="paragraph">
<p>Die Startseite der WebBox befindet sich im Ordner <code>$WBX-INST/apps/ROOT</code>. Sie kann beliebig geändert werden.</p>
</div>
</div>
<div class="sect2">
<h3 id="wbx-konf-file-cms"><a class="anchor" href="#wbx-konf-file-cms"></a>6.8. Dateiverwaltung</h3>
<div class="paragraph">
<p>Die <a href="bedienung.adoc#wbx-file-cms">Dateiverwaltung</a> der WebBox ist eine Java-Webanwendung und befindet sich im Ordner <code>$WBX-INST/apps/file-cms</code>. Die Dateiverwaltung ist speziell für die Verwaltung der Inhalte der <a href="#wbx-ablage">WebBox-Datenablage</a> via Browser ausgelegt und vorkonfiguriert. Sie kann zudem prinzipiell mit beliebigen Datei-Systemen verwendet werden.</p>
</div>
<div class="paragraph">
<p>Ihr Quellcode und weitere Informationen sind im <a href="https://uhilger.de/gitblit/docs/file-cms.git">Code Repository</a> enthalten.</p>
</div>
</div>
<div class="sect2">
<h3 id="wbx-lib"><a class="anchor" href="#wbx-lib"></a>6.9. WebBox Lib</h3>
<div class="paragraph">
<p>Die Datei <code>wb-lib.jar</code> im Ordner <code>$WBX-INST/.conf/tc-base/lib</code> enthält Java-Klassen, die für die Ausgabe von Inhalten der <a href="#wbx-ablage">WebBox-Datenablage</a> wichtig sind. Weitere Informationen und ihr Quellcode ist im <a href="https://uhilger.de/gitblit/docs/wbx-lib.git">Code Repository</a> enthalten.</p>
</div>
</div>
<div class="sect2">
<h3 id="wbx-erweitern"><a class="anchor" href="#wbx-erweitern"></a>6.10. WebBox erweitern</h3>
<div class="paragraph">
<p>Die WebBox kann mit Webanwendungen erweitert werden, die der <a href="https://javaee.github.io/servlet-spec/downloads/servlet-3.1/Final/servlet-3_1-final.pdf#G14.999461">Java Servlet Spezifikation</a> folgen. Solche Webanwendungen werden gewöhnlich als Dateien mit Endung <code>.war</code> für <strong>w</strong>eb <strong>ar</strong>chive ausgeliefert. Eine <code>.war</code>-Datei wird einfach in den Ordner <code>$WBX-INST/apps</code> gelegt, um die Webanwendung mit der WebBox auszuführen. Wird beispielsweise die Datei <code>meine-app.war</code> so installiert, ist sie aufrufbar mit</p>
</div>
<div class="paragraph">
<p><code>http://localhost:8089/meine-app/</code></p>
</div>
<div class="paragraph">
<p>Erfordert die App eine Datenbank, wird gewöhnlich die Java Database Connectivity (JDBC) eingesetzt. Die App kann dann das Datenbanksystem der WebBox verwenden wie im Kapitel <a href="#wbx-derby-konf">Derby</a> beschrieben.</p>
</div>
<div class="sect3">
<h4 id="wbx-statischer-inhalt"><a class="anchor" href="#wbx-statischer-inhalt"></a>6.10.1. Statische Webseiten</h4>
<div class="paragraph">
<p>Auf ähnliche Weise können auch statische Inhalte wie HTML-Seiten, Bilder oder Javscript-Programme genutzt werden. Im einfachsten Fall wird ein neuer Ordner im Ordner <code>$WBX-INST/apps</code> erstellt und die betreffenden Inhalte dort hineingelegt. Wird zum Beispiel ein neuer Ordner <code>mein-webinhalt</code> mit einer Datei <code>index.html</code> darin in den Order <code>$WBX-INST/apps</code> gelegt, ist der Inhalt anschließend aufrufbar mit</p>
</div>
<div class="paragraph">
<p><code>http://localhost:8089/mein-webinhalt/</code></p>
</div>
<div class="paragraph">
<p>Auf dieselbe Weise funktionieren statische Inhalte, die in den Ordner <code>$WBX-INST/data/www</code> gelegt werden. Hier ist allerdings der Unterschied, dass sie dort auch mit der <a href="bedienung.adoc#wbx-file-cms">Dateiverwaltung</a> der WebBox verwendet werden können.</p>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="_dokumenthistorie"><a class="anchor" href="#_dokumenthistorie"></a>7. Dokumenthistorie</h2>
<div class="sectionbody">
<table class="tableblock frame-all grid-all stretch">
<caption class="title">Tabelle 1. Änderungen</caption>
<colgroup>
<col style="width: 11.1111%;">
<col style="width: 22.2222%;">
<col style="width: 22.2222%;">
<col style="width: 44.4445%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-center valign-bottom">Nr</th>
<th class="tableblock halign-left valign-bottom">Datum</th>
<th class="tableblock halign-left valign-bottom">Autor</th>
<th class="tableblock halign-left valign-bottom">Beschreibung</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-center valign-bottom"><p class="tableblock">1</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">9. Mai 2020</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">Ulrich</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">Erste Anlage der Version 3 der WebBox</p></td>
</tr>
<tr>
<td class="tableblock halign-center valign-bottom"><p class="tableblock">2</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">10. Januar 2021</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">Ulrich</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">Neue Dokumentation Version 3</p></td>
</tr>
<tr>
<td class="tableblock halign-center valign-bottom"><p class="tableblock">3</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">16. Januar 2021</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">Ulrich</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">V3.1: Installation, Sicherung</p></td>
</tr>
<tr>
<td class="tableblock halign-center valign-bottom"><p class="tableblock">4</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">22. Januar 2021</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">Ulrich</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">V3.1: Aufteilung der Dokumente</p></td>
</tr>
<tr>
<td class="tableblock halign-center valign-bottom"><p class="tableblock">5</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">24. Januar 2021</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">Ulrich</p></td>
<td class="tableblock halign-left valign-bottom"><p class="tableblock">V3.1: Verweise angepasst</p></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div id="footer">
<div id="footer-text">
Version 3.1<br>
Letzte Änderung 2021-01-24 13:47:49 +0100
</div>
</div>
<link rel="stylesheet" href="/jslib/highlight-adoc/styles/github.min.css">
<script src="/jslib/highlight-adoc/highlight.min.js"></script>
<script>hljs.initHighlighting()</script>
</body>
</html>