Outils pour utilisateurs

Outils du site


pcp:partagoir

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 <<EOF > /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 ...

<code>
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 <<EOT >> /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
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 <<EOF > wiki_creation.sh
#!/bin/sh
# -*- coding: utf-8 -*-
XX="";
NAME=`"WIkiCreation"`
echo "Content-type:text/html\r\n"
echo "<html><head>"
echo "<title>$NAME</title>"
echo '<meta name="description" content="'$NAME'">'
echo '<meta name="keywords" content="'$NAME'">'
echo '<meta http-equiv="Content-type" content="text/html;charset=UTF-8">'
echo '<meta name="ROBOTS" content="noindex">'
echo "</head><body><pre>"
echo "<form method=GET action=\"${SCRIPT}\">"\
       '<table nowrap>'\
       '<tr><td>Nom du wiki</TD><TD><input type="text" name="val_x" size=12></td
></tr>'\
       '</tr></table>'
echo 'Le nom se compose d un seul mot sans accent'
echo '<br><input type="submit" value="Création">'\
       '<input type="reset" value="Annulation"></form>'

if [ "$REQUEST_METHOD" != "GET" ]; then
      echo "<hr>Script Error:"\
           "<br>Usage error, cannot complete request, REQUEST_METHOD!=GET."\
           "<br>Check your FORM declaration and be sure to use METHOD=\"GET\".<h
r>"
      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 '<a href="http://'$XX'.pcp.lan">http://'$XX'.pcp.lan</a>'
exit 0
fi
echo "</pre></body></html>"
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 <<EOF > /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 <<EOF > /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 <<EOT > /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 :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.

pcp/partagoir.txt · Dernière modification: 2017/04/11 15:13 (modification externe)