A program which lets you set up a Raspberry Pi solely by writing to the /boot partition (i.e. the one you can write from most computers!).
This allows you to distribute a small .zip file to set up a Raspberry Pi to do anything. You tell the user to unzip it over the top of the Pi's boot partition - the system can set itself up perfectly on the first boot.
This package contains a single run-once.sh script that can be used to do all the setup needed.
Alternatively, you can create a run-once.d and/or a on-boot.d directory and put multiple
scripts in either/each. These folders will be created for you after the first boot and can be used
at any time.
- Download and write a standard Raspbian SD card, e.g. the Raspbian Stretch Lite.
- Copy the content of this project's boot folder to the microSD card's /boot partition.
- Rename either cmdline.txt.stretch or cmdline.txt.jessie to cmdline.txt.orig (this selection will be automatic in a later update)
- Remove the SD card and put it into your Pi.
The Raspberry Pi should now boot several times. The first boot takes 2-5 minutes depending on your network, and which model of Raspberry Pi you use (I tested with model 3).
By default only a single simple change will be applied. A /home/pi/.bash_aliases file will be
created with alias ll='ls -la in it. The boot/run-once.sh script includes several commented
blocks to demonstrate how to accomplish common tasks.
You will need golang installed (I'm currently using 1.7) sudo apt install golang. Go will need to install required packages. I have tried to make this as easy as calling make reqs.
There is a Makefile in the root of this project. Calling make will compile the Go
source code and create boot/pi-init2 if it doesn't exist. (Use make clean all to replace it.)
This is really cool. The cmdline.txt specifies an init=/pi-init2 kernel argument to use a
custom binary in this package in place of the usual systemd init. That binary holds everything
except for the cmdline.txt file (that would be a chicken-egg problem) and the run-once.sh
which you will modify to script your desired setup.
If you have a project you expect someone to run on an RPi (especially if it would be the RPi's single purpose) you could provide your own run-once.sh script that will clone your project, configure, and install it.
This has been tested with this (what I believe to be the latest release) version of Jessie but the instructions above assume Stretch.
Credits go to the following projects:
- pi-init2: This is the fork of this project that I chose to base my fork off of.
- raspbian-boot-setup: My first project attempting to accomplish the same goal.
- PiBakery: A good resource to find more blocks to setup your Raspberry Pi.
Any contributions appreciated!