mirror of
https://github.com/Luzifer/flashpi.git
synced 2024-12-20 10:01:16 +00:00
Initial version
Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
commit
2647a7b46b
4 changed files with 131 additions and 0 deletions
23
README.md
Normal file
23
README.md
Normal file
|
@ -0,0 +1,23 @@
|
|||
# Luzifer / flashpi
|
||||
|
||||
This repository contains a small helper script I built to aid myself with preparing SDCards for a Raspberry PI. There is no big magic in it and you can do everything done in here by hand but this way it's more convenient...
|
||||
|
||||
## What is done?
|
||||
|
||||
- Download latest raspbian-lite image (optional, existing image is detected)
|
||||
- Flash image to SDCard
|
||||
- Resize partition to fill the whole card
|
||||
- Write `/etc/network/interfaces` file to enable WiFi with preconfigured password (see `interfaces.txt`)
|
||||
- Write SSH key (see `pubkey.txt`)
|
||||
- Enable SSHd on the PI
|
||||
|
||||
## Usage
|
||||
|
||||
The script will only work on Linux machines using the `root` user!
|
||||
|
||||
- Insert SDCard and find its mount point using `fdisk -l`
|
||||
- Edit `interfaces.txt` and `pubkey.txt`
|
||||
- Start flash process:
|
||||
```bash
|
||||
./flash.sh <hostname of your new PI> <device of the SDCard>
|
||||
```
|
95
flash.sh
Executable file
95
flash.sh
Executable file
|
@ -0,0 +1,95 @@
|
|||
#!/bin/bash
|
||||
|
||||
set -xe
|
||||
|
||||
SDCARD_DEVICE=$2
|
||||
SOURCE_IMAGE=${SOURCE_IMAGE:-none}
|
||||
STORAGE_DIR=${STORAGE_DIR:-/tmp}
|
||||
SYSTEM_NAME=$1
|
||||
|
||||
if ( test "$(uname)" != "Linux" ); then
|
||||
echo "This script will only work on Linux. OSX is not capable of writing ext4 filesystems"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ( test "$(whoami)" != "root" ); then
|
||||
echo "Please execute me as user root or using sudo for flashing / mounting SDCARD"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$SYSTEM_NAME" ]; then
|
||||
echo "You need to provide a system name!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$SDCARD_DEVICE" ]; then
|
||||
echo "You need to provide a device to modify!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -f "${SOURCE_IMAGE}" ]; then
|
||||
echo "Did not find SOURCE_IMAGE, downloading / detecting once"
|
||||
if ( test $(ls -1tr ${STORAGE_DIR}/*raspbian-jessie-lite.img | wc -l) -lt 1 ); then
|
||||
curl -L https://downloads.raspberrypi.org/raspbian_lite_latest -o /tmp/raspbian.zip
|
||||
unzip /tmp/raspbian.zip -d ${STORAGE_DIR}
|
||||
rm /tmp/raspbian.zip
|
||||
fi
|
||||
SOURCE_IMAGE=$(ls -1tr ${STORAGE_DIR}/*raspbian-jessie-lite.img | head -n1)
|
||||
fi
|
||||
|
||||
echo "Flashing Raspian image"
|
||||
dd if=${SOURCE_IMAGE} of=${SDCARD_DEVICE} bs=1048576
|
||||
|
||||
echo "Adjusting root filesystem"
|
||||
PART_START=$(parted ${SDCARD_DEVICE} -ms unit s p | grep "^2" | cut -f 2 -d: | sed "s/s$//")
|
||||
[ "$PART_START" ] || return 1
|
||||
|
||||
fdisk ${SDCARD_DEVICE} <<EOF
|
||||
p
|
||||
d
|
||||
2
|
||||
n
|
||||
p
|
||||
2
|
||||
$PART_START
|
||||
|
||||
p
|
||||
w
|
||||
$(sleep 5)
|
||||
EOF
|
||||
|
||||
e2fsck -f "${SDCARD_DEVICE}2"
|
||||
resize2fs "${SDCARD_DEVICE}2"
|
||||
e2fsck -f "${SDCARD_DEVICE}2"
|
||||
|
||||
HERE=$(pwd)
|
||||
|
||||
echo "Mounting SDCard"
|
||||
mkdir /tmp/pi
|
||||
mount "${SDCARD_DEVICE}2" /tmp/pi/
|
||||
cd /tmp/pi
|
||||
|
||||
echo "Configuring network"
|
||||
cp "${HERE}/interfaces.txt" etc/network/interfaces
|
||||
|
||||
echo "Setting hostname to ${SYSTEM_NAME}"
|
||||
echo "${SYSTEM_NAME}" > etc/hostname
|
||||
|
||||
echo "Configuring SSH-key"
|
||||
mkdir -p home/pi/.ssh
|
||||
cp "${HERE}/pubkey.txt" home/pi/.ssh/authorized_keys
|
||||
|
||||
echo "Fixing permissions"
|
||||
chown -R 1000:1000 home/pi/.ssh/
|
||||
chmod 0700 home/pi/.ssh
|
||||
chmod 0600 home/pi/.ssh/authorized_keys
|
||||
|
||||
echo "Enabling SSH"
|
||||
ln -s /lib/systemd/system/ssh.socket etc/systemd/system/sockets.target.wants/ssh.socket
|
||||
|
||||
echo "Unmounting"
|
||||
cd ~
|
||||
umount /tmp/pi
|
||||
rmdir /tmp/pi
|
||||
|
||||
echo "Done."
|
12
interfaces.txt
Normal file
12
interfaces.txt
Normal file
|
@ -0,0 +1,12 @@
|
|||
auto lo
|
||||
iface lo inet loopback
|
||||
iface eth0 inet dhcp
|
||||
|
||||
allow-hotplug wlan0
|
||||
auto wlan0
|
||||
iface wlan0 inet dhcp
|
||||
wpa-ssid "my-wifi"
|
||||
wpa-psk "topsecretpassword"
|
||||
|
||||
|
||||
iface default inet dhcp
|
1
pubkey.txt
Normal file
1
pubkey.txt
Normal file
|
@ -0,0 +1 @@
|
|||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHzwqMqPrIgiOfgkTw35cVVwihnWhjFLVoXY7PZMGSdO luzifer@knut-ws01
|
Loading…
Reference in a new issue