WiFi AP/Extender using an old RPi

Overview

SuitiePi was initially thrown together to fill-in a WiFi deadspot in our basement.  It plugged into an existing Ethernet cabled to our guest network and basically serves as a WiFi Access Point for visitors and network extender for an unwired, hard-to-reach area of our home.

Migrated to new site spring 2021 

Retired December 2022.  Inherited a router that has AP mode and better antennas! 




Hardware

As usual, our SuitiePi was pieced together using stuff laying around my shop.  Originally deployed on a RPi 2 Mod B, but downgraded to our very first RPi 1 Mod B that was sitting around gathering dust - works great!

Specifically:

*Note:  Affiliate Links, I may get kickback from Amazon if you click/buy!

Software

Very minimal software requirements


Level of Difficulty & Prep Time

Simple project, no programming required.

Minimal RaspOS/Linux know-how required.  

Possibly one hour's worth of work.

Step By Step

(Notes to myself for rebuilds)

RaspPi OS Install

Here's a sing-a-along with RaspAP quick start @ raspap.com/#quick  Official RaspPi OS install info @ www.raspberrypi.org/help/quick-start-guide.../
Both seems to get easier each time I visit.

sudo apt-get update

sudo apt-get dist-upgrade

Modest 800MHz ARM, 250MHz core, 400MHz SDRAM, 0 overvolt

sudo reboot

RaspAP Install

RaspAp Quick installer seems to be way to go on this one ... it's REALLY NICE!

I traditionally run the next part via SSH on the RPi hardware intended for SuitiePi services positioned on the correct subnet.  In my case:  My original RPi 1 Model B w/ EDIMAX USB WiFi adapter.  THIS DIDN'T WORK AT ALL w/ Bullseye/RaspOS 2.8 Quick Installer!  Ended up doing install and config on a a RPI3 Model B+ w/ built-in WiFi ... THEN moving the SD card to the RPI1 Model B. 

On with RaspAp installer:

I say:  curl -sL https://install.raspap.com | bash

It says (I use defaults wherever I can!):


 

 888888ba                              .d888888   888888ba

 88     8b                            d8     88   88     8b

a88aaaa8P' .d8888b. .d8888b. 88d888b. 88aaaaa88a a88aaaa8P

 88    8b. 88    88 Y8ooooo. 88    88 88     88   88

 88     88 88.  .88       88 88.  .88 88     88   88

 dP     dP  88888P8  88888P  88Y888P  88     88   dP

                              88

                              dP      version 2.8.3                                                                                                 

The Quick Installer will guide you through a few easy steps                                                                                              


RaspAP Install: Configure installation

Detected OS: Raspbian GNU/Linux 10 (buster)

Using GitHub repository: RaspAP/raspap-webgui 2.8.3 branch

Configuration directory: /etc/raspap

lighttpd root: /var/www/html? [Y/n]: Y

Install directory: /etc/raspap

Install to lighttpd root: /var/www/html? [Y/n]: Y

Installing to lighttpd directory: /var/www/html

Complete installation with these values? [Y/n]: Y

<Setting up, Creating, yada yada - busy for a while>

Enable HttpOnly for session cookies (Recommended)? [Y/n]: Y

<yada yada>

Enable RaspAP control service (Recommended)? [Y/n]: Y

<yada yada>

Install ad blocking and enable list management? [Y/n]: Y

<nice, sure>

Install OpenVPN and enable client configuration? [Y/n]: n

<Will research and try OpenVPN next time>

Install WireGuard and enable VPN tunnel configuration? [Y/n]: n
<Will research also>


RaspAP Config (relative to v2.8.3)
http://<IP suitiepi> returns login screen - Initial login is admin/secret.
Settings:


RaspAP Config

RaspAP Config (relative to v2.8.3)

Connect via browser @ http://<IP suitiepi> 

Login Screen - Initial login is admin/secret.

Settings (remember to "Save Settings" when tweaking in here):


Related Networking Note:   I also added a static route for SuiteiPi's subnet in the router upstream of SuitiePi AP.   SuitiePi is gateway IP for All traffic destined for AP subnet. 

Trials, Tribulations and SuitiePi Struggles

This section will likely remain a mess.  The original SuitiePi was handbuilt raspbian w/ hostapd + kodi and Shareplay (for entertainment).  Major struggles included hostapd on arm6 (old pi) and hostapd getting along with kodi.  The savior to all of this was RaspAP and simply dedicating the RPi 1B to WiFi AP duties ... a respectable role for the old Pi! 
 

This is simply a historical log of our SuitiePi mods.  It has morphed and evolved over the years, various versions and capabilities  ... It is what it is!    Problems may be marked in RED and solutions may be highlighted in BLUE

2022 - Failed attempt to upgrade RaspAP from 2.5 to 2.8.3


Mar 2022 Note - Attempted upgrade from 2.5 to 2.8.3 on the RPI1 Model B ... more to it than expected ... ACK!  it was a mess!  I won't do THAT again!

Ended up doing a fresh Install with latest RaspOS and RaspAP ... even THAT was a struggle but eventually got it working again (some Voodoo).    VERY STRANGE RaspAP UI Issues (e.g. Channel # was blank/invalid and could not be set via browser + more) and odd looking Linux config (e.g. wlan0 appeared to be missing?!?)  ... Soooo ... I ran initial Bullseye/RaspOS and RaspAP quick install on a RPI3 Model B+ w/ built-in WiFi THEN moved the SD card to the RPI1 Model B w/ USB WiFi adapter.  

It all started like this ....

Did one of these:  curl -sL https://install.raspap.com | bash -s -- --upgrade
Still had to answer quick installer questions ... *and* review/touch-up config after upgrade.  Luckily, I had this recipe!

2021 - Downgraded hardware, now RPI 1 Model B w/ EDIMAX USB WiFi adapter.  AP Services only

April 2021 - Migrated this recipe from http://ventures.tpedersen.net/errata/raspberrypi/suitiepi


February 2021 - Ended up downgrading SuitiePi hardware to RPI 1 Model B so I could dedicate the RPi 2 to a Kodi project.

Modest 800MHz ARM, 250MHz core, 400MHz SDRAM, 0 overvolt

It now runs between 45c and 50c.  CPU shows 100% during heavy use (150% via RaspAP status page!).   Should be good enough for my purposes - very limited use, no need for speed.  ~20Mbps up/down via 802.11n 2.4GHz

December 2020 - Needed an itsy, bitsy browser on the basement TV.  Will see if Pi2 has enough horsepower to play exercise videos too ...

'RASPI_ACCESS_CHECK_IP' => '1.1.1.1',

'RASPI_ACCESS_CHECK_DNS' => 'one.one.one.one',

to ...

'RASPI_ACCESS_CHECK_IP' => '9.9.9.9',

'RASPI_ACCESS_CHECK_DNS' => 'dns.quad9.net',

sudo apt-get install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox

sudo apt-get install --no-install-recommends chromium-browser

# TPed was here - The following cut/pasted for kiosk pi#       
# Disable any form of screen saver / screen blanking / power management
xset s off
xset s noblank
xset -dpms

# Allow quitting the X server with CTRL-ATL-Backspace
setxkbmap -option terminate:ctrl_alt_bksp
# Start Chromium in kiosk mode
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'Local State'
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"Normal"/' ~/.config/chro
chromium-browser --disable-infobars --kiosk 'http://ventures.tpedersen.net/errata/raspberrypi/<start page>'


September 2020 - Rebuild due to Micro SD failure

'RASPI_ACCESS_CHECK_IP' => '1.1.1.1',
'RASPI_ACCESS_CHECK_DNS' => 'one.one.one.one',
to ...
'RASPI_ACCESS_CHECK_IP' => '9.9.9.9',
'RASPI_ACCESS_CHECK_DNS' => 'dns.quad9.net', 

June 2020 - Attempted/Gave up on RPiPlay!   SuitiePi is back to RaspAP on old RPI v1 Model B.    Used a $25 Roku to smarten old  TV!

sudo apt-get update

sudo apt-get dist-upgrade

Install editor - no like nano.
sudo apt-get install joe
<reboot>

sudo apt-get install git
git clone https://github.com/FD-/RPiPlay.git
cd RPiPlay
sudo apt-get install cmake
sudo apt-get install libavahi-compat-libdnssd-dev
sudo apt-get install libssl-dev
mkdir build
cd build
cmake ..
make

May 2020 - Attempted Super SuitiePi using  dietpi, hostapd and kodi for more entertainment!  ... FAIL, remnants below


Software

Step-by Step

# General connection and DNS testing

# - IP to ping when checking network connectivity. Default: 1.1.1.1 (Cloudflare DNS, should be very fast world-wide)

# TPed Mod - TDS blocks 1.1.1.1, I have to use similar - quad9.net

CONFIG_CHECK_CONNECTION_IP=9.9.9.9

# - Domain to ping when checking DNS resolver. Default: one.one.one.one (Cloudflare DNS domain, see above)

CONFIG_CHECK_DNS_DOMAIN=quad9.net

# TPed Add - Reserve IP for our PanelPi 

host panelpi {
hardware Polish up ethernet xx:xx:xx:xx:xx:x;
fixed-address 192.168.xx.xx;
}

# TPed Add - enable hostapd_cli client 

ctrl_interface=/run/hostapd
ctrl_interface_group=0

git clone https://github.com/FD-/RPiPlay.git

apt-get install cmake
apt-get install libavahi-compat-libdnssd-dev
cd RPiPlay
mkdir build
cd build
cmake ..

CRAP!  No ilclient in dietpi? This is nuts!  Switching back to Raspbian for a while.  Dietpi seems to be more trouble than its worth!


March 2020 - back at it.  SuitiePi has been working quite well, some periodic failings (unable to connect), but overall pretty good.   Added a static host (rpi0) to help me reach some hardwired sensors our home

host panelpi {

hardware ethernet xx:xx:xx:xx:xx:x;
fixed-address 192.168.xx.xx;
}

Now to figure out Kodi:

Lots of struggles w/ EDIMAX adapter on Model B Pi ... switching to PI 2 for shortrun

WHOOPS - PI2 is missing - used for MoviePI @ my parents (play fam movies from google drive with VCR-Like Remote!)

Switched to Pi 3 for 


Ghadzooks!  This is complicated!  Combination of arm6 vs arm7 and EDIMAX adapter may be too much for dietpi.  Makes me grumpy, I had this working on Pi 2 w/EDIMAX adapter - wasn't that hard!!  I forgot to take image of sd card - ARG!!  


Notes (so I can retrace my steps)


Step by Step

// Attempting on Mod B w/ edimax & 8g SD //

- Download DietPi (of course)

- DietPi install (.5 - 45mins)

- Change a couple of passwords

- upgrades itself

// Approx 15 mins //

Dietpi Software/Dietpi Config

- Config cleanup 

--- Performance/Overclocking/Safe 900MHz (2over)

--- Advanced/Update firmware

--- Language/Locale/Timezone/Keyboard

--- Security/Hostname

--- Network - turned off IPV6 (for heck of it)

<reboot>

Dietpi Software

-- WiFi Hotspot (Hostapd)

-- Rpi-Monitor

-- Remember to Start Installation


Links 

- https://willhaley.com/blog/raspberry-pi-hotspot-ew7811un-rtl8188cus/

- https://cdn-learn.adafruit.com/downloads/pdf/setting-up-a-raspberry-pi-as-a-wifi-access-point.pdf


Odd things to figure out - Dietpi v6.19.7


Raspberry Pi Model B hostapd dies - Kernel Panic


# journalctl -u hostapd

-- Logs begin at Thu 2016-11-03 12:16:43 CDT, end at Sat 2018-12-15 08:03:09 CST

. --

Dec 15 08:01:30 SuitiePi systemd[1]: Starting LSB: Advanced IEEE 802.11 management daemon...

Dec 15 08:01:31 SuitiePi hostapd[965]: Starting advanced IEEE 802.11 management:hostapdIllegal instruction

Dec 15 08:01:31 SuitiePi hostapd[965]: failed!

Dec 15 08:01:31 SuitiePi systemd[1]: Started LSB: Advanced IEEE 802.11 management daemon.


------------------------------------


Uninstalled hostapd and FINALLY got regular wifi working (adapter was chronically DISABLED) ... interesting wlan0 state ... both networks showing - hostap was ..42.1/24 and normal net 192.168.11. :

root@SuitiePi:~# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host 

       valid_lft forever preferred_lft forever

2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000

    link/ether b8:27:eb:63:0d:47 brd ff:ff:ff:ff:ff:ff

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

    link/ether 74:da:38:8b:2e:0b brd ff:ff:ff:ff:ff:ff

    inet 192.168.42.1/24 brd 192.168.42.255 scope global wlan0

       valid_lft forever preferred_lft forever

    inet 192.168.11.64/24 brd 192.168.11.255 scope global wlan0

       valid_lft forever preferred_lft forever

    inet6 fe80::76da:38ff:fe8b:2e0b/64 scope link 

       valid_lft forever preferred_lft forever


2018-2020 - Initial fumblings:  Multifunction SuitiePi + Migration from hostapd to RaspOs 

December 2020 - Needed an itsy, bitsy browser on the basement TV.  Will see if Pi2 has enough horsepower to play exercise videos too ...

'RASPI_ACCESS_CHECK_IP' => '1.1.1.1',

'RASPI_ACCESS_CHECK_DNS' => 'one.one.one.one',

to ...

'RASPI_ACCESS_CHECK_IP' => '9.9.9.9',

'RASPI_ACCESS_CHECK_DNS' => 'dns.quad9.net',

sudo apt-get install --no-install-recommends xserver-xorg x11-xserver-utils xinit openbox

sudo apt-get install --no-install-recommends chromium-browser

# TPed was here - The following cut/pasted for kiosk pi#       
# Disable any form of screen saver / screen blanking / power management
xset s off
xset s noblank
xset -dpms

# Allow quitting the X server with CTRL-ATL-Backspace
setxkbmap -option terminate:ctrl_alt_bksp
# Start Chromium in kiosk mode
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/' ~/.config/chromium/'Local State'
sed -i 's/"exited_cleanly":false/"exited_cleanly":true/; s/"exit_type":"[^"]\+"/"exit_type":"Normal"/' ~/.config/chro
chromium-browser --disable-infobars --kiosk 'http://ventures.tpedersen.net/errata/raspberrypi/<start page>'


September 2020 - Rebuild due to Micro SD failure

'RASPI_ACCESS_CHECK_IP' => '1.1.1.1',
'RASPI_ACCESS_CHECK_DNS' => 'one.one.one.one',
to ...
'RASPI_ACCESS_CHECK_IP' => '9.9.9.9',
'RASPI_ACCESS_CHECK_DNS' => 'dns.quad9.net', 

June 2020 - Attempted/Gave up on RPiPlay!   SuitiePi is back to RaspAP on old RPI v1 Model B.    Used a $25 Roku to smarten old  TV!

sudo apt-get update

sudo apt-get dist-upgrade

Install editor - no like nano.
sudo apt-get install joe
<reboot>

sudo apt-get install git
git clone https://github.com/FD-/RPiPlay.git
cd RPiPlay
sudo apt-get install cmake
sudo apt-get install libavahi-compat-libdnssd-dev
sudo apt-get install libssl-dev
mkdir build
cd build
cmake ..
make

May 2020 - Attempted Super SuitiePi using  dietpi, hostapd and kodi for more entertainment!  ... FAIL, remnants below


Software

Step-by Step

# General connection and DNS testing

# - IP to ping when checking network connectivity. Default: 1.1.1.1 (Cloudflare DNS, should be very fast world-wide)

# TPed Mod - TDS blocks 1.1.1.1, I have to use similar - quad9.net

CONFIG_CHECK_CONNECTION_IP=9.9.9.9

# - Domain to ping when checking DNS resolver. Default: one.one.one.one (Cloudflare DNS domain, see above)

CONFIG_CHECK_DNS_DOMAIN=quad9.net

# TPed Add - Reserve IP for our PanelPi 

host panelpi {
hardware Polish up ethernet xx:xx:xx:xx:xx:x;
fixed-address 192.168.xx.xx;
}

# TPed Add - enable hostapd_cli client 

ctrl_interface=/run/hostapd
ctrl_interface_group=0

git clone https://github.com/FD-/RPiPlay.git

apt-get install cmake
apt-get install libavahi-compat-libdnssd-dev
cd RPiPlay
mkdir build
cd build
cmake ..

CRAP!  No ilclient in dietpi? This is nuts!  Switching back to Raspbian for a while.  Dietpi seems to be more trouble than its worth!


March 2020 - back at it.  SuitiePi has been working quite well, some periodic failings (unable to connect), but overall pretty good.   Added a static host (rpi0) to help me reach some hardwired sensors our home

host panelpi {

hardware ethernet xx:xx:xx:xx:xx:x;
fixed-address 192.168.xx.xx;
}

Now to figure out Kodi:

Lots of struggles w/ EDIMAX adapter on Model B Pi ... switching to PI 2 for shortrun

WHOOPS - PI2 is missing - used for MoviePI @ my parents (play fam movies from google drive with VCR-Like Remote!)

Switched to Pi 3 for 


Ghadzooks!  This is complicated!  Combination of arm6 vs arm7 and EDIMAX adapter may be too much for dietpi.  Makes me grumpy, I had this working on Pi 2 w/EDIMAX adapter - wasn't that hard!!  I forgot to take image of sd card - ARG!!  


Notes (so I can retrace my steps)


Step by Step

// Attempting on Mod B w/ edimax & 8g SD //

- Download DietPi (of course)

- DietPi install (.5 - 45mins)

- Change a couple of passwords

- upgrades itself

// Approx 15 mins //

Dietpi Software/Dietpi Config

- Config cleanup 

--- Performance/Overclocking/Safe 900MHz (2over)

--- Advanced/Update firmware

--- Language/Locale/Timezone/Keyboard

--- Security/Hostname

--- Network - turned off IPV6 (for heck of it)

<reboot>

Dietpi Software

-- WiFi Hotspot (Hostapd)

-- Rpi-Monitor

-- Remember to Start Installation


Links 

- https://willhaley.com/blog/raspberry-pi-hotspot-ew7811un-rtl8188cus/

- https://cdn-learn.adafruit.com/downloads/pdf/setting-up-a-raspberry-pi-as-a-wifi-access-point.pdf


Odd things to figure out - Dietpi v6.19.7


Raspberry Pi Model B hostapd dies - Kernel Panic


# journalctl -u hostapd

-- Logs begin at Thu 2016-11-03 12:16:43 CDT, end at Sat 2018-12-15 08:03:09 CST

. --

Dec 15 08:01:30 SuitiePi systemd[1]: Starting LSB: Advanced IEEE 802.11 management daemon...

Dec 15 08:01:31 SuitiePi hostapd[965]: Starting advanced IEEE 802.11 management:hostapdIllegal instruction

Dec 15 08:01:31 SuitiePi hostapd[965]: failed!

Dec 15 08:01:31 SuitiePi systemd[1]: Started LSB: Advanced IEEE 802.11 management daemon.


------------------------------------


Uninstalled hostapd and FINALLY got regular wifi working (adapter was chronically DISABLED) ... interesting wlan0 state ... both networks showing - hostap was ..42.1/24 and normal net 192.168.11. :

root@SuitiePi:~# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host 

       valid_lft forever preferred_lft forever

2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000

    link/ether b8:27:eb:63:0d:47 brd ff:ff:ff:ff:ff:ff

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

    link/ether 74:da:38:8b:2e:0b brd ff:ff:ff:ff:ff:ff

    inet 192.168.42.1/24 brd 192.168.42.255 scope global wlan0

       valid_lft forever preferred_lft forever

    inet 192.168.11.64/24 brd 192.168.11.255 scope global wlan0

       valid_lft forever preferred_lft forever

    inet6 fe80::76da:38ff:fe8b:2e0b/64 scope link 

       valid_lft forever preferred_lft forever