A Nerves tidbit
I’ve been working on learning the Elixir programming language for the last several months, and after returning from ElixirConf a few weeks ago, I was inspired to try a small project with Nerves, a platform for building Elixir applications on small devices like the Raspberry Pi.
Nerves provides a toolchain for building on the Mac which results in it writing a bootable microSD card that I boot in the Pi to try out my code. There’s a lot of complexity in what Nerves is doing for me, but one little bit (not Nerves’ fault!) annoyed me: I had to enter my login password every few minutes when Nerves wanted to write to the microSD card.
I just found a way around this. The build command I use, every time I want to make a change, is this (I’ve broken it onto multiple lines for clarity) –
(cd apps/project && # switch into my app
MIX_ENV=prod mix firmware && # build the disk image
(until [ -d /Volumes/BOOT ]; # wait for me to reinsert the card
do sleep 1;
done) &&
sudo chmod go+rw /dev/rdisk2 && # Make the raw disk image writable
MIX_ENV=prod mix firmware.burn -d /dev/rdisk2 && # write to the SD card
sync && # flush changes - I'm paranoid
sleep 1)
That sudo chmod
command is the point of this post: without it, every time I did a new build, I had to enter my password, because Nerves invokes a tool called fwup
to write the image, and fwup
uses authopen
to get authenticated access to the raw file. This permissions fix has to be done every time the microSD card is reinserted. (I’ve already set up my /etc/sudoers
file to allow me to use sudo
without entering my password each time.)