Votre blogue à la maison sur Raspberry Pi

53
9
nov.
2014
Do It Yourself

Nous verrons dans ce tutoriel comment installer un Raspberry Pi pour en faire un serveur web hebergé chez vous, derriere votre box internet.

Sommaire

Conventions établies

adresse IP du rpi = 192.168.1.10 (nom : rpi)
adresse IP de votre ordinateur = 192.168.1.11 (nom : pc)
adresse IP de votre box Internet = 192.168.1.1 (nom : box)
votre compte sur le pc = votre_login_pc
votre compte sur le rpi = votre_login_rpi
nom du site = nomsite.sytes.net (un fournisseur de DNS dynamique gratuit)
  • Je n'utilise pas sudo, donc les commandes se font par un passage en root par su ;
  • Sur le rpi, la connexion est possible par wifi avec une clé USB, mais j'utilise l'Ethernet ;
  • Le tutoriel est entièrement basé sur Linux et il n'y a pas d'interface graphique, sauf accident. J'ai testé TV + souris + clavier, je n'en ai pas trouvé l'intérêt dans le cadre choisi ici ;
  • Lorsque le système sera sur la clé USB, il restera une seule sortie USB, suffisante pour une utilisation du clavier s'il y a besoin d'une connexion en mode console pour un dépannage ;
  • La légèreté a été privilégiée contre toute autre considération, entraînant le choix de Nginx et de Pluxml. Nginx est réputé pour être moins lourd qu'Apache, et Pluxml n'utilise pas de bases de données. Mais d'autres choix peuvent être faits.

Achat du rpi

J'ai acheté les produits ci-dessous chez www.kubii.fr.

32,99 € Raspberry Pi 512Mo Model B
 3,15 € Cordon d'alimentation 1.8 mètres, USB A M-MICRO B M
 7,90 € Adaptateur USB euro noir
 2,40 € Cable HDMI 2 mètres
 6,87 € Boitier
11,95 € Expédition
65,26 € TOTAL

Après cet achat et après avoir fait du rangement chez moi, j'ai trouvé un vieux mini-hub USB 4 ports avec son câble USB mâle-mini mâle (ou micro) qui permet d'assurer l'alimentation du rpi et d'avoir plus d'entrées USB. Mais il faut avoir la bonne tension, je n'y connais rien, donc si vous n'êtes pas sûr, achetez tout le nécessaire. La longueur des câbles doit être décidée en fonction de l'endroit où vous poserez votre rpi (prise de courant, boîtier Internet, TV). De plus, si vous n'en avez pas, achetez aussi un câble Ethernet. Vous aurez aussi besoin d'une carte SD et d'une clé USB de 8 Go. Si vous suivez ma configuration, achetez la carte SD la plus petite et la moins chère, elle ne servira qu'à démarrer, le reste étant sur la clé USB. Celle-ci servira de disque dur, elle doit donc être robuste et rapide, mais les spécifications ne sont jamais précisées. Je possède trois clés USB et une carte SD de classe 4, j'ai donc fait des tests de lecture/écriture, peu fiables apparemment, mais qui donnent peut-être des indications. J'ai tout formaté en ext4.
Tests de lecture (relancer plusieurs fois pour trouver une moyenne) :

hdparm -t --direct /dev/sdc sd          20 MB/s
hdparm -t --direct /dev/sdd usb1        29 MB/s
hdparm -t --direct /dev/sde usb2        22 MB/s
hdparm -t --direct /dev/sdf usb3        22 MB/s

Tests d'écriture (relancés plusieurs fois pour trouver une moyenne) :

sync;time bash -c "(dd if=/dev/zero of=/mnt/test bs=8k count=10000; sync)"
sd      930 MB/s
usb1    1.1 GB/s
usb2    1.1 GB/s
usb3    850 Mb/s

Bien sûr, ces résultats en écriture sont délirants, mais je constate que la SD et l'USB3 sont les moins rapides, et que l'USB1 s'en sort le mieux, c'est donc celle que j'ai choisie pour installer Raspbian.

Installation de Raspbian et partitionnement

Plusieurs distributions sont disponibles, j'ai choisi la Raspbian Wheezy, une dérivée de la Debian Wheezy, téléchargeable ici. Elle se présente sous la forme AAAA-MM-JJ-wheezy-raspbian.img et pèse 500 Mb. Vous la dézippez sur le PC et l'installez sur la clef USB (/dev/sdX avec X=c dans mon cas, mais ça peut changer chez vous) par la commande :

dd if=AAAA-MM-JJ-wheezy-raspbian.img of=/dev/sdX

Attention : /dev/sdX doit bien être votre clef USB, et non un disque dur, sinon le contenu sera écrasé. Vous obtiendrez le partitionnement suivant :

  • un espace vide de 4 Mb (taille probablement aléatoire)
  • partition /dev/sdX1 en FAT32 d'une taille de 56 Mb, c'est la partition /boot
  • partition /dev/sdX2 en ext4 d'une taille de 1.75 Gb, la partition système /

Sur le PC vous formatez votre carte SD en FAT32 (/dev/sdY avec Y=d dans mon cas). Ensuite vous montez la partition /boot de votre clef USB, et la partition de la carte SD, afin de copier les fichiers de démarrage de la carte USB vers la carte SD :

mkdir /tmp/mnt_usb ; mount -t vfat /dev/sdX1 /tmp/mnt_usb
mkdir /tmp/mnt_sdcard ; mount -t vfat /dev/sdY1 /tmp/mnt_sdcard
cp -av /tmp/mnt_usb/* /tmp/mnt_sd/

Il faut indiquer maintenant au rpi où se situe la partition système. Pour cela éditez le fichier cmdline.txt de la carte SD, /tmp/mnt_sd/cmdline.txt, et remplacez root=/dev/mmcblk0p2 (ce nommage de la carte SD peut être différent chez vous) par root=/dev/sda2 : ce qui se présente actuellement sous le nom de /dev/sdY2 (ou autre) sur votre ordinateur, sera nommé /dev/sda2 sur le rpi. Vous pouvez démonter la carte et la clef USB. Cette dernière peut être laissée en l'état ou repartitionnée selon vos besoins.

Personnellement j'ai supprimé l'espace vide et la partition FAT32 puis déplacé /dev/sdY2 au début du disque en l'agrandissant à 3 Go (actuellement mon / ne dépasse pas 1,5 Go).

Il est aussi possible de créer d'autres partitions (swap, données, etc.), mais vous pourrez toujours le faire ultérieurement si besoin. Il y a aussi un fichier de swap de 100 Mo dans le système qu'on peut réduire ou agrandir (/etc/dphys-swapfile & /var/swap), mais n'ayant pas de problème de mémoire je n'y ai pas touché (mon blogue est très léger et requiert entre 200 et 250 Mo sur les 512 Mo du rpi).

Vous pouvez maintenant insérer la carte SD et la clef USB sur le rpi, connecter le câble Ethernet et le câble d'alimentation, et enfin lancer la petite bestiole.

Configuration de base du rpi

Raspi-config

Le rpi a démarré et devrait fonctionner. Comment vous connecter ? La première chose à faire est de consulter votre boîtier Internet pour connaître l'adresse IP dynamique attribuée au rpi. Vous trouvez par exemple 192.168.1.30. La commande ssh pi@192.168.1.30 avec le mot de passe raspberry vous permet de vous identifier avec l'utilisateur par défaut pi. Cette commande ssh nom_user@adresse_ip_rpi est la seule commande vous permettant d'accéder au rpi sans interface graphique. Commencez par attribuer un mot de passe à root par sudo passwd root, vous permettant de vous identifier en root par su, afin de de configurer le rpi avec la commande raspi-config (ce menu peut changer si votre version de raspbian est plus récente que la mienne). Il est imprudent de s'indentifier directement en root par SSH, nous verrons comment l'interdire plus loin.

Dorénavant nous serons presque exclusivement en root pour toute la suite des démarches :

ssh pi@192.168.1.30
sudo passwd root password
su
raspi-config

La dernière commande affiche cet écran sur 2 colonnes, chaque ligne pouvant être sélectionnée pour modification; je mets en commentaire à droite mes propres choix.

info               Information about this tool
expand_rootfs      Expand root partition to fill SD card    # inutile
overscan           Change overscan                          # inutile
configure_keyboard Set keyboard layout                      # mettez fr pour avoir l'azerty en cas de connexion TV
change_pass        Change password for 'pi' user            # votre mot de passe
change_locale      Set locale                               # je garde par défaut [*] en_GB.UTF-8 UTF-8, sinon la connexion SSH est graphiquement polluée
change_timezone    Set timezone                             # Europe/Paris
change_hostname    Set hostname                             # raspberrypi par défaut
memory_split       Change memory split                      # gpu=4 : l'utilisation de la carte graphique étant inutile, je donne au GPU la valeur minimale de 4 Mb, tout le reste étant disponible pour le CPU
overclock          Configure overclocking :
          * None   700MHz ARM, 250MHz core, 400MHz SDRAM, 0 overvolt
          * Modest 800MHz ARM, 250MHz core, 400MHz SDRAM, 0 overvolt
          * Medium 900MHz ARM, 250MHz core, 450MHz SDRAM, 2 overvolt # j'ai choisi Medium
          * High   950MHz ARM, 250MHz core, 450MHz SDRAM, 6 overvolt
          * Turbo  1000MHz ARM, 500MHz core, 600MHz SDRAM, 6 overvolt
ssh                Enable or disable ssh server                 # enable
boot_behaviour     Start desktop on boot?                       # non
camera             Enable/Disable camera addon support          # non
rastrack           Add this Pi to Raspberry Pi Map - Rastrack   # non
update             Try to upgrade raspi-config                  # non (on le fera plus tard)

Vous pouvez redémarrer, vous reconnecter par SSH, puis passer en root et vérifier que le surcadencement (« overclocking ») est correct de différentes manières :

vcgencmd get_config int
vcgencmd get_config arm_freq
cat /boot/config.txt

Il est aussi conseillé de modifier le fichier /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor en remplaçant powersave par ondemand.

Au fait, ça chauffe un rpi? Allez voir /opt/vc/bin/vcgencmd measure_temp.

IP statique

Pour un serveur Web je préfère une IP statique, ce qui s'obtient en modifiant /etc/network/interfaces (j'ai diésé les options se référant au DHCP et au wifi)

auto lo
iface lo inet loopback
iface eth0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    network 192.168.1.1
    broadcast 192.168.1.255
    gateway 192.168.1.1

Après un redémarrage, vous vous connectez par ssh pi@192.168.1.10

Faisons un peu de ménage

Le rpi va nous servir uniquement à créer un blogue, et c'est tout. Pour un serveur Web, de nombreux éléments sont inutiles, ce qui va nous permettre de faire un grand nettoyage à la tronçonneuse. Pour commencer, supprimons des consoles inutiles dans notre cas. Dans le fichier /etc/inittab vous pouvez diéser les 4 dernières lignes, c'est-à-dire les consoles 3 à 6.

1:2345:respawn:/sbin/getty --noclear 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6

Gestion des utilisateurs et des groupes

Je préfère supprimer l'utilisateur pi qui est connu et donc identifiable pour les intrus. Créons d'abord un nouvel utilisateur et son groupe, qui par convention auront pour nom votre_login_rpi

useradd --home-dir /home/votre_login_rpi --create-home --skel /etc/skel --user-group --uid 1000 votre_login_rpi
passwd votre_login_rpi

Vérifiez que votre nouvel utilisateur est bien créé :

id votre_login_rpi
uid=1000(votre_login_rpi) gid=1000(votre_login_rpi) groups=1000(votre_login_rpi)

Vous devez vous déconnecter en faisant 2 fois Ctrl+d (exit de root, puis exit de pi), puis vous reconnecter par ssh votre_login_rpi@192.168.1.10, repasser en root et supprimer l'utilisateur pi:

userdel --remove pi
groupdel pi

Je décide aussi de supprimer les utilisateurs et groupes inutiles
userdel

  • games
  • lp

groupdel

  • fax
  • voice
  • cdrom
  • floppy
  • tape
  • sudo
  • audio
  • video
  • lpadmin
  • indiecity

Les modules son

lsmod affiche des modules de son dont nous n'aurons pas besoin. Dans le fichier /etc/modules il suffit de commenter le module son #snd-bcm2835

Suppression des services inutiles

Pour désactiver un service sans supprimer son script de lancement (dans /etc/init.d/):

/etc/init.d/nom_service stop
update-rc.d -f nom_service remove

Procédez ainsi avec les services triggerhappy plymouth plymouth-log.

Pour visualiser les services présents et/ou actifs il faut installer sysv-rc-conf avec les commandes:

apt-get update
apt-get install sysv-rc-conf
sysv-rc-conf --list # liste de tous les services présents
sysv-rc-conf        # interface minimale (mais ça rame) pour activer/désactiver les services

Gestion des logiciels Raspbian

La version de Raspbian que vous avez installée peut nécessiter une première mise à jour, opération que vous effectuerez de temps à autre de cette manière :
apt-get update qui réactualise le fichier répertoriant les logiciels disponibles ; relancez cette commande chaque fois que vous souhaitez rechercher, mettre à jour ou installer des paquets ; apt-get dist-upgrade fait une mise à jour globale de la distribution

Il se peut qu'une mise à jour du micrologiciel (« firmware ») du rpi soit nécessaire, pour cela il faut lancer rpi-update. Depuis peu c'est un paquet intégré à Raspbian, mais je ne sais pas s'il est intallé d'office. Si la commande ne répond pas, installez ce paquet par apt-get install rpi-update
Avant cette mise à jour lancez les commandes /opt/vc/bin/vcgencmd version et uname -a et notez les résultats.
Puis lancez rpi-update, redémarrez, et comparez les nouvelles versions du système.

Suppression des paquets inutiles

Vous pouvez également utiliser raspbian-ua-netinst, qui produit une image minimale sans fantaisie (pas d'utilisateur pi et d'autres trucs).
Après la mise à jour, dans l'optique d'un serveur Web, de nombreux paquets sont inutiles, donc vous pouvez les supprimer par la commande aptitude purge:

aptitude purge alsa alsa-base alsa-utils cups-bsd cups-client cups-common dillo gconf-service gconf2 gconf2-common ghostscript gnome-themes-standard libgconf-2-4 gksu libgksu2-0 gnome-accessibility-themes gnome-icon-theme gnome-themes-standard gnome-themes-standard-data gpicview lxde leafpad lightdm liblightdm-gobject-1-0 libxklavier16 lightdm-gtk-greeter libsamplerate0 libqt4-network libqt4-xml libqtdbus4 libqtwebkit4 lxappearance lxde-common lxde-core lxde-icon-theme lxinput lxpanel lxpolkit lxrandr lxsession lxsession-edit lxshortcut lxtask lxterminal pistore scratch squeak-plugins-scratch squeak-vm libfm-data libfm-gtk-bin libfm-gtk1 libfm1 libmenu-cache1 lxmenu-data omxplayer pcmanfm penguinspuzzle sudo xarchiver ed galculator midori wpasupplicant xpdf libraspberrypi-doc libiw30  wireless-tools wpagui libcupsimage2 sudo wolfram-engine

Pour achever cette suppression, installez deborphan qui vous permettra de lister les dépendances devenues inutiles à supprimer, puis lancez-le

apt-get update
apt-get install deborphan
deborphan

Si vous êtes accro aux éditeurs vi, nano ou autres passez votre chemin. Personnellement, pour la mise en place et la configuration du blogue, j'ai choisi de laisser un peu de X-Window afin d'utiliser le petit éditeur nedit par SSH, donc apt-get install nedit

Le serveur web

Installation de Nginx

Tout d'abord il faut un utilisateur et un groupe dédiés au serveur web. Raspbian l'a fait pour vous, ils se nomment www-data : uid=33(www-data) gid=33(www-data) groups=33(www-data).
Il faut aussi un répertoire dédié au blogue :

mkdir /var/www; chown -R www-data.www-data /var/www

Tant qu'on y est, dans /etc/passwd changez www-data:x:33:33:www-data:/var/www:/bin/sh par www-data:x:33:33:www-data:/var/www:/bin/false afin d'empêcher une connexion sous ce nom, ce qui est plus sécurisé, mais vous devrez tout faire en root et penser à rétablir les propriétaires pour chaque fichier et répertoire créé ou modifié. Pour cela :

chown -R www-data.www-data /var/www/répertoire # pour la totalité du répertoire
chown www-data.www-data /var/www/répertoire/fichier # pour un fichier

Passons à l'installation proprement dite de Nginx

apt-get update
aptitude install nginx-full nginx-common geoip-database libgeoip1

Avec les dépôts de Raspbian, j'ai eu la version 1.2.1-2.2 de Nginx, qui date de juillet 2012, alors que la version stable de juin 2013 est la 1.4.0. Mais rien ne vous empêche de compiler aux petits oignons la dernière version de Nginx, avec tous les modules qui vous plaisent.

Ensuite, pas de serveur web sans php (NdM: enfin sauf LinuxFr.org bien sûr :-)

apt-get update
aptitude install php5 php5-common php5-fpm php5-gd libonig2 libqdbm1

Configuration de Nginx

Les fichiers de configuration de Nginx sont sous /etc/nginx, les principaux étant:

  • nginx.conf le fichier principal de configuration
  • sites-available/ répertoire contenant les fichiers de configuration du ou des sites
  • sites-enabled/ répertoire contenant les fichiers de configuration du ou des sites actifs (liens symboliques vers le répertoire site-availables)

Maintenant on va faire un peu joujou avec le serveur, ca vous fera comprendre un peu mieux comment ça se passe. D'abord, dans le fichier /etc/hosts du pc, ajoutez l'adresse IP du rpi et le nom du site : 192.168.1.10 nomsite.sytes.net.

Si, comme moi, vous avez un XP virtuel installé, il faut mettre la même information dans le fichier C:\windows\system32\drivers\etc\hosts, ce qui permettra de vérifier l'aspect du blog sur un autre système d'exploitation.

Nginx a été installé, mais pas encore activé. Pour lancer un service sur Raspbian : service nginx start (start pour démarrer le serveur, restart pour le relancer, stop pour l'arrêter).

Ouvrez un navigateur web et entrez l'adresse IP du rpi, vous devriez obtenir un « Welcome to nginx! »

Mais ce que vous voulez, c'est créer votre propre site, il faut donc configurer un fichier spécifique, ce sera donc /etc/nginx/sites-available/nomsite, avec une configuration minimale pour tester.

server {
  listen 80;
  root /var/www;
  server_name localhost;

  location / {
    index index.php index.html;
  }

  # enable php
  location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
  }
}

Ce site est « available », mais pas « enabled », donc :

cd /etc/nginx/sites-enabled
rm default # suppression du lien sur le site par défaut présent à l'installation de Nginx
ln -s ../sites-available/nomsite
service nginx restart

On va maintenant créer deux petits fichiers de test dans le repertoire /var/www/ où seront rangées toutes les données qui apparaîtront sur votre site. Personnellement, j'ai tout rangé à la racine du répertoire, mais vous pouvez créer un répertoire dédié à votre site sous /var/www/.
Un premier fichier index.html avec :

<html><body>Hello world, c'est ma page de mon nouveau site !</body></html>

Et un petit script php info.php avec :

<?php
phpinfo();
?>

N'oubliez pas, vous êtes en root et vous créez des fichiers root pour un serveur dont l'utilisateur est www-data. Les fichiers qui n'ont pas www-data comme propriétaire ne s'afficheront pas sur le site, donc

chown -R www-data.www-data /var/www/

ou

chown www-data.www-data /var/www/index.html /var/www/info.php

Maintenant affichez dans la barre d'adresse de votre navigateur 192.168.1.10/index.html, et vous devriez voir s'afficher son contenu.
Pour afficher les infos PHP de votre système, entrez 192.168.1.10/info.php.

Bon, tout fonctionne, mais le fichier /etc/nginx/sites-available/nomsite est minimaliste. Incapable de faire un tutoriel sur nginx, je vous présente tel quel mon propre fichier, fabriqué à partir de mes recherches, et notamment des références que je donne à la fin. Ce fichier est sûrement approximatif et très perfectible.

/etc/nginx/sites-available/nomsite

server {
  listen 80;
  server_name localhost:
  root /var/www;
  index index.php index.html index.htm;
  client_max_body_size 20M;         # set maximum upload size
  access_log /var/log/nginx/access.log combined;    # format combined pour logwatch
  error_log /var/log/nginx/error.log;
  autoindex off;                    # pour eviter de lister les répertoires

  # drop.conf
  include drop.conf;                # voir fichier plus bas

  # default try order
  location /
  {
    # First attempt to serve request as file, then as directory, then as /index.php?$args
    try_files $uri $uri/ /index.php?$args;
  }

  # enable php
  location ~ \.php$
  {
    try_files       $uri =404;
    fastcgi_index   index.php;
    fastcgi_pass    php5-fpm-sock;#/etc/php5/fpm/pool.d/www.conf /etc/nginx/conf.d/php5-fpm.conf
    fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include         fastcgi_params;
  }
}

/etc/nginx/drop.conf

### protection de fichers et répertoires contenus dans /var/www/
#
# protection des fichiers caches
location ~ /\.  { deny all; }
#
# protection du fichier de version de pluxml
location /version { return 404; }
#
#protection de répertoires
location ~ /(update|data)/ { deny all; }

Selon les informations du blogue de pablo-ruth, on configure php5-fm comme suit.

Création du fichier /etc/nginx/conf.d/php5-fpm.conf :

upstream php5-fpm-sock {
        server unix:/var/run/php5-fpm.sock;
}

et modification du fichier /etc/php5/fpm/pool.d/www.conf (le point-virgule dans la ligne suivante indique un commentaire) :

;listen = 127.0.0.1:9000
listen = /var/run/php5-fpm.sock

Pour finir j'ai modifié le fichier /etc/php5/fpm/pool.d/www.conf, mais les valeurs dépendent de la taille du contenu de votre site, vous trouverez des informations dans cette réponse.

pm = dynamic
pm.max_children = 8
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 500

;php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f www@my.domain.com
;php_flag[display_errors] = off
;php_admin_value[error_log] = /var/log/fpm-php.www.log
;php_admin_flag[log_errors] = on
;php_admin_value[memory_limit] = 32M
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on

Dans /etc/nginx/nginx.conf il faut dédièser server_tokens off;, ce qui permet de cacher la version de Nginx, ce que vous pouvez tester depuis votre pc par telnet (ou nc ou lynx -head ou d'autres) :

telnet 192.168.1.10 80
HEAD HTTP/1.1

Ce qui affiche nginx au lieu de nginx.numversion. Pour cacher plus d'informations, il faut compiler Nginx.

Vous créez un répertoire pour les journaux de Nginx et redémarrez le service :

mkdir /var/log/nginx/
service nginx restart

Hello The World

La box Internet

Pour le moment vous êtes le seul à pouvoir accéder à votre site, mais le reste de l'univers s'impatiente. Il faut rendre votre site accessible à l'extérieur, d'abord par votre boîtier Internet. Le mien est celui de SFR, mais le principe est le même partout. Dans la partie NAT, Il faut effectuer une translation de port entre votre rpi et l'Internet par le port 80. Vous entrez l'adresse IP du rpi, établissez un protocole TCP, et définissez le port 80 comme port de communication.

Votre nom de domaine chez noip

Le boîtier a ouvert une porte, mais il vous manque une adresse. Vous pouvez acheter un nom de domaine, autour de 15 euros, mais dans ma démarche de solutions gratuites, j'utilise un nom de domaine attribué par www.noip.com. Bien sûr, cette solution comporte le risque de la disparition soudaine d'un service gratuit mais privé. Vous pouvez vous inscrire ici, prenez l'option « Free » et créez votre compte No-IP. Vous pouvez choisir un nom selon les disponibilités, en le faisant suivre de .noip.me, .zapto.org, .sytes.net, etc.

Attention, il y a un petit piège. Remplissez le formulaire, avec par exemple nomsite.sytes.net, et cochez le petit carré blanc « Create my hostname later », et ensuite validez par un Sign Up. Ensuite confirmation par mail, vous êtes redirigé dans votre espace membre et vous pouvez « Add a host ». Ici vous enregistrez votre adresse nomsite.sytes.net, choisissez le type DNS Host(A), et ajoutez l'adresse IP externe de votre boîtier Internet.

Si vous avez comme moi une adresse IP dynamique, le boîtier de SFR gère bien le lien avec no-ip dans Menu Réseau/DynDNS. Activez le service, sélectionnez no-ip.com, entrez vos compte et password no-ip, ainsi que l'adresse nomsite.sytes.net. La prochaine fois que vous redémarrerez votre boîter Internet, 3 ou 4 minutes suffiront pour que votre nom de domaine soit associé à la nouvelle adresse IP dynamique.

Si vous êtes chez un autre fournisseur d'accès, vous pouvez utiliser ce logiciel fourni pour no-ip pour mettre à jour votre DNS : http://www.noip.com/downloads.php?page=linux

Maintenant que votre nom de domaine est visible depuis l'extérieur, dans le fichier /etc/nginx/sites-available/nomsite il faut remplacer server_name localhost; par server_name nomsite.sytes.net; puis

service nginx restart

Installation et configuration de Pluxml

Récupérez le fichier d'installation ici, dézippez-le et copiez-le dans /var/www/ en lui donnant les droits appropriés.

chown -R www-data.www-data /var/www/
chmod -R 770 /var/www/
service nginx restart

Depuis votre navigateur allez à l'adresse http://nomsite.sytes.net/install.php et remplissez le formulaire:

langue+heure
Nom de l'administrateur
Identifiant de connexion à l'administration
Mot de passe
Installer

Après cela supprimez le fichier /var/www/install.php. Vous pourrez installer différents thèmes, ajouter des extensions, etc. Visitez le site, où vous trouverez un wiki, des thèmes, un forum, etc.

Modifier le thème

Un petit conseil si vous souhaitez modifier les fichiers PHP et CSS du thème du blogue (mais rien ne vous y oblige si votre thème vous satisfait) :
Je n'ai pas supprimé tous les paquets graphiques de Raspbian afin d'éditer ces fichiers plus confortablement avec Nedit. Pour cela vous lancerez ssh -X -Y -p 22 votre_login_rpi@192.168.1.10. Ensuite vous pouvez éditer avec nedit les fichiers concernés situés dans /var/www/themes/defaut/, defaut étant le nom du thème par défaut.

Par contre cela pose des problèmes de droit sur ces fichiers dont www-data.www-data est propriétaire. Deux possibilités s'offrent à vous :

  • ajoutez votre_login_rpi au groupe www-data dans /etc/group ;
  • chmod o+w *.php style.css, édition des fichiers, puis chmod o-w *.php style.css.

J'ai choisi la deuxième solution, plus contraignante mais plus sécurisée.

Corriger un bogue

Il y a un bogue dans Pluxml lorsque les personnes qui viennent poster un commentaire souhaitent inscrire leur site web. Le site nomsite.sytes.net est récupéré tel quel sans « http:// », donc si on clique dessus la redirection ne s'effectue pas. J'utilise le thème « defaut », peut-être que ce boque est absent des autres thèmes. Pour ajouter « http:// » par défaut dans le formulaire, il faut modifier le fichier /var/www/themes/defaut/commentaires.php et remplacer:

<input id="id_site" name="site" type="text" size="20" value="<?php $plxShow->comGet('site',''); ?>" />

par

<input id="id_site" name="site" type="text" size="20" value="<?php $plxShow->comGet('site','http://'); ?>" />

Administration du serveur

Maintenant vous avez un blogue, vous postez vos articles, recevez des commentaires, etc. Tout va bien. Vraiment bien ? Votre serveur est une porte ouverte sur internet, votre nom de domaine est fixé pour l'éternité, connu du plus grand nombre. Il faut donc lui prodiguer protection et surveillance, à l'aide de quelques outils à mettre en place et à configurer.

Le pare-feu Iptables

Je ne vais pas vous faire un cours, mais seulement vous montrer mon pare-feu. Les règles iptables sont le moyen le plus simple de filtrer les entrées/sorties de votre rpi. Attention à cette étape, une mauvaise règle ssh peut vous faire perdre votre connexion avec le rpi, et dans ce cas la seule solution sera de vous connecter via la tv pour réparer le script.

Il y a 3 scripts à écrire, et pour les rendre plus lisibles, j'emploierai cette nomenclature :

  • adresse.ip.rpi (192.168.1.10)
  • adresse.ip.pc (192.168.1.11)
  • adresse.ip.box (192.168.1.1)

/etc/init.d/fw

#!/bin/sh
### BEGIN INIT INFO
# Provides: fw
# Required-Start: $remote_fs $syslog
# Required-Stop:  $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: pare-feu iptables
# Description: iptables
### END INIT INFO

case $1 in
  "start")
    /etc/fwstart
  ;;
  "stop")
    /etc/fwstop
  ;;
  "restart")
    /etc/fwstop
    /etc/fwstart
  ;;
esac

/etc/fwstop

#!/bin/sh
# remise à zero des règles de filtrage
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# nous les faisons pointer par défaut sur ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

/etc/fwstart

#!/bin/sh

if=eth0

# remise a zero des règles de filtrage
iptables -t filter -F
iptables -t filter -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# règles par défaut
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

# rebouclage/loopback
iptables -t filter -A OUTPUT -o lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT
iptables -t filter -A INPUT -i lo -s 0.0.0.0/0 -d 0.0.0.0/0 -j ACCEPT

# règles pour abandonner/droper silencieusement les transmissions internes du réseau local
iptables -I INPUT -i $if -s adresse.ip.box -d 224.0.0.1/24 -p igmp -j DROP
iptables -I INPUT -i $if -s 172.16.255.254 -d 224.0.0.1/24 -p igmp -j DROP

# dns local
iptables -A OUTPUT -o $if -s adresse.ip.rpi -d adresse.ip.box -p udp -m udp --sport 1024: --dport 53 -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i $if -s adresse.ip.box -d adresse.ip.rpi -p udp -m udp --sport 53 --dport 1024: -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# ssh rpi - pc ### ATTENTION à cette règle : mal écrite, elle supprime votre connexion au rpi ###
iptables -A OUTPUT -o $if -p tcp --source adresse.ip.rpi --source-port 22 --destination adresse.ip.pc --destination-port 1024: -j ACCEPT
iptables -A INPUT -i $if -p tcp --source adresse.ip.pc --source-port 1024: --destination adresse.ip.rpi --destination-port 22 -j ACCEPT

# règles http du serveur
iptables -A OUTPUT -o $if -p tcp --source adresse.ip.rpi --source-port 80 --destination-port 1024: -j ACCEPT
iptables -A INPUT -i $if -p tcp --source-port 1024: --destination adresse.ip.rpi --destination-port 80 -j ACCEPT

# règles http du rpi comme client internet, à activer pour les mises à jour apt-get et Pluxml (plugins et une partie de l'administation), à dédièser selon les besoins (les mises à jour ne sont pas fréquentes, une fois par semaine au maximum)
#iptables -A OUTPUT -o $if -s adresse.ip.rpi  -d 0.0.0.0/0 -p tcp -m multiport --dports 80,443 -m conntrack ! --ctstate INVALID -j ACCEPT
#iptables -A INPUT -i $if -s 0.0.0.0/0 -d adresse.ip.rpi -p tcp -m multiport --sports 80,443 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# whois pour awstats
iptables -A OUTPUT -o $if -p tcp --source adresse.ip.rpi --source-port 1024: --destination-port 43 -j ACCEPT
iptables -A INPUT -i $if -p tcp --destination adresse.ip.rpi --source-port 43 --destination-port 1024: -j ACCEPT

# ntp
iptables -A OUTPUT -o $if -p udp --source adresse.ip.rpi --source-port 123 --destination-port 123 -j ACCEPT
iptables -A INPUT -i $if -p udp --source-port 123 --destination adresse.ip.rpi --destination-port 123 -j ACCEPT

# journalisation des connexions abandonnées/dropées
iptables -t filter -A INPUT -p all -j LOG --log-prefix="DROPIN: "
iptables -t filter -A OUTPUT -p all -j LOG --log-prefix="DROPOUT: "

Vous pouvez enregistrer votre script puis le démarrer

update-rc.d fw defaults
service fw start

Il est recommandé d'installer nmap et de vérifier l'état des ports du rpi par nmap -v nomsite.sytes.net.

Rsyslog

Pour obtenir une meilleure lisibilité des journaux du site, il faut modifier /etc/rsyslog.conf, au début de la partie RULES et avant les premières règles.

:msg, contains, "DROPIN: "  -/var/log/dropin.log
& ~
:msg, contains, "DROPOUT: " -/var/log/dropout.log
& ~

En lien avec les 2 dernières règles de /etc/fwstart, ceci permettra à Iptables d'envoyer les messages de drop dans des fichiers à part, à consulter régulièrement.

service fw restart
service rsyslog restart

SSH

SSH est un moyen sécurisé de connexion entre ordinateurs. Le fichier /etc/ssh/sshd_config du rpi peut être configuré plus finement. Attention des erreurs vous feront perdre votre connexion SSH avec le rpi. Améliorons le fichier /etc/ssh/sshd_config :

  • Port 22 par défaut le port SSH est 22, vous devriez en choisir un autre (et revoir les règles SSH d'Iptables). Prenez un port disponible (voir /etc/services et Google).
  • PermitRootLogin no il vaut mieux activer cette option et vous loguer sur le rpi comme utilisateur non privilégié, puis passer en root par su
  • AllowUsers votre_login_pc@adresse.ip.pc seul l'utilisteur « votre_login_pc » de cette machine (le nom de l'utilisateur du pc) pourra se connecter au rpi par SSH (ne pas confondre le nom de l'utilisateur du rpi « votre_login_rpi » et le nom d'utilisateur du pc « votre_login_pc »)

Puis service ssh restart

Quelques commandes SSH :

  • connexion simple

ssh -p 22 votre_login_rpi@adresse.ip.rpi

  • connexion graphique
ssh -X -Y -p 22 votre_login_rpi@adresse_ip_rpi
nedit /var/www/themes/defaut/style.css &
  • depuis le pc, copie de fichier du pc vers le rpi
scp -P 22 nom_fichier votre_login_rpi@adresse_ip_rpi:/home/votre_login_rpi/

Les clefs SSH

Il y a une méthode plus sécurisée pour assurer la connexion SSH entre le PC et le rpi, par un système de clefs. Alors que la connexion classique est autorisée par un mot de passe, la connexion par clefs entrepose des données sur les 2 machines, et SSH ira vérifier la validité de ces données sur chacune, ainsi qu'un mot de passe, pour autoriser la connexion. Sur votre PC en tant qu'utilisateur votre_login_pc (je suis sur Arch mais la procédure doit être la même partout) :

  • ssh-keygen -t rsa génération d'une paire de clefs, une clef privée id_rsa et une clef publique id_rsa.pub dans le répertoire par défaut /home/votre_login_pc/.ssh/
  • Enter passphrase (empty for no passphrase): entrez une passphrase, c'est-à-dire un mot de passe
  • Your identification has been saved in /home/votre_login_pc/.ssh/id_rsa
  • Your public key has been saved in /home/votre_login_pc/.ssh/id_rsa.pub

Il faut maintenant envoyer au rpi la clef publique ssh-copy-id -i ~/.ssh/id_rsa.pub votre_login_rpi@adresse.ip.rpi -p 22

Vous vous connectez comme auparavant par ssh -p 22 votre_login_rpi@adresse.ip.rpi, mais dorénavant c'est la passphrase qui vous sera demandée.

Logwatch

Logwatch parcourt et analyse les fichiers journaux dans /var/log/ et envoie un courriel.
apt-get install logwatch installe les paquets exim4-base exim4-config exim4-daemon-light heirloom-mailx libdate-manip-perl libyaml-syck-perl logwatch.

L'installation va jusqu'à sa fin, mais au moment du lancement du serveur de courriels Exim, j'ai eu cette erreur:

[ ok ] Starting MTA: exim4
ALERT: exim paniclog /var/log/exim4/paniclog has non-zero size, mail system possibly broken
C'est un problème avec IPv6 qui n'est pas présent sur le rpi, il faut donc modifier /etc/exim4/update-exim4.conf.conf en remplaçant
dc_local_interfaces='127.0.0.1 ; ::1' par dc_local_interfaces='127.0.0.1'
puis lancez update-exim4.conf

Afin de lire les courriels root sous votre compte votre_login_rpi, modifiez /etc/aliases en ajoutant root:votre_login_rpi
service exim4 restart

mkdir /var/cache/logwatch
cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/

J'ai modifié /etc/logwatch/conf/logwatch.conf en commentant les lignes suivantes :

#MailTo = root
#MailFrom = Logwatch
#Service = "-zz-network"
#Service = "-zz-sys"
#Service = "-eximstats"
#mailer = "/usr/sbin/sendmail -t"

et remplacé « Detail = Low » par « Detail = 10 » afin d'avoir de plus amples informations.

Un script cron lancera un script logwatch tous les jours à 6h25, l'étude se faisant sur les fichiers journaux de la journée précédente, et sur vos services activés et présents dans le fichier /usr/share/logwatch/default.conf/services. Demain, sous votre compte, vous n'aurez qu'à taper mail.

Le problème, c'est que Nginx n'est pas présent dans la liste de Logwatch, il faut donc s'en occuper.

D'abord Logwatch lit un certain format de fichier, c'est pour cela que les fichiers de log de Nginx sont au format combined dans /etc/nginx/sites-available/nomsite access_log /var/log/nginx/access.log combined;
Nginx rejette le format combined pour error.log, je ne suis pas parvenu à l'intégrer.

On peut maintenant configurer des fichiers Nginx pour logwatch, en prenant comme modèle les fichiers http.conf.

cd /usr/share/logwatch/default.conf/logfiles
cp http.conf nginx.conf

et modifier ce dernier en supprimant toutes les lignes LogFile = et Archive =

puis ajoutez

LogFile = nginx/*access.log
LogFile = nginx/*access.log.1
Archive = nginx/*access.log.*.gz
cd /usr/share/logwatch/default.conf/services/
cp http.conf nginx.conf

et modifier ce dernier en remplaçant au début http par nginx

Title = "nginx"
LogFile = nginx
cd /usr/share/logwatch/scripts/services
cp http nginx

pas de modification

En attendant les prochains courriels de Logwatch, vous pouvez le lancer en direct, en ciblant les services et en utilisant les logs de Today ou Yesterday:

logwatch --output stdout --format text --detail 10 --service cron --service iptables --service pam_unix --service sshd --service nginx --range Today --hostname raspberry

Cependant, vous comprendrez mieux ce qui se passe sur votre système en examinant directement les journaux dans /var/log/, et en particulier ceux de /var/log/nginx/, où nginx.error vous informe des problèmes du serveur, et access.log qui vous montrera la liste de vos visiteurs, les tentatives de connexions illicites, etc.

Logrotate

Logrotate fait tourner les fichiers journaux dans /var/log/, donc ceux de Nginx aussi. Mon fichier /etc/logrotate.d/nginx se présente comme suit, avec une rotation par semaine :

/var/log/nginx/*.log {
        weekly
        missingok
        rotate 10
        compress
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        postrotate
                [ ! -f /var/run/nginx.pid ] || kill -USR1 cat /var/run/nginx.pid`
        endscript
}

Sauvegarde du système

Bon, il y a les méthodes subtiles et la mienne, genre bourrin, mais c'est efficace : débrancher le rpi, retirer la carte SD et l'USB, et les monter sur le pc afin de les sauvegarder dans les répertoires SD et USB.

cp /chemin_de_montage_sd/* SD/ (en n'oubliant pas le fichier caché .firmware_revision)
rsync -aAXv /chemin_de_montage_usb/* USB/

Pendant que vous y êtes, un petit e2fsck sur la carte et la clef ne sont pas inutiles e2fsck -f -v /dev/sd...

Bien sûr on peut faire les sauvegardes sans arrêter le rpi, avec rsync ou tar (à distance?) sur les bons répertoires, puis copie scp sur le pc. Mais quand tout est bien installé et finalisé, les sauvegardes deviennent rares et les seules informations à sauvegarder restent les données Pluxml dans /var/www/data/.

Analyse et tests

Awstats

Afin de lire les statistiques de votre site, créez un répertoire où elles seront lisibles.

mkdir /var/www/statistiques
chown -R www-data.www-data /var/www/statistiques

Pour utiliser Awstats, vous aurez besoin de Whois, ainsi qu'une règle Iptables, déjà écrite dans le script en 7.1. L'installation se fait ainsi :

apt-get update
apt-get install awstats libnet-xwhois-perl whois
cp /etc/awstats/awstats.conf /etc/awstats/awstats.nomsite.sytes.net.conf

avec quelques lignes à remplacer :

  • LogFile="/var/log/apache2/access.log" par LogFile="/var/log/nginx/access.log"
  • LogFormat=4 par LogFormat=1
  • SiteDomain="" par SiteDomain="nomsite.sytes.net"
  • HostAliases="localhost 127.0.0.1" par HostAliases="localhost 127.0.0.1 nomsite.sytes.net"
  • SkipHosts="" par SkipHosts="192.168.1.11" afin de masquer l'adresse ip de votre pc dans les statistiques, avec une modification de /usr/lib/cgi-bin/awstats.pl comme indiqué ici :

Remplacez

my @arrayunreg = map {
if (/\(\?[-^\w]\*:(.*)\)/) { $1 }
} @$array;

par

my @arrayunreg = map { UnCompileRegex($_) } @$array;

Un script Cron relance régulièrement la mise à jour des statistiques en envoyant des données dans /var/lib/awstats/. C'est le fichier /etc/cron.d/awstats, avec, par exemple, une mise à jour toutes les 2 heures :

MAILTO=root
5 */2 * * *     www-data        [ -x /usr/lib/cgi-bin/awstats.pl -a -f /etc/awstats/awstats.nomsite.sytes.net.conf -a -r /var/log/nginx/access.log ] && /usr/lib/cgi-bin/awstats.pl -config=nomsite.sytes.net -update > /dev/null

Lorsque vous souhaitez lire les statistiques sur votre site, le plus simple est de lancer :

/usr/share/awstats/tools/awstats_buildstaticpages.pl -dir=/var/www/statistiques/ -update-config=nomsite.sytes.net

Inscrivez nomsite.sytes.net/statistiques/awstats.nomsite.sytes.net.html dans votre navigateur et vous pourrez voir de nombreuses statistiques sur le mois en cours. Après l'ivresse de votre succès, vous pourrez faire rm /var/www/stat/*

Tests du site

Des sites existent pour savoir si votre blogue fonctionne correctement :

Références

sans lesquelles je n'aurais pas pu faire cette installation ni ce tutoriel

  • # Deux petites questions :)

    Posté par  . Évalué à 4.

    Tout d'abord merci pour ce tuto, j'ai moi même un raspberry pi depuis un moment et j'en suis ravis (il me reste qu'a régler le problème d'augmenter la capacité de stockage sans faire exploser la consommation).

    La première question n'en est pas vraiment une. Sur ma machine, php-apc augmente significativement les performances de php, ce qui est très bienvenue étant donné la modestie du cpu. Tu as essayé ?

    La seconde, quand j'ai installé raspbian il y a plus d'un an je crois, sur ssh, les clé du serveur étaient déjà présente sur l'iso distribuée, ce qui est un trou de sécurité assez choquant. Est-ce que maintenant les clés sont générée au premier boot, ou tous les raspbian ont les mêmes ?

    Please do not feed the trolls

    • [^] # Re: Deux petites questions :)

      Posté par  . Évalué à 2. Dernière modification le 09 novembre 2014 à 15:23.

      J'ai plusieurs RPI, si tu m’explique comment vérifier pour SSH je te donnerai la réponse (première fois que j'entends parlé de ça ^ ^ )

      PS: php etc fonctionne bien sur RPI par contre les CMS rame franchement.

      • [^] # Re: Deux petites questions :)

        Posté par  . Évalué à 2.

        Il s'agit des paires de clés /etc/ssh/ssh_host_*. Elles servent à authentifier le serveur, elles sont donc supposées être uniques et sont généralement générée au premier lancement du serveur ou lors de l'installation.

        Je me demande si je ne fais pas erreur en n'en trouvant pas de traces sur le net, je dois faire l'amalgame avec la présence d'un utilisateur par défaut.

        Please do not feed the trolls

        • [^] # Re: Deux petites questions :)

          Posté par  . Évalué à 2. Dernière modification le 09 novembre 2014 à 17:26.

          Alors je viens de comparer les RSA, les DSA et les ecdsa, ils sont différent (par contre il y a une répétition dans les clés ecdsa: "qGSM49AwEHoUQDQgAE", c'est bizarre, ça revient sur toutes mes machines, j'espère que ce n'est pas une backdoor)

          • [^] # Re: Deux petites questions :)

            Posté par  . Évalué à 2.

            C'est sûrement la partie "Comment" qui est incluse avec la clé, tu peux la voir en clair :

            ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub | cut -f 4 -d ' '

            Please do not feed the trolls

            • [^] # Re: Deux petites questions :)

              Posté par  . Évalué à 1.

              c'est dans les clés privées ecdsa.

            • [^] # Re: Deux petites questions :)

              Posté par  (site web personnel) . Évalué à 6. Dernière modification le 09 novembre 2014 à 19:54.

              Il fait référence à cela, observable ici avec 999 clés générées :

              $ for i in $(seq -w 1 999) ; do ssh-keygen -t ecdsa -N "" -f $i ; done

              Similitudes sur la première ligne :

              $ grep -E "^MHcCAQEEI.{43}oAoGCCqGSM49$" ???|wc -l
              996
              $ grep -E "^MHYCAQEEH.{42}gCgYIKoZIzj0D$" ???|wc -l
              3

              Soit en hexadécimal :

              00000000  30 77 02 01 01 04 20
              ou
              00000000  30 76 02 01 01 04 1f
              

              Similitudes sur la seconde ligne :

              $ grep -E "^AwEHoUQDQgAE" ???|wc -l
              996
              $ grep -E "^AQehRANCAA" ???|wc -l
              3

              Soit en hexadécimal :

              00000020  xx xx xx xx xx xx xx a0  0a 06 08 2a 86 48 ce 3d
              00000030  03 01 07 a1 44 03 42 00  04 xx xx xx xx xx xx xx
              ou
              00000020  xx xx xx xx xx xx a0 0a  06 08 2a 86 48 ce 3d 03
              00000030  01 07 a1 44 03 42 00 04  xx xx xx xx xx xx xx xx
              
              • [^] # Re: Deux petites questions :)

                Posté par  (site web personnel) . Évalué à 8.

                $ openssl ec -in 001 -pubout -text
                read EC key
                Private-Key: (256 bit)
                priv:
                    00:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:
                    xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:
                    xx:xx:xx
                pub: 
                    yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:
                    yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:
                    yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:
                    yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:yy:
                    yy:yy:yy:yy:yy
                ASN1 OID: prime256v1
                writing EC key
                -----BEGIN PUBLIC KEY-----
                (snip)
                -----END PUBLIC KEY-----
                
                $ grep -v -- "---" 001|base64 -d|hexdump -C
                00000000  30 77 02 01 01 04 20 xx  xx xx xx xx xx xx xx xx
                00000010  xx xx xx xx xx xx xx xx  xx xx xx xx xx xx xx xx
                00000020  xx xx xx xx xx xx xx a0  0a 06 08 2a 86 48 ce 3d
                00000030  03 01 07 a1 44 03 42 00  yy yy yy yy yy yy yy yy
                00000040  yy yy yy yy yy yy yy yy  yy yy yy yy yy yy yy yy
                00000050  yy yy yy yy yy yy yy yy  yy yy yy yy yy yy yy yy
                00000060  yy yy yy yy yy yy yy yy  yy yy yy yy yy yy yy yy
                00000070  yy yy yy yy yy yy yy yy  yy

                Bref les parties fixes indiquent des infos comme la taille et le type de la clé.

                cf http://blog.oddbit.com/2011/05/08/converting-openssh-public-keys/ et http://www.openssh.com/specs.html

    • [^] # Re: Deux petites questions :)

      Posté par  . Évalué à 1.

      La première question n'en est pas vraiment une. Sur ma machine, php-apc augmente significativement les performances de php, ce qui est très bienvenue étant donné la modestie du cpu. Tu as essayé ?

      Ca cache l'opcode PHP en RAM, c'est pratique mais avec un RasPI a 512Mo, c'est un risque… Ou alors il faut bien configurer le truc pour etre sur de pas deborder.
      Personnellement, je le ferais pas.

      • [^] # Re: Deux petites questions :)

        Posté par  . Évalué à 4.

        Je le faisais il y a quelques temps quand j'avais un VPS avec 256Mo de Ram et ça valait le coût. APC limite la consommation maximale (c'est du LRU), et par défaut, sous Debian, c'est 32 Mo, ça reste raisonnable (et ça suffit pour mal d'applis).

        « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

  • # Installation minimale de raspbian

    Posté par  (site web personnel) . Évalué à 10.

    Il aurait été plus pratique de partir d'une installation minimale de rapsbian, plutôt que de faire un ménage qui sera certainement incomplet.
    L'installation ne dure qu'une quinzaine de minutes.

  • # Trés bonne présentation!

    Posté par  . Évalué à 8.

    C'est un didacticiel 5 étoiles, bravo.

  • # Re:Votre blogue à la maison sur Raspberry Pi

    Posté par  . Évalué à 4.

    Superbe tuto ! :)
    Par contre, Apache sur NGINX, cela joue vraiment sur les perfs ? Ainsi que d'ajouter Varnish, pour le cache ? Je ne m'y connais pas bien alors …

    • [^] # Re:Votre blogue à la maison sur Raspberry Pi

      Posté par  . Évalué à 2.

      Varnish, c'est très bien mais ca utilise la RAM pour mettre en cache et comme le RasPi n'est pas très bien fourni a ce niveau, il vaut mieux eviter globalement mais si le site n'est pas très gros en volume, pourquoi pas… A la rigueur, autant creer un memfile, ca aura le meme impact pour un site perso.
      Après, faut pas attendre des perfs de dingue sur un RasPi, ca reste qu'un petit Arm avec 512Mo de ram…

  • # blog introuvable ?

    Posté par  . Évalué à 2.

    j'ai survolé rapidement ce tuto qui à l'air assez sympa. Bravo…

    Je suppose que tout linuxfr s'est mis à cliquer sur le lien (page perso) de cpalui en pensant accéder à ce fameux blog auto-hébergé… à l'heure qu'il est cpalui.sytes.net est introuvable. Dommage  ;-)

    Mais si c'est bien le cas, cpalui pourra-t-il retrouver dans les logs les traces permettant de déterminer ce qui a causé le vautrage du site ? Dix connexions, mille, plus ? Un méchant tipiac ?
    Cela peut être intéressant de savoir ce que ces petites bêtes peuvent réellement encaisser comme charge.

    • [^] # Re: blog introuvable ?

      Posté par  . Évalué à 1. Dernière modification le 09 novembre 2014 à 23:01.

      Si tu veux tu peux tester celui-ci (raspberry pi B+ sans overclock,a la place de nginx ici c'est apache2)
      https://hnokrjnlzme4v5yv.onion/
      Tu peux tester un joomla, un phpbb3 et dans outils tu trouvera des Lorem Lipsum plein de random. Tu arrivera probablement a la conclusion que le RPI est bien a petite échelle mais pas plus.

  • # Wordpress = + de perfs?

    Posté par  (site web personnel) . Évalué à 1.

    J'ai cru comprendre que Wordpress ne tournait pas bien sur le Raspberry (manque de perf)
    Vers quel type de matériel faut il se tourner pour héberger Wordpress et Owncloud dans une petite boite pas chère chez soi?

    • [^] # Re: Wordpress = + de perfs?

      Posté par  . Évalué à 2. Dernière modification le 10 novembre 2014 à 00:15.

      Si tu veux faire tourner owncloud il te faut minimum 1Go (un peu plus c'est mieux) de ram si non ça lag, un proco un peu plus robuste que celui du rpi et une carte mère compatible Sata histoire d'avoir des vrai disque dur plus tôt que des cartes SD. J'ai testé sur RPI, j'ai supprimé une heure plus tard ^ ^

      Pour wordpress, les perfs sont exactement les mêmes que joomla. (bref pas terrible je trouve, mais le problème vient des CMS trop lourd, faire tourner 200 lignes de PHP pour afficher une page ça a son impacte)

      Perso je conseil une petite tour avec dualcore 2Go de Ram et Ethernet Gigabit, carte mère d'une marque connue pour ne pas faire dans l'obsolescence programmée (si quelqu'un en connait ^ ^ )

    • [^] # Re: Wordpress = + de perfs?

      Posté par  . Évalué à 4.

      N'importe quelle plateforme x86 aura assez de perf.

      Pour les plateforme ARM je ne peut que te conseillé des puces «Cortex Ax» ou au mini ARMv7. Derrière ça se cache un co-proc mathématique. Le RPI en a un aussi mais c'est un rajout sur une puce qui ne devrait pas en avoir …
      Donc sans ordre particulier :
      * Cubie board
      * Banana Pi
      * un Nas (et oui c'est une solution clé en main qui est intéressante)
      * Panda board
      * …

      Des listes non exhaustive :
      http://archlinuxarm.org/platforms
      https://wiki.debian.org/FreedomBox/TargetedHardware

    • [^] # Re: Wordpress = + de perfs?

      Posté par  . Évalué à 3.

      Perso j'ai une machine comme ça (avec un disque un peu plus gros) :
      http://www.generation-linux.fr/index.php?post/2010/12/13/Deballage-et-installation-de-mon-home-serveur

      Wordpress tourne très bien. Pour ma part, je trouve que le facteur limitant n'est pas la machine, mais la bande passante : dès que tu mets des photos, ça met un certain temps à charger.

      Owncloud fonctionne, mais est un peu lent.

      • [^] # Re: Wordpress = + de perfs?

        Posté par  . Évalué à 2.

        Quel est la conso de ta plateforme ? Pas juste le CPU mais à la prise …
        L'avantage des «board» est qu'il ne consomme que 10W au max. Et comme 1w/an ~= 1€/an, prendre un «petit» PC peu vite revenir bien plus cher qu'une board.

        • [^] # Re: Wordpress = + de perfs?

          Posté par  . Évalué à 2.

          J'avais mesuré environ 20/25W.

          Donc effectivement vis à vis d'un raspberry pi qui doit consommer dans 3/4W, ça fait une différence, mais la puissance n'est pas la même non plus. Aujourd'hui il y a sans doute des configurations plus économe que la mienne, qui a quelques années déjà.

          • [^] # Re: Wordpress = + de perfs?

            Posté par  . Évalué à 2.

            Rapsberry Pi B = 2,3W (mesuré avec Carte SD et Raspbian)
            Raspberry Pi B+ = 1W (non mesuré) normalement d'après l'annonce.
            En Belgique, 1 appareil 24h/24, 1W = +-1,5€/an

  • # Générateur de blog static

    Posté par  . Évalué à 3.

    Pour une installation sur un Raspberry, je serais plutôt tenté personnellement d'utiliser des système de génération statique du style Octopress ou Hexo, avec un système de commentaire chez Disqus (Le seul élément qui restera sur le "Cloud"), du coup on ne servira que du statique :)

    http://octopress.org/
    http://hexo.io/

    • [^] # Re: Générateur de blog static

      Posté par  . Évalué à 2.

      Désolé pour le franglime dans le titre, j'ai écrit ça en plein codage et ça a leaké un peu sur mon texte :)

    • [^] # Re: Générateur de blog static

      Posté par  (Mastodon) . Évalué à 5.

      Un autre que j'aime bien : http://nanoblogger.sourceforge.net/

      Il n'évolue plus, mais en même temps, il n'y en a pas vraiment besoin…

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

      • [^] # Re: Générateur de blog static

        Posté par  (site web personnel) . Évalué à 2.

        De mémoire, il est mal codé : dès que t'as un peu trop d'articles, la génération prend beaucoup trop de temps (ça sent l'algo exponentiel ou au moins cubique…)

        • [^] # Re: Générateur de blog static

          Posté par  (site web personnel) . Évalué à 6.

          Je suis l'ancien traducteur français de NanoBlogger. J'ai également participé au projet pour les feuilles de style et deux ou trois bricoles. Ça a été une aventure fantastique à l'époque avec une communauté d'enthousiastes : avec Blanko, nous avons animé la petite bande d'utilisateurs francophones.

          NB est un des très rares projets ayant été codés en scripting Bash et sa lenteur est due uniquement à ça. Quand le blog contenait une centaine de billets, c'était galère. Je connais des développeurs (du genre qui ne peuvent pas se permettre de se faire pirater leur site Web au niveau de leur prestige personnel) qui utilisent encore NB pour la sécu apportée par un site statique. Cette lenteur intrinsèque peut être atténuée avec un SSD au lieu d'un HDD et d'un processeur (très) multicore.

          Pour cette seule raison de lenteur, j'ai développé un remplaçant à NB en langage compilé au lieu de Bash. Maintenant pour une centaine de billets, au lieu de patienter une minute ou plus, ça me prend moins d'une seconde ! J'ai fait un test pour voir combien je pouvais faire traiter de billets en une minute, toujours sur le même PC qui me servait du temps de NB : l'équivalent de ce posterait un blogueur fou tous les jours pendant cinquante ans !

          Ce projet est encore jeune et je ne connais encore personne l'ayant choisi pour son site perso. Mais il n'y a aucun risque à l'essayer puisqu'il s'agit juste de générer les pages du blog sur une machine Linux quelconque et pas forcément sur celle du serveur ! Si vous n'avez pas de serveur Apache ou Ngnix sur votre système, vous pouvez quand même visualiser le contenu de votre nouveau blog depuis un navigateur quelconque. Même hors ligne. Il n'y a aucune dépendance à la compilation donc pas de bibliothèque à ajouter au système. Il n'y a pas non plus de sorcellerie particulière pour l'installation : juste avoir le binaire dans le répertoire où l'on veut générer le blog ; ou sinon le mettre dans le répertoire "/usr/bin".

          Il s'agit de fBlog et on peut le trouver sur SourceForge.

          • [^] # Re: Générateur de blog static

            Posté par  (Mastodon) . Évalué à 3.

            Je vais l'essayer !

            Je m'en sers tout simplement pour un blog ultra-perso : tout est statique et lu uniquement en local. C'est dans mon /home, ça prend peu de place, est ça me sert de mémo de luxe.

            En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

            • [^] # Re: Générateur de blog static

              Posté par  (site web personnel) . Évalué à 3.

              C'est drôle, je voyais moi aussi la possibilité d'user d'un moteur de blog statique comme bloc note ou comme journal intime !

              fBlog partage beaucoup de concepts avec NB comme le stockage des billet sous forme de fichier plat. Mais le format de fBlog est plus simple car il n'y a que deux méta données : la date d'édition est celle de la création du fichier et elle est intégrée (un peu comme NB) dans le nom du fichier sous la forme aaaammjjhhmmss.blog ; le titre est la première ligne du fichier et ne doit pas comporter de balise HTML. Le restant est le corps du texte et doit comporter des balises HTML.

              Ce qui veut dire qu'il est possible de recycler ses vieux billets NB en renommant les fichiers et en extrayant la méta TITLE pour la mettre en tête dudit fichier.

              À la date d'aujourd'hui, fBlog ne supporte pas les tags car j'ai remarqué que les internautes s'en fichaient complètement. Mais, dans le cas d'un usage bloc note, les tags reprennent tout leur intérêt ! Dans ce cas, selon le retour des utilisateurs, il se peut que je j'implémente cette fonctionnalité. Cependant je n'ajouterai pas une ligne supplémentaire de méta donnée dans le fichier car ça oblige à remettre un en-tête de méta balises comme dans NB ; et toute complication est un moins en ergonomie. Donc, si je le fais, ce sera en bout de la première ligne du fichier sous forme de crochets droits du genre : Mon titre du billet [humeur]. Le tag serait donc "humeur" et n'apparaîtrait pas sur la ligne titre en ligne mais créerait un lien "humeur" en bas du post qui renverrait vers une page index d'archives. Ce n'est pas la mort à programmer et ça conserve une compatibilité ascendante avec les billets existants.

              Toujours est-il que j'invite tout futur utilisateur de fBlog à me transmettre son retour d'expérience. Sachant que les retours positifs sont tout aussi importants que ceux négatifs. (Pas pour le moral mais pour se sentir conforté dans ses choix de conception du logiciel et ne pas les modifier s'ils plaisent ainsi au public.) Autrement dit, sans retour d'expérience, on programme un peu à l'aveugle dès que ses besoins propres sont couverts. Certes il y a les sites de tests de conformité (HTML, CSS…) ainsi que d'autres pour les performances en vitesse de transfert et d'analyse des pages Web ; ils sont précieux mais il n'y a pas de logiciel capable de rendre compte des perceptions humaines comme l'ergonomie des interfaces utilisateurs ou la joliesse d'un thème.

  • # Génération des clefs SSH

    Posté par  . Évalué à 7.

    Pour tous les systèmes installés à partir de fichiers images issus du net (et non pas via l'installeur Debian), une bonne pratique est de systématiquement re-générer de nouvelles clefs SSH.

    Cela se fait tout simplement avec ces deux lignes (Debian) :

    rm -f /etc/ssh/ssh_host*
    dpkg-reconfigure openssh-server
  • # Boîtier "pro"

    Posté par  . Évalué à 2.

    Respect et bravo.

    Hasard de l'actu : un tuto pour créer un beau boîtier sous forme d'un mini Mac Pro : http://www.macbidouille.com/news/2014/11/12/un-raspberry-pro-sous-forme-de-mini-mac-pro

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.