Migrer Nextcloud de Raspbian Jessie à Raspbian Stretch

cat-400-200

Pour ceux qui ne l'ont pas encore fait et qui ne souhaitent pas réinstaller complètement leur serveur Nextcloud pour passer de Raspbian Jessie à Raspbian Stretch, voici la procédure détaillée pour faire la migration.

Et pour ceux qui l'ont déjà fait mais sont restés à php5, explications pour passer à php7 et bénéficier des améliorations de php-fpm.

L'installation de départ

Ce tutoriel se base sur une installation de Nextcloud sur Raspbian Jessie Lite mais peut s'appliquer à la version complète de Raspbian Jessie.

Pour mémoire, Raspbian Jessie Lite est la version sans serveur graphique, parfaite pour un serveur web car moins gourmande en ressources. Pas besoin de clavier ou d'écran branchés sur le Pi, tout se contrôle depuis l'ordinateur principal grâce à une connexion ethernet ou wifi.

 

Cette migration suppose que l'on ait mis à jour Nextcloud sur sa dernière version (12.0.3 à ce jour) fonctionnant sur un serveur LAMP (avec Apache donc et non pas Nginx).

Il est également bien entendu possible de le faire avec un serveur LEMP (avec Nginx).

Préparatifs

Par mesure de sécurité, il est préférable de sauvegarder la base de données Nextcloud et de copier cette sauvegarde sur une autre machine.

 

Une fois la sauvegarde effectuée, ouvrir un terminal sur le Pi (par ssh par exemple).

Si on a installé log2ram (application permettant de mettre les journaux - logs- en mémoire vive plutôt que sur la carte SD du Pi), on va l'arrêter et la désactiver le temps de la procécure :

lambda_user@myweb:~ $ sudo systemctl stop log2ram


lambda_user@myweb:~ $ sudo systemctl disable log2ram

 

On fait ensuite une mise à jour de Raspbian Jessie :

lambda_user@myweb:~ $ sudo apt update
lambda_user@myweb:~ $ sudo apt upgrade
lambda_user@myweb:~ $ sudo apt dist-upgrade

S'il y avait des mises à jour, on redémarre le Pi :

lambda_user@myweb:~ $ sudo reboot

 

On vérifie s'il n'y a aucun problème dans les paquets installés :

lambda_user@myweb:~ $ sudo dpkg -C
lambda_user@myweb:~ $ sudo apt-mark showhold

Si ces commandes renvoient des anomalies, il est préférable de les corriger.

Mise à jour depuis Raspbian Jessie vers Raspbian Stretch

Changement des sources

Pour donner à Raspbian l'ordre de migrer de Jessie à Stretch, il suffit de modifier les fichiers des sources de la distribution.

lambda_user@myweb:~ $ sudo nano /etc/apt/sources.list

Dans ce fichier, il suffit de remplacer "jessie" par "stretch" :

sources jessie

 

sources stretch

 

Ctrl-o pour enregistrer, Ctrl-x pour quitter l'éditeur nano.

 

On fait de même avec le fichier raspi.list :

lambda_user@myweb:~ $ sudo nano /etc/apt/sources.list.d/raspi.list

Remplacer là aussi "jessie" par "stretch".

 

Démarrage de la migration

On lance le rafraîchissement des paquets :

lambda_user@myweb:~ $ sudo apt update
 (...)
 13,5 Mo réceptionnés en 1min 25s (158 ko/s)
 Lecture des listes de paquets... Fait
 Construction de l'arbre des dépendances
 Lecture des informations d'état... Fait
 458 packages can be upgraded. Run 'apt list --upgradable' to see them.

 

Pour voir la liste des paquets qui vont être mis à jour si on continue :

lambda_user@myweb:~ $ sudo apt list --upgradable

 

Et pour lancer la mise à jour :

lambda_user@myweb:~ $ sudo apt upgrade
 (...)
 406 mis à jour, 78 nouvellement installés, 0 à enlever et 52 non mis à jour.
 Il est nécessaire de prendre 234 Mo dans les archives.
 Après cette opération, 138 Mo d'espace disque supplémentaires seront utilisés.
 Souhaitez-vous continuer ? [O/n] O

 

Le terminal va s'arrêter pour nous permettre de consulter la liste des avertissements concernant les mises à jour.

avertsissements mise à jour stretch

 

Après lecture, on tape la lettre "q" pour continuer la mise à jour.

 

Plusieurs fois pendant la mise à jour, des messages vont apparaître nous expliquant qu'il existe une version plus ancienne d'un fichier de configuration. Il faudra choisir entrer conserver cette ancienne version ou de la remplacer par la nouvelle.

garder ancienne version

Il faudra conserver l'ancienne version pour ne pas perdre nos réglages en tapant indiféremment "N" ou "O".

 

De même, lorsqu'un écran nous demandera s'il faut redémarrer immédiatement les services mis à jour, choisir Yes.

redémarrer services

 

Que faire en cas de blocage ?

Il s'agit d'une grosse mise à jour. Il peut arriver que la procédure se bloque. On voit alors apparaître ce type de message dans le terminal :

blocage mise à jour stretch

 

Dans ce cas, il faut se déconnecter :

lambda_user@myweb:~ $ logout

Et redémarrer le Pi (en enlevant puis remettant l'alimentation).

 

Après le redémarrage, dans un terminal :

lambda_user@myweb:~ $ sudo dpkg --configure -a
lambda_user@myweb:~ $ sudo apt --fix-broken install

Puis relancer la mise à jour :

lambda_user@myweb:~ $ sudo apt upgrade

À la fin de cette étape, vous aurez peut-être un message vous avertissant de paquets mal installés. Si les commandes sudo dpkg --configure -a ou sudo apt --fix-broken install ne règlent pas le problème, il faudra s'y atteler plus tard.

Ici, le paquet fail2ban (application permettant de se protéger des connexions indésirées) est dans ce cas :

paquet non installé

Poursuite de la mise à jour

Vous aurez remarqué que lorsque nous avons lancé la commande "sudo apt upgrade", le terminal nous a indiqués qu'il y aurait des paquets non mis à jour :

406 mis à jour, 78 nouvellement installés, 0 à enlever et 52 non mis à jour.

En fait, la commande upgrade va mettre à jour tous les paquets déjà présents dans le système mais va laisser de côté les mises à jour des applications qui nécessitent la désinstallation de paquets présents ou l'installation de nouveaux paquets non encore présents.

Pour terminer, il faut donc lancer la commande :

lambda_user@myweb:~ $ sudo apt dist-upgrade
(...)
52 mis à jour, 76 nouvellement installés, 13 à enlever et 0 non mis à jour.
1 partiellement installés ou enlevés.
Il est nécessaire de prendre 95,4 Mo dans les archives.
Après cette opération, 146 Mo d'espace disque supplémentaires seront utilisés.
Souhaitez-vous continuer ? [O/n] O

À la fin de cette étape, on redémarre le Pi (ne pas s'inquiéter si l'on a toujours un avertissement concernant un paquet non installé).

Correction des problèmes rencontrés lors de la mise à jour

On va commencer par voir si des paquets ont été mal ou pas installés :

lambda_user@myweb:~ $ sudo dpkg -C

On ré-essaye les commandes de réparation :

lambda_user@myweb:~ $ sudo dpkg --configure -a
lambda_user@myweb:~ $ sudo apt --fix-broken install

Et on note les applications qui ne sont toujours pas fonctionnelles.

 

On regarde aussi si des services sont en erreur :

lambda_user@myweb:~ $ sudo systemctl list-units --state=failed
[sudo] Mot de passe de lambda_user : 
 UNIT LOAD ACTIVE SUB DESCRIPTION 
● fail2ban.service loaded failed failed Fail2Ban Service

LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.

1 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

 

Dans cet exemple, c'est toujours l'application fail2ban qui pose problème.

 

Dans ce cas, la solution consiste souvent à désinstaller et purger les fichiers de configuration de l'application pour la ré-installer complètement :

lambda_user@myweb:~ $ sudo apt remove --purge fail2ban
(...)
0 mis à jour, 0 nouvellement installés, 1 à enlever et 0 non mis à jour.
1 partiellement installés ou enlevés.
Après cette opération, 1 321 ko d'espace disque seront libérés.
Souhaitez-vous continuer ? [O/n] O
(...)
Purge des fichiers de configuration de fail2ban (0.9.6-2) ...
dpkg: avertissement: lors de la suppression de fail2ban, le répertoire « /etc/fail2ban » n'était pas vide, donc il n'a pas été supprimé
Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u1) ...

On note qu'ici il y a un avertissement disant que tout n'a pas pu être supprimé car le répertoire n'était pas vide («/etc/fail2ban»).

On va donc forcer son effacement :

lambda_user@myweb:~ $ sudo rm -rf /etc/fail2ban

 

Puis on réinstalle l'application (dans ce cas, fail2ban se configure différemment sur stretch que sur jessie, c'est pour cela que la mise à jour n'a pas pu avoir lieu  ; en se servant du wiki de debian, on configure correctement fail2ban) :

lambda_user@myweb:~ $ sudo apt install fail2ban
lambda_user@myweb:~ $ sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1812
ignoreip = 127.0.0.1/8 192.168.0.0/24
action = %(action_mwl)s

[sshd]
enabled = true

[pam-generic]
enabled = true

 

On redémarre le service fail2ban :

lambda_user@myweb:~ $ sudo systemctl restart fail2ban

Puis on vérifie que tout est correct :

lambda_user@myweb:~ $ sudo systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
 Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enab
 Active: active (running) since Tue 2017-10-17 22:44:16 CEST; 4s ago

 

Faire de même pour toute application dont la mise à jour n'a pas pu être effectuée.

Migration vers PHP7 avec PHP-FPM pour Nextcloud

 

Après notre migration sur Raspbian Stretch depuis Jessie, Nextcloud fonctionne correctement mais utilise toujours le langage php version 5.

Pour le vérifier, on entre la commande suivante :

lambda_user@myweb:~ $ php -v
 PHP 5.6.30-0+deb8u1 (cli) (built: Apr 14 2017 16:20:58)
 Copyright (c) 1997-2016 The PHP Group
 Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
 with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies

 

Nous allons donc maintenant installer la version ultérieure de php (version 7) qui nous permettra de bénéficier de php-fpm qui apporte des améliorations dans les performances.

Bien que l'on puisse faire cohabiter les deux versions de php, pour garder une installation propre, on va désinstaller php5.

 

Désinstallation de PHP5

On commence par arrêter les serveurs apache et mysql :

lambda_user@myweb:~ $ sudo systemctl stop apache2 mysqld

 

Puis on enlève php5 ainsi que ses fichiers de configuration :

lambda_user@myweb:~ $ sudo apt remove --purge php5*
 (...)
 Les paquets suivants seront ENLEVÉS :
 libapache2-mod-php5* php5-apcu* php5-cli* php5-common* php5-curl* php5-gd*
 php5-imagick* php5-intl* php5-json* php5-mcrypt* php5-mysql* php5-readline*
 0 mis à jour, 0 nouvellement installés, 12 à enlever et 0 non mis à jour.
 Après cette opération, 18,5 Mo d'espace disque seront libérés.
 Souhaitez-vous continuer ? [O/n]O

 

On enlève ensuite les paquets devenus inutiles après la désinstallation de php5 :

lambda_user@myweb:~ $ sudo apt auto-remove
 (...)
 0 mis à jour, 0 nouvellement installés, 15 à enlever et 0 non mis à jour.
 Après cette opération, 12,7 Mo d'espace disque seront libérés.
 Souhaitez-vous continuer ? [O/n] O

 

Installation de php7 et php-fpm

lambda_user@myweb:~ $ sudo apt install php7.0-fpm php7.0-mysql php7.0-common php7.0-gd php7.0-json php7.0-cli
lambda_user@myweb:~ $ sudo apt install php7.0-curl libapache2-mod-php7.0 php7.0-mbstring php7.0-xml php7.0-zip
lambda_user@myweb:~ $ sudo apt install php-apcu
lambda_user@myweb:~ $ sudo a2enmod proxy_fcgi setenvif
lambda_user@myweb:~ $ sudo a2enconf php7.0-fpm

 

On va configurer apache pour qu'il puisse se servir de php-fpm en ajoutant une ligne au fichier de configuration par défaut :

lambda_user@myweb:~ $ sudo nano /etc/apache2/sites-available/000-default.conf
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/run/php/php7.0-fpm.sock|fcgi://localhost/var/www/html/

Ctrl-o, Ctrl-x

On redémarre l'ensemble des services LAMP :

lambda_user@myweb:~ $ sudo systemctl restart apache2 mysqld

 

Puis on vérifie leur bon fonctionnement :

lambda_user@myweb:~ $ sudo systemctl status apache2 mysqld php7.0-fpm

 

Les trois services doivent indiquer active : running.

 

Configuration de php7

On configure php7 pour augmenter la taille maximum des fichiers que l'on peut téléverser sur Nextcloud (ici j'ai choisi 20Mo) :

lambda_user@myweb:~ $ sudo nano /etc/php/7.0/apache2/php.ini

 

On recherche post_max_size et upload_max_size pour les mettre à 20M et on sécurise php7 en modifiant la commande allow_url_fopen.

Pour rechercher les lignes à modifier dans ce long fichier, on peut s'aider de la fonction de recherche de nano (Ctrl-w) :

; Maximum size of POST data that PHP will accept.
 ; Its value may be 0 to disable the limit. It is ignored if POST data reading
 ; is disabled through enable_post_data_reading.
 ; http://php.net/post-max-size
 post_max_size = 20M
 (...)
 ; Maximum allowed size for uploaded files.
 ; http://php.net/upload-max-filesize
 upload_max_filesize = 20M
 (...)
 ;;;;;;;;;;;;;;;;;;
 ; Fopen wrappers ;
 ;;;;;;;;;;;;;;;;;;

; Whether to allow the treatment of URLs (like http:// or ftp://) as files.
 ; http://php.net/allow-url-fopen
 ;allow_url_fopen = On
 allow_url_fopen = Off

 

On recharge apache et on vérifie son fonctionnement :

lambda_user@myweb:~ $ sudo systemctl reload apache2
lambda_user@myweb:~ $ sudo systemctl status apache2

 

Configuration de mariadb (mysql)

Il faut modifier la configuration sur serveur de données mariadb pour qu'il fonctionne correctement avec Nextcloud en rajoutant 3 lignes dans la section [mysqld] :

lambda_user@myweb:~ $ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

 

# this is only for the mysqld standalone daemon
 [mysqld]

log-bin = /var/log/mysql/mariadb-bin
log-bin-index = /var/log/mysql/mariadb-bin.index
binlog_format = mixed

Ctr-o, Ctrl-w

lambda_user@myweb:~ $ sudo systemctl restart mysqld

lambda_user@myweb:~ $ sudo systemctl status mysqld

 

Configuration de Zend Opcache

Nextcloud peut utiliser le cache Opcache pour améliorer ses performances. Il faut pour cela une configuration spécifique :

lambda_user@myweb:~ $ sudo nano /etc/php/7.0/apache2/php.ini

 

Dans la section [opcache], sous

;opcache.enable=0

rajouter les lignes suivantes :

opcache.enable=1

opcache.enable_cli=1

opcache.memory_consumption=128

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=10000

opcache.revalidate_freq=1

opcache.save_comments=1

Ctrl-o, Ctrl-w

 

On recharge Apache  pour prendre en compte les changements :

lambda_user@myweb:~ $ sudo systemctl reload apache2

 

Pour vérifier, aller dans son instance Nextcloud depuis un navigateur

(http://nextcloud-myweb.duckdns.org) et dans l'onglet administration, vérifier qu'il n'y a aucun avertissement.

 

Avant de terminer

Si au début de ce tutoriel vous aviez désactivé log2ram, il faut le redémarrer et l'activer au démarrage :

lambda_user@myweb:~ $ sudo systemctl start log2ram
lambda_user@myweb:~ $ sudo systemctl status log2ram
 ● log2ram.service - Log2Ram
 Loaded: loaded (/etc/systemd/system/log2ram.service; disabled; vendor preset: enab
 Active: active (exited) since Tue 2017-10-17 23:11:11 CEST; 4s ago

lambda_user@myweb:~ $ sudo systemctl enable log2ram

 

On fait le ménage dans les sources de Raspbian :

lambda_user@myweb:~ $ sudo apt autoclean

 

Puis on redémarre :

lambda_user@myweb:~ $ sudo reboot

 

Migration terminée, Raspbian Stretch, Nextcloud avec php7 et php-fpm prêt à fonctionner !

 

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *