Skip to content

Instantly share code, notes, and snippets.

@davea
Created June 19, 2019 12:27
Show Gist options
  • Save davea/f9754640c3bc2166fc528b5c9797ed9e to your computer and use it in GitHub Desktop.
Save davea/f9754640c3bc2166fc528b5c9797ed9e to your computer and use it in GitHub Desktop.
Raspbian set up

raspbian_setup

Vagrantfile to make setting up a headless Raspberry Pi a bit easier.

Usage

SSID=mywifi WPAPASSPHRASE=passphrase HOSTNAME=office \
IMG=2016-11-25-raspbian-jessie-lite.img vagrant up

Will create office-2016-11-25-raspbian-jessie-lite.img which is set up to connect to mywifi on boot, with SSH enabled.

Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provision "shell", env: { 'IMG': ENV['IMG'], 'HOSTNAME': ENV['HOSTNAME'], 'SSID': ENV['SSID'], 'WPAPASSPHRASE': ENV['WPAPASSPHRASE'] }, inline: <<-SHELL
set -e
# sanity checks
ORIGINAL_IMG="/vagrant/${IMG}"
NEW_IMG="/vagrant/${HOSTNAME}-${IMG}"
if [[ ! -f ${ORIGINAL_IMG} ]]; then
echo "Raspbian image file ${IMG} doesn't exist, can't continue."
exit 1
fi
if [[ -f ${NEW_IMG} ]]; then
echo "Target image file ${NEW_IMG} already exists, not continuing."
exit 1
fi
# don't clobber the original image
cp ${ORIGINAL_IMG} ${NEW_IMG}
echo "Made a copy of raspbian image."
chmod u+w ${NEW_IMG}
if [[ ! -w ${NEW_IMG} ]]; then
echo "Target image file ${NEW_IMG} isn't writable, not continuing."
exit 1
fi
# some prerequisites
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y kpartx wpasupplicant
echo "Installed prerequisites."
# mount the image file
kpartx -avs ${NEW_IMG}
[[ -d /mnt/boot ]] || mkdir /mnt/boot
[[ -d /mnt/raspbian ]] || mkdir /mnt/raspbian
mount /dev/mapper/loop0p1 /mnt/boot
mount /dev/mapper/loop0p2 /mnt/raspbian
echo "Mounted disks."
# setup wifi
mv /mnt/raspbian/etc/wpa_supplicant/wpa_supplicant.conf /mnt/raspbian/etc/wpa_supplicant/wpa_supplicant.conf.old
cp /mnt/raspbian/etc/wpa_supplicant/wpa_supplicant.conf.old /mnt/boot/wpa_supplicant.conf
ln -sf /boot/wpa_supplicant.conf /mnt/raspbian/etc/wpa_supplicant/wpa_supplicant.conf
wpa_passphrase "${SSID}" "${WPAPASSPHRASE}" >> /mnt/boot/wpa_supplicant.conf
echo "Setup wifi."
# enable SSH
touch /mnt/boot/ssh
echo "Enabled SSH."
# Add SSH keys for passwordless login if the file is present
if [[ -f /vagrant/authorized_keys ]]; then
echo -n "Enabling SSH key authentication: "
install -m 0700 -o 1000 -g 1000 -d /mnt/raspbian/home/pi/.ssh
install -m 0600 -o 1000 -g 1000 /vagrant/authorized_keys /mnt/raspbian/home/pi/.ssh/authorized_keys
echo "done."
fi
# set the hostname
echo ${HOSTNAME} > /mnt/raspbian/etc/hostname
sed -i "s/127.0.1.1.*raspberrypi/127.0.1.1\t${HOSTNAME}/g" /mnt/raspbian/etc/hosts
echo "Set hostname."
# Add README.txt to /boot for easy identification of this SD card
echo "Hostname: ${HOSTNAME}" >> /mnt/boot/README.txt
echo "Setup date: $(date)" >> /mnt/boot/README.txt
echo "Raspbian image: ${IMG}" >> /mnt/boot/README.txt
echo "Added /boot/README.txt"
# all done
umount /mnt/raspbian
umount /mnt/boot
echo "All done. SD card image is ready to burn: ${NEW_IMG}"
SHELL
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment