"いまさら" Raspberry Pi 4でUbuntu Server 24.04 LTSを立ち上げる
余っていたRaspberry Pi4にUbuntu Server 24.04.1 LTSをインストールしたので、その工程のメモ。
UbuntuのイメージをSDカードに書き込む
世の中的には rpi-imager
というアプリを使うようだが、dd
コマンドでSDカードにイメージを作る方が楽なので、Ubuntuのサイトからイメージファイルをダウンロードし、dd
コマンドを使ってSDカードにイメージを作る。
UbuntuのRaspberry Pi用イメージは、ありがたいことにUbuntuが提供してくれている。今回は、これをそのまま使うことにした。
Raspberry Pi用イメージは以下のURLからダウンロードできる
Canonical Ubuntu/Downloads: Install Ubuntu on a Rasberry Pi
ダウンロードしたイメージファイルをdd
を使ってSDカードにコピーする
xzcat ./ubuntu-24.04.1-preinstalled-server-arm64+raspi.img.xz | sudo dd of=/dev/sda bs=32M status=progress; sync
標準イメージのパーティション構成
dd
で構築したSDカードをPCに自動マウントするとsystem-boot
,writable
という2つのパーティションが見える。ルートファイルシステムはwritable
に格納されている。
この後の手順でルートファイルシステムを編集する場合は、writeble
以下のファイルを編集する。
sshでログインする環境を準備する
デスクトップ環境を一切使わずにRaspberry Piを使うために、ネットワーク越しにssh
でログインする環境を準備する。
ネットワークを設定する
Ubuntu Server 24.04.1 LTSのネットワーク設定は、デフォルトでDHCPになっている、この設定のまま有線LANネットワークに接続すると、IPアドレスが自動で割り振られてしまい迷子になる。もっとも接続された機器のIPアドレスを調べる方法はあるが、健全なネットワークであれば固定IPアドレスの領域が定義されているはずなので、はじめから固定IPアドレスを設定する方が効率がよい。また、どうせネットワークの設定をするならば、一緒に wifiの設定をしてしまえば、有線LANを繋ぐ物理的な制約がなくなる。
Ubuntuのネットワーク設定
Ubuntuはネットワーク設定の抽象化レイヤーとしてNetplanを採用している。Ubuntuサーバーはネットワーク管理としてsystemd-networkd
が実装されており、この設定をNetplanにより行う。
Netplanの設定ファイルは、ユーザーランドの/etc/netplan/
以下に設定ファイルを配置する。
設定ファイルはYamlで記載する。Netplanの設定ファイルの例は、GithubのNetplanのRepositoryにあるため参考にするとよい
Ubuntu Server 24.01.1 LTSのDHCP設定
「Ubuntu Server 24.04.1 LTSではデフォルトでDHCPになっている」と上述した。これはUbuntuに実装される cloud-init
が初期設定時に生成する/etc/netplan/50-cloud-init.yaml
にて設定される。
そのため、ネットワーク設定を行うためにcloud-initの設定ファイルを修正するという方法も考えられるが、今回はシンプルに50-cloud-init.yaml
以降に実行されるネットワーク設定ファイルを、ルートファイルシステムに追加しておくことにする。
有線LANの設定
ネットワークインターフェースeth0
に固定IPアドレスの設定を行う。
例として以下のネットワークのNetplanの設定を記す
- IPアドレス:
192.168.1.100
- DNS:
8.8.8.8
- デフォルトルート:
192.168.1.1
固定IP
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.100/24
nameservers:
addresses: [8.8.8.8]
routes:
- to: default
via: 192.168.1.1
無線LAN (Wifi)の設定
ネットワークインターフェースwlan0
に固定IPアドレスの設定とアクセスポイントへ接続するための設定をする
有線LANの設定と無線LANの設定は同じ設定ファイルに記載してかまわないため、wlan0
の設定はeth0
の後に追加する
例として、以下のネットワークのNetplanの設定を記す
- ネットワークインターフェース:
wlan0
- IPアドレス:
192.168.1.101
- DNS:
8.8.8.8
- デフォルトルート:
192.168.1.1
- アクセスポイントSSID: my_ap
- my_apパスワード: my_ap_passwd
wifis:
wlan0:
dhcp4: false
addresses:
- 192.168.1.101/24
nameservers:
addresses: [8.8.8.8]
access-points:
my_ap:
password: "my_ap_passwd"
routes:
- to: default
via: 102.168.1.1
ssh接続するPCの公開鍵を登録する
sshを公開鍵認証で接続するため、Raspberry Piに接続するPCの公開鍵を登録する。しかし、ルートファイルシステムができたときは、まだユーザーのホームディレクトリ /home/ubuntu
は存在していない。そのためホームディレクトリの.ssh/
にauthorized_keys
ファイルを配置することはできない。
ホームディレクトリはcloud-init
により生成される。この設定ファイル/etc/cloud/cloud.cfg
を修正することで公開鍵を登録することができる。
ubuntuユーザーにssh_authorized_keys:
を追加するとauthorized_keys
が追加された状態で、ホームディレクトリが生成される。
default_user:
name: ubuntu
lock_passwd: True
gecos: Ubuntu
groups: [adm, cdrom, dip, lxd, sudo]
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
+ ssh_authorized_keys:
+ - ssh-rsa AAAAB3NzaC1yc...
network:
dhcp_client_priority: [dhcpcd, dhclient, udhcpc]
renderers: ['netplan', 'eni', 'sysconfig']
activators: ['netplan', 'eni', 'network-manager', 'networkd']
# Automatically discover the best ntp_client
ntp_client: auto
# Other config here will be given to the distro class and/or path classes
なお、Ubuntu Server 24.04.1 LTSのデフォルトイメージではsshのパスワード認証を禁止している。もしも、パスワード認証を許可したい場合は、clout-initで生成された/etc/ssh/sshd_config.d/50-cloud-init.conf
を修正する必要がある
/etc/cloud/cloud.cfg
を変更すると、ubuntuユーザーではなく任意のユーザーを作ることもできる。そのようなことがしたい場合は、clout-initのReference Manualを読むみ設定を変更すると良い。
Discussion