====== Partageoir sur ARM debian ====== Comme pour une Piratebox mais avec plus de possibilités et une approche du tableau blanc au lieu d'un simple dépôt de fichier. L'idée, vue le prix des nano-machines ARM à 10 balles, est de partir d'une installation de base d'une distribution GNU/Linux Debian: * un point d'acces WIFI sur base de hostapd , non relié au Net quoi que cela reste possible . * un portail captif pour gérer une redirection locale sur un .lan * un dokuwiki de base pour le portail * un script de création de sous domaine pour y déposer des dokuwiki Reste à déposer/prendre avec soi le partagoir pour offrir une Zone Autonome WIFI. Cela est aussi une bonne base pour partager d'autres outils collectifs, Owncloud (cloud personnel) etc. Sur une base debian un ptit //sudo su// pour commencer ;-) ===== Ajout d'une cléUSB en mémoire de masse ===== Utilisation d'une cléUSB comme partition supplémentaire, **attention on efface son contenu!** umount /dev/sda* mkdir -p /mnt/usbcle mkfs.ext4 /dev/sda1 echo "/dev/sda1 /mnt/usbcle ext4 defaults 0 0" >> /etc/fstab mount /mnt/usbcle si tout va bien rm -rf /var/www mkdir /mnt/usbcle/www ln -s /mnt/usbcle/www /var/www ===== Partie réseau ===== ==== interfaces ==== # pour ne pas s'encombrer systemctl disable rsyslog # le reseau en fonction du votre echo " auto lo iface lo inet loopback iface eth0 inet manual iface wlan0 inet static address 10.0.0.1 " > /etc/network/interfaces /etc/init.d/networking reload ==== la partie point d'accès ==== sudo apt-get -y install iw dnsmasq hostapd sed -i 's/DAEMON_CONF=""/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/' /etc/default/hostapd cat < /etc/hostapd/hostapd.conf # Interface wlan du Wifi interface=wlan0 # Driver à utiliser #driver=nl80211 ##Pilote déjà renseigné #driver=rtl871xdrv ## Pilote à utiliser si clé Edimax # Nom de la Piratebox #ssid=nom_que_vous_voulez ssid=PARTAGEOIR # Mode Wifi (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g) hw_mode=g # Canal de fréquence Wifi (1-14) channel=6 # Wifi ouvert à tous, pas d'authentification auth_algs=1 # Pour activer les fonctionnalités Wifi N #ieee80211n=1 #wmm_enabled=1 EOF systemctl enable hostapd systemctl restart hostapd et aussi la partie zeroconf ( avahi / bonjour etc ) le mDNS offrira '/etc/hostname'.local au reseau pour tout le monde. donc modifier /etc/hosts et /etc/hostname ... apt-get install avahi-daemon avahi-discover libnss-mdns === portail super captif dnsmasq === Faire le portail captif : pour le dnsmasq la ligne address=/#/10.0.0.1 permet de rediriger tous les noms de domaines sur le RasPi (DNS menteur). Ainsi si vous tapez “http://www.google.com” dans votre navigateur en étant connecté au réseau de votre RasPi, vous serez redirigé automatiquement vers le serveur Web du RasPi. Editer le fichier /etc/sysctl.conf net.ipv4.ip_forward=1 sed -i "s/\#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/" /etc/sysctl.conf Editer le fichier /etc/dnsmasq.conf cat <> /etc/dnsmasq.conf # portail captif sur pcp.lan address=/#/10.0.0.1 listen-address=10.0.0.1 no-resolv interface=wlan0 dhcp-range=10.0.0.10,10.0.0.50,12h domain=partageoir.lan EOT Nommer la machine echo "partageoir.lan" > /etc/hostname echo "10.0.0.1 partageoir.lan partageoir" >> /etc/hosts systemctl restart dnsmasq ==== Le serveur web http ==== sudo apt-get install nginx php5-fpm php5-gd fcgiwrap systemctl enable nginx On a donc un portail avec un nginx, posons le dokuwiki ==== le dokuwiki ==== mkdir -p /var/www cd /var/www wget http://download.dokuwiki.org/src/dokuwiki/dokuwiki-stable.tgz tar xzvf dokuwiki-stable.tgz rm dokuwiki-stable.tgz mv doku* dokuwiki chown -R www-data:www-data /var/www * https://wiki.boetes.org/dokuwiki_on_nginx * https://www.dokuwiki.org/install:nginx * dans le cas d'un site unique server { listen 80; listen [::]:80; server_name monsite.local; #return 301 https://$server_name$request_uri; # Maximum file upload size is 4MB - change accordingly if needed client_max_body_size 4M; client_body_buffer_size 128k; root /var/www/dokuwiki; index doku.php index.php index.html ; #Remember to comment the below out when you're installing, and uncomment it when done. location ~ /(data/|conf/|bin/|inc/|install.php) { deny all; } # Uncomment this prevents images being displayed ! # location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { # expires 31536000s; # add_header Pragma "public"; # add_header Cache-Control "max-age=31536000, public, must-revalidate, proxy-revalidate"; # log_not_found off; # } location / { try_files $uri $uri/ @dokuwiki; } location @dokuwiki { rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last; rewrite ^/(.*) /doku.php?id=$1&$args last; } location ~ \.php$ { try_files $uri $uri/ /doku.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param REDIRECT_STATUS 200; fastcgi_pass unix:/var/run/php5-fpm.sock; } } connectez vous sur ce dokuwiki ( reperer l'ip avec un ifconfig, le LAN en place? ), faites le ménage, poser vos meubles et tout et tout, comme vous voulez le voir pour les futures wiki. mkdir farm cd dokuwiki tar cf ../dokuwiki.tar ./* ==== cgi ==== on pose un script dans un cgi ici en bash ... cd /var/www/dokuwiki mkdir cgi cd cgi cat < wiki_creation.sh #!/bin/sh # -*- coding: utf-8 -*- XX=""; NAME=`"WIkiCreation"` echo "Content-type:text/html\r\n" echo "" echo "$NAME" echo '' echo '' echo '' echo '' echo "
"
echo "
"\ ''\ ''\ '
Nom du wiki
' echo 'Le nom se compose d un seul mot sans accent' echo '
'\ '
' if [ "$REQUEST_METHOD" != "GET" ]; then echo "
Script Error:"\ "
Usage error, cannot complete request, REQUEST_METHOD!=GET."\ "
Check your FORM declaration and be sure to use METHOD=\"GET\"." exit 1 fi if [ -z "$QUERY_STRING" ]; then exit 0 else # No looping this time, just extract the data you are looking for with sed: XX=`echo "$QUERY_STRING" | sed -n 's/^.*val_x=\([^&]*\).*$/\1/p' | sed "s/%2 0/ /g"` cd ../../farm mkdir $XX.pcp.lan cd $XX.pcp.lan tar xf ../dokuwiki.tar # cron modifi sites-enables en fonction des repertoire existant echo "wiki en place dans 1 minute" echo "La suite sur votre wiki" echo 'http://'$XX'.pcp.lan' exit 0 fi echo "
" exit 0 EOF
==== cron ==== j'ai une astuce pour cadrer le tout pour nginx avec un script lancé par le cron toutes les minutes cat < /usr/local/bin/nginx-reload-farm #!/bin/bash cd /var/www/farm for i in `ls -1d *.*.lan` do if [ ! -f /etc/nginx/sites-enabled/$i ] then cp /etc/nginx/sites-available/nginx.site /etc/nginx/sites-enabled/$i fi grep "$i" /etc/hosts > /dev/null REP=$? if [ ! "$REP" -eq 0 ] then echo $IP " "$i >> /etc/hosts fi grep "$i" /var/www/dokuwiki/data/pages/start.txt > /dev/null REP=$? if [ ! "$REP" -eq 0 ] then echo " * [[http://"$i"]]" >> /var/www/dokuwiki/data/pages/start.txt fi grep "_NOM" /etc/nginx/sites-enabled/$i > /dev/null REP=$? if [ "$REP" -eq 0 ] then sed -i "s/_NOM/$i/" /etc/nginx/sites-enabled/$i /etc/init.d/nginx reload sleep 1 fi done EOF qui nécessite un fichier par défaut dans le /etc/nginx/sites-available/ cat < /etc/nginx/sites-available/nginx.site server { server_name _NOM ; listen 80; root /var/www/farm/_NOM/; access_log /var/log/nginx/pcp.lan-acces.log; error_log /var/log/nginx/pcp.lan-error.log; index index.php index.html doku.php; location ~ /(data|conf|bin|inc)/ { deny all; } location ~ /\.ht { deny all; } location ~ \.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } EOF Il faut pour finir lancer le crontab -e et y coller * * * * * /usr/local/bin/nginx-reload-farm 2>&1 > /dev/null ==== Pour le portail captif ultra ==== cat < /etc/nginx/sites-enabled/default ## # portail captif , tout est bon :-) # Default server configuration # server { listen 80 default_server; listen [::]:80 default_server; root /var/www/dokuwiki; index index.php index.html index.htm; server_name _; location ~ \.php { fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; include /etc/nginx/fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location / { rewrite ^([^.]*[^/])$ $1/ permanent; root /var/www/dokuwiki; try_files $uri $uri/ /index.php =404; include fastcgi_params; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_intercept_errors on; } } EOT ==== Fin ==== se connecter sur le wifi. avec le SSID que vous avez déclaré sur un linux le daemon avahi doit noter un partageoir.lan ... sur Android aussi, ce qui permet d'ouvrir le navigateur sur la bonne page a moins d'ajouter la partie portail captif du dessous. ... Bon il doit certainement y avoir des moyens de faire autrement avec un plugin dokuwiki , mais la méthode ferme de dokuwiki (farming) ne me plaisait qu'à moitié ... autant avoir un dokuwiki complet pour chaque wiki avec ses différences de style et une gestion étanche des répertoires. Et pour finir un paquet de template :{{:pcp:tpl.tar|template std de dokuwiki.org}} ==== Fini ==== le mieux c'est de tout relancer pour voir ci ça marche bien ;-) en gros on pointe le WIFI PARTAGEOIR et apres quelque soit l'url demandée on a la page du dokuwiki principal qui annonce les autres wiki de la machine.