---------------------------------------- Little Free Library, part 1 October 14th, 2018 ---------------------------------------- Below is a list of notes I've prepared while building my little free ebook library. What is that, you ask? Well, it's a solar powered rapsberry pi zero w that will live off-grid with an open wifi access point. When a user connects to it, Captive Portal will automatically trigger a "sign-in" page. The page isn't meant to sign into anything, though. Instead it will present users with free ebooks for download to their devices! My first go will likely be a collection of PDF maps from USGS, some trail guides and bird identification things that are appropriate for the trail that runs past my house. My TODO list remains: - Test apple devices captive portal - Design a static site page to download the ebooks # Starting from a raspbian lite install on a raspberry pi zero w: # After setting up your local wifi connection in wpa_supplicant, # then proceed to make your littlefreelibrary work when away from # home... # Update packages to prepare $ sudo apt update $ sudo apt upgrade -y # Install dependencies, but disable by default $ sudo apt install dnsmasq hostapd nginx -y $ sudo systemctl disable hostapd $ sudo systemctl disable dnsmasq # Configure $ sudo vi /etc/hostapd/hostapd.conf interface=wlan0 driver=nl80211 ssid=LittleFreeLibrary hw_mode=g channel=8 wmm_enabled=0 macaddr_acl=0 auth_algs=1 wpa=0 ignore_broadcast_ssid=0 country_code=US ieee80211n=1 $ sudo vi /etc/default/hostapd DAEMON_CONF="/etc/hostapd/hostapd.conf" # change only this line $ sudo vi /etc/dnsmasq.conf # add the following to the end of file bogus_priv addrdess=/#/10.0.0.5 interface=wlan0 no-resolv bind-interfaces dhcp-range=10.0.0.50,10.0.0.100,12h $ sudo vi /etc/dchcpd.conf # add the following to the end of file nohook wpa_supplicant $ sudo vi /etc/systemd/system/autohotspot.service [Unit] Description=Automatically generate an internet Hotspot when a valid ssid is not in range After=multi-user.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/bin/autohotspot [Install] WantedBy=multi-user.target $ sudo systemctl enable autohotspot.service $ curl http://www.raspberryconnect.com/images/Autohotspot/autohotspot-95-4/autohotspot.txt > autohotspot $ chmod 755 autohotspot $ sudo mv autohotspot /usr/bin/autohotspot # Change hostname to littlefreelibrary $ sudo hostname littlefreelibrary $ sudo vi /etc/hostname littlefreelibrary $ sudo vi /etc/hosts 127.0.0.1 littlefreelibrary # Set up a cron to detect changes $ crontab -e # add the following to the end of file */5 * * * * sudo /usr/bin/autohotspot >/dev/null 2>&1 # Set up nginx to work with captive portal $ sudo vi /etc/nginx/sites-available/default server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html; server_name _; # For iOS if ($http_user_agent ~* (CaptiveNetworkSupport) ) { return 302 http://littlefreelibrary.local/apple.html; } # For Android location /generate_204 { return 302 http://littlefreelibrary.local/index.html; } location / { try_files $uri $uri/ /index.html; } } $ sudo service nginx restart # Add apple captive portal page $ sudo vi /var/www/html/apple.html <!-- <?xml version="1.0" encoding="UTF-8"?> <WISPAccessGatewayParam xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.wballiance.net/wispr_2_0.xsd"> <Redirect> <MessageType>100</MessageType> <ResponseCode>0</ResponseCode> <VersionHigh>2.0</VersionHigh> <VersionLow>1.0</VersionLow> <AccessProcedure>1.0</AccessProcedure> <AccessLocation>LittleFreeLibrary</AccessLocation> <LocationName>LittleFreeLibrary</LocationName> <LoginURL>http://littlefreelibrary.local/index.html</LoginURL> </Redirect> </WISPAccessGatewayParam> --> # Create your library page $ sudo vi /var/www/html/index.html TBD HTML code # To manage device when in AP mode $ ssh pi@10.0.0.5