cultipi_install - bulck/bulcky GitHub Wiki
La procédure suivante permet d'installer manuellement un système Cultipi sur un Raspbery Pi fraîchement acquis.
- Télécharger l'image Raspbian de base qui servira de système à la Cultipi:
http://files2.linuxsystems.it/raspbian_wheezy_20140726.img.7z
- Décompresser l'image:
7za x raspbian_wheezy_20130923.img.7z
- Brancher la carte SD qui va recevoir le système, démonter les partitions déjà présentes puis lancer la commande:
dd bs=4M if=raspbian_wheezy_20130923.img of=/dev/sdX
Remarque: /dev/sdX correspond au device de la carte SD qui va recevoir le système. Il faut préciser le device dans son intégralité et non pas une partition, par exemple: /dev/sdb et non pas /dev/sdb2
-
Une fois la copie terminée, il est possible de redimensionner les partitions pour utiliser tous l'espace de la carte SD. Dans ce cas la il faudra déplacer la partition swap après toutes les autres partitions. Il est possible d'utiliser gparted pour réaliser cela.
-
Réintroduire la carte SD dans le Raspberry et brancher l'alimentation.
-
La connexion sur le Raspberry se fait grâce à un écran/clavier branché ou alors par SSH. Par défaut si vous branchez un câble Ethernet le Raspberry obtiendra une adresse IP depuis votre Box. Il vous est alors possible de vous connecter par SSH ou directement depuis la console:
Login: pi
Password: raspberry
ou
Login: root
Password: raspberry
- Télécharger l'image Raspbian de base qui servira de système à la Cultipi:
http://files2.linuxsystems.it/raspbian_wheezy_20140726.img.7z
-
Décompresser l'image à l'aide d'un outil (par exemple 7-zip)
-
Pour installer l'image, il faut télécharger Win32DiskImager ( http://sourceforge.net/projects/win32diskimager/) et l’exécuter en administrateur après avoir branché sa carte SD. Une fois exécuté, le logiciel permet de choisir l'image à copier puis la lettre correspondant à la carte SD. Il suffit ensuite de cliquer sur le bouton "write" pour lancer la copie.
-
Une fois la copie terminée, il est possible de redimensionner les partitions pour utiliser tous l'espace de la carte SD. Dans ce cas la il faudra déplacer la partition swap après toutes les autres partitions. Il est possible d'utiliser gparted pour réaliser cela.
-
Réintroduire la carte SD dans le Raspberry et brancher l'alimentation.
-
La connexion sur le Raspberry se fait grâce à un écran/clavier branché ou alors par SSH. Par défaut si vous branchez un câble Ethernet le Raspberry obtiendra une adresse IP depuis votre Box. Il vous est alors possible de vous connecter par SSH ou directement depuis la console:
Login: pi
Password: raspberry
ou
Login: root
Password: raspberry
- Configuration apt avec le dépôt Cultibox:
cat << EOF > /etc/apt/sources.list.d/cultibox.list
deb http://www.greenbox-botanic.com/cultibox/repository/armhf/ binary/
EOF
- Mise à jour du système:
apt-get update
apt-get upgrade
- Reconfiguration du clavier, des locales et du timezone:
apt-get install keyboard-configuration
dpkg-reconfigure locales
dpkg-reconfigure tzdata
- Installation des packages utilitaires:
apt-get install sudo localepurge vim libnss-mdns avahi-daemon tcl ifplugd fswebcam bootlogd zip unzip unrar-free ttf-mscorefonts-installer tcl-tls
- Modification de cron.daily:
Modifier l'heure de lancement du cron.daily qui servira pour les mises à jours:
vi /etc/crontab
et modifier la ligne du cron.daily comme suit:
25 4 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
- Configuration de SSH:
Editer le fichier /etc/ssh/sshd_config et décommenter la ligne:
PasswordAuthentication yes
Relancer le service:
service ssh restart
Editer le fichier /etc/ssh/ssh_config et ajouter les lignes suivantes à la fin:
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
ServerAliveInterval 60
- Ajout de l'utilisateur Cultipi, suppression de l'utilisateur pi:
adduser cultipi
deluser pi
- Personnalisation des règles udev pour le réseau:
rm /etc/udev/rules.d/70-persistent-net.rules
mv /lib/udev/rules.d/75-persistent-net-generator.rules /lib/udev/75-persistent-net-generator.rules.disabled
- Configuration du nom de l'hôte:
cat << EOF > /etc/hostname
cultipi
EOF
vi /etc/hosts
Modifier la ligne commençant par 127.0.0.1 pour qu'elle ressemble à ceci:
127.0.0.1 localhost cultipi
- Désactivation des modules inutiles :
echo "blacklist pcm512x" >> /etc/modprobe.d/fbdev-blacklist.conf
- Configuration des options du module uvcvideo:
echo "options uvcvideo nodrop=1 timeout=5000 quirks=0x80" > /etc/modprobe.d/uvcvideo.conf
- Remplacement du système de logs par syslogd qui consomme moins de ressources:
apt-get -y remove --purge rsyslog
apt-get -y install inetutils-syslogd
- Ajout des modules et utilitaires pour I2C:
Il vous faudra compiler manuellement les i2c-tools. Pour cela récupérer les sources:
apt-get install unzip build-essential
wget https://github.com/groeck/i2c-tools/archive/master.zip
unzip master.zip
Il vous faudra ensuite modifier le fichier i2cbusses.c pour que les outils i2c puisse utiliser les adresses 0x01 et 0x02 utilisées par les capteurs du Cultipi:
vi i2c-tools-master/tools/i2cbusses.c
Puis modifier la ligne 367:
if (address < 0x03 || address > 0x77) {
Par:
if (address < 0x01 || address > 0x77) {
Il ne reste plus qu'à compiler les outils:
cd i2c-tools-master
make
make install
ln -s /usr/local/lib/libi2c.so.0 /lib/
echo "i2c-dev" >> /etc/modules
echo "options i2c_bcm2708 baudrate=32000" > /etc/modprobe.d/i2c.conf
echo "dtparam=i2c1=on" >> /boot/config.txt
Puis à faire le ménage:
apt-get remove --purge build-essential unzip
apt-get autoremove
rm -Rf i2c-tools-master
Et à donner les droits à l'utilisateur cultipi et www-data:
adduser cultipi i2c
adduser www-data i2c
- Ajout du binaire GPIO:
Récupérer l'archive des sources GPIO ici: https://git.drogon.net/?p=wiringPi;a=summary en cliquant sur le lien snapshot et copier le sur le Raspberry (ou copier le lien et utiliser la commande wget pour directement le récupérer sur le Raspberry).
Il faut ensuite installer le logiciel. Dans le répertoire qui contient l'archive téléchargée, taper les commandes suivantes:
tar zxvfp wiringPi-d42e831.tar.gz
cd wiringPi-d42e831
./build
cd ..
rm -Rf wiringPi-*
Pour tester l'installation de GPIO:
gpio -v
gpio readall
- Gestion de la mémoire:
vi /boot/config.txt
Ajouter gpu_mem=16 pour donner le maximum de mémoire au CPU au détriment du GPU. Décomenter arm_freq=800 pour overclocker le Raspberry (http://elinux.org/RPiconfig)
- Suppression des consoles inutilisées:
sed -i '/[2-6]:23:respawn:\/sbin\/getty 38400 tty[2-6]/s%^%#%g' /etc/inittab
- Désactivation de l'ipv6:
echo "blacklist ipv6" >> /etc/modprobe.d/fbdev-blacklist.conf
sed -i '/::/s%^%#%g' /etc/hosts
- Optimisation de l’ordonnanceur:
sed -i 's/deadline/noop/g' /boot/cmdline.txt
- Redémarrage du système:
reboot
- Personnalisation du système des logs:
service inetutils-syslogd stop
for file in /var/log/*.log /var/log/mail.* /var/log/debug /var/log/syslog; do [ -f "$file" ] && rm -f "$file"; done
for dir in fsck news; do [ -d "/var/log/$dir" ] && rm -rf "/var/log/$dir"; done
echo -e "*.*;mail.none;cron.none\t -/var/log/messages\ncron.*\t -/var/log/cron\nmail.*\t -/var/log/mail" > /etc/syslog.conf
mkdir -p /etc/logrotate.d
echo -e "/var/log/cron\n/var/log/mail\n/var/log/messages {\n\trotate 4\n\tweekly\n\tmissingok\n\tnotifempty\n\tcompress\n\tsharedscripts\n\tpostrotate\n\t/etc/init.d/inetutils-syslogd reload >/dev/null\n\tendscript\n}" > /etc/logrotate.d/inetutils-syslogd
service inetutils-syslogd start
Remarque: optimisations issues de : https://extremeshok.com/1081/raspberry-pi-raspbian-tuning-optimising-optimizing-for-reduced-memory-usage/
- Installation de lighttpd et php:
apt-get -y install lighttpd
apt-get -y install php5-common php5-cgi php5 php-apc
rm /var/www/index.lighttpd.html
lighttpd-enable-mod fastcgi-php
On modifie ensuite le php.ini pour autoriser les uploads des fichiers:
vi /etc/php5/cgi/php.ini
Puis on modifie les directives suivantes:
post_max_size = 128M
upload_max_filesize = 64M
- Relancement du serveur :
/etc/init.d/lighttpd force-reload
Remarque: Vous pouvez utiliser la fonction phpinfo() afin de vérifier les composants activés dans PHP
- Création des certificats pour https:
mkdir -p /etc/lighttpd/ssl
openssl req -new -x509 -keyout cultipi.pem -out server.pem -days 3650 -nodes
chmod -R 600 /etc/lighttpd/ssl
- Installation et configuration de la mécanique .htaccess:
apt-get install apache2-utils
htdigest -c /etc/lighttpd/.passwd 'Identification' cultipi
Adding password for cultipi in realm Identification.
New password:
Re-type new password:
- Configuration du fichier lighttpd.conf:
vi /etc/lighttpd/lighttpd.conf
Le fichier doit ressembler à cela:
server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_auth"
#"mod_rewrite",
)
server.document-root = "/var/www"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/.passwd"
auth.debug = 2
index-file.names = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
# default listening port for IPv6 falls back to the IPv4 port
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
url.redirect = ("^/$" => "/cultibox/")
auth.require = ( "/cultibox/" =>
(
"method" => "digest",
"realm" => "Identification",
"require" => "valid-user"
)
)
- Configuration du fichier lighttpd.conf.https:
vi /etc/lighttpd/lighttpd.conf
Le fichier doit ressembler à cela:
server.modules = (
"mod_access",
"mod_alias",
"mod_compress",
"mod_redirect",
"mod_auth"
#"mod_rewrite",
)
server.document-root = "/var/www"
server.upload-dirs = ( "/var/cache/lighttpd/uploads" )
server.errorlog = "/var/log/lighttpd/error.log"
server.pid-file = "/var/run/lighttpd.pid"
server.username = "www-data"
server.groupname = "www-data"
server.port = 80
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/etc/lighttpd/.passwd"
auth.debug = 2
index-file.names = ( "index.php", "index.html", "index.lighttpd.html" )
url.access-deny = ( "~", ".inc" )
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
compress.cache-dir = "/var/cache/lighttpd/compress/"
compress.filetype = ( "application/javascript", "text/css", "text/html", "text/plain" )
# default listening port for IPv6 falls back to the IPv4 port
include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/ssl/cultipi.pem"
}
$HTTP["scheme"] == "http" {
# capture vhost name with regex conditiona -> %0 in redirect pattern
# must be the most inner block to the redirect rule
$HTTP["host"] =~ ".*" {
url.redirect = (".*" => "https://%0$0")
}
}
url.redirect = ("^/$" => "/cultibox/")
auth.require = ( "/cultibox/" =>
(
"method" => "digest",
"realm" => "Identification",
"require" => "valid-user"
)
)
Créez le répertoire setup puis relancez le serveur:
mkdir /var/www/setup
/etc/init.d/lighttpd force-reload
- Installation de mysql:
apt-get install mysql-server php5-mysql
Remarque: configurer le serveur avec l'utilisateur root et appliqué le mot de passe cultibox
- Configuration de mysql:
Éditer le fichier /etc/mysql/my.cnf et modifier le port utilisé et la définitions des logs:
port = 3891
general_log_file = /var/log/mysql/mysql.log
general_log = 1
Modifier aussi la section [mysql] pour rajouter la ligne suivante:
local-infile= 1
- Redémarrage du serveur:
/etc/init.d/mysql force-reload
Exécuter les commandes suivantes dans un terminal:
sed -i "s/; thread \/usr\/local\/etc\/thread1.conf/thread \/etc\/culticam\/thread1.conf/g" /etc/motion/motion.conf
sed -i "s/; thread \/usr\/local\/etc\/thread2.conf/thread \/etc\/culticam\/thread2.conf/g" /etc/motion/motion.conf
sed -i "s/; thread \/usr\/local\/etc\/thread3.conf/thread \/etc\/culticam\/thread3.conf/g" /etc/motion/motion.conf
sed -i "s/; thread \/usr\/local\/etc\/thread4.conf/thread \/etc\/culticam\/thread4.conf/g" /etc/motion/motion.conf
sed -i "s/daemon off/daemon on/g" /etc/motion/motion.conf
sed -i "s/webcam_localhost on/webcam_localhost off/g" /etc/motion/motion.conf
sed -i "s/start_motion_daemon=no/start_motion_daemon=yes/g" /etc/default/motion
update-rc.d -f motion remove
- Ajout des firmwares wifi disponibles:
apt-get install atmel-firmware firmware-atheros firmware-brcm80211 firmware-libertas firmware-ralink firmware-realtek libertas-firmware zd1211-firmware
- Ajout de CRDA
apt-get install crda
Puis configuration de CRDA, editer le fichier de configuration CRDA:
vi /etc/default/crda
et remplacer la ligne:
REGDOMAIN=
Par:
REGDOMAIN=FR
Enfin taper la commande suivante:
iw reg set FR
- Configuration des interfaces:
ifconfig wlan0 up
Éditer le fichier /etc/network/interfaces afin que le fichier soit identique à cela:
# interfaces(5) file used by ifup(8) and ifdown(8)
#IFACE LO
auto lo
iface lo inet loopback
#IFACE ETH0
allow-hotplug eth0
iface eth0 inet dhcp
#IFACE WLAN0
auto wlan0
allow-hotplug wlan0
iface wlan0 inet static
address 10.0.0.100
netmask 255.0.0.0
post-up /etc/rc.local; /etc/init.d/isc-dhcp-server force-reload; /etc/init.d/dnsmasq force-reload; /etc/init.d/hostapd force-reload
Puis sauvegarder le fichier avec la commande:
cp /etc/network/interfaces /etc/network/interfaces.BASE
Editer le fichier /etc/rc.local et remplacer le fichier par les lignes suivantes:
#!/bin/bash
#Case of an Access Point:
if [ "`/bin/grep 10.0.0.100 /etc/network/interfaces`" != "" ] && [ "`/sbin/ifconfig wlan0`" != "" ]; then
#Configuration of the captiv portal if it's not the case yet:
if [ "`/sbin/iptables -L -t nat | /bin/grep 10.0.0.100`" == "" ]; then
/sbin/iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.100:80
fi
else
#If it's not an Acces Point mode , deleteting captiv portal configuration:
for i in $(/sbin/iptables -t nat --line-numbers -L | /bin/grep ^[0-9] | /usr/bin/awk '{ print $1 }' | /usr/bin/tac ); do /sbin/iptables -t nat -D PREROUTING $i; done
fi
#To accelerate boot time, eth0 is not configured at boot time (due to the time DHCP uses to respond when a wire is not plugged).
#But we have to configure the interface if a wire is plugged:
if [ "`cat /sys/class/net/eth0/carrier 2>/dev/null`" == "1" ]; then
/sbin/ifup --force eth0
else
/sbin/ifdown --force eth0
fi
default="no"
if [ "`cat /sys/class/net/eth0/carrier 2>/dev/null`" == "1" ]; then
gw="`grep 'post-up /sbin/route add default gw' /etc/network/interfaces|grep eth0|sed -e 's/post-up //g'`"
if [ "$gw" != "" ]; then
default="yes"
eval $gw
fi
fi
if [ "`/sbin/ifconfig wlan0 2>/dev/null`" != "" ] && [ "$default" == "no" ]; then
gw="`grep 'post-up /sbin/route add default gw' /etc/network/interfaces|grep wlan0|sed -e 's/post-up //g'`"
if [ "$gw" != "" ]; then
eval $gw
fi
fi
#Configuration of the keymap in FR:
/usr/bin/loadkeys fr
exit 0
Ce morceau de code permettra de générer le nom du réseau adHoc de connexion avec l'adresse Mac de votre module Wifi si votre Raspberry démarre avec un module wifi connecté.
Remarque: les commentaires sont importants, le logiciel de configuration du réseau Cultinet les utilise pour déterminer les blocs liés aux différentes interfaces. Ce fichier de configuration déclare un réseau adHoc sur lequel il sera possible de se connecter afin de configurer son réseau wifi.
Éditer le fichier /etc/default/ifplugd pour qu'il ressemble à cela:
INTERFACES="eth0"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"
Puis éditer le fichier /etc/ifplugd/action.d/ifupdown pour qu'il ressemble à cela:
#!/bin/bash
logger -t IFPLUGD: $1 $2
#For routes, we have to restart network:
route del default
if [ "$2" == "up" ]; then
default="no"
if [ "`cat /sys/class/net/eth0/carrier 2>/dev/null`" == "1" ]; then
/sbin/ifup --force eth0
gw="`grep 'post-up /sbin/route add default gw' /etc/network/interfaces|grep eth0|sed -e 's/post-up //g'`"
if [ "$gw" != "" ]; then
default="yes"
eval $gw
fi
fi
if [ "`/sbin/ifconfig wlan0 2>/dev/null`" != "" ] && [ "$default" == "no" ]; then
gw="`grep 'post-up /sbin/route add default gw' /etc/network/interfaces|grep wlan0|sed -e 's/post-up //g'`"
if [ "$gw" != "" ]; then
eval $gw
fi
fi
else
if [ "`/sbin/ifconfig wlan0 2>/dev/null`" != "" ]; then
/sbin/ifdown --force wlan0
sleep 1
/sbin/ifup --force wlan0
fi
/sbin/ifdown --force eth0
fi
Le système ifplugd permet de relancer la configuration de l'interface eth0 dès le moment ou un câble est branché/débranché.
Pour finir configurer le module Wifi avec la commande:
echo "options rt2800usb nohwcrypt=1" > /etc/modprobe.d/rt2800usb.conf
- Installation et configuration d'un serveur DHCP pour le mode AP, de dnsmasq et de hostapd:
apt-get install isc-dhcp-server dnsmasq hostapd
update-rc.d -f dnsmasq remove
update-rc.d -f isc-dhcp-server remove
update-rc.d -f hostapd remove
vi /etc/dhcp/dhcpd.conf
Le fichier de configuration du dhcp doit contenir les directives suivantes:
ddns-update-style none;
option domain-name "local";
option domain-name-servers 10.0.0.100;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 10.0.0.0 netmask 255.0.0.0 {
range 10.0.0.102 10.0.0.254;
option routers 10.0.0.100;
option domain-name-servers 10.0.0.100;
}
Editer ensuie le fichier /etc/default/isc-dhcp-server pour activer le serveur sur la bonne interface:
INTERFACES="wlan0"
- Configuration de dnsmasq:
Editer le fichier /etc/dnsmasq.conf qui doit contenir les directives suivantes:
address=/#/10.0.0.100
interface=wlan0
listen-address=10.0.0.100
no-dhcp-interface=wlan0
- Configuration de hostapd:
Créer et ajouter les lignes suivantes dans /etc/hostapd/hostapd.conf:
interface=wlan0
ssid=cultipi_network
hw_mode=g
channel=4
auth_algs=1
wmm_enabled=0
Ajouter la ligne suivante dans /etc/default/hostapd:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
- Redémarrage du serveur DHCP, dnsmasq et hostapd:
/etc/init.d/isc-dhcp-server force-reload
/etc/init.d/dnsmasq force-reload
/etc/init.d/hostapd force-reload
- Configuration de avahi:
Editer le fichier /etc/avahi/avahi-daemon.conf et changer la directive:
use-ipv6=yes
en:
use-ipv6=no
Relancer ensuite avahi avec la commande:
/etc/init.d/avahi-daemon force-reload
- Numéro de version de l'image
Pour configurer la version de l'image:
echo "150421" > /VERSION
Pour finir il suffit d'installer les paquets gérant le système Cultipi:
apt-get install cultibox cultipi cultitime cultiraz culticonf culticam cultidoc
- Nettoyage de l'image :
apt-get autoremove
apt-get clean
reboot
- Sauvegarde de l'image:
Insérer la carte SD du Cultipi sur votre ordinateur puis démonter les partitions. Pour sauvegarder l'image du Cultipi, lancer la commande suivante:
dd bs=4M if=/dev/mmcblk0 | gzip > ~/cultipi-`date +%d%m%y`.dd.gz
Vous obtiendrez une image au format RAW gzipée.
Remarque: /deb/mmcblk0 correspond au device contenant la carte SD dans son intégralité et non pas à une partition.
Remarque: La commande rpi-update peut être utilisée pour mettre à jour le Raspberry