I appreciate that RPi is trying to make the ecosystem more accessible for newcomers - but not at the cost of power users, please!
It's the little paper cuts like this that really hurt on a platform who's original aims were to target the education market, there is still a mountain of tutorials online advising to drop in that file for wifi setup.
Cannot emphasize this enough. People with barely enough knowledge (“script kiddies” so to speak) are configuring and using RPi’s. They just want to follow the tutorial and get it working so they can do what they really want. (Eg image processing or run their 3D printer.) Nothing against this kind of user. I help them when, but…
This creates a situation where “the wrong tutorial” problem is unnecessarily easy to stumble on.
So far, I've been a big fan of netplan (which I guess is tied in with cloud-init?). Dropping a YAML file that declares the network setup I want and lets a swappable renderer make it so on the backend is a nice change from the brittle-over-time series of commands that it took previously.
rpi-imager --cli
Has really expanded options over the previous versions.
Including:
--first-run-script <first-run-script> --cloudinit-userdata <cloudinit-userdata> --cloudinit-networkconfig <cloudinit-networkconfig>
Though it doesn't support the old simple config text file, presumably most of that is replaced by cloudinit network config.
I am guessing this is available in the Windows version. I am seeing this from the macOS binary.
Thanks anyway for digging into the source, really appreciated!
You may be able to build exactly what you want with the image generation tools, as it goes:
https://github.com/raspberrypi/rpi-image-gen
https://github.com/RPi-Distro/pi-gen
Customising the OS with pi-gen is not that bad. It's an idiosyncratic tool but it works; I've not used the newer rpi-image-gen stuff.
To me, "copies a file named wpa_supplicant.conf from /boot to /etc on first init" is simpler than "parses some yaml, the generates /etc/wpa_supplicant".
Maybe I'd find it worthwhile if I had encountered cloud init years ago before I invested in learning the other 900 linux networking configuration tools, but now it just feels like a case of XKCD 927 (+1 competing standards). If cloud init is even better, it definitely doesn't seem 10x better to be worth the change.
I’m not making the case that it’s better, just that it’s no more “black magic” than wpa_supplicant’s config file is, and it’s less magical than dropping a wpa_supplicant file into /boot and the raspberry pi doing a bespoke RPi-specific shuffle to move it into place.
https://github.com/raspberrypi/rpi-imager/blob/5aeb98e976326...
I happen to have been experimenting with this for the past few weeks, and the most persistent issue was getting wi-fi to work correctly. It's quite a common issue, with any number of hacks. I offer my own network-config below, though I've only tested it with provisioning Ubuntu Server on the RPis so far (I have two 3B+s).
network:
version: 2
renderer: networkd
wifis:
wlan0:
regulatory-domain: "AU"
dhcp4: true
dhcp6: false
optional: false
access-points:
"<access-point-name>":
password: "<password>"
The important parts are:1. The renderer, as the default is NetworkManager, which doesn't work correctly with RPis (at least on Ubuntu Server). It may work with RPiOS, but I haven't tested it yet.
2. The regulatory domain, the lack of which is what disables wi-fi in the first place. I forget how much testing I did with the format, but I believe it must be uppercase (I don't remember about quoting the string, however).
3. Disabling IPv6 may be relevant, though unlikely. It was just in a working configurations I found; I just haven't had time to confirm it. The relevant line in my user-data file is as follows:
bootcmd:
- sysctl net.ipv6.conf.all.disable_ipv6=1
The rest of the configuration is standard, though I purposefully made the wi-fi non-optional so I could confirm that wi-fi worked (my only Internet at the moment is through my iPhone hotspot, which was another source of issues, but that's a whole other story).NB. According to someone else, the imager has the respective command line options for user-data and network-config, which I didn't know.
Conveniently for me, they keep releasing things right as I start to have an interest in using that thing.
https://github.com/nix-community/nixos-generators
They let you produce SD-card images with custom NixOS'es.
Very useful when you want an exact software layout, and exact system settings, like what user accounts and SSH keys to include, what systemd services should run, what directories should be tmpfs, and how to interact with the local network using avahi.
Mr_Eri_Atlov•2mo ago
Raspberry Pi continues to show that its real value is in continuous software and community support.
Even if their hardware isn't the greatest value, the software always shines.