Raspberry Pi seems to have been on a tear of good stuff this year. Lots of activity on both the hardware accessory and software side. I've been following their secure boot provisioning work in particular.
Conveniently for me, they keep releasing things right as I start to have an interest in using that thing.
What about manual pre-provisioning? I just found out a few days ago that you can't pre-provision wifi via placing wpa_supplicant.conf in /boot any more, you now need to use that GUI provisioner.
I appreciate that RPi is trying to make the ecosystem more accessible for newcomers - but not at the cost of power users, please!
I don't think wpa_supplicant.conf has been used for sometime, as they moved to cloud-init for bootstrapping. It requires the network-config file instead, the format of which is documented on the cloud-init documentation page.
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).
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:
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.
I had to go and read the docs to confirm this was true, I'm really surprised this has been removed (since Raspian Bookworm apparently). It was a ridiculously common way to configure wifi on RPis over the last decade!
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.
> a mountain of tutorials online advising to drop in that file for wifi
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.
Networking on Linux in general seems to be very susceptible to "wrong tutorial" in recent years, what with distros switching between different network control suites.
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.
I recently needed to create some heavily customized pi images for a fleet of Iot devices. I came across this tool that did the job nicely. Only downside is that it only works on Linux.
Yeah but I really really don't like tools doing black magic to be honest, I'd like some documentation what it does. And if it is just cloud-init, no big deal, I already know more than I'd ever wanted about this particular piece of annoyance from wrestling with AWS, just tell me what exactly the Pi userland expects me to hand to cloud-init...
Thanks anyway for digging into the source, really appreciated!
It feels odd to complain about "tools doing black magic" when the new way is "cloud init, a tool used by a ton of infra platforms" and the old way is "drop a file in this directory and it will somehow get slurped into the right space at the right time".
Isn't cloud init just slurping its own config file, then generating the "real" config files and slurping those into the right spaces?
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.
Cloud init is a tool with documentation and a file format for config, that’s used all over the place.
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.
Raspberry Pi seems to have been on a tear of good stuff this year. Lots of activity on both the hardware accessory and software side. I've been following their secure boot provisioning work in particular.
Conveniently for me, they keep releasing things right as I start to have an interest in using that thing.
What about manual pre-provisioning? I just found out a few days ago that you can't pre-provision wifi via placing wpa_supplicant.conf in /boot any more, you now need to use that GUI provisioner.
I appreciate that RPi is trying to make the ecosystem more accessible for newcomers - but not at the cost of power users, please!
I don't think wpa_supplicant.conf has been used for sometime, as they moved to cloud-init for bootstrapping. It requires the network-config file instead, the format of which is documented on the cloud-init documentation page.
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).
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:
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.
I had to go and read the docs to confirm this was true, I'm really surprised this has been removed (since Raspian Bookworm apparently). It was a ridiculously common way to configure wifi on RPis over the last decade!
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.
> a mountain of tutorials online advising to drop in that file for wifi
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.
Networking on Linux in general seems to be very susceptible to "wrong tutorial" in recent years, what with distros switching between different network control suites.
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.
I recently needed to create some heavily customized pi images for a fleet of Iot devices. I came across this tool that did the job nicely. Only downside is that it only works on Linux.
https://github.com/gitbls/sdm
I've been using buildroot for my Pis, and adding a config script to /etc/init.d that can copy over whatever config files you want from /boot
Good news:
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.
Yeah but I really really don't like tools doing black magic to be honest, I'd like some documentation what it does. And if it is just cloud-init, no big deal, I already know more than I'd ever wanted about this particular piece of annoyance from wrestling with AWS, just tell me what exactly the Pi userland expects me to hand to cloud-init...
Thanks anyway for digging into the source, really appreciated!
It feels odd to complain about "tools doing black magic" when the new way is "cloud init, a tool used by a ton of infra platforms" and the old way is "drop a file in this directory and it will somehow get slurped into the right space at the right time".
Isn't cloud init just slurping its own config file, then generating the "real" config files and slurping those into the right spaces?
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.
Cloud init is a tool with documentation and a file format for config, that’s used all over the place.
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.
Alas I don't know much more than that; I only remembered about the CLI bit in 1.x and went to check it was still there.
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.
Had no idea it just came out! Was using it today to install os on my old raspberry and ux was very smooth!
A fairly useful update!
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.
[dead]