Dieser Artikel wird für die meisten weniger interessant sein – doch in meiner Firma wird diese Software bei vielen großgeschrieben. Warum ich diesen Artikel trotzdem hier veröffentliche – weil ich mich dermaßen über die Installation und vor allem über die Aktualisierung dieser und das Anpassen geärgert habe. Vielleicht hilfreich für andere.
Bei Testlink handelt es sich um eine Software für Softwareentwickler, zum Testen – genau weiß ich es ehrlich gesagt auch nicht. Mehr zu dieser Software (oder auch nicht

) gibt es hier, wozu man die Software wirklich braucht, wissen wohl nur die, die sie nutzen.
Nun, wobei ging es bei meinem Problem? Die Software war auf einem uralten Ubuntu installiert, auch Testlink dementsprechend alt. Zum Aktualisieren wäre gewesen – von einer der ersten Versionen auf die aktuellste. Manuell gelingt dies so:
Software herunterladen, Backup der Datenbank, Archiv entpacken – als neues Verzeichnis, hoffen, dass alle Abhängigkeiten in den nötigen Versionen vorhanden sind. In das neue Verzeichnis wechseln und den Webserver darauf anpassen – hoffen, dass die Datenbank keinen Schluckauf bekommen hat, … Das ganze 20 Mal (siehe Testlink-Upgrade).
Ich, braucht ihr wirklich alle Daten aus dem letzten Jahrzehnt – nein, Linux zum Dank nicht. Also – es steht ein Docker-Image bereit, dieses erleichtert das Aktualisieren dieses Theaters einer Software.
Testlink mittels Docker aufsetzen
Nun, eigentlich ist es ganz einfach, unter Docker – Bitnami – Testlink steht ein Docker-Image bereit – und die dazugehörige Beschreibung. Gleich einmal zu Beginn, nutzt nicht den Befehl (natürlich wird zuerst ein Verzeichnis für die Datenbank und die Uploads angelegt und diese an den Benutzer 1001 übergeben):
docker network create testlink-network
docker volume create --name mariadb_data
docker run -d --name mariadb --env ALLOW_EMPTY_PASSWORD=yes --env MARIADB_USER=bn_testlink --env MARIADB_PASSWORD=bitnami --env MARIADB_DATABASE=bitnami_testlink --network testlink-network --volume mariadb_data:/bitnami/mariadb bitnami/mariadb:latest
Und:
docker volume create --name testlink_data
docker run -d --name testlink -p 8080:8080 -p 8443:8443 --env ALLOW_EMPTY_PASSWORD=yes --env TESTLINK_DATABASE_USER=bn_testlink --env TESTLINK_DATABASE_PASSWORD=bitnami --env TESTLINK_DATABASE_NAME=bitnami_testlink --network testlink-network --volume testlink_data:/bitnami/testlink bitnami/testlink:latest
Das Erste, was bei mir versagt hat – das Netzwerk „testlink-network„, es hat so einen Neustart überlebt, dann aber ist am nächsten Tag die Datenbank verschwunden, weil das Netzwerk zwischen beiden Containern aus welchem Grund auch immer nicht mehr funktioniert hat. Glücklicherweise legt der kluge Admin täglich ein Backup an, half aber nichts – Testlink und die Datenbank wollten nicht mehr zusammen.
Nun, was macht man – den umständlicheren Weg, das ganze Werk über Docker-Compose noch einmal – ein paar Tests, ob die Container auch mit der Backup-Datenbank funktionieren – die Passwörter wurden in der Software von den Entwicklern ja auch gewechselt – wird dies alles noch funktionieren? Ja, natürlich. Docker-Compose erfordert zwar etwas mehr Arbeit – aber es funktioniert. Ich also:
version: '2'
services:
mariadb:
image: 'bitnami/mariadb:latest'
volumes:
# - 'mariadb_data:/bitnami/mariadb'
- /opt/mariadb:/bitnami/mariadb
environment:
- ALLOW_EMPTY_PASSWORD=yes
- MARIADB_USER=testlink
- MARIADB_PASSWORD=Passwort_der_Datenbank
- MARIADB_DATABASE=testlink
restart: always
application:
image: 'bitnami/testlink:latest'
ports:
- '8080:8080'
volumes:
- 'apache_data:/bitnami/apache'
# - 'testlink_data:/bitnami/testlink'
- /opt/testlink:/bitnami/testlink
depends_on:
- mariadb
environment:
- ALLOW_EMPTY_PASSWORD=yes
- TESTLINK_PASSWORD=Testlink-Passwort
- TESTLINK_USERNAME=Testlink-Benutzer
- TESTLINK_DATABASE_USER=testlink
- TESTLINK_DATABASE_PASSWORD=Passwort_der_Datenbank
- TESTLINK_DATABASE_NAME=testlink
restart: always
volumes:
mariadb_data:
driver: local
apache_data:
driver: local
testlink_data:
driver: local
(Passwörter wurden hier natürlich geändert …) Mit „– /opt/mariadb:/bitnami/mariadb“ habe ich das persistente Verzeichnis am Host für die Datenbank angegeben (erst der Host, dann das Verzeichnis im Container), mit „– /opt/testlink:/bitnami/testlink“ das Verzeichnis für die Uploads (Dokumente).
Die Datei auf dem Host in einem eigenen Verzeichnis gespeichert und auf dem Terminal als root ein beherztes:
docker-compose up -d
Zuvor natürlich die alten beiden Container gestoppt. Die Datenbank wurde nicht überschrieben, alle Daten und Benutzer, Dokumente da:

Nun, das nächste Problem an diesem Mistding von einer Software – dieses Problem ist nicht Testlink selbst, sondern das von Bitnami erstellte Docker-Image. Es handelt sich dabei um ein sogenanntes Mini-Deb-Image. Möglichst klein gehalten – und darin gibt es nur den Benutzer 1001. Kein root – man kann also etwa mit:
docker exec -it image bash
hinein wechseln, aber nichts darin machen, als sich darin umsehen – es gibt ja keinen root, auch kein „sudo„. Und mein Problem – die Zeitzone, also auch die Uhrzeit stimmte nicht, war auch beim ersten Befehl zur Erstellung so – es gibt keine Variable, mit der man die Zeitzone anpassen kann, der Container fragt auch den Host nicht, wie spät es ist. Die Entwickler nicht erfreut – also noch einmal ran. Docker-Doku lesen, wie bekommt man in so einem Container root-Rechte – ganz einfach:
docker exec -it -u root image bash
Und dann kannst Du darin machen, was Du willst, Software installieren – etwa den NTP-Daemon, der die Uhrzeit für die entsprechende Zeitzone abfragt, und man kann die Zeitzone anpassen:

Und das Aktualisieren gelingt ganz einfach mittels:
docker-compose stop altes-testlink-image
docker pull bitnami/testlink:latest
docker-compose rm -v altes-testlink-image
docker-compose up -d
Noch keine Reaktion