Prerequisites and Hardware Requirements
Before beginning the installation process, ensure you have the necessary hardware components ready. The Raspberry Pi 3B+ requires a compatible power supply that provides at least 2.5A at 5V to prevent voltage drops during boot. You will also need a high-quality microSD card with at least 8GB of storage, though 16GB or larger is recommended for smoother performance when installing additional software packages.
Additionally, prepare a computer running Windows, macOS, or Linux to handle the image flashing process. This computer must have an SD card reader or adapter to write the Ubuntu image to the target storage medium. If you plan to access the Raspberry Pi remotely, ensure you have a network connection available, either via Ethernet cable or Wi-Fi, as this simplifies the initial setup significantly.
Downloading the Ubuntu Image
The first step is to obtain the correct operating system image. Canonical provides official Ubuntu images specifically optimized for ARM-based devices like the Raspberry Pi. Navigate to the Ubuntu IoT or Server download page and select the version compatible with the Raspberry Pi 3B+. At the time of writing, Ubuntu 20.04 LTS or 22.04 LTS are stable choices that offer long-term support and extensive community documentation.
Choose between the Server edition and the Desktop edition based on your needs. The Server edition is lightweight and ideal for headless setups where you manage the device via command line. The Desktop edition includes a graphical user interface, which is useful if you want to connect a monitor and keyboard directly to the Pi. Download the compressed archive file, typically ending in .xz or .zip, to your local machine.
Flashing the Image to MicroSD Card
Once the image is downloaded, you need to write it to the microSD card. Using Etcher is the most user-friendly method across all platforms. Install BalenaEtcher from its official website, open the application, and select the downloaded Ubuntu image file. Insert your microSD card into the computer and let Etcher detect it automatically. Verify that the correct drive is selected to avoid overwriting important data on other drives.
Alternatively, advanced users on Linux or macOS can use the dd command in the terminal. Identify the disk identifier of your microSD card using lsblk or diskutil list. Then execute the command sudo dd if=path/to/ubuntu.img of=/dev/diskX bs=1m, replacing /dev/diskX with your actual device path. This method is faster but requires careful attention to ensure the correct destination disk is chosen. After flashing completes, safely eject the card from your computer.
Booting and Initial Configuration
Insert the flashed microSD card into the Raspberry Pi 3B+ and connect the power supply. The device should boot into Ubuntu automatically. If you are using the Desktop edition, you will see a login screen. For the Server edition, you will be greeted by a command-line prompt. Connect to the network via Ethernet or configure Wi-Fi using nmtui if necessary.
Upon first login, change the default password immediately to secure your device. Run sudo apt update && sudo apt upgrade -y to ensure all system packages are up to date. This step is crucial for security and compatibility with future installations. If you encounter issues with audio libraries while setting up speech synthesis tools, refer to our guide on How to Install Sox for PyTorch Audio: A Step-by-Step Guide to resolve missing dependencies early in the process.
Setting Up Development Environment
With the base system installed, you can begin configuring your development environment. Install essential tools such as Git, Python, and build utilities using apt install. Configure SSH access to allow remote connections from your main workstation. Edit the /etc/ssh/sshd_config file to disable root login and enable key-based authentication for enhanced security.
If you are planning to use ROS (Robot Operating System) for robotics applications, be aware that sourcing ROS environments on ARM architecture can sometimes lead to undefined symbol errors. Check out Troubleshooting Undefined Symbol After Sourcing ROS if you face compilation issues after installing ROS Noetic or Melodic on your Pi. This ensures a smooth transition from basic OS setup to complex project development.
Frequently Asked Questions
Can I use Ubuntu on Raspberry Pi 4 instead?
Yes, Ubuntu supports the Raspberry Pi 4, but you must download the specific image built for the Pi 4 hardware. The drivers and kernel configurations differ between the 3B+ and the 4, so using the wrong image will result in a boot failure. Always verify the hardware model before downloading the ISO file.
Why is my Raspberry Pi not booting from the SD card?
This issue often stems from an improperly flashed card or insufficient power. Ensure the image was written completely without errors and try flashing it again. Additionally, check that your power supply meets the 2.5A requirement, as low voltage can prevent the bootloader from initializing correctly.
How do I enable Wi-Fi on Ubuntu Server?
Ubuntu Server uses NetworkManager for connectivity management. You can use the text-based UI tool by running nmtui in the terminal. Select "Edit a connection," choose your Wi-Fi network, enter the password, and save the settings. The system will connect automatically upon reboot or immediately if configured to activate on boot.
Is Ubuntu better than Raspberry Pi OS for development?
Ubuntu offers broader software compatibility and standard package repositories compared to Raspberry Pi OS. It is often preferred for web servers, Docker containers, and AI projects due to its wider ecosystem support. However, Raspberry Pi OS has deeper hardware optimization for the specific GPIO pins and camera interfaces.
What should I do if SSH connection times out?
First, verify that the Raspberry Pi is connected to the network and has obtained an IP address. Use ip addr to check the interface status. Ensure that the SSH service is running with systemctl status ssh. If the service is active, check your router's DHCP table to confirm the Pi's current IP address and try connecting again.