May 2, 2021
•Wesley
Setup Raspberry Pi 3 Model B+ with Ubuntu server and SSH over wifi
raspberrypi linux ubuntuSetup 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 🎉
-
Download the ubuntu image 18.04.3-preinstalled-server-arm64+raspi3.img.xz (link taken found here)
-
Flash the sdcard using balenaEtcher
-
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, otherwisenano
will complain the folder does not exist. -
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
-
Eject from your computer, inject the sdcard on the raspberry, connect the power and wait for about one minute.
-
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