{"id":2132,"date":"2023-09-09T22:41:55","date_gmt":"2023-09-09T20:41:55","guid":{"rendered":"https:\/\/linux-bibel.at\/?p=2132"},"modified":"2023-09-09T22:41:57","modified_gmt":"2023-09-09T20:41:57","slug":"testlink-testmanagement-fuer-entwickler-unter-linux-mittels-docker-nutzen","status":"publish","type":"post","link":"https:\/\/linux-bibel.at\/index.php\/2023\/09\/09\/testlink-testmanagement-fuer-entwickler-unter-linux-mittels-docker-nutzen\/","title":{"rendered":"Testlink &#8211; Testmanagement f\u00fcr Entwickler unter Linux mittels Docker nutzen"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Dieser Artikel wird f\u00fcr die meisten weniger interessant sein &#8211; doch in meiner Firma wird diese Software bei vielen gro\u00dfgeschrieben. Warum ich diesen Artikel trotzdem hier ver\u00f6ffentliche &#8211; weil ich mich derma\u00dfen \u00fcber die Installation und vor allem \u00fcber die Aktualisierung dieser und das Anpassen ge\u00e4rgert habe. Vielleicht hilfreich f\u00fcr andere.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bei Testlink handelt es sich um eine Software f\u00fcr Softwareentwickler, zum Testen &#8211; genau wei\u00df ich es ehrlich gesagt auch nicht. Mehr zu dieser Software (<em>oder auch nicht<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.linux-bibel-oesterreich.at\/images\/smilies\/icon_e_biggrin.gif\" alt=\":D\" title=\"\u00dcbergl\u00fccklich\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;) gibt es&nbsp;<a href=\"https:\/\/testlink.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">hier<\/a>, wozu man die Software wirklich braucht, wissen wohl nur die, die sie nutzen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nun, wobei ging es bei meinem Problem? Die Software war auf einem uralten Ubuntu installiert, auch Testlink dementsprechend alt. Zum Aktualisieren w\u00e4re gewesen &#8211; von einer der ersten Versionen auf die aktuellste. Manuell gelingt dies so:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Software herunterladen, Backup der Datenbank, Archiv entpacken &#8211; als neues Verzeichnis, hoffen, dass alle Abh\u00e4ngigkeiten in den n\u00f6tigen Versionen vorhanden sind. In das neue Verzeichnis wechseln und den Webserver darauf anpassen &#8211; hoffen, dass die Datenbank keinen Schluckauf bekommen hat, &#8230; Das ganze 20 Mal (siehe&nbsp;<a href=\"https:\/\/github.com\/TestLinkOpenSourceTRMS\/testlink-code\/#5-upgrade-and-migration\" target=\"_blank\" rel=\"noreferrer noopener\">Testlink-Upgrade<\/a>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ich, braucht ihr wirklich alle Daten aus dem letzten Jahrzehnt &#8211; nein, Linux zum Dank nicht. Also &#8211; es steht ein\u00a0Docker-Image bereit, dieses erleichtert das Aktualisieren dieses Theaters einer Software.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testlink mittels Docker aufsetzen<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Nun, eigentlich ist es ganz einfach, unter\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/hub.docker.com\/r\/bitnami\/testlink\/\" target=\"_blank\">Docker &#8211; Bitnami &#8211; Testlink<\/a>\u00a0steht ein Docker-Image bereit &#8211; und die dazugeh\u00f6rige Beschreibung. Gleich einmal zu Beginn, nutzt nicht den Befehl (<em>nat\u00fcrlich wird zuerst ein Verzeichnis f\u00fcr die Datenbank und die Uploads angelegt und diese an den Benutzer 1001 \u00fcbergeben<\/em>):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker network create testlink-network\ndocker volume create --name mariadb_data\ndocker 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<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Und:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker volume create --name testlink_data\ndocker 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<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Das Erste, was bei mir versagt hat &#8211; das Netzwerk &#8222;<strong>testlink-network<\/strong>&#8222;, es hat so einen Neustart \u00fcberlebt, dann aber ist am n\u00e4chsten Tag die Datenbank verschwunden, weil das Netzwerk zwischen beiden Containern aus welchem Grund auch immer nicht mehr funktioniert hat. Gl\u00fccklicherweise legt der kluge Admin t\u00e4glich ein Backup an, half aber nichts &#8211; Testlink und die Datenbank wollten nicht mehr zusammen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nun, was macht man &#8211; den umst\u00e4ndlicheren Weg, das ganze Werk \u00fcber Docker-Compose noch einmal &#8211; ein paar Tests, ob die Container auch mit der Backup-Datenbank funktionieren &#8211; die Passw\u00f6rter wurden in der Software von den Entwicklern ja auch gewechselt &#8211; wird dies alles noch funktionieren? Ja, nat\u00fcrlich. Docker-Compose erfordert zwar etwas mehr Arbeit &#8211; aber es funktioniert. Ich also:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>version: '2'\nservices:\n  mariadb:\n    image: 'bitnami\/mariadb:latest'\n    volumes:\n#      - 'mariadb_data:\/bitnami\/mariadb'\n      - \/opt\/mariadb:\/bitnami\/mariadb\n    environment:\n      - ALLOW_EMPTY_PASSWORD=yes\n      - MARIADB_USER=testlink\n      - MARIADB_PASSWORD=Passwort_der_Datenbank\n      - MARIADB_DATABASE=testlink\n    restart: always\n  application:\n    image: 'bitnami\/testlink:latest'\n    ports:\n      - '8080:8080'\n    volumes:\n      - 'apache_data:\/bitnami\/apache'\n#      - 'testlink_data:\/bitnami\/testlink'\n      - \/opt\/testlink:\/bitnami\/testlink\n    depends_on:\n      - mariadb\n    environment:\n      - ALLOW_EMPTY_PASSWORD=yes\n      - TESTLINK_PASSWORD=Testlink-Passwort\n      - TESTLINK_USERNAME=Testlink-Benutzer\n      - TESTLINK_DATABASE_USER=testlink\n      - TESTLINK_DATABASE_PASSWORD=Passwort_der_Datenbank\n      - TESTLINK_DATABASE_NAME=testlink\n    restart: always\nvolumes:\n  mariadb_data:\n    driver: local\n  apache_data:\n    driver: local\n  testlink_data:\n    driver: local<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">(<em>Passw\u00f6rter wurden hier nat\u00fcrlich ge\u00e4ndert &#8230;<\/em>) Mit &#8222;<strong>&#8211; \/opt\/mariadb:\/bitnami\/mariadb<\/strong>&#8220; habe ich das persistente Verzeichnis am Host f\u00fcr die Datenbank angegeben (<em>erst der Host, dann das Verzeichnis im Container<\/em>), mit &#8222;<strong>&#8211; \/opt\/testlink:\/bitnami\/testlink<\/strong>&#8220; das Verzeichnis f\u00fcr die Uploads (<em>Dokumente<\/em>).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Die Datei auf dem Host in einem eigenen Verzeichnis gespeichert und auf dem\u00a0Terminal\u00a0als\u00a0root\u00a0ein beherztes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker-compose up -d<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Zuvor nat\u00fcrlich die alten beiden Container gestoppt. Die Datenbank wurde nicht \u00fcberschrieben, alle Daten und Benutzer, Dokumente da:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink-1024x576.jpeg\" alt=\"\" class=\"wp-image-2133\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink-1024x576.jpeg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink-300x169.jpeg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink-768x432.jpeg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink-1536x864.jpeg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink.jpeg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Nun, das n\u00e4chste Problem an diesem Mistding von einer Software &#8211; dieses Problem ist nicht Testlink selbst, sondern das von Bitnami erstellte Docker-Image. Es handelt sich dabei um ein sogenanntes Mini-Deb-Image. M\u00f6glichst klein gehalten &#8211; und darin gibt es nur den Benutzer 1001. Kein root &#8211; man kann also etwa mit:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker exec -it image bash<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">hinein wechseln, aber nichts darin machen, als sich darin umsehen &#8211; es gibt ja keinen root, auch kein &#8222;<strong>sudo<\/strong>&#8222;. Und mein Problem &#8211; die Zeitzone, also auch die Uhrzeit stimmte nicht, war auch beim ersten Befehl zur Erstellung so &#8211; es gibt keine Variable, mit der man die Zeitzone anpassen kann, der Container fragt auch den Host nicht, wie sp\u00e4t es ist. Die Entwickler nicht erfreut &#8211; also noch einmal ran. Docker-Doku lesen, wie bekommt man in so einem Container root-Rechte &#8211; ganz einfach:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker exec -it -u root image bash<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Und dann kannst Du darin machen, was Du willst, Software installieren &#8211; etwa den NTP-Daemon, der die Uhrzeit f\u00fcr die entsprechende Zeitzone abfragt, und man kann die Zeitzone anpassen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink-1-1024x576.jpeg\" alt=\"\" class=\"wp-image-2134\" srcset=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink-1-1024x576.jpeg 1024w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink-1-300x169.jpeg 300w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink-1-768x432.jpeg 768w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink-1-1536x864.jpeg 1536w, https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/09\/testlink-1.jpeg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Und das Aktualisieren gelingt ganz einfach mittels:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>docker-compose stop altes-testlink-image\ndocker pull bitnami\/testlink:latest\ndocker-compose rm -v altes-testlink-image\ndocker-compose up -d<\/code><\/pre>\n<div class=\"pld-like-dislike-wrap pld-custom\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir\" data-post-id=\"2132\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Hoch.png\" alt=\"Gef\u00e4llt mir\" \/>\r\n            <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">    <\/span>\r\n<\/div><div class=\"pld-dislike-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-dislike-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir nicht\" data-post-id=\"2132\" data-trigger-type=\"dislike\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Runter.png\" alt=\"Gef\u00e4llt mir nicht\" \/>\r\n            <\/a>\r\n    <span class=\"pld-dislike-count-wrap pld-count-wrap\"><\/span>\r\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Dieser Artikel wird f\u00fcr die meisten weniger interessant sein &#8211; doch in meiner Firma wird diese Software bei vielen gro\u00dfgeschrieben. Warum ich diesen Artikel trotzdem hier ver\u00f6ffentliche &#8211; weil ich mich derma\u00dfen \u00fcber die Installation und vor allem \u00fcber die Aktualisierung dieser und das Anpassen ge\u00e4rgert habe. Vielleicht hilfreich f\u00fcr andere. Bei Testlink handelt es [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2134,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48],"tags":[49],"class_list":["post-2132","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-entwicklung","tag-entwicklung"],"_links":{"self":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/2132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/comments?post=2132"}],"version-history":[{"count":1,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/2132\/revisions"}],"predecessor-version":[{"id":2135,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/2132\/revisions\/2135"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media\/2134"}],"wp:attachment":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media?parent=2132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/categories?post=2132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/tags?post=2132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}