Migration RPi3

, par MiKaël Navarro

Suite au Crash RPi2...

J’en profite donc pour déménager mon site (et màj la version de SPIP)…

RPi 3
RPi 2 (backup) + RPi 3 (master)

Matériel

Voici les modèles RPis que je possède :

  • RPi 2 model B v1.1 (c) 2014 (w628) : pour mon site principal
    • BCM2836/2709/a01041 = 4x ARMv7@900MHz / 1GB
  • RPi 1 model B rev 2 (c) 2011 (w314) : pour le backup du site
    • BCM2708/000e = ARM11@700MHz / 512MB
      À cela s’ajoute :
  • RPi 1 model B+ v1.2 (c) 2014 (m314) : pour tests multimédia
    • BCM2708/0010 = ARM11@700MHz / 512MB

L’objectif est de migrer mon site sur une nouvelle RPi (3 ou 4) plus puissante et de passer ma RPi 2 en backup (et garder mon déjà ancienne RPi 1 pour bidouiller…).

J’opte pour :

  • RPi 3 model B v1.2 (c) 2015 (w942) :
    • BCM2837 = 64bit 4x ARM cortex-A53 @ 1,2GHz / 1GB

En effet bien que la RPi 4 soit sortie, y-a des pbs de chauffe !!!

Voici donc ma commande chez Kubii :

À cela j’ai rajouté une carte SD classe 10 et une clef USB « high speed » :

Installation

Commencer par installer une distribution Linux optimisée pour la Raspberry Pi :

  • Trouver la carte SD... (sans partitions) :
    $ sudo ls -ltr /dev/
    $ df
  • Y copier l’image :
    $ sudo dd bs=1M if=2019-09-26-raspbian-buster-lite.img of=/dev/sdb status=progress conv=fsync

+ Cf. : https://raspberry-pi.fr/creation-carte-sd-raspberry-raspbian-sous-gnulinux/

Booter sur clef USB

Afin de limiter un nouveau crash de la carte SD, je décide de mettre le système sur une clef USB.

Pour cela répéter les opérations précédentes sur la clef USB… puis :

  • Sur la carte SD :
    $ echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt
  • Booter dessus (seule) et vérifier :
    $ vcgencmd otp_dump | grep 17:
    17:3020000a

    Si vous n’obtenez pas une valeur identique, inutile de continuer, le bootcode n’est pas compatible.

  • Redémarrer sur la clef USB... (seule) et voilà !

+ Cf. :

P.I. il peut être intéressant aussi de passer le système de fichiers sous F2FS « flash-friendly file system », plus adaptée au mémoires flash :

MàJ

Commencer par (re-)configurer le système (timezone, clavier, password, réseau, ssh) :

$ sudo raspi-config
- Localisation > Locale = C | fr_FR@euro
- Localisation > Timezone = Paris
- Localisation > Keyboard Layout = Generic 105 ; French (alt. Latin-9 only) ; defaults…
- Chanqe User Password > pi
- Advamced Options > Expand Filesystem (normalement fait automatiquement au premier boot)
- Advanced Options > Memory Split = mettre au minimum 16MB for GPU
- Interfacing Options > enable SSH
- Network Options > Hostname = w942
- Network Options > Wifi = …
- Update

Et màj :

$ sudo apt-get install aptitude
$ sudo aptitude update
$ sudo aptitude upgrade

P.I. afin de préserver la carte / clef, on peut aussi mettre en place un système de logs en mémoire via log2ram par exemple :

LESP = Nginx + PHP

Ensuite la première étape pour avoir un serveur web opérationnel consiste à :

  • Installer un serveur web : on choisira Nginx pour sa légèreté p/r Apache ;
  • Installer PHP ;
  • On n’installera pas de base MySQL car je compte m’appuyer sur SQlite (par défaut avec SPIP 3).

Pour faire travailler Nginx avec PHP et SQlite :

$ sudo aptitude install nginx
$ sudo aptitude install sqlite3 php-sqlite3
$ sudo aptitude install php-fpm php-apcu php-cli php-json php-opcache php-readline php-mbstring php-xml php-gd php-curl

Sur les conseils de Pablo Ruth nous rajoutons :

  • PHP-FPM, un gestionnaire de processus FastCGI pour PHP, permettant d’éviter une surconsommation de mémoire et d’IO :
    # vi /etc/php5/fpm/pool.d/www.conf
    ;listen = 127.0.0.1:9000
    listen = /var/run/php/php7.3-fpm.sock
    # /etc/init.d/php7.3-fpm restart
  • Et PHP-APC, un cache PHP qui peut diviser par trois le temps d’exécution :
    # vi /etc/php/7.3/fpm/conf.d/20-apcu.ini
    extension=apcu.so
    apc.shm_size=100
    # /etc/init.d/php7.3-fpm restart

P.I. pour pouvoir envoyer de gros fichiers via PHP augmenter les valeurs par défaut de :

# /etc/php/7.3/fpm/php.ini
post_max_size = 32M
upload_max_filesize = 32M
# /etc/init.d/php7.3-fpm restart
# vi /etc/nginx/nginx.conf
client_max_body_size 32M;

Pour tester notre toute nouvelle installation nous allons créer un nouveau fichier de configuration mysites dans NginX :

# vi /etc/nginx/sites-available/mysites
server {                                                                                                                                                                                                          
       listen   80 default_server;
       listen   [::]:80 default_server;

       # SSL configuration
       #
       #listen 443 ssl default_server;
       #listen [::]:443 ssl default_server;
       #
       # Note: You should disable gzip for SSL traffic.
       # See: https://bugs.debian.org/773332
       #
       # Read up on ssl_ciphers to ensure a secure configuration.
       # See: https://bugs.debian.org/765782
       #
       # Self signed certs generated by the ssl-cert package
       # Don't use them in a production server!
       #
       #include snippets/snakeoil.conf;

       root /var/www;

       index index index.html index.htm;

       server_name _;

       location / {
               # First attempt to serve request as file, then
               # as directory, then fall back to displaying a 404
               try_files $uri $uri/ =404;
       }

       # Pass the PHP scripts to FastCGI server
       location ~ \.php$ {
               include snippets/fastcgi-php.conf;

               # With php-cgi (or other tcp sockets):
               #fastcgi_pass 127.0.0.1:9000;
               # With php-fpm (or other unix sockets):
               fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
       }

       # Deny access to .htaccess files,
       # if Apache's document root concurs with nginx's one
       location ~ /\.ht {
               deny all;
       }
}

Ce site est available, mais pas enabled, donc :

# cd /etc/nginx/sites-enabled
# rm default
# ln -s ../sites-available/mysites
# service nginx restart

Et nous rajoutons 2 pages, une statique et une dynamique :

# vi /var/www/index.html
<html><body>Welcome to my sites!</body></html>
# vi /var/www/info.php
<?php phpinfo(); ?>
# chown -R www-data.www-data /var/www

Puis visitez http://localhost et/ou http://localhost/info.php, tout devrais fonctionner :)

Déménagement du site SPIP

Suivre la procédure : https://www.spip.net/fr_article3141.html#Option-2-ne-recuperer-que-les-donnees-et-la-personnalisation ...

Et pour la màj SPIP :

Et si comme moi vous avez « error 502 » : https://www.scalescale.com/tips/nginx/502-bad-gateway-error-using-nginx/

Synchro./ backups

Reste à mettre en place un système de synchro. & backups…

  1. Backup de la base SQlite
  2. Rsync RPi 2 à partir RPi 3
  3. Clone RPi 2 sur clef USB
  4. Mirror RPi 3 sur http://klnavarro.free.fr
  5. Backup RPi 3 sur ftp://klnavarro@ftpperso.free.fr/dup/

Pour cela on s’appuiera sur les outils :

  • sqlite3 bdd.sqlite ".backup bdd-20191021.sqlite"
  • rsync -avz -O --delete --rsh='ssh -p xxxxxx' pi@w942:/var/www/blog/ /var/www/blog/
  • rpi-clone sda (cf. https://www.framboise314.fr/clonez-la-carte-sd-de-votre-raspberry-pi/)
  • lftp -e "mirror -eRv /var/www/blog/ /blog/; quit;" -u klnavarro,xxxxxx ftp://ftpperso.free.fr
  • duplicity --full-if-older-than 1M /var/www/ ftp://klnavarro:xxxxxx@ftpperso.free.fr/dup/
    À mettre en crontab…