Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Raspberry Pi 4BにUbuntu Server 20.04.2 LTSを入れる

軽く試験したいだけの端末で一々GUIで設定するのがダルくなってきたので、ヘッドレスなUbuntu Serverを導入してみました。

実際のところ

Raspberry Pi Imagerで書き込む

執筆時点でRaspberry Pi ImagerにはUbuntu Server 20系が入ってます。

WiFIの接続先を設定。

今回はWiFi越しにSSHしたいという欲があったので、その設定を。

書き込んだSDカードを読み出し、network-configという名前のファイルを探し、以下の様に記述。
固定IPにしても良さそうな気がしないでもないのですが、安全のためDHCPをtrueに。

# This file contains a netplan-compatible configuration which cloud-init
# will apply on first-boot. Please refer to the cloud-init documentation and
# the netplan reference for full details:
#
# https://cloudinit.readthedocs.io/
# https://netplan.io/reference
#
# Some additional examples are commented out below

version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
wifis:
  wlan0:
    dhcp4: true
    optional: true
    access-points:
      YOURAP:
        password: "YOURPASS"

割り振られたIPアドレスを探す

前の手順でDHCPを使った場合は、割り振られたIPアドレスを調べる必要があります。
まず繋いでない状態で同一サブネット下のアドレス群を出力するワンライナーを実行。

$ echo 192.168.3.{1..254} | xargs -P256 -n1 ping -s1 -c1 -W1 | grep ttl | cut -d" " -f 4 | tr -d
:
192.168.3.1
192.168.3.4

で、つないだ状態で同じコマンドをたたくと

$ echo 192.168.3.{1..254} | xargs -P256 -n1 ping -s1 -c1 -W1 | grep ttl | cut -d" " -f 4 | tr -d :
192.168.3.1
192.168.3.4
192.168.3.8

192.168.3.8が今回のお目当てである事が分かります。

初期パスワードの再設定

執筆時点ではユーザー名パスワード共にubuntu

$ ssh ubuntu@192.168.3.8
~$ ssh ubuntu@192.168.3.8
The authenticity of host '192.168.3.8 (192.168.3.8)' can't be established.
ECDSA key fingerprint is SHA256:bDY9ac45JTUy2nYVuibhSBjQL9/6TuGLtq066GONW70.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.3.8' (ECDSA) to the list of known hosts.
ubuntu@192.168.3.8's password:
You are required to change your password immediately (administrator enforced)
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-1028-raspi armv7l)
...

パスワードを変えろと脅されるので、適切に変更

WARNING: Your password has expired.
You must change your password now and login again!
Changing password for ubuntu.
Current password:
New password:
Retype new password:
passwd: password updated successfully
Connection to 192.168.3.8 closed.

再度sshで接続

$ ssh ubuntu@192.168.3.8
ubuntu@192.168.3.8's password:
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-1028-raspi armv7l)

...

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@ubuntu:~$

接続情報(netplan)を弄る

先ほど書いたモンをベースに、以下のようなファイルが自動生成されておりました。

~$ cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  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:
    ethernets:
        eth0:
            dhcp4: true
            optional: true
    version: 2
    wifis:
        wlan0:
            access-points:
                YOURAP:
                    password: 'YOURPASS'
            dhcp4: true
            optional: true

ファイル冒頭のメモ書きと過去の自分のメモを参考に、自分のファイルを"/etc/netplan/99-my-network-config.yaml"として

network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
      addresses: [192.168.123.100/24]
      gateway4: 192.168.123.1
      nameservers:
        addresses: [192.168.123.1, 8.8.8.8, 8.8.4.4]
  wifis:
        wlan0:
            access-points:
                YOURAP:
                    password: 'YOURPASS'
            dhcp4: true
            optional: true

自動生成ファイルのご指示通り、元あったやつの読み込みは停止させる。

$ cat /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
network: {config: disabled}

一応再起動

sudo reboot