Raspberry Pi¶
I use a lot of Raspberry PIs. I want bootstraping them from a fresh SD card to be quick and painless, but I want to preconfigure the network settings and the SSH authentication config from first boot.
Raspbian First Boot Setup¶
- Download
Raspberry Pi OS Litefrom https://www.raspberrypi.com/software/operating-systems/ - Uncompress with
xz -d -
Use
main.goto get the mount point offsetsgo run main.go ./2023<imagename> -
Mount first mount point (this is /boot). Example (Your offsets may vary!):
mount -v -o offset=272629760,loop ./2022-09-22-raspios-bullseye-arm64-lite.img /mnt -
Inside the mountpoint add the following files
- Setup userconf (see password manager for contents) - this creates the default user. It looks like this:
admin:$<PASSWORED HASH>. The contents can be generated withpassword.py
vim /mnt/userconf - Setup userconf (see password manager for contents) - this creates the default user. It looks like this:
-
Enable SSH on boot:
touch /mnt/ssh -
Copy firstboot.sh setup script:
cp firstboot.sh /mnt/firstboot.sh -
umount the boot partition
- Then mount the second mount point (this is the root / partition)
- Add
firstboot.serviceto/mnt/lib/systemd/system/firstboot.service -
Enable the service:
cd /mnt/etc/systemd/system/multi-user.target.wants && ln -s /lib/systemd/system/firstboot.service . -
Edit
/mnt/etc/ssh/sshd_config, add these lines:PasswordAuthentication no PermitRootLogin no -
Setup
piuser's SSH config. Note! Even if your user is notpi, put it in/home/pianyways, the system will rename it on first boot.cd /mnt/home/pi mkdir .ssh chmod 0700 .ssh chown 1000:1000 .ssh # add your keys to .ssh/authorized_keys chown 1000:1000 .ssh/authorized_keys chmod 0600 .ssh/authorized_keys
Finally, umount the partition, then rename your .img file to something you'll recognize as being first-boot ready:
mv 2022-04-04-raspios-bullseye-armhf-lite.img 2022-04-04-raspios-bullseye-armhf-lite-firstboot-ready.img