|  | @@ -0,0 +1,122 @@
 | 
	
		
			
				|  |  | +#!/bin/bash
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# this script is not intended to be used without modifications!
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# ----------------------------------------------------------------------
 | 
	
		
			
				|  |  | +# Get latest Raspbian image and checksum file 
 | 
	
		
			
				|  |  | +img_url_regex='http:\/\/downloads\.raspberrypi\.org\/raspbian_lite\/images\/raspbian_lite-[0-9-]{10}\/[0-9-]{10}-raspbian-buster-lite\.zip'
 | 
	
		
			
				|  |  | +img_url=`curl --silent https://downloads.raspberrypi.org/raspbian_lite_latest | \
 | 
	
		
			
				|  |  | +grep --extended-regexp --ignore-case --only-matching $img_url_regex`
 | 
	
		
			
				|  |  | +sha256_url=$img_url.sha256
 | 
	
		
			
				|  |  | +image=`basename $img_url`
 | 
	
		
			
				|  |  | +sha256=`basename $sha256_url`
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Download latest image and checksum file if not present yet
 | 
	
		
			
				|  |  | +mkdir -p ~/images && cd ~/images
 | 
	
		
			
				|  |  | +if [[ -f "$image" && -f "$sha256" ]]; then
 | 
	
		
			
				|  |  | +  echo "Latest Raspbian image found: $image"
 | 
	
		
			
				|  |  | +else
 | 
	
		
			
				|  |  | +  echo "Downloading latest Raspbian..."
 | 
	
		
			
				|  |  | +  curl --continue-at - --remote-name-all $img_url $sha256_url
 | 
	
		
			
				|  |  | +fi
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Test checksum and exit if fails
 | 
	
		
			
				|  |  | +echo -n "Testing checksum... "
 | 
	
		
			
				|  |  | +set -e && sha256sum --check  $sha256 || exit 1
 | 
	
		
			
				|  |  | +set +e
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# ----------------------------------------------------------------------
 | 
	
		
			
				|  |  | +# Select the disk
 | 
	
		
			
				|  |  | +PS3="Select disk to install Raspbian: "
 | 
	
		
			
				|  |  | +select disk in `lsblk --include 8 --nodeps --output NAME --noheadings`
 | 
	
		
			
				|  |  | +do
 | 
	
		
			
				|  |  | +  echo "________________________________________________________________________"
 | 
	
		
			
				|  |  | +  lsblk --nodeps /dev/$disk --output TRAN,VENDOR,MODEL,HOTPLUG
 | 
	
		
			
				|  |  | +  echo "________________________________________________________________________"
 | 
	
		
			
				|  |  | +  lsblk /dev/$disk --output NAME,TYPE,FSTYPE,SIZE,LABEL,MOUNTPOINT
 | 
	
		
			
				|  |  | +  echo "________________________________________________________________________"
 | 
	
		
			
				|  |  | +  read -p "ARE YOU SURE THAT YOU WANT TO OVERWRITE THIS DISK? (y/n) " -n 1 -r
 | 
	
		
			
				|  |  | +  echo #newline
 | 
	
		
			
				|  |  | +  if [[ $REPLY =~ ^[Yy]$ ]]; then
 | 
	
		
			
				|  |  | +    echo "Proceeding with $sdcard"
 | 
	
		
			
				|  |  | +    sdcard=/dev/$disk
 | 
	
		
			
				|  |  | +    break
 | 
	
		
			
				|  |  | +  fi
 | 
	
		
			
				|  |  | +done
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# ----------------------------------------------------------------------
 | 
	
		
			
				|  |  | +# Testing parameters / hostname
 | 
	
		
			
				|  |  | +name=$1
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +if [ "X$name" == "X" ]; then
 | 
	
		
			
				|  |  | +  echo "Kein Hostname für die Box angegeben!"
 | 
	
		
			
				|  |  | +  echo "USAGE: $0 name"
 | 
	
		
			
				|  |  | +  read -p "Hostname jetzt eingeben?: " name
 | 
	
		
			
				|  |  | +fi
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +echo "Hostname: $name"
 | 
	
		
			
				|  |  | +echo "Image: $image"
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# ----------------------------------------------------------------------
 | 
	
		
			
				|  |  | +# Preparing the disk
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Unmounting partitions
 | 
	
		
			
				|  |  | +for part in \
 | 
	
		
			
				|  |  | +  `findmnt  --output SOURCE,TARGET --raw | grep $sdcard | cut -d" " -f2`
 | 
	
		
			
				|  |  | +  do sudo umount --verbose $part
 | 
	
		
			
				|  |  | +done
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Write image to sdcard
 | 
	
		
			
				|  |  | +unzip -p $image *.img \
 | 
	
		
			
				|  |  | +| sudo dd of="$sdcard" bs=4K status=progress
 | 
	
		
			
				|  |  | +sync
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +echo 
 | 
	
		
			
				|  |  | +echo Rausnehmen, kurz warten, reinstecken und mount abwarten, dann Enter
 | 
	
		
			
				|  |  | +read -n 1 -p "Geht's weiter?" unused
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Configure WiFi
 | 
	
		
			
				|  |  | +# https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md
 | 
	
		
			
				|  |  | +cp ~/wpa_supplicant.conf /media/$USER/boot/
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Enable / Setup SSH
 | 
	
		
			
				|  |  | +# https://www.raspberrypi.org/documentation/remote-access/ssh/
 | 
	
		
			
				|  |  | +touch /media/$USER/boot/ssh
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +mkdir -p /media/$USER/rootfs/home/pi/.ssh
 | 
	
		
			
				|  |  | +chmod 0700 /media/$USER/rootfs/home/pi/.ssh
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +cp ~/.ssh/id_rsa.pub /media/$USER/rootfs/home/pi/.ssh/authorized_keys
 | 
	
		
			
				|  |  | +chmod 0600 /media/$USER/rootfs/home/pi/.ssh/authorized_keys
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +chown -R 1000:1000 /media/$USER/rootfs/home/pi/.ssh
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Setting hostname
 | 
	
		
			
				|  |  | +echo $name | sudo tee /media/$USER/rootfs/etc/hostname
 | 
	
		
			
				|  |  | +echo 127.0.1.2 $name | sudo tee -a /media/$USER/rootfs/etc/hosts
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Set timezone
 | 
	
		
			
				|  |  | +echo "Europe/Berlin" \
 | 
	
		
			
				|  |  | +  | sudo tee  /media/$USER/rootfs/etc/timezone
 | 
	
		
			
				|  |  | +sudo ln -sf /usr/share/zoneinfo/Europe/Berlin \
 | 
	
		
			
				|  |  | +  /media/dominik/rootfs/etc/localtime
 | 
	
		
			
				|  |  | +   
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Set locales
 | 
	
		
			
				|  |  | +sudo sed -i -e '/^# en_US\.UTF-8 UTF-8/s/^# //' \
 | 
	
		
			
				|  |  | +            -e '/^# de_DE\.UTF-8 UTF-8/s/^# //' \
 | 
	
		
			
				|  |  | +            /media/$USER/rootfs/etc/locale.gen
 | 
	
		
			
				|  |  | +#sudo locale-gen # need to run at first boot
 | 
	
		
			
				|  |  | +#idea: https://github.com/nmcclain/raspberian-firstboot
 | 
	
		
			
				|  |  | +#sudo update-locale LANG=de_DE.UTF-8 LC_MESSAGES=en_US.UTF-8 #equivalent
 | 
	
		
			
				|  |  | +echo -e "LANG=de_DE.UTF-8\nLC_MESSAGES=en_US.UTF-8" \
 | 
	
		
			
				|  |  | +  | sudo tee /media/$USER/rootfs/etc/default/locale 
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Unmounting partitions
 | 
	
		
			
				|  |  | +sync
 | 
	
		
			
				|  |  | +for part in \
 | 
	
		
			
				|  |  | +  `findmnt  --output SOURCE,TARGET --raw | grep $sdcard | cut -d" " -f2`
 | 
	
		
			
				|  |  | +  do sudo umount --verbose $part
 | 
	
		
			
				|  |  | +done
 |