4

How to setup of Raspberry Pi 3 B+ onboard WiFi for Ubuntu Server 18.04? In particular, with netplan?

This is a clean install of the Ubuntu Server 18.04 image for Raspberry Pi 3. File: ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xz.

The installed file /etc/network/interfaces states that netplan has replaced ifupdown.

# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.

/etc/netplan has one file 50-cloud-init.yaml

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}

network:
    version: 2
    ethernets:
        eth0:
            dhcp4: true
            match:
                macaddress: <MAC 'eth0' [IF1]>
            set-name: eth0

Netplan.io provides some general Netplan configuration examples.

To configure netplan, save configuration files under /etc/netplan/ with a .yaml extension (e.g. /etc/netplan/config.yaml), then run sudo netplan apply.

... yet, no guideance specific to a RaspberryPi. ...in particular, with respect to the existing /etc/netplan/50-cloud-init.yaml file on the RaspberryPi Ubuntu Server install.

What would be the netplan template for the RaspberryPi? Can the existing /etc/cloud/cloud.cfg.d be left enabled? What is lost if cloud.cfg.d on the Raspberry Pi is disabled? ... (... and, wondering ... how much of this issue needs RaspPi knowledge vs. Ubuntu knowledge.)

Note: Since this question is at the intercetion of Ubuntu & Raspberry Pi, a related question was also posted on AskUbuntu.

  • 2
    I'm not in a position to test right now (as my only connection to my Pis is over SSH right now, so if it doesn't work i'll lose connection), but this page here might fill in some of the blanks you need for the netplan and setting your country for the Wifi. I'll give this a test tonight if you're not having any luck. – Larnu May 15 at 8:30
  • @Larnu The "Raspberry Pi 3B/B+ Wireless Bridge using Ubuntu Server 18.04 ARM Image and Netplan" link you provide included the needed steps. The essential steps needed for this particular question are now summarized as an answer. So, success. :-) Thanks. – l --marc l May 15 at 22:55
  • 1
    Glad to see you got there. Would have had a go today of no but I see there's no need. :) – Larnu May 16 at 6:56
3

The steps below were found to provide a persistent WiFi setup using netplan with Ubuntu Server 18.04 ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xz image on a Raspberry Pi 3 B+.

Update system:

sudo apt update
sudo apt full-upgrade
sudo reboot

Determine interface names:

ip link show

# 1: lo: <LOOPBACK,UP,LOWER_UP> …
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> … state UP …
# 3: wlan0: <BROADCAST,MULTICAST> … state DOWN 

Determine your-cloud-init.yaml and open for editing.

cd /etc/netplan/
ls -l
# -rw-r--r-- 1 root root 666 May 15 22:00 50-cloud-init.yaml
### note your *cloud-init.yaml file name

### backup *cloud-init.yaml file
cp 50-cloud-init.yaml 50-cloud-init.yaml.bak
### edit *cloud-init.yaml
sudo nano 50-cloud-init.yaml

Add WiFi access information to your-cloud-init.yaml file.

# This file is generated from information provided by
# the datasource.  Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
    version: 2
    ethernets:
        eth0:
            optional: true
            dhcp4: true
    # add wifi setup information here ...
    wifis:
        wlan0:
            optional: true
            access-points:
                "YOUR-SSID-NAME":
                    password: "YOUR-NETWORK-PASSWORD"
            dhcp4: true

Test, generate and apply the changed your-cloud-init.yaml config:

  • Testing: sudo netplan --debug try (continue even if successful)
  • Generate: sudo netplan --debug generate (provides more details in case of issues with the previous command)
  • Apply: sudo netplan --debug apply (if no issues during the previous commands)

Confirmation Test:

sudo reboot

### wait, then without the wired ethernet connected ... 
ssh ubuntu@wifi-ip-address

The above sequence was distilled from the "Raspberry Pi 3B/B+ Wireless Bridge using Ubuntu Server 18.04 ARM Image and Netplan" gist link mentioned in the question comments by Larnu. The gist goes well beyond just enabling WiFi since its turns the Pi into a Bridge.


Some additional useful WiFi setup steps.

Set hostname.

sudo hostnamectl set-hostname my-server-name

sudo nano /etc/hosts

127.0.0.1 localhost
# add host name
127.0.0.1 my-server-name

sudo nano /etc/cloud/cloud.cfg

# Set preserve_hostname to true for persistance after reboot
preserve_hostname: true

Verify from local Raspberry Pi commandline.

hostnamectl
#   Static hostname: my-server-name
#         Icon name: computer
#        Machine ID: …
#           Boot ID: …
#  Operating System: Ubuntu 18.04.2 LTS
#            Kernel: Linux 4.15.0-1036-raspi2
#      Architecture: arm64

Enable mDNS.

If desired, enable Multicast DNS by installing Avahi. Avahi supports the mDNS/DNS-SD/RFC 3927/Zeroconf/Bonjour specification.

sudo apt install avahi-daemon 

Remotely check mDNS resolution from another computer.

ping myserver.local
ssh ubuntu@my-server-name.local

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.