Upgrade Ubuntu da 15.04 a 16.04 LTS Dapper Drake

Spread the love

Ho aggiornato il mio Ubuntu 15.04 alla 16.04 LTS Dapper Drake, rimanendo in attesa dell’8 luglio per poter ulteriormente aggiornare alla 18.04 LTS Bionic Beaver

Sono successi alcuni inconvenienti, non gravissimi, che elenco:

MySQL non parte più.

In questo caso ho dovuto reinstallare mysql-server e aggiornare il file di configurazione di Apparmor che non consentiva a MySQL di accedere a determinate directory.
Il punto di partenza è l’errore che si manifesta quando andiamo a lanciare mysqld (per comodità lavoro come root):

# service mysql start

Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.

Qui occorre fare diagnosi come indicato nel messaggio d’errore:

# journalctl -xe
-- L'unità mysql.service ha iniziato la fase di avvio.
mag 08 10:37:50 jsbach audit[11686]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/11686/status" pid=11686 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=120 ouid=120
mag 08 10:37:50 jsbach audit[11686]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=11686 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=120 o
mag 08 10:37:50 jsbach audit[11686]: AVC apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/11686/status" pid=11686 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=120 ouid=120
mag 08 10:37:50 jsbach kernel: audit: type=1400 audit(1525768670.619:280): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/11686/status" pid=11686 comm="mysqld" requested_mask="r" 
mag 08 10:37:50 jsbach kernel: audit: type=1400 audit(1525768670.619:281): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/sys/devices/system/node/" pid=11686 comm="mysqld" requested_ma
mag 08 10:37:50 jsbach kernel: audit: type=1400 audit(1525768670.619:282): apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/proc/11686/status" pid=11686 comm="mysqld" requested_mask="r" 
mag 08 10:37:50 jsbach audit[11686]: AVC apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/run/mysqld/mysqld.sock.lock" pid=11686 comm="mysqld" requested_mask="c" denied_mask="c" fsuid=1
mag 08 10:37:50 jsbach kernel: audit: type=1400 audit(1525768670.971:283): apparmor="DENIED" operation="mknod" profile="/usr/sbin/mysqld" name="/run/mysqld/mysqld.sock.lock" pid=11686 comm="mysqld" requeste
mag 08 10:37:52 jsbach systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
mag 08 10:38:06 jsbach audit[11748]: AVC apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/sbin/mysqld" pid=11748 comm="apparmor_parser"
mag 08 10:38:06 jsbach kernel: audit: type=1400 audit(1525768686.555:284): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/sbin/mysqld" pid=11748 comm="apparmor_parser"
mag 08 10:38:20 jsbach systemd[1]: Failed to start MySQL Community Server.

-- Subject: L'unità mysql.service è fallita

Ciò che occorre fare è informare apparmor perché non blocchi l’accesso alle directory indicate nel file di log: scorrendo la slide sopra ho evidenziato alcuni file che apparmor non permette a mysql di toccare; quindi si procede così:

# gedit /etc/apparmor.d/usr.sbin.mysqld

si aggiungono queste righe al file, stando attenti a scrivere all’interno dell parentesi graffe {}:

 /var/run/mysqld/mysqld.sock.lock rw,
 /run/mysqld/mysqld.sock.lock rw,
 /tmp/** rwk,
 /sys/devices/system/node/* r,
 /proc/* r,

Sia /sys/device che /proc/ hanno un asterisco perché il file che viene bloccato cambia ad ogni avvio.
Dopodiché si si fa un reload di apparmor.d:

# apparmor_parser -r /etc/apparmor.d/usr.sbin.mysqld

Ora si può riavviare mysqld:

# service mysql start
# mysql -u root -proot01
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.22-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> ^DBye

E’ sparito PHP

Nel senso che Apache non attiva il modulo interprete di PHP.

Le pagine contenti PHP mi vengono servite così come sono, col codice e tutto, come se fossero un documento di testo o html.

In questo caso aggiungo il modulo mod_php5.6

# apt-get install libapache2-mod-php5.6

e lo attivo tramite /etc/apache2/mods-available/:

less /etc/apache2/mods-available/php5.6.load 
# Depends: mpm_prefork
LoadModule php5_module /usr/lib/apache2/modules/libphp5.6.so

È possibile anche installare e attivare il modulo PHP7, ma ovviamente occorre avviarne solo uno (quindi nei /mods-available/ si possono preparare varie versioni di PHP e poi creare il link ad uno solo di questi nella directory /mods-enabled/). Fatto questo si può verificare la correttezza della configurazione e finalmente avviare Apache:

# apache2ctl configtest 
Syntax OK
# service apache2 start
#

Due parole su AppArmor

Dal Wiki abbiamo la definizione pulita:

AppArmor è un’implementazione del «Linux Security Module» per il controllo degli accessi vincolante basato sul nome. AppArmor racchiude individualmente i programmi in un insieme di file e capacità posix 1003.1e draft.

È un sistema di sicurezza MAC (Mandatory Access Control) per Linux e serve per integrare ed estendere le politiche di sicurezza di Linux sui programmi in esecuzione ad un livello applicazione (quindi AppArmor fa la guardia al comporatmento delle applicazioni stando sopra al sistema operativo allo stesso loivello dell’applicazione da controllare).

Il controllo si effettua mediante creazione di profili, che sono dei file descrittivi che di solito vengono salvati nella directory

$ ll /etc/apparmor.d/
...
-rw-r--r-- 1 root root 8467 apr 4 13:58 usr.bin.firefox
-rw-r--r-- 1 root root 38551 dic 20 2016 usr.bin.webbrowser-app
-rw-r--r-- 1 root root 21143 apr 11 15:11 usr.lib.snapd.snap-confine.real
-rw-r--r-- 1 root root 8084 lug 27 2015 usr.lib.telepathy
-rw-r--r-- 1 root root 469 set 14 2015 usr.sbin.cups-browsed
-rw-r--r-- 1 root root 5119 ott 8 2015 usr.sbin.cupsd
-rw-r--r-- 1 root root 546 set 18 2015 usr.sbin.ippusbxd
-rw-r--r-- 1 root root 1264 mag 8 10:48 usr.sbin.mysqld
...

Nell’esempio sopra (mySql) apparmor.d bloccava l’accesso di mysqld a determinate directory al di là dell’accessibilità concessa dal sistema operativo.

Bibliografia

Ho trovato utili vari siti, tra cui:

https://linuxconfig.org/how-to-upgrade-to-ubuntu-18-04-lts-bionic-beaver

 

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.