Movable Type 5.x, Perl 5, Ubuntu 18.04

Movable Type 5In questo post intendo condividere le modifiche che ho dovuto applicare a Movable Type (MT) 5.x per non doverlo abbandonare al triste destino dell'obsolescenza e continuare ad usarlo con Linux Ubuntu 18.04. Movable Type è un CMS (Content Management System) scritto in Perl e in parte in PHP per gestire siti web, in particolare i blog. La versione 5 di MT è ormai diventata obsoleta e non è più supportata dalla casa madre Six Apart. Tuttavia io la ritengo una versione ancora valida e flessibile, anche se sono uscite versioni come la 6 e la 7 che hanno aggiunto migliorie e nuove funzionalità (a pagamento). Lo stesso discorso lo possiamo estendere al linguaggio di script PHP che passando dalla versione 4 alla versione 7 ha reso obsoleto parecchio codice software.

Linux Ubuntu 18.04Con la versione di Linux Ubuntu 18.04 LTS, la versione 5.x di Movable Type purtroppo non funziona più perché Linux Ubuntu 18.04 adotta una versione Perl 5.26.x che è incompatibile con gli script in Perl della versione 5.x di MT. In particolare le più recenti versioni del Perl vanno a modificare la sintassi delle espressioni regolari di cui Perl e MT5.x fanno largo uso. Di conseguenza, continuando a usare MT5.x con Linux Ubuntu 18.04 si riceve un brutto e frustrante messaggio di errore se non un Internal Server Error da parte del server web quando si cerca di avviare Movable Type 5.

Siccome, come spiegato in un altro post inerente la compatibilità di MT5.x con il Perl , io non intendo spendere ulteriori soldi per una nuova licenza che aggiorni Movable Type alla versione 7, versione che è più compatibile con la versione Perl distribuita con Linux Ubuntu 18.04, ho cercato di capire cosa manda in errore il compilatore degli script in Perl di MT5.x, per poter continuare a lavorare con la versione 5.x di MT.

Innanzitutto, per continuare a usare MT5.x, in particolare MTOS-5.2.13, occorre sostituire la cartella extlib di MT5.x, cartella che contiene le librerie di estensione del Perl, con la cartella extlib aggiornata alla versione 7.1.2 di MT scaricabile dal repository GitHub di Movable Type.

Ciò non basta, per mantenere attiva la versione 5 di Movable Type, occorre andare a mettere le mani sulla sintassi delle espressioni regolari del codice di MT5.x. Mentre con la versione Perl precedenti la 5.20, la parentesi graffa sinistra "{" poteva essere ancora accettata in una espressione regolare del tipo "m/.../" o "s/.../" e similari, ora non lo è più se non la si fa precedere da un carattere di escape "\". Occorre, quindi, andare alla ricerca delle espressioni regolari contenute nei vari file di MT5.x e là dove compare una parentesi graffa "{" in una espressione regolare, farla precedere da un carattere di escape "\".

Così, uno dei file che ho dovuto modificare è il file CMS.pm contenuto sotto la cartella lib/MT/App della cartella di installazione di MT5.x dove:

al rigo 4160: delete $param{$p} if $p =~ m/^${prefix}disp_prefs_show_/;

davanti alla parentesi graffa che precede "prefix" occorre aggiungere un escape \ in questo modo:

4160 patch: delete $param{$p} if $p =~ m/^$\{prefix}disp_prefs_show_/;

stessa cosa al rigo 4976, occorre modificarlo in questo modo, con la patch:  $css =~ s#\{\{support}}/?#$app->support_directory_url#ie;

Idem al rigo 4978, va modificato in questo modo, con la patch: $css =~ s#\{\{theme_static}}/?#$theme->static_file_url#ie;

anche il file mt-check.cgi della cartella principale va modificato in questo modo:

rigo 763: if ( $@ && $@ !~ /Insecure \$ENV\{PATH}/ ) {

Queste modifiche sono sufficienti a far ripartire MT5.x sotto Linux Ubuntu 18.04 mantenendo attive le funzioni principali. Poi, se si vuole, continuare a usare le altre funzioni che io ritengo superflue, come i plugin e certi fogli di stili, occorre modificare anche i file che gestiscono quelle funzioni, altrimenti si riceve un errore all'interno dell'applicazione. Il criterio è lo stesso: andare a mettere il carattere escape "\" davanti alla parentesi graffa di apertura o di sinistra "{".

Per esempio, il file sotto le cartelle plugin/StyleCatcher/lib/StyleCatcher/CMS.pm va modificato in questo modo:

rigo 66: $lib->{url} =~ s/\{\{static}}/$static_webpath/i;
rigo 67: $lib->{url} =~ s/\{\{support}}/$support_url/i;
rigo 69: =~ s/\{\{theme_static}}/MT::Theme::static_file_url_from_id($lib->{key})/ie;

Ci vuole pazienza. Comunque poco per volta, inseguendo gli errori che emergono via via e andando a mettere la patch nel file interessato, si riesce a riportare in vita MoVable Type 5.x, senza dover passare alla versione 7 vera e propria e senza dover installare versioni obsolete del Perl.