Difference between revisions of "Raspberry Pi setup"

From Open Maps wiki
Jump to: navigation, search
(Map framework)
(Map framework)
 
(21 intermediate revisions by 5 users not shown)
Line 11: Line 11:
 
  <nowiki>
 
  <nowiki>
 
sudo apt-get update
 
sudo apt-get update
sudo apt-get install nginx
+
sudo apt-get install nginx -y
sudo apt-get install hostapd
+
sudo apt-get install hostapd -y
sudo apt-get install dnsmasq
+
sudo apt-get install dnsmasq -y
 
</nowiki>
 
</nowiki>
  
Line 62: Line 62:
  
 
=== Note for EDIMAX adaptors ===  
 
=== Note for EDIMAX adaptors ===  
 
 
[http://www.daveconroy.com/turn-your-raspberry-pi-into-a-wifi-hotspot-with-edimax-nano-usb-ew-7811un-rtl8188cus-chipset/ edimax version of hostapd if using an edimax wifi usb]
 
[http://www.daveconroy.com/turn-your-raspberry-pi-into-a-wifi-hotspot-with-edimax-nano-usb-ew-7811un-rtl8188cus-chipset/ edimax version of hostapd if using an edimax wifi usb]
  
 +
<nowiki>
 +
wget http://www.daveconroy.com/wp3/wp-content/uploads/2013/07/hostapd.zip
 +
unzip hostapd.zip
 +
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
 +
sudo mv hostapd /usr/sbin/hostapd.edimax
 +
sudo ln -sf /usr/sbin/hostapd.edimax /usr/sbin/hostapd
 +
sudo chown root.root /usr/sbin/hostapd
 +
sudo chmod 755 /usr/sbin/hostapd
 +
</nowiki>
  
 
== DHCP and DNS for access point and captive portal ==
 
== DHCP and DNS for access point and captive portal ==
Line 96: Line 104:
  
 
== More Captive Portal Stuff ==
 
== More Captive Portal Stuff ==
 +
 +
=== Forward all IP to the device ===
 +
 +
Turn on ip forwarding for IPV4
 +
 +
<nowiki>
 +
sudo nano /etc/sysctl.conf</nowiki>
 +
uncomment:
 +
 +
<nowiki>
 +
net.ipv4.ip_forward = 1</nowiki>
 +
 +
then run the following to set up IP forwarding [https://www.raspberrypi.org/forums/viewtopic.php?t=90155&p=764850 from iptables conversation for captive portals]
 +
 +
<nowiki>
 +
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.1.2.1:80
 +
sudo iptables -t nat -A POSTROUTING -j MASQUERADE</nowiki>
 +
 +
Some notes about the process of making a captive portal
  
 
[http://stackoverflow.com/questions/3615147/how-to-create-wifi-popup-login-page Pop up page info for IOS, Windows, and Android]
 
[http://stackoverflow.com/questions/3615147/how-to-create-wifi-popup-login-page Pop up page info for IOS, Windows, and Android]
 +
 
[http://serverfault.com/questions/446674/how-to-configure-nginx-to-redirect-all-request-from-domain-aliases-to-main-domai forward to domain]
 
[http://serverfault.com/questions/446674/how-to-configure-nginx-to-redirect-all-request-from-domain-aliases-to-main-domai forward to domain]
[https://www.raspberrypi.org/forums/viewtopic.php?t=90155&p=764850 iptables nat stuff for captive portal]
+
 
 +
 
 +
[http://www.raspberrypi.org/forums/viewtopic.php?f=36&t=39225 some popup mehods]
  
 
== Logging people ==
 
== Logging people ==
Line 125: Line 155:
 
Copy the server framework files across
 
Copy the server framework files across
  
The files needed for hosting the map are part of the [https://github.com/neonascent/openmaps, Open Maps GitHub repository] in location "Device Files/www/"
+
The files needed for hosting the map are part of the [https://github.com/neonascent/openmaps Open Maps GitHub repository] in location "Device Files/www/"
 
Place these file (javascript, example index, map tiles) into /var/www/html
 
Place these file (javascript, example index, map tiles) into /var/www/html
  
Line 133: Line 163:
 
  <nowiki>
 
  <nowiki>
 
sudo find /var/www -type d -exec chmod a+x {} +
 
sudo find /var/www -type d -exec chmod a+x {} +
 +
sudo find /var/www -type d -exec chmod a+w {} +
 
sudo find /var/www -type d -exec chown root:root {} +
 
sudo find /var/www -type d -exec chown root:root {} +
 
sudo find /var/www -type f -exec chmod a+r {} +
 
sudo find /var/www -type f -exec chmod a+r {} +
 
sudo find /var/www -type f -exec chown root:root {} +
 
sudo find /var/www -type f -exec chown root:root {} +
 
</nowiki>
 
</nowiki>
 +
 +
== Power saving ==
 +
 +
If you are using the device for battery-based or power-sensitive installs, follow these [http://www.jeffgeerling.com/blogs/jeff-geerling/raspberry-pi-zero-conserve-energy instructions for disabling LED and HDMI functionality to save power].
 +
  
 
== For Map content ==  
 
== For Map content ==  
  
 
[http://mapnik.org/ MapNik coding platform for maps... pull render tiles using this?]
 
[http://mapnik.org/ MapNik coding platform for maps... pull render tiles using this?]
 +
 
[http://maps.stamen.com/m2i/image/20130610/mapstack_ZHVazuJTG7s beautiful Stamen Design map that can be used]
 
[http://maps.stamen.com/m2i/image/20130610/mapstack_ZHVazuJTG7s beautiful Stamen Design map that can be used]
 
[[File:Map example1.png|thumbnail]]
 
[[File:Map example1.png|thumbnail]]
 
[[File:Map example2.png|thumbnail]]
 
[[File:Map example2.png|thumbnail]]
 +
 +
== Everything Script ==
 +
Run these individually first
 +
<nowiki>
 +
sudo -i
 +
apt-get update </dev/null
 +
apt-get -y install nginx hostapd dnsmasq < "/dev/null"
 +
</nowiki>
 +
then
 +
<nowiki>
 +
sed -i 's/try_files $uri $uri\/ =404;/try_files $uri $uri\/ \/index.html;/g' /etc/nginx/sites-available/default
 +
service nginx start
 +
touch /etc/hostapd/hostapd.conf
 +
echo "interface=wlan0" >> /etc/hostapd/hostapd.conf
 +
echo "ssid=TacticalSpaceLab" >> /etc/hostapd/hostapd.conf
 +
echo "hw_mode=g" >> /etc/hostapd/hostapd.conf
 +
echo "channel=6" >> /etc/hostapd/hostapd.conf
 +
echo "auth_algs=1" >> /etc/hostapd/hostapd.conf
 +
echo "wmm_enabled=0" >> /etc/hostapd/hostapd.conf
 +
sed -i 's/#DAEMON_CONF=""/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/g' /etc/default/hostapd
 +
service hostapd start
 +
update-rc.d hostapd enable
 +
wget http://www.daveconroy.com/wp3/wp-content/uploads/2013/07/hostapd.zip
 +
unzip hostapd.zip
 +
mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
 +
mv hostapd /usr/sbin/hostapd.edimax
 +
ln -sf /usr/sbin/hostapd.edimax /usr/sbin/hostapd
 +
chown root.root /usr/sbin/hostapd
 +
chmod 755 /usr/sbin/hostapd
 +
> /etc/network/interfaces
 +
echo "auto lo" >> /etc/network/interfaces
 +
echo "iface lo inet loopback " >> /etc/network/interfaces
 +
echo " " >> /etc/network/interfaces
 +
echo "auto wlan0" >> /etc/network/interfaces
 +
echo "iface wlan0 inet static" >> /etc/network/interfaces
 +
echo "  address 10.1.2.1" >> /etc/network/interfaces
 +
echo "  netmask 255.255.255.0" >> /etc/network/interfaces
 +
echo "  network 10.1.2.0" >> /etc/network/interfaces
 +
> /etc/dnsmasq.conf
 +
echo "# captive portal to this" >> /etc/dnsmasq.conf
 +
echo "no-resolv " >> /etc/dnsmasq.conf
 +
echo "server=/localnet/10.1.2.1" >> /etc/dnsmasq.conf
 +
echo "server=/tacticalspace/10.1.2.1" >> /etc/dnsmasq.conf
 +
echo "address=/#/10.1.2.1" >> /etc/dnsmasq.conf
 +
echo "interface=wlan0" >> /etc/dnsmasq.conf
 +
echo "dhcp-range=10.1.2.5,10.1.2.200,12h" >> /etc/dnsmasq.conf
 +
/etc/init.d/dnsmasq restart
 +
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
 +
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.1.2.1:80
 +
iptables -t nat -A POSTROUTING -j MASQUERADE
 +
find /var/www -type d -exec chmod a+x {} +
 +
find /var/www -type d -exec chmod a+w {} +
 +
find /var/www -type d -exec chown root:root {} +
 +
find /var/www -type f -exec chmod a+r {} +
 +
find /var/www -type f -exec chown root:root {} +
 +
 +
</nowiki>

Latest revision as of 11:47, 1 June 2016

Before you can do anything, you need to configure the Wifi on the Pi (NB: default Pi login is 'pi' and default password is 'raspberry')

The setting up a headless Pi instructions here (in particular Step 3) worked for us, although we only needed ssid and psk (password) for the network={... step.

Lets set up our map server with local cached image files

Installing required software

Install nginx (server), hostapd (wifi AP host), dnsmasq (light dns server) install Nginx

sudo apt-get update
sudo apt-get install nginx -y
sudo apt-get install hostapd -y
sudo apt-get install dnsmasq -y

Web Server

Set up web server to forward 404's to root directory (needed for captive portal behaviour) and start edit /etc/nginx/sites-available/default

and modify line in "location / {" section:

try_files $uri $uri/ = 404;

becomes

try_files $uri $uri/ /index.html;

Now start the server

sudo service nginx start

Set up hostapd

Set up AP with hostap (instructions from set up AP with udhcpd) edit the file /etc/hostapd/hostapd.conf

interface=wlan0
ssid=TacticalSpaceLab
hw_mode=g
channel=6
auth_algs=1
wmm_enabled=0

Edit the file /etc/default/hostapd and change the line:

#DAEMON_CONF=""

to

DAEMON_CONF="/etc/hostapd/hostapd.conf"
 

Start it up, and add it to start at boot

sudo service hostapd start
sudo update-rc.d hostapd enable
 

Note for EDIMAX adaptors

edimax version of hostapd if using an edimax wifi usb

wget http://www.daveconroy.com/wp3/wp-content/uploads/2013/07/hostapd.zip
unzip hostapd.zip 
sudo mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
sudo mv hostapd /usr/sbin/hostapd.edimax 
sudo ln -sf /usr/sbin/hostapd.edimax /usr/sbin/hostapd 
sudo chown root.root /usr/sbin/hostapd 
sudo chmod 755 /usr/sbin/hostapd

DHCP and DNS for access point and captive portal

Set up /etc/network/interfaces for serving DHCP and DNS

auto lo 
iface lo inet loopback 

auto wlan0
iface wlan0 inet static
  address 10.1.2.1
  netmask 255.255.255.0
  network 10.1.2.0


configure dnsmasq /etc/dnsmasq.conf

# captive portal to this
no-resolv 
server=/localnet/10.1.2.1
server=/tacticalspace/10.1.2.1
address=/#/10.1.2.1
interface=wlan0
dhcp-range=10.1.2.5,10.1.2.200,12h

restart dnsmasq

sudo /etc/init.d/dnsmasq restart

More Captive Portal Stuff

Forward all IP to the device

Turn on ip forwarding for IPV4

sudo nano /etc/sysctl.conf

uncomment:

net.ipv4.ip_forward = 1

then run the following to set up IP forwarding from iptables conversation for captive portals

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.1.2.1:80 
sudo iptables -t nat -A POSTROUTING -j MASQUERADE

Some notes about the process of making a captive portal

Pop up page info for IOS, Windows, and Android

forward to domain


some popup mehods

Logging people

if you want dnsmarsq script logging... Create /var/log/dhcp_leases file with write create /usr/bin/logdhcp, make executable add it to dnsmasq config

#!/bin/bash
destfile=/var/log/dhcp_leases
#if [ "$1" == "add" ]
#then
  if [ -f "$destfile" ]
  then
    echo "$1 $2" >> "$destfile"
  fi
#fi

Logging dhcp.png

ended up using dnsmasq for DNS and DHCP. Setting DNS forward IP to local for captive portal setup

Map framework

Copy the server framework files across

The files needed for hosting the map are part of the Open Maps GitHub repository in location "Device Files/www/" Place these file (javascript, example index, map tiles) into /var/www/html

The repository only includes very far-out zoom levels (2,3,4). This older archive has zoom levels down to 18 in the areas around central Paris, Berlin, and Vienna: MQ var directory archive

Remember to make all /var/www/html folders readable with:

sudo find /var/www -type d -exec chmod a+x {} +
sudo find /var/www -type d -exec chmod a+w {} +
sudo find /var/www -type d -exec chown root:root {} +
sudo find /var/www -type f -exec chmod a+r {} +
sudo find /var/www -type f -exec chown root:root {} +

Power saving

If you are using the device for battery-based or power-sensitive installs, follow these instructions for disabling LED and HDMI functionality to save power.


For Map content

MapNik coding platform for maps... pull render tiles using this?

beautiful Stamen Design map that can be used

Map example1.png
Map example2.png

Everything Script

Run these individually first

sudo -i
apt-get update </dev/null
apt-get -y install nginx hostapd dnsmasq < "/dev/null"

then

sed -i 's/try_files $uri $uri\/ =404;/try_files $uri $uri\/ \/index.html;/g' /etc/nginx/sites-available/default
service nginx start
touch /etc/hostapd/hostapd.conf
echo "interface=wlan0" >> /etc/hostapd/hostapd.conf
echo "ssid=TacticalSpaceLab" >> /etc/hostapd/hostapd.conf
echo "hw_mode=g" >> /etc/hostapd/hostapd.conf
echo "channel=6" >> /etc/hostapd/hostapd.conf
echo "auth_algs=1" >> /etc/hostapd/hostapd.conf
echo "wmm_enabled=0" >> /etc/hostapd/hostapd.conf
sed -i 's/#DAEMON_CONF=""/DAEMON_CONF="\/etc\/hostapd\/hostapd.conf"/g' /etc/default/hostapd
service hostapd start
update-rc.d hostapd enable
wget http://www.daveconroy.com/wp3/wp-content/uploads/2013/07/hostapd.zip
unzip hostapd.zip 
mv /usr/sbin/hostapd /usr/sbin/hostapd.bak
mv hostapd /usr/sbin/hostapd.edimax 
ln -sf /usr/sbin/hostapd.edimax /usr/sbin/hostapd 
chown root.root /usr/sbin/hostapd 
chmod 755 /usr/sbin/hostapd
> /etc/network/interfaces
echo "auto lo" >> /etc/network/interfaces
echo "iface lo inet loopback " >> /etc/network/interfaces
echo " " >> /etc/network/interfaces
echo "auto wlan0" >> /etc/network/interfaces
echo "iface wlan0 inet static" >> /etc/network/interfaces
echo "  address 10.1.2.1" >> /etc/network/interfaces
echo "  netmask 255.255.255.0" >> /etc/network/interfaces
echo "  network 10.1.2.0" >> /etc/network/interfaces
> /etc/dnsmasq.conf
echo "# captive portal to this" >> /etc/dnsmasq.conf
echo "no-resolv " >> /etc/dnsmasq.conf
echo "server=/localnet/10.1.2.1" >> /etc/dnsmasq.conf
echo "server=/tacticalspace/10.1.2.1" >> /etc/dnsmasq.conf
echo "address=/#/10.1.2.1" >> /etc/dnsmasq.conf
echo "interface=wlan0" >> /etc/dnsmasq.conf
echo "dhcp-range=10.1.2.5,10.1.2.200,12h" >> /etc/dnsmasq.conf
/etc/init.d/dnsmasq restart
sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.1.2.1:80 
iptables -t nat -A POSTROUTING -j MASQUERADE
find /var/www -type d -exec chmod a+x {} +
find /var/www -type d -exec chmod a+w {} +
find /var/www -type d -exec chown root:root {} +
find /var/www -type f -exec chmod a+r {} +
find /var/www -type f -exec chown root:root {} +