diff --git a/readme.org b/readme.org index ee526c9..63f0609 100644 --- a/readme.org +++ b/readme.org @@ -34,6 +34,7 @@ raspberry pis. documentation to support a control plane of more than one machine. + ** Boot media This guide requires each Raspberry Pi to have a removable SD card or @@ -87,86 +88,87 @@ raspberry pis. Checking file is now present -rw-rw-rw- 1 james james 60299545 Aug 12 08:35 raspberrypi-ua-netinst-v2.4.0.zip Extracting the zip file + drwxrwxrwx 1 james james 4096 Dec 24 19:35 installer + -rw-rw-rw- 1 james james 1351 Dec 24 18:02 installer-config.txt #+end_example - + ** Apply custom configuration - Our next step after downloading the + Our next step after downloading the latest release is to apply our own + installation configuration using a simple txt file. + + There is great documentation online howing what configuration options are + available [[https://github.com/malignus/raspberrypi-ua-netinst/blob/master/doc/INSTALL_CUSTOM.md][here]]. + + For our purposes we just over-write the file downloaded and extracted in + the previous step with one we have prepared earlier :) + + #+NAME: Overwrite installer configuration file + #+begin_src shell :results output code verbatim replace :wrap example + echo Display wordcount of original file for comparison + wc installer/raspberrypi-ua-netinst/config/installer-config.txt + + echo Overwriting /installer/raspberrypi-ua-netinst/config/installer-config.txt + cp installer-config.txt /installer/raspberrypi-ua-netinst/config/ + + echo Display wordcount of file after copy to validate update + wc installer/raspberrypi-ua-netinst/config/installer-config.txt + #+end_src + + #+RESULTS: Overwrite installer configuration file + #+begin_example + Display wordcount of original file for comparison + 33 64 1351 installer/raspberrypi-ua-netinst/config/installer-config.txt + Overwriting /installer/raspberrypi-ua-netinst/config/installer-config.txt + Display wordcount of file after copy to validate update + 33 64 1351 installer/raspberrypi-ua-netinst/config/installer-config.txt + #+end_example + + +* Step 2 - Copy the install media to sd card + + Our next step is to copy the contents of the ~installer/~ folder + to a *FAT32* formatted SD Card. + + Unfortunately this is currently a windows step as my dev environment + is a Windows 10 laptop with Debian via Windows Subsystem for Linux + which does not support ~lsblk~ or other disk management commands. + + Our first step is to insert the SD Card and ensure it is formatted + correctly as ~FAT32~. To do that we need to know the number of the + disk we want to format, we can find that via powershell. + + #+NAME: Get disks via windows powershell + #+begin_src shell :results output code verbatim replace :wrap example + echo Retrieving disk list via powershell + powershell.exe -nologo + get-disk | select Number, FriendlyName, Size + exit + #+end_src + + #+RESULTS: Get disks via windows powershell + #+begin_example + Retrieving disk list via powershell + PS get-disk | select Number, FriendlyName, Size + Number FriendlyName Size + ------ ------------ ---- + 1 Realtek PCIE Card Reader 31104958464 + 0 SAMSUNG MZVLB256HAHQ-000H1 256060514304 + + #+end_example -* Step 2 - Write the image file to removable media + + Once we know the number of the disk we want to format we can proceed. + In the example above I have a 32GB SD Card which shows as number ~1~. - Our next step is to write the downloaded image file to our removable - media. This step needs to be repeated for each raspberry pi in the - cluster. + Our next step is to again user powershell, this time to format the sd. - *Note:* As my development environment is based on [[https://docs.microsoft.com/en-us/windows/wsl/about][wsl]] I need to use - a third party tool to write the image. If you are on a standard linux - distribution you can use the ~dd~ utility to write the image. - - The image writing utility I use is [[https://www.balena.io/etcher/][balena etcher]]. After downloading - the latest version: - - Insert your removable media. - - Select the image file you downloaded earlier. - - Select your removable media and start writing the image. - - -* Step 3 - Enable ssh at startup - - As our cluster will be headless, i.e. have no screen keyboard or mouse - plugged in we need to ensure ssh is configured from boot so that we can - remotely connect. - - To do this we just need to add an empty file named ~ssh~ to our newly - created sd card - - #+NAME: Mount newly formatted sd card - #+BEGIN_SRC shell - sudo mkdir /media/sdcard - sudo mount /dev/[SDCARD] /media/sdcard -o umask=000 - #+END_SRC - - - #+NAME: Create the blank ssh file in the boot directory - #+BEGIN_SRC shell - sudo touch /media/sdcard/ssh - #+END_SRC - - -* Step 4 - Enable wifi at startup - - For this guide we are running our cluser wirelessly. To ensure we can - access our pi's once they boot we need to ensure they boot with a wifi - configuration that will connect to our desired network. - - To achieve this we need to set a configuration for the [[https://en.wikipedia.org/wiki/Wpa_supplicant][wpa_supplicant]] - application that our raspberry pi's use for managing wireless. - - For security reasons I don't store wireless access point details here. - Instead they are retrieved at runtime of the code block using the - [[https://bitwarden.com/][bitwarden]] command line utility. - - #+NAME: Write the wireless configuration file - #+BEGIN_SRC shell - export WIRELESS_SSID=`bw get username wifi` - export WIRELESS_PASS=`bw get password wifi` - cat > /media/sdcard/wpa_supplicant.conf << EOF - country=nz - update_config=1 - ctrl_interface=/var/run/wpa_supplicant - - network={ - scan_ssid=1 - ssid=$WIRELESS_SSID - psk=$WIRELESS_PASS - } - EOF - #+END_SRC - - After writing the file we will use ~cat~ to verify the details. - If all details are correct you can unmount and remove the media. + #+NAME: Format the sd card + #+begin_src shell :results output code verbatim replace + #+end_src