ラズパイ4のメモリ4GB版を入手したので、Ubuntu Server 21.04 のヘッドレスインストールをためしてみました。とりあえず OSのインストールとホストPCからSSHでログインするところまでをステップ・バイ・ステップで記録しておきます。
試した環境
Raspberry Pi 4 メモリ4GB
Transcend microSD 128GB
SDカードにUbuntuのイメージを書き込む
ホストPCで環境を準備します。
Windows or Mac or Linux で SDカードにUbuntuを書き込みます。
以下はWindowsで試した手順です。
- Raspberry Pi Imager をダウンロードします。

2. Raspberry Pi Imager を起動します。「CHOOSE OS」 をクリック。

3. 「Other general purpose OS」 → 「Ubuntu」 → 「Ubuntu Server 21.04 (RPi 3/4/400) 64-bit」の順にクリック。



4. SDカードをホストPCに差し込み、「CHOOSE STORAGE」をクリックし、ラズパイ用に準備したSDカードをクリックします。


5. SDカードにイメージを書き込みます。「WRITE」をクリックするとSDの消去確認がでるので、「YES」をクリックして実行します。


OSイメージをダウンロードして書き込みまで行ってくれます。完了するまでしばらく待ちましょう。書き込みに10分以上かかる場合は、SDカードのスペックが低すぎるので、新しいものを用意したほうが良いでしょう。今回使用したの Transcend の microSD(UHS-I U3 V30 A1 Class10) では、ベリファイを含めて5分前後で完了しています。A2タイプだともっと速くなるようなのでスピードを求める人はそちらを選択するのもありかもしれません。

ベリファイ(書き込みのチェック)が正常に終わればラズパイ用Ubuntuの入ったSDカードの完成です。

以下のようなメッセージが表示されれば完了です。SDカードをPCから取り出します。

起動前の初期設定をする
今回はヘッドレスインストール(キーボードやモニターを接続しない)なので、Ubuntuが起動したら自動的にネットワークに接続するような初期設定が必要になります。有線でもWIFIでもどちらか利用しやすい方法を選びます。
以下は起動後にWIFIに接続させる手順です。
- Ubuntuの書き込まれたSDカードを、もう一度ホストPCに差し込みます。
system-boot という領域があるので、その中にある「network-config」ファイルをメモ帳などのテキストエディタで開きます。

今回は 起動したらWIFIに接続するように設定します。「wifis:」から下を編集していきます。

WIFIルータの管理画面などで、DHCPでラズパイに割り振られたIPアドレスがわかるのであれば、myhomewifi:の部分を自宅のWIFIのSSIDに、password:の部分にWIFIのパスワードを設定すればOKです。
wifis:
wlan0:
dhcp4: true
optional: true
access-points:
homenossid:
password: "homewifinopassword"
IPアドレスを固定にしたい場合は、下記のようにIPアドレス(adresses)、デフォルトゲートウェイ(gateway4)、DNSサーバ(nameservers)指定します。それぞれネットワーク環境に合わせてセットします。
wifis:
wlan0:
dhcp4: false
optional: true
addresses:
- 192.168.68.81/24
gateway4: 192.168.68.1
nameservers:
addresses:
- 192.168.68.1
- 8.8.8.8
access-points:
homenossid:
password: "homewifinopassword"
編集したらそのまま保存します。

固定IPにした場合の設定例。
version: 2
ethernets:
eth0:
dhcp4: true
optional: true
wifis:
wlan0:
dhcp4: false
optional: true
addresses:
- 192.168.68.81/24
gateway4: 192.168.68.1
nameservers:
addresses:
- 192.168.68.1
- 8.8.8.8
access-points:
homenossid:
password: "homewifinopassword"
追加の設定をする
同じフォルダにある「user-data」ファイルを編集すると、いろいろな設定を行うことができます。

これもメモ帳で開いて編集します。

必要に応じて各セクションの設定を編集します。
# 初回ログイン時にubuntuユーザのパスワードを変更するかどうか。初期パスワードの設定。
# On first boot, set the (default) ubuntu user's password to "ubuntu" and
# expire user passwords
chpasswd:
expire: true
list:
- ubuntu:ubuntu
# SSHでパスワード認証を許可するかどうか。許可しない場合は、ssh_import_id や ssh_authorized_keys を設定し、公開鍵をインポートする必要がある。
# Enable password authentication with the SSH daemon
ssh_pwauth: true
## On first boot, use ssh-import-id to give the specific users SSH access to
## the default user
#ssh_import_id:
#- lp:my_launchpad_username
#- gh:my_github_username
#ssh_authorized_keys:
#- <ssh pub key 1>
#- <ssh pub key 2>
# グループを追加したい場合はここで設定する。
## Add users and groups to the system, and import keys with the ssh-import-id
## utility
#groups:
#- robot: [robot]
#- robotics: [robot]
#- pi
#
#
# ユーザーを追加する。- defaultの行をコメントアウトしてユーザを追加すると、ubuntu ユーザを作成しないようにできる。
#users:
#- default
#- name: robot
# gecos: Mr. Robot
# primary_group: robot
# groups: users
# ssh_import_id: foobar
# lock_passwd: false
# passwd: $5$hkui88$nvZgIle31cNpryjRfO9uArF7DYiBcWEnjqq7L1AQNN3
# パッケージのアップデートと起動時に追加したいパッケージを設定する
## Update apt database and upgrade packages on first boot
package_update: true
package_upgrade: true
## Install additional packages on first boot
#packages:
#- pwgen
#- pastebinit
#- [libpython2.7, 2.7.3-0ubuntu3.1]
# 作成したいファイルがある場合はこのような感じで記載しておく。
## Write arbitrary files to the file-system (including binaries!)
#write_files:
#- path: /etc/default/keyboard
# content: |
# # KEYBOARD configuration file
# # Consult the keyboard(5) manual page.
# XKBMODEL="pc105"
# XKBLAYOUT="gb"
# XKBVARIANT=""
# XKBOPTIONS="ctrl: nocaps"
# permissions: '0644'
# owner: root:root
#- encoding: gzip
# path: /usr/bin/hello
# content: !!binary |
# H4sIAIDb/U8C/1NW1E/KzNMvzuBKTc7IV8hIzcnJVyjPL8pJ4QIA6N+MVxsAAAA=
# owner: root:root
# permissions: '0755'
# 起動時に実行したいコマンドがあれば書いておく
## Run arbitrary commands at rc.local like time
#runcmd:
#- [ ls, -l, / ]
#- [ sh, -xc, "echo $(date) ': hello world!'" ]
#- [ wget, "http://ubuntu.com", -O, /run/mydir/index.html ]
自分なりの設定も加えていきます。
# ホスト名(※再起動後に有効になる。初回起動時にはセットされない。)
hostname: ubuntuserver
# タイムゾーン、ロケールの設定
timezone: "Asia/Tokyo"
locale: "ja_JP.UTF-8"
## サーバー用途ではSDカードがすぐ壊れるので、RAMDISKを使って対策をする
## /tmp,/var/tmp,/var/logをRAMDISK化する
mounts:
- [ tmpfs, /tmp, tmpfs, "defaults,size=256m", "0", "0" ]
- [ tmpfs, /var/tmp, tmpfs, "defaults,size=256m", "0", "0" ]
- [ tmpfs, /var/log, tmpfs, "defaults,size=128m", "0", "0" ]
他にも設定したい項目があれば、cloud-iniのドキュメントサイトから探してみるのが良いです。
今回はシンプルに設定しました。
#cloud-config の設定例
# On first boot, set the (default) ubuntu user's password to "ubuntu" and
# expire user passwords
chpasswd:
expire: false
list:
- ubuntu:ubuntu
# Enable password authentication with the SSH daemon
ssh_pwauth: true
## Update apt database and upgrade packages on first boot
package_update: true
package_upgrade: true
## Install additional packages on first boot
packages:
- avahi-daemon
# ホスト名の設定
hostname: ubuntuserver
# タイムゾーン、ロケールの設定
timezone: "Asia/Tokyo"
locale: "ja_JP.UTF-8"
## サーバー用途ではSDカードがすぐ壊れるので、RAMDISKを使って対策をする
## /tmp,/var/tmp,/var/logをRAMDISK化する
mounts:
- [ tmpfs, /tmp, tmpfs, "defaults,size=256m", "0", "0" ]
- [ tmpfs, /var/tmp, tmpfs, "defaults,size=256m", "0", "0" ]
- [ tmpfs, /var/log, tmpfs, "defaults,size=128m", "0", "0" ]
設定が終わったらファイルを保存してSDカードをホストPCから取り出します。
ラズパイを起動する
設定済みのSDカードをセットして、ラズパイの電源を入れます。(もっとカッコいいケースがほしい・・・。)

pingなどで確認しながら、ラズパイがネットワークに接続されるのを待ちます。

ルータの設定画面からも接続を確認することができました。

ホストPCからラズパイにSSHで接続します。最近のWindows10にはsshコマンドがデフォルトではいっているので、コマンドプロンプトからラズパイに接続してみます。
c:\>ssh -V
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
c:\>ssh ubuntu@UBUNTU_NO_IPADDR


ロケールやTEMP領域のRAMディスク化の設定も自動で行われています。

起動時にリスタートの要求が表示されていたので、リブートもしておきましょう。
ubuntu@ubuntu:~$ sudo reboot
Connection to 192.168.68.81 closed by remote host.
Connection to 192.168.68.81 closed.
リブート後は、設定したホスト名でアクセスできるようになっていました。
c:\>ping -4 ubuntuserver.local
Pinging ubuntuserver.local [192.168.68.81] with 32 bytes of data:
Reply from 192.168.68.81: bytes=32 time=3ms TTL=64
Reply from 192.168.68.81: bytes=32 time=4ms TTL=64
Reply from 192.168.68.81: bytes=32 time=4ms TTL=64
Reply from 192.168.68.81: bytes=32 time=4ms TTL=64

公式の Pi OS は 32bit なので、最新のコンテナイメージやパッケージが使えなかったり、微妙に不便なことがありました。なので最近は使い勝手の良い ubuntu 64bit を使うようにしております。🐩
追記: Pi OS には 64bit版もあるみたいなので試してみたいと思います。

デスクトップ用途に使うのでなければ、キーボードやディスプレイは不要ですね。🍣🐟🐤
コメント