Trying to use a Dockerfile build environment from an open source project / Der Versuch, eine Build-Umgebung aus einem Dockerfile zu bauen (2)

in #proofofbrain2 years ago

Hallo,

hier halte ich mein Versprechen und gehe auf die Änderungen ein, die ich am Dockerfile machen musste, um dieses lauffähig zu bekommmen:

https://github.com/thgier/PotatoPresenter/blob/master/Dockerfile

Leider habe ich das gestern in a hurry gemacht und kann euch damit keine Zwischenergebnisse mehr zeigen, jedoch werde ich die wichtigsten Fehler und deren Korrektur hier berichten.

Disclaimer: Es ist mir wichtig, zu betonen, dass ich ein absoluter Amateur bin, was Docker angeht, ich hatte bloß schon das Vergnügen, mich öfter im Zuge meiner Hobbies damit auseinander zu setzen, was mir hier und da etwas Halbwissen eingebracht hat. Dieses Halbwissen verwende ich jetzt, um eine wenn noch nicht elegante, dann aber zumindest funktionale Dockerfile zu bauen.

Zuallererst muss ich sagen, dass Docker in der Lage ist, nach jeder Zeile ein Zwischenergebnis abzuspeichern. Bei 22 Direktiven im Dockerfile sind das 22 Zwischenergebnisse, und bei Änderungen müssen nur die darauffolgenden Schritte neu berechnet werden. Es ist also durchaus kontraproduktiv, diese vermutlich aus bash übernommene &&-Schreibweise zu übernehmen.

Die Struktur ist dann doch relativ klar (wenn man mal die Zeilen auseinander gezogen hat):

  • Installiere eine Toolchain und einen C++-Compiler
  • Installiere Deps (Abhängigkeiten) von, lade antlr4 C++ Runtime herunter (Bibliothek) und compile diese
  • Installiere QT5 Deps
  • Baue das Programm

Folgende Sachen gingen überhaupt nicht:

  • Teilweise wurde apt oder apt-get ohne -y verwendet. Das bedeutet, wenn eine Nutzerabfrage wie "Wollen Sie fortfahren?" kommt, crasht das Ganze (was bei install immer der Fall ist)
  • RUN cd funktioniert einfach nicht, so kann man das Working Directory nicht ändern. Zu verwenden ist stattdessen der Befehl WORKDIR
  • Ursprünglich wurde die Software in "/" gebaut, wohl der Einfachheit halber. cmake erlaubt dies aber leider nicht, deswegen wurden Unterverzeichnisse angelegt
  • Das verwendete Ubuntu:18.04 ist schon etwas betagt, weswegen die cmake-Version von da kein C++20 konnte, welches von einer Dep benötigt wurde. Daher habe ich gleich das Ubuntu-Image upgegradet
  • Bei mir haben einfach mehrere Abhängigkeiten gefehlt, wie die mesa-Pakete für die X11 Sachen (wie ich vermute) oder Teile von KF5 (KDE Framework). Habe ich nachinstalliert
  • Auch Terminal-Programme wie git und wget waren nicht vorhanden. Eingefügt
  • cmake hat bei meinen Versuchen ein zusätzliches -DCMAKE_CXX_COMPILER=g++-11 gebraucht, um den Compiler zu finden
  • Entrypoint als letzter Command, um etwas auszuführen (wobei ich mir nicht sicher bin, ob das an dieser Stelle wirklich etwas relevantes ändert)
  • Immer wieder waren Pfade glaube ich falsch, bin mir da aber nicht mehr sicher...

Endergebnis:

Ich habe das AppImage gebaut bekommen (nach noch mehr Rumgefrickel mit linuxdeployqt), aber weiß noch nicht, wie ich das Image aus dem Container sauber herauskopiere. Nach zwei Stunden Zeit, die ich nicht hatte, investiert, mache ich Pause für heute.

Sort:  

Ein sehr anspruchsvoller Post.. Ein echter Mehrwert für unsere blockchain.

LG Michael

!invest_vote

Vielen Dank :)

@mima2606 denkt du hast ein Vote durch @investinthefutur verdient!
@mima2606 thinks you have earned a vote of @investinthefutur !