Rigel-Computer


TYPO3-Version upgraden - als lokale Kopie - mit Docker & DDEV 


Projektziel: Ein Major-Upgrade einer TYPO3-Installation

Im konkreten Fall: Von Vers. 10 auf 11 - mittels Docker & DDEV - unter Windows - auf dem lokalen Rechner

Dieser Text enthält eine detaillierte Schritt-für-Schritt-Anleitung - inkl. aller Fehler und Fallen, die auftreten und in die man reintappen kann!

Ziel: Anderen zu helfen, solche Fehler zu vermeiden - denn keiner googelt nach nicht-Fehlern!

Mit Docker & DDEV sind die Zeiten des Gehampels mit Subdomains, Wamp, Xampp und FTP entgültig vorbei,

um Serverinstallationen als (Sicherungs-)Kopie einem Upgrade zu unterziehen.
Auf einem LIVE-System macht das ja nun wirklich niemand.

Es gibt inzwischen zwar - statt FTP - auch die angenehme Möglichkeit, mit einer IDE wie Visual Studio Code zu arbeiten. Installiert man ein Addon (z.B. S-FTP), lädt VS Code die IDE Änderungen automatisch auf den Server zurück, sobald gespeichert wird.
Aber halt immer noch in einer Subdomain. Irgendwo im Netz.

Statt dessen:

Eine eins-zu-eins-Kopie der TYPO3-Installation lokal laden - und lokal bearbeiten. Nix Download. Nix Subdomain. Und versionieren lässt sich so auch problemlos.

Zusätzlich kann man jederzeit mit einem ddev export-db (mehr braucht es nicht) den aktuellen Stand der Datenbank sichern!
Denn nicht jeder Schritt beim Upgraden des Cores und/oder Updaten der Extension muss ja auf Anhieb von Erfolg gekrönt sein - Sicher ist da sicher sicherer.

Docker & DDEV installieren

Unter Windows leidlich simpel, und die aktuellen Versionen grade von Docker (Desktop) sind auch einfach zu handhaben.

https://docs.docker.com/desktop/install/windows-install/ für Docker und https://ddev.readthedocs.io/en/latest/users/install/ddev-installation/#__tabbed_1_3 für die DDEV-Installations-Files.

Das ist bei mir jetzt schon eine ganze Weile her, und es reicht die Zeit auch bei Weitem nicht, hier näher darauf einzugehen

"ddev config" für eine TYPO3-Installation ausführen

Man kann jeden config-Befehl (auch später problemlos) einzeln ausführen - doch warum sollte man?

"ddev config" + Parameter über die Bash (im meinem Falle die Git-Bash)

Die aktuelle für eine alte T3-10-Version config-Zeile lautete bei mir:

ddev config --php-version 7.4 --project-type=typo3 --webserver-type=apache-fpm --database mysql:5.7 --timezone Europe/Berlin --composer-version 2

Eigentlich selbst-erklärend.
Das kein beim ersten Start schon eine ganze Zeit dauern, denn es müssen ja alle Pakete erst heruntergeladen und in der lokalen Umgebung installiert werden.

Es wird auch ein Unterverzeichnis ".ddev" im aktuellen Verzeichnis ein angelegt.

"ddev start"

Ist das durchgelaufen (was einige Zeit dauern kann), startet man DDEV im lokalen Verzeichnis - mit (klar) "ddev start".

Ist DAS durchgelaufen, lässt sich mit "ddev status" abfragen, ob auch alles reibungslos läuft.

.ddev/config.yaml

Hier werden alle Parameter abgelegt. Die Datei ist problemlos editierbar. Um z.B. die php-Version zu ändern, muss man es nur dort eintragen - ein Neustart von DDEV (ddev restart) reicht, und es werden die aktuellen Pakete automatisch heruntergeladen und installiert.

TYPO3-Version laden - natürlich genau DIE, die auch auf dem Server läuft

Ein alter Hut für TYPO3-ler, doch kurz ein Wort, wie am besten zu verfahren ist.

Man kann natürlich die aktuellen Core-Dateien der laufenden LIVE-TYPO3-Version einfach vom Server laden - per FTP. Dauert. Muss auch nicht sein.

Denn es gibt ja auch

ddev ssh

Das funktioniert (bei mir unter Windows) leider nur im Terminal von Visual Studio Code - dort aber out-of-the-box.

Dazu auf

https://get.typo3.org/list/version/10 (oder natürlich einem anderen, zu Ihrem System passenden Pfad dort) zur aktuellen T3-Version navigieren, DOWNLOAD klicken, und das

wget --content-disposition get.typo3.org/10.4.16

in die Zwischenablage kopieren.

Auf der Shell einfügen - Return - und der Download ist ruckzuck erledigt.

Die Dateien mit tar -xf typo3_src-10.4.16.tar.gz entpacken. Schon steht ein komplettes Core-Paket zur Verfügung.

Alternativ kann man natürlich auch auf dem Live-Server das TYPO3- und das Vendor-Verzeichnis packen und dann runterladen - lokal entpacken. Geht 100mal schneller als die einzelnen Verznisse + FTP. Dazu allerdings muss man natürlich SSH-Zugriff auf den Server haben.

/typo3conf & /fileadmin sichern - Datenbank herunterladen

/typo3conf & /fileadmin sichern

Am einfachsten - und vor allem am schnellsten - sichert man die Verzeichnisse /typo3conf und /fileadmin, indem man

sie auf dem Server mit tar cf fileadmin.tar.gz fileadmin und tar cf typo3conf.tar.gz typo3conf packt,
indem man sich mit SSH auf dem Server einloggt,
die Verzeichnisse herunterlädt

um dann

über die IDE (bei mir VS Code) per ddev ssh auf die lokale Installation aufschalten

im Root-Verzeichnis der DDEV-Installation, und mittels tar -xf filedmin.tar.gz bzw typo3conf.tar.gz zu entpacken.

Das geht einfach - und ist die schnellste Möglichkeit unter Windows!

Datenbank herunterladen

Dann die Datenbank der Live-Installation über phpmyadmin komplett downloaden

mit

ddev import-db importieren: ddev import-db --file=Server-DB.sql

DDEV RESTART! zum Anlegen der additional_config.php

Symbolische Links (Symlinks) unter Windows erstellen

Wenn man wie gewohnt auch unter Windows mit Symlinks arbeiten will, geht das.

Natürlich muss man später auf dem Live-Server wieder Unix-taugliche Symlinks erstellen! (*)

Unter Windows braucht man:

++++++++++++ Für Pfade:
mklink /D SYMLINK-NAME REELLER_PFADNAME
++++++++++++ z.B. also

mklink /D typo3_src typo3_src-10.4.16 (Das Verzeichnis unserer Core-Dateien)

++++++++++++ TYPO3_SRC ist der grundlegende Trick: 
++++++++++++ Es braucht nur einen EINZIGEN Symlink 
++++++++++++ so hebt man die T3-Version an, und muss lediglich
++++++++++++ diesen Symlink auf die neue Version umbiegen
++++++++++++ (den alten löschen, neu erstellen)
++++++++++++ und die neue Version ist korrekt verlinkt

mklink /D typo3 typo3_src\typo3
mklink /D vendor typo3_src\vendor

mklink index.php typo3_src\index.php (der Link zur Index.php)
++++++++++++ HIER IST DER BACKSLASH WICHTIG, sonst kommt eine Fehlermeldung, weil von Windows ein Operator nach einem Slash erwartet wird
++++++++++++ Es wird KEIN Operator angewandt, für Verzeichnisse benötigt man aber zwingend den Operator /D.

##### Am besten testet man JEDES VERZEICHNIS und die index.php, indem man sie im Explorer einmal anklickt! #####
##### So vermeidet man es, durch einen dämlichen Tippfehler in endlose Fehlersuchen verwickelt zu werden!!! #####

##### Ich habe mir angewöhnt, in /typo3_src, /typo3 und /vendor 
##### eine (unsichtbare) Datei mit einzufügen, die den Namen 
##### der Version enthält wie .Vers_11.5.38 - 
##### das verhindert Fehler beim späteren Ändern der Symlinks #####
 

Übersicht die Hilfe, die man unter Windows bei mklink /h erhält:

MKLINK [[/D] | [/H] | [/J]] Verknüpfung Ziel

        /D           Erstellt eine symbolische Verknüpfung für ein Verzeichis.
                     Standardmäßig wird eine symbolische Verknüpfung für
                     eine Datei erstellt.
        /H           Erstellt eine feste Verknüpfung anstelle einer
                     symbolischen Verknüpfung.
        /J           Erstellt eine Verzeichnisverbindung.
        Verknüpfung  Gibt den Namen für die symbolischen Verknüpfung an.
        Ziel         Gibt den Pfad (relativ oder absolut) an, auf den die
                     neue Verknüpfung verweist.

(*) Unter Unix entsprechend: Aufschalten auf den Server per SSH, dann ln -s (wobei ln für Link steht, kann man sich so gut merken).
Wobei die Syntax genau anders herum ist: ln -s Pfad-zur-Zieldatei SYMLINKS-NAME
Dort braucht es übrigens keine Unterscheidung zwischen Verzeichnissen und Dateien.

Alles bereit - es fehlt noch die AdditionalConfiguration.php

Und die Datei wird von DDEV automatisch angelegt, allerdings erst nach einem

ddev restart auf der Bash!!!

Die AdditionalConfiguration.php enthält dann den folgenden Text im Header:

/**
 * #ddev-generated: Automatically generated TYPO3 additional.php file.
 * ddev manages this file and may delete or overwrite the file unless this comment is removed.
 * It is recommended that you leave this file alone.
 */

Solange dieser Code dort unverändert steht, überschreibt DDEV bei jedem Start ALLES, was man evtl. selbst eingetragen hat!

ddev launch - first light für die lokale Installation

Ist alles o.G. abgearbeitet, kann man auf der Bash ein ddev lauch ausführen.
Oder ein ddev launch typo3/, so kommt man direkt ins Backend.

Jetzt sollte die lokale Installation aus der Server-Kopie laufen.

Dann über die ddev-URL lokaleinstallation.ddev.site/typo3 ins Backend wechseln, falls kein typo3/ angehängt wurde.

Apropos "Server Kopie": Das erste, was ich mache, ist das Ändern des NAMENS der lokalen Installation der Site-Configuration! im Backend.
So läuft man nicht Gefahr, LIVE und LOKAL zu verwechseln!

 

Fehlermeldung: Forbidden - You don't have permission to access this resource.

Beim ersten ddev launch, um direkt das T3-Frontend aufzurufen, erscheint obige Fehlermeldung.

Hängt man an den Pfad ein /typo3 an, kommt man problemlos ins Backend - nur das Frontend läuft nicht.

Der Grund ist in diesem konkreten Falle (TYPO3-Installation) so blöd wie einfach zu beheben. Die index.php wurde nicht gefunden!
In meinem Falle ein Vertipper beim Erstellen der Symlinks (scr statt src)...
(Da das Unter-Verzeichnis /typo3 eine eigene index.php hat, läuft es dort entsprechend sofort)

Der Ideen-gebende Hinweis kam von Stackoverflow:
https://stackoverflow.com/questions/51227365/i-get-an-ngnix-403-forbidden-when-starting-ddev

.htaccess ins Rootverzeichnis!

Die Startseite dürfte nun funktionieren - aber auf den Sub-Seiten bekommt man die gleiche Fehlermeldung. Eventuell.

Grund: Es fehlt die .htaccess im Root-Verzeichnis.
Die wird nicht bei einer DDEV-Installation erstellt. Und wer kopiert schon das Root-Verzeichnis mit vom Server, da hat sich ja meist über die Jahre so einiges an Müll angesammelt...

Die Zeiten, als ich mich intensiv mit der .htaccess beschäftigt habe, sind schon ein Weilchen her. Unvergesslich allerdings: RealURL unter TYPO3 Vers. 3.8/4.5... ohne sich mit der .htaccess intensiv zu  beschäftigen lief dar gar nichts. Doch bei dem Thema gibt es wahrlich Berufenere als mich.

Lösung:
Einfach die .htaccess von der Serverinstallation herunterladen ins Root-Verzeichnis der DDEV-Installation.
Das sollte leidlich funktionieren, da .htaccess-Dateien durch die Provider auf maximale Kompatibilität getrimmt sind - und so eigentlich immer das Wichtigste tun, was sie sollen!

Achtung!

Der .htaccess ist ein PUNKT vorangestellt, sodass die Datei nicht sichtbar ist / sein könnte!

Dies gilt vor allem für Server, auf die man sich per FTP einloggt. Im jeweiligen FTP-Client muss man an der richtigen Stelle (abhängig vom Programm) -A eintragen,
Ähnlich für Symlinks auf Unix-Systemen: Hier ist ein "-L" nötig, um Symbolische Links als Dateien oder Verzeichnisse angezeigt zu bekommen!

Die Kombination "-LA" sorgt dafür, dass sowohl Symlinks als auch versteckte Dateien im FTP-Client angezeigt werden.

Sieht man unter Windows Dateien oder Ordner mit einem vorangestellten Punkt nicht (z.B. das .ddev-Verzeichnis) öffnet man den Datei-Explorer, geht auf Ansicht, Optionen/Ordner und Suchoptionen ändern, dann "Einstellungen für versteckte und geschützte Dateien", dann dort wieder "Ansicht"
=> und den Haken bei "Versteckte Dateien, Ordner und Laufwerke anzeigen"
=> Haken raus bei "Geschützte Systemdateien ausblenden" - den Requester quittiert man mit OK.

Lokale 1:1 Kopie: Ballast loswerden

Indem man im Backend unter WARTUNG so ziemlich alles einmal durchgeht, inkl. Clear Persistent Database Tables, wo sich jede Menge Zeug angesammelt haben dürfte.

Temporäre Dateien löschen

Nach dem erfolgreichen Download und DDEV LAUNCH werden auf der lokalen Installation zuerst alle temporären Dateien über das Backend gelöscht. Um sich keinen Müll aus der Server-Installation mit ins System zu holen mit Flush TYPO3 and PHP Cache und Clear Persistent Database Tables

 

VOR dem major ugrade

... wird erst die lokale Installation auf die letzt-verfügbare Version der aktuellen Major-Version angehoben (falls noch nicht passiert)

DAVOR werden alle Extensions gecheckt:

  1. Nicht benötigte werden komplett entfernt - oder zumindest deinstalliert
  2. Extensions wie tt_news oder powermail sollten / können deaktiviert werden
    (Hintergrund: Bei einem Versuch scheiterte das lokale Upgrade komplett, weill erst die "news" von Georg Ringer und (nach deren Deaktivierung über die conf-Dateien) auch noch Powermail einen Fehler verursachte. Kein Konsolen-Log, kein Log-Eintrag im T3-Log, es blieb einfach hängen)

Vor dem Updaten der Extensions: Die aktuelle, lauffähige Versionsnummer merken! So hat man ein Fallback für den Fall, dass die letzt-aktuelle hier schon nicht funktioniert!

Dabei ist zu beachten, dass evtl. ein Extension-Template für die eine oder andere Extension angezogen wird!

Also: Jedes Mal testweise das Frontend aufrufen - bei jeder einzelnen Aktion im Extension-Manager, bei der man auch nur ansatzweise unsicher ist!
Es kann ja u.a. sein, dass bereits bei den minor Updates der Extensions die (eigenen) Extension-Templates Fehler produzieren / falsch referenzieren oder auf deprecated features verweisen - und so eh nicht mehr taugen. Selbst für die akutell(st)e Major-Version!

Nicht vergessen: Dabei mmer die Caches löschen!

Außerdem empfiehlt es sich, nach Deinstallieren von Extensions die

Analyze Database Structure

durchzuführen unter "Wartung" - und die empfohlenen Änderungen (Remove tables (rename with prefix) = Umbenennen in ZZZ_xyz) der Tabellennamen zu akzeptieren!

Zum Abschluss habe ich mir noch
Reset Backend User Preferences und Manage Language Packs
vorgenommen, sodass hier alles clear und up-to-date sein dürfte - für die ansonsten immer noch völlig unangetastete, lokale 1:1-Kopie.

Datenbankintegritätsprüfung

Nachdem beim letzten Versuch ALLE NEWS verschwunden waren, und nach dem Im/Export dann ALLE KATEGORIEN, bin ich auf der Suche nach dem Fehler auf typo3.org gestoßen - dort gibt es (äußerst knappes) HowTo für Ugrades.

Und irgendwo gab es eine Erwähnung der Datenbankintegritätsprüfung... die nur deswegen ins Auge fiel, weil die Empfehlung, das über das CLI zu machen, mehr Raum einnahm als die eigentliche Erläuterung...

Beim jetzigen neuen Anlauf

führe ich das umgehend mit der noch unangetasteten 1:1-Kopie durch!

(mal schauen, was draus wird)

nach der Aktualisierung bekommt man ein grünes Feld: 5177 records from 39 tables were checked/updated. Es hat sich also ziemlich was getan. Jetzt muss nur noch das Frontend funktionieren...

Jetzt Finger weg vom Frontend!

Will man sich Ärger ersparen, wird ab sofort - bis zum Start der komplett angehobenen Version - das Frontend nicht mehr angerührt!

Was man da erlebt, steht (noch) hier nach im Text, doch ich überlege, es rauszuschmeißen, wenn ich daran denke (aktuell wirkt der Text in den nächsten Abschnitten dadurch noch etwas holprig).

Scheinbar prüft das Update-Tool der Extension NICHT die Versionsnummer der T3-Version,

... also ob 10.6, 10.20 oder 10.30 laufen,

sondern schlägt automatisch die letzte, für die MAJOR-Version herausgegebe Extension-Version vor!

Und tatsächlich hat das direkte Update von 8.5.2 auf 10.0.3 von Georg Ringers NEWS-Extension das gesamte System genuked!

Zum Glück hatte ich meinen eigenen Tipp beherzigt - und "8.5.2" (die aktuell laufende Version) behalten.
Ein Blick ins TER, die 8.5.2 geladen, ausgepackt, die verkackte Version mit einem vorangestellten Punkt unsichtbar gemacht im typo3conf/ext-Verzeichnis. Dann lief es wieder *phpuuu*

Es ist anzunehmen, dass hierfür ERST das Upgrade auf 10.4.37 durchgeführt werden muss - was zu testen ist. Und zwar direkt auch bei Powermail, die hat aktuell die Version 8.3.2 und dürfte - ohne das Update auf 10.4.37 - ebenfalls explodieren.

Will man vorher - oder gar ohne den Wunsch nach einem Major-Upgrade wie von 10.x auf 11.x - sicher gehen...
Tja, dann muss man alle Release-Notes auf dem TER durchgehen... und herausfinden, welche Extension-Version mit welcher 10.xyz-Version (noch) lauffähig ist.

 

Lokale Version auf die aktuellste, im TER verfügbare, anheben

Dazu den alten Symlink auf das Source-Verzeichnis unter Windows löschen.

Einen neuen erstellen mit mklink /D typo3_src typo3_src-10.4.37

Das Backend neu zu laden nutzt tatsächlich nichts, man muss - wie schon oben mal angedeutet - die Caches löschen, damit die neue Version auch im Backend angezeigt wird - inkl. eines F5 zum Reload des Browserfensters.

Verwunderlich: Trotz neuer Version werden keine up-zu-datenden Third-Party-Extensions angezeigt

Als hätte das System nichts mitgekriegt. Die Core-Extensions sind alle auf dem neuesten Stand...

Ein Ansatz: ddev restart - kein Effekt. Ebenso das Löschen aller Caches, inkl. Flush TYPO3 and PHP Cache.

Natürlich muss - oder sollte man, falls nicht zuvor geschehen - jetzt die Erweiterungsliste aus dem TER neu laden - und da wird einem dann schon ganz anders!

Ich nehme mir erst ein paar Erweiterungen vor, die nicht aktiv sind wie Crawler, AI-SEO-Helper usw.

Und checke alle paar Erweiterungen den Upgrade Wizard, ob Tabellen geändert wurden!

Alles Takko - bis auf "news"... hier kommt es zu einem Error in Analyze Database Structure (Bild), und im Upgrade Wizard taucht ein AJAX-Error auf...

Einige Caches gelöscht, mehr intuitiv, und plötzlich läuft der Upgrade Wizard zumindest AN, ohne AJAX-Fehler:
Set integer default value where field `tx_news_domain_model_news`.`related_links` is NULL.

Powermail verursacht keine Auffälligkeiten - wundert eingentlich auch...

 

DANACH läuft auch Analyze Database Structure durch! PUH!

Powermail und News aktualisieren

Über den Erweiterungs-Manager. Klappt soweit problemlos.

Nach dem Update über den Manager wird die Extension jeweils AKTIVIERT!

DANN erst über "Aktualisierung" den Upgrade Wizard starten - jetzt werden alle Änderungen an den Tabellen ausgeführt (hoffentlich).

Zur Sicherheit werden die Caches wieder gelöscht, inkl. "Flush TYPO3 and PHP Cache" unter "Wartung"

Sowie das Update der Language-Packs.

Ein Blick ins Main-Template enthüllt:

Die re-aktivierten Extensions laufen bereits alle im Statische Templates einschließen (aus Erweiterungen)

Bis auf die free_cap Captcha Extension? Die läuft zwar, muss aber doch manuell hinzugefügt werden. Scheinbar aber findet die gar keine Anwendung - was ein Blick auf den Live-Server enthüllt...

 

Etwas stutzig macht allerdings die Meldung in "News Administration" - Sie starten diese Extension zum ersten Mal? Es sind noch keine News eingerichtet.

Böses Omen...

Das Major-Upgrade

Symlinks ändern auf die - aktuelleste - T3 Version 11.5.38 (die ich - wie ich feststellen muss noch gar nicht im Verzeichnis hatte).

An der Stelle sei nachzutragen: Ein TAR auf der Console der IDE ... DAUERT!, also nicht wundern, wenn das ausgepackte Verzeichnis nicht in dem Moment auftaucht, wenn man auf der Console das nächste Prompt in der nächsten Zeile zu sehen kriegt!

Ausloggen aus dem Backend der angehobenen 10.4.37-Version, wo grade die Extensions aktualisiert wurden. Vorsichtshalber

Witzig:

Ausgerechnet Powermail verursacht nach dem Anpassen der Symlinks einen Fehler:

Fatal error: Declaration of In2code\Powermail\Controller\FormController::forwardToReferringRequest() must be compatible with TYPO3\CMS\Extbase\Mvc\Controller\ActionController::forwardToReferringRequest(): ?Psr\Http\Message\ResponseInterface in /var/www/html/typo3conf/ext/powermail/Classes/Controller/FormController.php on line 466

WENN man das Backend aufruft!

Aber wir wollen ja ein UPDATE - also geht es in das Installtool!!!

https://nr4.ddev.site/typo3/install.php

Auf der Console: touch ENABLE_INSTALL_TOOL im typo3conf-Verzeichnis

NULL ERFOLG, nicth mal der Cache lässt sich löschen, ohne, dass es rote Fehlermeldungen hagelt (Bild)

DDEV RESTART - und das typo3temp-Verzeichnis gelöscht - jetzt ist das Backend der 10.4.37 wieder erreichbar.

Extensions Powermail und news werden DEAKTIVIERT - typo3temp vorsichtshalber DIREKT mit gelöscht.

JETZT kommt wieder der Fehler, in dem
Fatal error: Uncaught Error: Undefined class constant 'DEFAULT_SCHEME' in /var/www/html/typo3_src-11.5.38/typo3/sysext/core/Configuration/DefaultConfiguration.php:383 Stack trace: #0 /var/www/html/typo3_src-10.4.37/

auf die 37er referenziert wird -

JETZT steht mit Sicherheit ein DDEV RESTART an!

Das Hamsterrad

Oder: das Irrenhaus - ich komme mir vor, als würde ein Déjà-vu das andere jagen... ich kann mich auf den KOPF stellen, und komme schlussendlich doch gefühlt nicht EINEN SCHRITT weiter...

Also ein neuer Versuch, ins Install-Tool zu kommen - gelingt.

Die ersten Punkte des Upgrade Wizards laufen durch - der 4te nicht. AJAX-Error...

Also in Analyze Database Strukture die Tabellen anpassen - läuft durch

Zurück in den Upgrade Wizard - läuft durch

 

Interessanterweise findet sich in Configure Installation-Wide Options der Name der Site "TYPO3 CMS 11.5.38" nirgends, sodass ich ihn nicht auf "lokal" ändern kann... Das Irrenhaus... Ok, das scheint nur für das Install-Tool zu gelten (wie irre ist das!) - im Backend, das man tatsächlich erreichen kann, steht (wie eigentlich erwartet) auch wieder "N4-Lokal" in der Bezeichnung der Site links oben.

Dort läuft auch der letzte Punkt im Upgrade Wizard durch, der in der 10er zuvor noch mit Fehler ausgestiegen ist.

Erweiterungen in der 11.5.38 aktualisieren

Wie zuvor werden erst die "harmlosen" Erweiterungen zur Brust genommen, freeCap CAPTCHA etc... Upgrade Wizard - keine Aktion erforderlich...Analyze Database Structure dito.

Die Liste von Powermail ist so lang, dass ich einen BESEN fresse, wenn das auch nur annähernd funktionieren sollte.

Kürzer die von news-Extension... auch hier wird angeblich nichts neu benötigt im Wizard oder der Structure?

Eigentlich wurde musste GAR NICHTS aktualisiert werden??? Da muss der nächste Besen her!

Ich starte das System neu über ddev restart, lösche /typo3temp - und dann schauen wir weiter.

Halt! Eine Idee noch: DB-Überprüfung und Referenz-Index verwalten... da kracht es Rot rein, dass es eine Freude ist *kotz* (Bild)
Das zumindest steht nach einem Durchlauf auf grün (Bild)

Der Vollständigkeit halber noch die Language-Packs updaten:
Language packs updated
0 new language packs downloaded, 26 language packs updated, 2 language packs not available

EXT NEWS - News-Datenbanktabelle ist komplett LEER!

Obowohl in der original-DB natürlich 1:1 noch voll, ist nach o.g. Schritten die Tabelle komplett leer.

Das mag damit zusammenhängen, dass die Extension für das Update deaktiviert werden musste - aber who the fuck hat dann die Tabelle geleert im Laufe des Upgrades???

... etwas Nachdenken - und die alte Gewissheit: In Datenbanken wird eigentlich NIE ETWAS GELÖSCHT! Maximal auf NULL gesetzt in der Sichtbarkeit.

Daran hält sich auch TYPO3... Tabellen werden beim Upgrade in zzz_deleted_XXX umbenannt...

Weil die NEWS-Extension deaktiviert war beim Upgrade, ist T3 davon ausgegangen: Das wird nicht mehr benötigt - und kann erstmal weg. So auch die assoziierten Tabellen - sie wurden in zzz_deleted_tx_news_XXX umbenannt in der DB.

Der grade zuvor frisch ausgeführte Wizard für category-slugs und migrate:EXT:News wird also als UNDONE markiert. Abmelden vom Backend (vorsichtshalber). Ein DDEV-Restart.

Nun werden die (nach der Re-Insatllation der NEWS-Extensieon) neu angelegten tx-newx-Tabellen GELÖSCHT!

Und die alten, mit zzz_deleted_tx_news_XXX beginnenden in tx_news_XXX zurückbenannt.

Jetzt wird der Upgrade-Wizard erneut gestartet - ein Slugs vermisst man jetzt, dafür werden Änderungen in einigen tx_news-Tabellen durchgeführt (Bild)

Danach Analyze Database Structure - und hier werden tatsächlich ebenfalls Änderungen vorgenommen

Flush TYPO3 and PHP Cache - sonstige Caches leeren... weiterhin keine Fehlermeldungen (mehr) und - die Hoffnung stirbt zuletzt. doch sie stirbt... zumindest bei den Vorschaubildern. Es ist überall nur das Symbolbild "keinBild" im Frontend.

Ich behelfe mir, indem ich den processed-Ordner neu vom Live-Server hole (jeweils mit SSH und TAR) - Kein Effekt.
ABER: Die Bilder sind weiterhin mit den News im Backend verknüpft - evtl. heißt es jetzt, die alten Einstellungen der Extension (mit eigenen Templates etc.) zu reaktivieren).

Alle News-Vorschaubilder fehlen, sind durch Dummy-Bilder ersetzt

Wäre jetzt wohl auch zu leicht gewesen... T3 ist immer für Überraschungen gut...

Tatsächlich steht bei allen Bildern in den 429 News-Einträgen jetzt (statt "In allen Ansichten anzeigen") "Nur in Detailansichten anzeigen".

Was natürlich dazu führt, dass T3 jetzt das Dummy-Bild anzieht, weil für die Ansicht kein Bild gefunden wurde!

Die Details zur Ursachen-Suche in der DB spare ich mir hier mal (es lag z.B. ja nahe, dass eine weitere - für News benötigte - Tabelle mit zzz_deleted... versehen wurde, was aber nicht der Fall war).

 

Denn zum Glück gab Googeln einen Anhaltspunkt: Der Eintrag für die Sichtbarkeit des Views heißt showinpreview und liegt in der Tabelle sys_file_reference.
Dort gibt es dann auch ein Feld, das showinpreview heißt... und dem ein zzz_deleted vorangestellt wurde!

 

 

 

Gleicher Effekt wie zuvor also:
Beim Upgrade mit de-aktivierter NEWS-Extension werden Tabellen - aber halt auch Felder - mit dem zzz_deleted versehen.

Und da der Eintrag in der sys_file_reference von NEWS über die ext_tables.sql angelegt wurde (s. Code-Snippet aus der ext_tables.sql im NEWS-Extension-Ordner unterhalb), wird das Feld showinpreview beim Upgrade mit stillgelegt.

#
# Table structure for table 'sys_file_reference'
#
CREATE TABLE sys_file_reference (
	showinpreview tinyint(4) DEFAULT '0' NOT NULL
);

... und, da die News-Extension ja bei major-upgrade deaktiviert war, mit zzz... versehen - und eine neue, KOMPLETT LEERE Tabellenzeile angelegt

Lösungsansätze

1) Die DB manipulieren - die zzz_deleted_showinpreview rück-umbenennen, die neue, leere showinpreview zuvor natürlich löschen

2) Über das Fluid-Template und tx_news-List-Modul auf Code-Ebene den showinpreview-Wert auslesen, gefunden hier https://www.emde-it-loesungen.de/techtalk/typo3/news-ausgabe-der-medien-in-views.html

Interessant - werde ich aber erst mal nicht weiter verfolgen, um mich nicht wieder irgendwo auf der (hoffentlich) Zielgerade noch zu verzetteln.

MERKE: Beim Upgraden in der Database Analyse nicht ALLE Checkboxen ungesehen anhaken!

Bei den News-Tabellen ist das ja noch sprechend - aber wer weiß schon (bis vor dem Lesen dieses Artikels), dass auch die sys_file_reference betroffen sein würde...

... und wir sind ja noch nicht fertig, weiß der Geier, was da noch alles auf den Upgradenden an Überraschungen wartet...

Umbenennen der zzz_deleted_sys_file_reference

... in sys_file_reference - hat tatsächlich geklappt

Es sind wieder alle Vorschaubilder vorhanden - jeder entsprechende Datensatz enthält eine "1", also die Variable für "In allen Ansichten anzeigen" (statt wie zuvor der "0" für "Nur in Detailansichten anzeigen"...

Das Ausschalten der Pagination auf Unterseiten

... hat offensichtlich trotzdem nicht funktioniert - hier ist noch Handarbeit angesagt...

Denn eine unerwünschte (und total unformatierte) Pagination (=> blättern mit Menupunkten 1, 2, 3 etc) führt nicht zu Freudensprüngen.

Broken Links zu Grafiken auf Unterseiten

Offensichtlich geht T3 in der Version 11 nicht mehr so tolerant mit schwachem in HTML-Templates hart verdrahtetem Code um: Man muss jetzt den fileadmin-Verzeichnissen dort einen SLASH voranstellen, sonst werden die Dateien nicht korrekt eingebunden.

Um sich jede Menge Arbeit zu sparen, kann man sich von Visual Studio Code helfen lassen:

Mit STRG-SHIFT-H im Seitenbaum

Powermail wieder installieren

Hm... keine Änderung, nichts im Wizard, nichts in der analyse_table... die 10.8.1 scheint up-to-date.

Dass das Frontend auf Anhieb nicht funktioniert, hatte ich schon zuvor, wird sich - hoffentlich - ebenfalls fixen lassen.

Auf den ersten Blick allerdings fällt auf, dass das "Main Template (powermail)" unter "Statische Templates" nicht mit aktiviert wurde - das holen wir direkt nach.
Ebenso bei der Captcha-Extension sr_freecap.

Schon mal ein Anfang. Weit kommt man aber nicht, das Formular bleibt weiterhin leer. Ein Blick ins Backend / Liste der Kontaktseite: Kein Inhalt außer der Hauptseite - alles andere fehlt, was sich auch im Plugin sehr deutlich zeigt, wenn man ein Formular auswählen will:

... auch kein Wunder, es fehlen alle Einstellungen/Formulare unterhalb der Kontakt-Seite

Da aber wirklich alles migriert wurde, drängt sich umgehend eine Vermutung auf... und richtig:

Es wurden die Original-Powermail-Tabellen mit zzz_deleted_ tot gestellt -

Nach der Re-Aktivierung von Powermail wurden neue Tabellen erstellt - und die haben natürlich NULL Inhalt

Erster Schritt: Tabellen vergleichen

Ein Blick auf die DB der Live-Seite - ein weiterer auf die DB der DDEV-Site. Struktur der alten und neuen Tabellen von Powermal in Hinblick auf die Anzahl der Spalten.
Es zeigt sich: Die Tabellen sind zumindest schon mal in der Struktur gleich geblieben.

Das Löschen der neuen und das rück-Umbenennen der zzz_deleted sollte also zumindest in der Hinsicht keine Probleme zeitigen.

So hat es dann auch funktioniert!

Sicherungsmäßig die neuen, leeren powermail-Tabellen in XXX umbenennen. dann die zzz_deleted_powermail vom "zzz_deleted_" befreien über den Phpmyadmin.

Checken des Upgrade-Wizard, Check TCA Migrations, Check for Broken Extensions - keine Mäkeleien - alles sauber.

Und das Powermail-Formular wird angezeigt wie zuvor.

Da kann man mal nicht meckern.

 

RTE-CKEditor - eigene .yaml-Datei wieder einbinden

Nach dem Upgrade sind (u.a.) alle Textfelder im Backend komplett verschwunden

Eher ein Spezialfall... Ich hatte eine eigene YAML-Datei in der Sysextension RTE_CKEDITOR angelegt.
Diese muss im Verzeichnis rte_ckeditor/Configuration/RTE hinterlegt sein
Und wird über ext_localconf.php der Extension angemeldet:

[...]
if (empty($GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['full'])) {
    $GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['full'] = 'EXT:rte_ckeditor/Configuration/RTE/Full.yaml';
}
// Amelden des RC-Full.yaml
if (empty($GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['rc-full'])) {
    $GLOBALS['TYPO3_CONF_VARS']['RTE']['Presets']['rc-full'] = 'EXT:rte_ckeditor/Configuration/RTE/RC-Full.yaml';
}

Das Ganze jetzt auf Typoscript umzubiegen und extern einzubinden... wie schon mehrfach hier angedeutet: Ich will mich nicht (zu sehr) verzetteln.

Jedenfalls klappt die Änderung der ext_localconf.php inkl. der kopierten YAML-Datei: Alle Felder werden wieder angezeigt.

(Und mit TYPO3 Version 12 wird der rte_ckeditor ja wohl eh obsolet / durch den 5er ersetzt, sodass sich hier weiteren Gehirnschmalz zu investieren kaum lohnen dürfte).

Jetzt noch die gh_randomcontent-Extension re-installieren

Das Upgrade der Version hatte ja komplett verkackt, egal, was ich angestellt habe (inkl. Kontakt zum super-freundlichen Autor).

So wurde die Extension hier rausgekegelt - und nach dem Upgrade JETZT wieder neu hinzugefügt:

  GH Random Content 1.2.1

Wobei auch hier der Extension-Manager nichts auf die laufende Version gibt - er schlägt grundsätzlich die aktuelleste vor, auch wenn die mit T3-11 überhaupt nicht kompatibel ist (zum Glück kommt wenigstens eine Sicherheitsabfrage an genau der Stelle "Wollen Sie wirklich - weil" ... gut!

Noch erfreulicher: Im Gegensatz zum seinerzeitigen Durchziehen der gh_randomcontent durch die gesamte Installation wird jetzt nicht das Backend genuked!

Angezeigt wird aber leider trotzdem nichts

Hier hilft ein Blick in das eigene TS-Setup. Und ein beherztes Stilllegen aller zusätzlichen Eigentschaften, die in der 10er T3-Installation noch reibungslos funktioniert hatten:

lib.rechtsoben < plugin.tx_ghrandomcontent_pi1
lib.rechtsoben {
   pages = 529
/*   count = 1
   honorLanguage = 1
   honorColPos = 1
   defaultColPos = 1
*/
   }

Extension dp_cookieconsent: Fingerprint-Icon loswerden

Wie das geht, wird hier erklärt (das passt themenmäßig jetzt nicht alles zum Upgrade):

https://www.rigel-computer.com/tipps-zu-typo3/dp-cookieconsent-fingerprint-icon-loswerden#c359

- inkl. weiterer Details zur Cookie-Richtlinie der EU / Telekommunikation-Telemedien-Datenschutz-Gesetz (TTDSG) in Deutschland.

Abgleich mit Live-Server und DB-Sicherung über DDEV

Da seit dem Start einiges an Zeit ins Land gegangen ist (wie man schon allein an der Länge des Textes unschwer erkennen kann), müssen jetzt die neueren Datensätze vom Server per t3d-Export exportiert und in die lokale Version per t3d-Import eingepflegt werden.
Das kann dann schon mal dauern...

Vor dem - hoffentlich - finalen Schritt des Upgradens von PHP und MySQL wird dann noch eine Sicherung der lokalen Datenbank vorgenommen, per (Git-)Bash und dem simplen DDEV-Befehl ddev export-db:

# mit --gzip=false kann man sich erstmal die DB unkompriert laden 
# und einen Blick darauf werfen.

ddev export-db --gzip=false --file=hoffentlichfertig_unkomprimiert.sql

# dann entweder per ZIP packen, oder natürlich:

ddev export-db --file=hoffentlichfertig_komprimiert.sql

# wonach sich die DB in genau dem Verzeichnis landen, 
# in dem der Bash-Befehl aufgerufen wurde

MySQL-Datenbank über DDEV migrieren

Es empfiehlt sich, ddev debug migrate-database mysql:8.0 auf der Konsole auszuführen.

Man kann zwar auch einfach in der config.yaml im .ddev-Verzeichnis die Version auf 8.0 umstellen, und dann ein ddev restart durchführen, die erste Lösung erscheint mir aber sicherer (auch wenn das zweite schon funktioniert hatte).

$ ddev debug migrate-database mysql:8.0
Is it OK to attempt conversion from mysql:5.7 to mysql:8.0?
This will export your database, create a snapshot,
then destroy your current database and import into the new database type.
It only migrates the 'db' database [Y/n] (yes): y
Wrote database dump from project 'Nr4' database 'db' 

### der Snapshot landet dann im .ddev/.downloads-Verzeichnis

Und das hat tatsächlich

NICHT

funktioniert... die Datenbank war KOMPLETT LEER nach der o.g. Migration auf MySQL 8.0...

DDEV Restart - Docker-Restart - kein Effekt.

Aber neben dem (natürlich zuvor händisch erstellten) Backup der DB gab es ja auch noch den Snapshot von DDEV. DAS zumindest hat funktioniert.

Also mit ddev import-db --file=db.sql.gz die leere Datenbank mit dem frischen Snapshot gefüllt - und das Backend ist wiederreichbar.

Das Einzige, was ich mir vorstellen kann, ist das der nicht durchgelaufene mutagen-sync-process, der mit einem Fehler abbrach, verhindert hat, dass die DB automatisch wieder hergestellt wurde.

Die an- und hoffentlich endlich abschließende Migration

auf die vom Hoster bevorzugte MariaDB 10.7 lief dann problemlos durch.

PHP 8.x und "uid"

Hier gibt es eine Fehlermeldung / Warnung im Backend... beim allerersten Versuch bin ich darauf gestoßen - es muss im Typooscript des Main-Setup irgendwie ersetzt werden - da klingelt einiges...

Tatsächlich muss man die uid in den Conditions der betroffenen TS-Setups umschreiben:

https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Conditions/Index.html#page

... und das "Klingeln-im-Hinterkopf" hat sich geloht.

Bei einem der verherigen Versuche trat dies - so oder so ähnlich - ebenfalls auf, ich hatte dort allerdings die betreffende Zeile einfach stillgelegt.
Mittels "travers" ist dann aber auch diese Fehlermeldung verschwunden.

### Template für Testseite

# Stillegen der alten Condition
# [page["uid"] == 146]

# aber die neue funktioniert:
[traverse(page, "uid") == 146]
page.10.file = fileadmin/tmplcss/testseite.tmpl
[END]

Danksagung

Das oben Beschriebene ist zwar so ziemlich alles auf meinem eigenen, doch recht mühevoll angehäuften, Mist gewachen...

Aber ohne den kongenialen Wolfgang Wagner, der gerade Menschen, die sich nicht 24/7 mit TYPO3 beschäftigen, mit seiner sonoren Stimme Auftrieb gibt, wäre so einiges an Tipps wohl auf der Strecke geblieben.

So das YT-Video, das eine - nackte - T3-Installation über Docker/DDEV beschreibt:

https://www.youtube.com/watch?v=VpBFNPDcZIs

Und die YT-Serie über ein Update einer T3-8-Vers. auf 10... absolut sehenswert.
Obwohl darin - natürlich - genau alle die Fehler, über die man stolpert, nicht enthalten sind. Vor allem, weil es weder NEWS noch POWERMAIL oder gar GH_RANDOMKONTENT up-zu-graden gilt - was hier ja zu genau diesen echten Katastrophen geführt hatte.

https://www.youtube.com/watch?v=Ftg2K3HBPG4&list=PLHfxX7D3FBlJbfHhOGBcA26ilLJxCdT7y