Ceci est une ancienne révision du document !


Pibox : Une rapsberry pour les échanges

J'ai testé les logiciels “piratebox” et je n'ai pas aimé, ni en tant qu'utilisatrice, ni en tant qu'administratrice. Aussi je tente ma propre interprétation de la chose.

Installation du raspberry

Voir aussi https://raspbian-france.fr/installer-raspbian-premier-demarrage-configuration/ , un tuto complet qui m'a bien aidé ; ce qui est ici est la version raccourcie et adaptée à ma façon de faire.

Télécharger Raspbian Jessie Lite (pas d'interface graphique) et mettre l'image sur une carte SD (à l'emplacement /dev/sdX donc à adapter :-P ) :

sudo umount /dev/sdX
sudo dd bs=4M if=2017-04-10-raspbian-jessie-lite.img of=/dev/sde

Mettre la carte SD dans le raspberry, le brancher avec un écran, un clavier, ethernet et l'alimentation (câble micro-usb).

Ça démarre, plus ou moins vite. Identifiant pi, mot de passe raspberry mais en qwerty, il faut donc taper rqspberry sur notre clavier en azerty.

On va vite changer ça en lançant la commande

sudo raspi-config

qui s'écrit sur azerty :

sudo rqspi)config

Cela lance un chouette programme. En premier le clavier : Localisation Options > Change Keyboard Layout > generic 105-key > other > french > french. Ou comme vous préférez, on peut aussi le passer en bépo. Attention le clavier va rester en qwerty sur cette session. Le plus simple sera de redémarrer à la fin.

Ensuite les locales : Localisation Options > Change Locale

Sélectionner fr_FR.UTF-8 UTF-8, espace pour valider, puis tab pour aller sur ok, entrée et sélectionner “FR” en locale principale.

Maintenant on peut passer aux fioritures.

Permettre l'utilisation de SSH, afin qu'on puisse débrancher l'écran : Interfacing Options > SSH ⇒ passer “enable”

Pendant qu'on est là, donnez un hostname sympa pour le réseau (l'une des options de base).

Une option pour que le système prenne toute la place disponible sur la carte : Advanced Options > Expand Filesystem

Après ça on va reboot, afin de prendre en compte ce qu'on a fait.

Nous avons droit à un message d'avertissement au démarrage, car SSH est activé mais le mot de passe est toujours celui par défaut. Changeons ça rapidement :

sudo passwd
sudo passwd pi

Mettez un bon mot de passe et mémorisez-le.

Nous allons tout de suite configurer ssh :

sudo nano /etc/ssh/sshd_config

On change le port (tout sauf 22), on s'assure que root ne peux pas se connecter directement et on autorise juste “pi” à se connecter

Port 222
PermitRootLogin no
AllowUsers pi

Et un petit redémarrage de ssh pour prendre ça en compte.

sudo service ssh restart

Ensuite on envoie sa propre clé sur le raspberry :

ssh-copy-id -p 222 -i ~/.ssh/id_rsa.pub pi@192.168.1.01

Pour trouver l'adresse ip qui permet de s'y connecter, regardez ce que votre modem vous donne comme adresse pour votre framboise.

Dernière chose et pas des moindres… la mise à jour du système… c'est long car la bestiole n'est pas puissante. Allez prendre une pause, c'est le moment.

sudo apt-get update && sudo apt-get upgrade -y && sudo reboot

Personnalisations cosmétiques en plus

Je n'aime pas le message par défaut quand on se connecte en ssh. Il se change dans /etc/motd.

Je sais que ce n'est pas “bien”, mais quand je passe du temps sur des commandes root, je préfère passer en root (sudo su) ; par contre son bashrc n'est pas bien configuré.

sudo su
nano /root/.bashrc

Décommenter/ajouter ceci :

export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

# Autocompletion
if [ -f /etc/bash_completion ]; then
      . /etc/bash_completion
fi

Installation du serveur web

Raspberry étant un mini-machin, il faut préférer des outils légers. Ici, ce sera Lighttpd1) plutôt qu'Apache ou Nginx. Et nous allons essayer d'éviter les bases de données et les gros logiciels.

sudo apt-get install lighttpd php5-cgi php5-gd php5-imagick php5-curl php5-intl

Tous ces modules ne vous seront pas forcément utiles, il y a surtout php5-cgi qui compte, mais le reste me sert souvent dans les CMS que j'aime utiliser donc : léger d'un coté, plein de l'autre !

Activer les modules de php :

sudo lighty-enable-mod fastcgi 
sudo lighty-enable-mod fastcgi-php

Et relancer le démon :

sudo service lighttpd force-reload

Pour voir si ça marche :

sudo sh -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'
sudo chown -R www-data:www-data /var/www/html/info.php

Accédez-y via l'adresse ip_de_ma_framboise/info.php.

Reconnaître la clé wifi

Il faut une carte wifi à ajouter et le bon driver pour la faire tourner. La carte (ou clé) wifi doit supporter le mode AP, ce qu'on peut voir avec la commande iw list (installer le paquet iw s'il n'y est pas), qui doit retourner quelque chose comme Supported interface modes: AP/VLAN au milieu des diverses informations.

Dans mon cas, j'ai une clé usb wifi Hercule, bien prise en charge sous linux et qui propose le mode AP. Pour connaître le modèle : lsusb, c'est l'une des lignes.

lsusb
Bus 001 Device 004: ID 06f8:e010 Guillemot Corp. HWGUSB2-54-LB

Un petit tour ensuite sur la database des périphériques usb de Debian : https://wiki.debian.org/DeviceDatabase/USB où cette référence m'indique que mon pilote sera rt73, installé avec firmware-ralink. J'aime quand c'est facile comme ça. À adapter à votre propre périphérique wifi !

sudo apt-get install firmware-ralink

Vérifiez que votre carte wifi est bien wlan0 avec ifconfig, sinon adaptez la suite du tutoriel en remplaçant wlan0 par son identifiant.

Transformer la Raspberry en accès wifi

Cette partie est une traduction libre et adaptée de https://learn.adafruit.com/setting-up-a-raspberry-pi-as-a-wifi-access-point/install-software

À noter : je ne cherche pas à sécuriser le réseau donc la configuration d'hostapd est différente, et je ne cherche pas à faire un pont vers internet donc une partie du tutoriel d'Adafruit est ignorée.

Quelques logiciels à installer pour créer un “AP” (Access Point):

sudo apt-get install hostapd isc-dhcp-server iptables-persistent
  • hostapd va générer le réseau sans fil auquel se connecter.
  • isc-dhcp-server va donner des adresses ip aux machines qui se connectent et servir de DNS.
  • iptables-persistent va éviter qu'iptable bouge ; répondre “oui” quand il demande s'il doit sauvegarder les configurations.

DHCP

Éditez /etc/dhcp/dhcpd.conf

Commenter les lignes suivantes :

#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;

Décommenter/ajouter ceci :

authoritative;

subnet 192.168.42.0 netmask 255.255.255.0 {
    	range 192.168.42.10 192.168.42.50;
    	option broadcast-address 192.168.42.255;
    	option routers 192.168.42.1;
    	default-lease-time 600;
    	max-lease-time 7200;
    	option domain-name "local";
    	option domain-name-servers 8.8.8.8, 8.8.4.4;
    }

Éditez ensuite /etc/default/isc-dhcp-server et ajouter wlan0 (ou le nom de votre interface wifi) en face de INTERFACES=“”

INTERFACES="wlan0"

Interface, wlan0

On va configurer wlan0 pour qu'il soit

sudo ifdown wlan0

Éditer /etc/network/interfaces

Il doit ressembler à cela (commentez le reste) :

source-directory /etc/network/interfaces.d

auto lo
iface lo inet loopback

iface eth0 inet manual

allow-hotplug wlan0

iface wlan0 inet static
        address 192.168.42.1
        netmask 255.255.255.0

Et ensuite, donnez son adresse ip statique à wlan0 :

sudo ifconfig wlan0 192.168.42.1

Hostapd

Cette configuration est particulière car elle ne demande pas de mot de passe pour se connecter. C'est un wifi ouvert !

# interface wlan du Wi-Fi
interface=wlan0
# nl80211 avec tous les drivers Linux mac80211
driver=nl80211
# Nom du spot Wi-Fi
ssid=PiBox
# mode Wi-Fi (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g)
hw_mode=g
# canal de fréquence Wi-Fi (1-14)
channel=6
# Beacon interval in kus (1.024 ms)
beacon_int=100
# DTIM (delivery trafic information message)
dtim_period=2
# Maximum number of stations allowed in station table
max_num_sta=255
# RTS/CTS threshold; 2347 = disabled (default)
rts_threshold=2347
# Fragmentation threshold; 2346 = disabled (default)
fragm_threshold=2346

Pour le driver, suivant la carte wifi, cela peut être driver=rtl871xdrv ou driver=nl80211 ou même rien, dans le cas des Raspberry avec wifi interne.

Éditer ensuite les fichiers suivants pour que la configuration soit prise en compte par le daemon

  • /etc/default/hostapd : Configurer DAEMON_CONF comme ceci (bien le décommenter !) DAEMON_CONF=“/etc/hostapd/hostapd.conf”
  • /etc/init.d/hostapd : Configurer DAEMON_CONF comme ceci (bien le décommenter !) DAEMON_CONF=“/etc/hostapd/hostapd.conf”

Ensuite on teste si la configuration est bonne :

sudo /usr/sbin/hostapd /etc/hostapd/hostapd.conf

S'il y a des warning et des erreurs, corriger. Sinon, une autre machine ayant le wifi devrait voir apparaître le réseau wifi PiBox (ou le nom que vous lui avez donné) et peut s'y connecter.

Finitions

Relancez les services :

sudo service hostapd start
sudo service isc-dhcp-server start 

Vérifiez que tout tourne sans erreur :

sudo service hostapd status
sudo service isc-dhcp-server status 

et faites qu'ils démarrent automatiquement :

sudo update-rc.d hostapd enable
sudo update-rc.d isc-dhcp-server enable 

Connectez-vous depuis votre autre machine sur le réseau PiBox, puis rendez-vous sur 192.168.42.1/info.php : c'est votre page !

Redémarrez la Raspberry, vérifiez que ça marche toujours… c'est bon ? Parfait !

Améliorer l'adresse (Dnsmasq)

Taper une adresse du style “192.168.42.1” ce n'est pas vraiment intuitif…

Bien qu'il soit possible de faire un DNS menteur qui redirige toute demande du navigateur vers notre pi-serveur, cela pose des problèmes éthiques (possibilité de vol de cookies, d'identifiants) donc… on évite de le faire. On peut cependant configurer le DNS local pour ajouter un “nom de domaine”, afin de pouvoir donner une adresse comme “pibox.ici” à taper dans le navigateur, pour nos visiteurs.

Ça ne va plus, de nouveau. À noter que “pinata.local” fonctionne, mais où est-ce que ça se paramètre ? mystère…

sudo apt-get install dnsmasq
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conforig
sudo nano /etc/dnsmasq.conf

Et copier les informations suivantes :

address=/.pibox.ici/192.168.42.1

#dont use resolv.conf
no-resolv
#dont recheck resolv.conf for changes
no-poll

#overwrite dns..
#dhcp-authoritative

# If you don't want dnsmasq to read /etc/hosts, uncomment the
# following line.
no-hosts
# or if you want it to read another file, as well as /etc/hosts, use
# this.
#addn-hosts=/etc/banner_add_hosts
## ^^^^^^  <- generated

Liens utiles (ou pas)

Astuces en plus

Une fois que c'est fait, pour sauvegarder la carte SD et ne pas tout recommencer, on met la carte sur son ordi puis on copie l'image :

dd if=/dev/sdh | gzip -v6 | dd of=/media/dossier/pibox20170701.gz 

gzip va compresser l'image afin d'éviter que ça prenne trop de place, sinon la carte de 8Go prendra 8Go sur le disque : c'est dd, il copie tout, même le vide. La manoeuvre est très lente.

Pour mettre cette version compressée sur une nouvelle carte sd :

sudo umount /media/carte
sudo zcat /media/dossier/pibox20170701.gz | pv | sudo dd bs=4M of=/dev/sdh

pv permet de suivre l'avancée de la copie, faire apt install pv si vous ne l'avez pas déjà sur votre ordi.

1)
Doc basique en français sur https://doc.ubuntu-fr.org/lighttpd
CC Attribution-Noncommercial-Share Alike 4.0 International Driven by DokuWiki
pratique/informatique/pibox.1502112261.txt.gz · Dernière modification : 30/11/2020 10:35 (modification externe)