Aggiornare Ubuntu Server da 14.04 a 16.04 su cloud server Aruba

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.