Raspberry
| Fiche express | |
|---|---|
| Domaine | Raspberry Pi (Raspbian/Debian ARM) — préparation carte SD, serveur LEMP léger |
| Commande | raspi-config
|
| Contexte | Raspbian squeeze/wheezy (armel puis armhf) — installation initiale et
serveur web nginx + PHP-FPM + MariaDB sur matériel contraint |
| Voir aussi | Chkconfig (équivalent update-rc.d sous Debian)
|
Aide-mémoire pour préparer une carte SD Raspbian et monter dessus un serveur web léger
(nginx + PHP-FPM + MariaDB), adapté aux ressources limitées du Raspberry Pi. Les premières
générations de Raspbian existaient en armel (squeeze et wheezy) puis en
armhf (wheezy uniquement, plus performant grâce au FPU matériel).
Préparation de la carte SD
Écriture de l'image sur la carte et vérification du partitionnement :
dd bs=4M if=2014-01-07-wheezy-raspbian.img of=/dev/mmcblk0
sync
parted -l
Au premier démarrage, configuration de base puis mise à jour complète :
sudo raspi-config
sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade
sudo passwd root
Configuration système
Réduire les écritures sur la carte SD
La carte SD s'use avec les écritures répétées : on retarde et regroupe les commit du
système de fichiers racine. Dans /boot/cmdline.txt :
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=commit=120,data=writeback,commit=120 elevator=deadline rootwait
Et dans /etc/fstab :
/dev/mmcblk0p2 / ext4 defaults,noatime,commit=120,data=writeback 0 1
Retirer l'environnement graphique
Sur un Raspberry Pi utilisé comme serveur (pas de bureau), on purge X11/LXDE pour libérer de la mémoire et de l'espace :
aptitude purge xserver-xorg xserver-xorg-core xserver-xorg-input-all xserver-xorg-input-evdev \
xserver-xorg-input-synaptics xserver-xorg-video-fbdev xserver-common xpdf xinit x11-common \
x11-utils x11-xkb-utils xarchiver screen pcmanfm penguinspuzzle lxde-common lxappearance \
lxde-icon-theme lxinput lxmenu-data lxpanel lxpolkit lxrandr lxsession lxsession-edit \
lxshortcut lxtask lxterminal leafpad dillo galculator gnome-icon-theme gnome-themes-standard \
gnome-themes-standard-data gpicview hicolor-icon-theme
# nettoyer les dépendances devenues orphelines
aptitude purge ~c
Penser ensuite à localepurge pour supprimer les locales inutilisées et gagner
encore de la place sur la carte SD.
Serveur web léger : nginx + PHP-FPM
nginx
nginx est préféré à Apache sur Raspberry Pi car nettement plus léger en RAM :
apt-get install nginx
service nginx start
Un site se déclare dans sites-available puis s'active par lien symbolique
dans sites-enabled :
mkdir -p /var/www/monsite.fr/htdocs
chown -R www-data:www-data /var/www
cd /etc/nginx/sites-available
cp default monsite.fr
cd ../sites-enabled/
ln -s ../sites-available/monsite.fr
nginx -t # valider la configuration avant de recharger
Bloc serveur type pour du PHP en FastCGI (socket Unix vers PHP-FPM) :
server {
listen 80;
server_name monsite.fr;
root /var/www/monsite.fr/htdocs;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /var/www/monsite.fr/htdocs;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
PHP-FPM
apt-get install php5 php5-fpm php5-mysql
apt-get install php5-gd php-pear php5-imagick php5-mcrypt php5-cli php5-curl php5-common php5-cgi
Dans /etc/php5/fpm/php.ini, décommenter et désactiver la résolution
approximative des chemins de script (faille de sécurité classique si activée) :
cgi.fix_pathinfo=0
service php5-fpm restart
Le pool par défaut se configure dans /etc/php5/fpm/pool.d/www.conf.
Alternative historique (spawn-fcgi + lighttpd) — avant la généralisation de PHP-FPM,
le FastCGI pouvait être lancé manuellement avec spawn-fcgi :
apt-get install lighttpd
update-rc.d -f lighttpd remove # équivalent Debian de chkconfig --del
/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid
Cette commande doit alors être ajoutée à /etc/rc.local pour survivre à un
redémarrage.
Cache PHP (APC)
APC (Alternative PHP Cache) accélère l'exécution en mettant en cache l'opcode PHP compilé — remplacé depuis par OPcache en PHP 5.5+, mais toujours d'actualité sur les anciennes versions embarquées sur Raspbian wheezy :
apt-get install php-apc
; /etc/php5/fpm/conf.d/20-apc.ini
extension=apc.so
apc.enabled=1
apc.shm_size=128M
apc.ttl=3600
apc.user_ttl=7200
apc.gc_ttl=3600
apc.max_file_size=1M
MariaDB
MariaDB partage le même nom de service que MySQL sur ces systèmes (service mysql
status) et s'installe comme un remplacement direct :
apt-get purge mysql*
apt-get autoremove
apt-get install python-software-properties
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb http://<miroir>/repo/5.5/debian wheezy main'
# obtenir l'URL du miroir adapté (version/distribution/architecture) sur mariadb.org/repo/
apt-get update
apt-get install mariadb-server mariadb-client
Compilation depuis les sources
Sur les architectures ARM non couvertes par les paquets binaires officiels (armel notamment), MariaDB doit être recompilé à la main :
wget -O mariadb-5.5.25.tar.gz "http://downloads.mariadb.org/f/mariadb-5.5.25/kvm-tarbake-jaunty-x86/mariadb-5.5.25.tar.gz/from/http:/download.nus.edu.sg/mirror/mariadb"
tar -xvzf mariadb-5.5.25.tar.gz
mv mariadb-5.5.25 maria
cd maria/BUILD
./autorun.sh
cd ..
aptitude install cmake libncurses5-dev bison
./configure
make
make install
adduser mysql
chown -R mysql /usr/local/mysql
cd /usr/local/mysql
cp support-files/mysql.server /etc/init.d/mysqld
scripts/mysql_install_db --user=mysql --basedir="/usr/local/mysql"
Adapter basedir dans /etc/mysql/my.cnf :
basedir = /usr/local/mysql
Puis copier les messages d'erreur (absents sinon du basedir personnalisé) et
démarrer :
cp -r maria/ /usr/share/mysql/
chown -R mysql /usr/share/mysql
cp /usr/share/mysql/sql/share/english/errmsg.sys /usr/share/mysql/errmsg.sys
/etc/init.d/mysqld start
./bin/mysql_secure_installation
Voir aussi
- Chkconfig — gestion des services au démarrage, équivalent RHEL de
update-rc.d