Setup Raspberry Pi 3 Model B+ with Ubuntu server and SSH over wifi

hipsterdev

Wesley

Posted on September 12, 2019

Setup Raspberry Pi 3 Model B+ with Ubuntu server and SSH over wifi

Some things to say first:

  • At moment of testing the commands and writing this, I am using a ubuntu 18.04.3.
  • I don't have a Ethernet cable ¯\_㋡_/¯
  • My raspberry is the 3 Model B+ and my sdcard is a SAMSUNG EVO Select microSDXC 128 GB
  • This is my first post (treating it more like a "shared note") on dev.to community 🎉
  1. Download the ubuntu image 18.04.3-preinstalled-server-arm64+raspi3.img.xz (link taken found here)
  2. Flash the sdcard using balenaEtcher
  3. sudo nano /media/wesley/writable/etc/netplan/50-cloud-init.yaml
    It should contain:

    network:
        version: 2
        ethernets:
            eth0:
                optional: true
                dhcp4: true
        wifis:
            wlan0:
                optional: true
                access-points:
                    "YOUR-SSID-NAME":
                        password: "YOUR-NETWORK-PASSWORD"
                dhcp4: true
    

    Make sure to have navigated to writable partition, otherwise nano will complain the folder does not exist.

  4. sudo nano /media/wesley/writable/etc/cloud/cloud.cfg

    Should be like this:

    # The top level settings are used as module
    # and system configuration.
    
    # A set of users which may be applied and/or used by various modules
    # when a 'default' entry is found it will reference the 'default_user'
    # from the distro configuration specified below
    users:
       - default
    # If this is set, 'root' will not be able to ssh in and they
    # will get a message to login instead as the default $user
    disable_root: false
    
    # This will cause the set+update hostname module to not operate (if true)
    preserve_hostname: false
    hostname: YOUR-RASPBERRYPI-NAME
    
    # Example datasource config
    # datasource:
    #    Ec2:
    #      metadata_urls: [ 'blah.com' ]
    #      timeout: 5 # (defaults to 50 seconds)
    #      max_wait: 10 # (defaults to 120 seconds)
    
    # The modules that run in the 'init' stage
    cloud_init_modules:
     - migrator
     - seed_random
     - bootcmd
     - write-files
     - growpart
     - resizefs
     - disk_setup
     - mounts
     - set_hostname
     - update_hostname
     - update_etc_hosts
     - ca-certs
     - rsyslog
     - users-groups
     - ssh
    
    # The modules that run in the 'config' stage
    cloud_config_modules:
    # Emit the cloud config ready event
    # this can be used by upstart jobs for 'start on cloud-config'.
     - emit_upstart
     - snap
     - snap_config  # DEPRECATED- Drop in version 18.2
     - ssh-import-id
     - locale
     - set-passwords
     - grub-dpkg
     - apt-pipelining
     - apt-configure
     - ubuntu-advantage
     - ntp
     - timezone
     - disable-ec2-metadata
     - runcmd
     - byobu
    
    # The modules that run in the 'final' stage
    cloud_final_modules:
     - snappy  # DEPRECATED- Drop in version 18.2
     - package-update-upgrade-install
     - fan
     - landscape
     - lxd
     - ubuntu-drivers
     - puppet
     - chef
     - mcollective
     - salt-minion
     - rightscale_userdata
     - scripts-vendor
     - scripts-per-once
     - scripts-per-boot
     - scripts-per-instance
     - scripts-user
     - ssh-authkey-fingerprints
     - keys-to-console
     - phone-home
     - final-message
     - power-state-change
    
    # System and/or distro specific settings
    # (not accessible to handlers/transforms)
    system_info:
       # This will affect which distro class gets used
       distro: ubuntu
       # Default user name + that default users groups (if added/used)
       default_user:
         name: pi
         lock_passwd: True
         gecos: Pi
         groups: [adm, audio, cdrom, dialout, dip, floppy, lxd, netdev, plugdev, sudo, video]
         sudo: ["ALL=(ALL) NOPASSWD:ALL"]
         shell: /bin/bash
         ssh_authorized_keys:
           - "CONTENT-OF-YOUR-SSH-PUB-KEY-HERE"
       # Automatically discover the best ntp_client
       ntp_client: auto
       # Other config here will be given to the distro class and/or path classes
       paths:
          cloud_dir: /var/lib/cloud/
          templates_dir: /etc/cloud/templates/
          upstart_dir: /etc/init/
       package_mirrors:
         - arches: [i386, amd64]
           failsafe:
             primary: http://archive.ubuntu.com/ubuntu
             security: http://security.ubuntu.com/ubuntu
           search:
             primary:
               - http://%(ec2_region)s.ec2.archive.ubuntu.com/ubuntu/
               - http://%(availability_zone)s.clouds.archive.ubuntu.com/ubuntu/
               - http://%(region)s.clouds.archive.ubuntu.com/ubuntu/
             security: []
         - arches: [arm64, armel, armhf]
           failsafe:
             primary: http://ports.ubuntu.com/ubuntu-ports
             security: http://ports.ubuntu.com/ubuntu-ports
           search:
             primary:
               - http://%(ec2_region)s.ec2.ports.ubuntu.com/ubuntu-ports/
               - http://%(availability_zone)s.clouds.ports.ubuntu.com/ubuntu-ports/
               - http://%(region)s.clouds.ports.ubuntu.com/ubuntu-ports/
             security: []
         - arches: [default]
           failsafe:
             primary: http://ports.ubuntu.com/ubuntu-ports
             security: http://ports.ubuntu.com/ubuntu-ports
       ssh_svcname: ssh
    
  5. Eject from your computer, inject the sdcard on the raspberry, connect the power and wait for about one minute.

  6. ssh pi@YOUR-RASPBERRYPI-NAME

ℹ️ first time you login it will ask for a password (type ubuntu) and then to change to a new password.

Many thanks to l --marc l user on stackoverflow. Steps on this post are 90% from his answer here. The other 10% comes from the cloud-init docs

💖 💪 🙅 🚩
hipsterdev
Wesley

Posted on September 12, 2019

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related