Dopo un paio d’anni dall’aggiornamento da 12.04 a 14.04 ( descritto qui ) mi sono deciso a fare l’aggiornamento seguente (il tempo passa…).
Siccome ho avuto un paio di problemi che mi hanno richiesto un paio d’ore di tempo per risolverli, condivido qui la soluzione, così magari qualcun altro impiega quelle due ore in maniera più interessante!
Ho proceduto nella maniera classica a fare l’avanzamento di versione ma attenzione, prima di farlo leggete sotto.
Collegato via ssh ho eseguito i seguenti comandi:
sudo apt-get update sudo do-release-upgrade
Vi vengono fatte le solite domande, vengono disattivate le repositories di terze parte (che poi dovrete riattivare, come di norma) e tutto procede liscio, solo che dopo che il server ha fatto il reboot non riuscite più a loggarvi con ssh, ping non risponde e tutti i servizi che avevate (e.g. web server) sono irraggiungibili. Ottimo risultato, no?
Per fortuna Aruba mette a disposizione una console di ripristino , che vi permette di connettervi al server come se foste in locale. Li ho visto che il server era up e mi potevo loggare senza problemi, quindi ho dedotto che il problema fosse con i servizi di rete, ed infatti:
Il comando:
ifconfig
da come output
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:10886 errors:0 dropped:0 overruns:0 frame:0 TX packets:10886 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1164676 (1.1 MB) TX bytes:1164676 (1.1 MB)
Dove è finita la eth0 o chi per lei?
Il problema è che i nomi delle interfacce sono cambiati , ma i file di configurazione della rete non lo sanno, ed infatti, se si guardano tutte le interfacce:
ifconfig -a
il risultato è:
ens32 Link encap:Ethernet HWaddr 00:50:56:8b:f8:43 BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:509881 errors:0 dropped:3187 overruns:0 frame:0 TX packets:287604 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:147738951 (147.7 MB) TX bytes:500568621 (500.5 MB) ens33 Link encap:Ethernet HWaddr 00:50:56:8b:8c:a9 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) ens34 Link encap:Ethernet HWaddr 00:50:56:8b:62:86 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:11910 errors:0 dropped:0 overruns:0 frame:0 TX packets:11910 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1330462 (1.3 MB) TX bytes:1330462 (1.3 MB)
ovvero VMware mette a disposizione tre schede Ethernet, ma sono tutte down presumibilmente perché non hanno i dati di configurazione.
In effetti è così, infatti il comando:
less /etc/network/interfaces
evidenzia come ancora faccia ancora riferimento a eth0:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface etho inet static address 5.249.144.207 netmask 255.255.255.0 gateway 5.249.144.1 dns-nameservers 62.149.128.4 62.149.132.4
Ovviamente voi avrete il vostro indirizzo IPv4 invece che 5.249.144.207 .
Ora basta sostituire ens32 a eth0, in modo da ottenere:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto ens32 iface ens32 inet static address 5.249.144.207 netmask 255.255.255.0 gateway 5.249.144.1 dns-nameservers 62.149.128.4 62.149.132.4
Il mio suggerimento è, prima di fare l’avanzamento di versione, aggiungete in /etc/network/interfaces anche la sezione auto ens32 . Non ho fatto il test, ma suppongo che funzioni.
Fate ripartire la macchina e i servizi di rete ripartiranno e potrete collegarvi con ssh come di consueto.
Successivamente ho testato i miei web server che girano con WordPress sotto apache2 sul mio server e mi sono accorto che uno di essi non rispondeva. O meglio, faceva visulaizzare una pagina bianca.
Il problema qui è che Ubuntu 16.04 intruduce PHP7 in sostituzione di PHP5.6, e che PHP7 non è backward compatible con PHP5.6, e quindi alcuni plugin o temi di WordPress che non fossero aggiornati potrebbero dare problemi.
Nel mio caso, guardando il log degli errori usando il comando :
tailf /var/log/apache2/error.log
ho visto che, ogni volta che provavo a caricare il sito, ottenevo il seguente errore:
[Sat Oct 20 14:17:13.390786 2018] [:error] [pid 1407] [client 62.156.8.161:60501] PHP Fatal error: Uncaught Error: Call to undefined function mysql_real_escape_string() in /var/www/federicobindi/wp-content/plugins/statpress-visitors/statpress.php:305\nS
Infatti il plugin statpress-visitor usava la funzione mysql_real_escape_string() invece che mysqli_real_escape_string() (ovvero si inserisce la “i”) e poiché PHP7 non suppporta più la vecchia sintassi delle funzioni mysql il plugin bloccava il sito.
Nel mio caso ho editato il file incriminato inserendo la “i” ove necessario ed il sito è ripartito. Ovviamente subito dopo ho rimosso il plugin, che in effetti era obsoleto.
ATTENZIONE: in molti blog vi suggeriscono di risolvere questo tipo di problemi reinstallando la versione di PHP5.6 al posto del PHP7.0. E’ una pessima idea, magari risolvete il problema specifico, ma vi ritrovate con una versione obsoleta e che presto non verrà manutenuta, e con il rischio di ritrovarvi con molti più problemi nel medio periodo.