When you move a Raspberry Pi between wifi networks and you want it to behave like an appliance, one way to set the wifi network easily as a user rather than a developer is to have it create an access point itself that you can connect to with a phone or laptop, enter the wifi information in a browser, and then reconnect to the proper network. Balena have a video explaining the idea.
Andrew Nicolaou has written things to do this periodically as part of Radiodan. His most recent suggestion was to try Resin (now Balena)’s wifi-connect. Since Andrew last tried, there’s a bash script from Balena to install it as well as a Docker file, so it’s super easy with just a few tiny pieces missing. This is what I did to get it working:
Provision an SD card with Stretch e.g. using Etcher or manually
Enable ssh e.g. by
touch /Volumes/boot/ssh
Share your network with the pi via ethernet, ssh in and enable wifi by setting your country:
sudo raspi-config
then Localisation Options -> Set wifi country.
Install wifi-connect
bash <(curl -L https://github.com/balena-io/wifi-connect/raw/master/scripts/raspbian-install.sh)
Add a slightly-edited version of their bash script
curl https://gist.githubusercontent.com/libbymiller/e8fe6821e122e0a0ac921c8e557320a9/raw/46138fb4d28b494728e66515e46bd7d736b19132/start.sh > /home/pi/start-wifi-connect.sh
Add a systemd script to start it on boot.
sudo nano /lib/systemd/system/wifi-connect-start.service
-> contents:
[Unit] Description=Balena wifi connect service After=NetworkManager.service [Service] Type=simple ExecStart=/home/pi/start-wifi-connect.sh Restart=on-failure StandardOutput=syslog SyslogIdentifier=wifi-connect Type=idle User=root [Install] WantedBy=multi-user.target
Enable the systemd service
sudo systemctl enable wifi-connect-start.service
Reboot the pi
sudo reboot
A wifi network should come up called “Wifi Connect”. Connect to it, add in your details into the captive portal, and wait. The portal will go away and then you should be able to ping your pi over the wifi:
ping raspberrypi.local
(You might need to disconnect your ethernet from the Pi before connecting to the Wifi Connect network if you were sharing network that way).
There is a typo everywhere in the post: “balnea” should be written “balena”.
oops! fixing
There is one more thing to be mentioned:
make the /home/pi/start-wifi-connect.sh executable or change the code in
wifi-connect-start.service to:
ExecStart=/bin/sh /home/pi/start-wifi-connect.sh
Nice, maybe it can be mentioned in the readme.md, wifi-connect does not autorun on reboot/startup. I was expecting it does.
Maybe good to mention (https://unix.stackexchange.com/questions/206315/whats-the-difference-between-usr-lib-systemd-system-and-etc-systemd-system):
The expectation is that /usr/lib/systemd/system is a directory that should only contain systemd unit files which were put there by the package manager (YUM/DNF/RPM/APT/etc).
Files in /etc/systemd/system are manually placed here by the operator of the system for ad-hoc software installations that are not in the form of a package. This would include tarball type software installations or home grown scripts.