Skip to main content

Set Up a Raspberry Pi from macOS Using the Command Line

Pascal Spörri
Author
Pascal Spörri
Table of Contents

I occasionally need to set up a new Raspberry Pi and always find myself looking up the same dd command parameters. With recent changes to Raspberry Pi OS—such as the removal of the default pi user and the way SSH is enabled—I decided to write down the complete process.

Note: For most users, the official Raspberry Pi Imager is the recommended tool.

Requirements
#

  • Ensure that xz is installed:
    brew install xz
    
  • Download the desired version of Raspberry Pi OS. In this example, we use the 64-bit Lite version: 2022-04-04-raspios-bullseye-arm64-lite.img.xz

Step 1: Decompress the Image
#

Navigate to the download directory and decompress the image:

cd Downloads
xz -d 2022-04-04-raspios-bullseye-arm64-lite.img.xz

Step 2: Identify the SD Card
#

  1. Run diskutil list before inserting the SD card to note existing devices.

  2. Insert the SD card and run the command again:

    diskutil list
    

Identify the new device. It will typically be marked as external and have a size matching your SD card. For example:

/dev/disk4 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *64.0 GB    disk4
   1:             Windows_FAT_32 boot                    268.4 MB   disk4s1
   2:                      Linux                         63.7 GB    disk4s2

Step 3: Flash the Image
#

Unmount the SD card:

diskutil unmountDisk /dev/disk4

Write the image using dd. Use /dev/rdisk instead of /dev/disk for better performance, and include status=progress to monitor progress:

sudo dd bs=1m if=2022-04-04-raspios-bullseye-arm64-lite.img of=/dev/rdisk4 status=progress

Once complete, eject the card:

diskutil eject /dev/disk4

At this point, Raspberry Pi OS is installed. If you’re using a monitor and keyboard for setup, insert the SD card into the Pi and power it on. To configure the Pi headlessly (via SSH), continue with the steps below.

Step 4: Enable SSH and Create a User
#

Mount the SD card again if needed (or simply re-insert the SD card). The boot partition should appear at /Volumes/boot.

Enable SSH
#

Create an empty ssh file in the boot partition to enable SSH on first boot:

touch /Volumes/boot/ssh

Create a User
#

Since Raspberry Pi OS no longer provides a default username and password, you must define your own.

  1. Ensure OpenSSL is installed:

    brew install openssl
    
  2. Set your desired username and password:

    USERNAME=myusername
    PASSWORD=mypassword
    HASHED_PASSWORD=$(echo "${PASSWORD}" | $(brew --prefix openssl@1.1)/bin/openssl passwd -6 -stdin)
    echo "${USERNAME}:${HASHED_PASSWORD}" > /Volumes/boot/userconf
    

This will create a userconf file containing one line like:

myusername:$6$random_salt_and_hash
  1. Eject the disk:

    diskutil eject /dev/disk4
    
  2. Insert the SD card into the Raspberry Pi and power it on.

After a minute or two, the Pi should be available on your network. You can connect via SSH:

ssh myusername@raspberrypi.local

Step 5: Configure the Raspberry Pi
#

Run raspi-config
#

Use the built-in configuration tool to set the hostname, enable Wi-Fi, update the system, and expand the filesystem:

sudo raspi-config

You should see a text-based interface with various setup options.

raspi-config screenshot

Optional: Update the System and Install Packages
#

To update the system and install common tools:

sudo apt update
sudo apt upgrade -y
sudo apt install -y vim git

Optional: Configure Locales
#

You can configure locales either through raspi-config or manually.

To do it manually:

  1. Edit /etc/locale.gen and uncomment the desired locales.

  2. Generate the locales:

    sudo locale-gen
    

Alternatively:

sudo dpkg-reconfigure locales