|
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 |