Raspberry Pi に Ubuntu 22.04 LTS をヘッドレスでインストール (2022/05)

Ubuntu 22.04 LTS が 2022/04/21 にリリースされました。
Raspberry Pi を Web サーバとして稼働させることを目的として、Ubuntu Server 版をヘッドレス(ディスプレイ・キーボード等を接続しない)環境で、インストールおよび SSH 接続までを行う方法について確認しましたので、その手順について記載します。

Ubuntu Server 22.04 LTS を SDカードに書き込む作業に Windows PC を使用しています。Ubuntu Server の初期設定に cloud-init を利用し、Ubuntu Serverが起動した後の SSH 接続ターミナルソフトに Tera Term を使用して確認しています。

1. Raspberry Pi Imager でSDカードに書き込み

Raspberry Pi Imager を使用して、Ubuntu Server 22.04 LTS を直接SDカードに書き込むことが可能です。

(1) Raspberry Pi Imager でOSの選択

下記の操作でSDカードに書き込む Ubuntu Server を選択します。
(本手順では、確認に Raspberry Pi 2 Model B を使用したため、32bit版を選択していますが、64bit版でも同様にインストールできると思います。)


(2) Raspberry Pi Imager で選択OSをSDカードへ書込み

OSの選択後、書込み先のSDカードを選択し、「書き込む」ボタンを押します。※Raspberry Pi Imager の歯車ボタンの「詳細な設定」は、本手順では使用しません。

2. cloud-init で Ubuntu OS の初期設定

cloud-init は名称のとおり、クラウド環境のOSインスタンスの初期設定を主として作られていますが、オンプレミス環境の初期設定にも使われます。
SDカードに書き込んだ、Ubuntu Server 22.04 LTS のOSイメージには cloud-init が導入済になっており、本手順ではその機能を使って Ubuntu OS の下記項目の初期設定を行うため、Raspberry Pi の起動前に、SDカード内の設定ファイルに編集を行います。

  • ホスト名
  • 初期ユーザ(グループ)
  • タイムゾーン
  • ロケール
  • IPアドレス(ネットワーク設定)
(1) user-data ファイルの確認

OSイメージを書き込んだSDカード内の user-data ファイル(テキスト形式)を確認します。
以下の画面は、Windows エクスプローラ上で、SDカードのFAT32領域が D: ドライブ(ボリュームラベル= system-boot )として認識している状態です。

(2) user-data ファイルの編集

SDカード内の user-data ファイル(テキスト形式)を、メモ帳 等で開きます。
user-data ファイルの内容を、下記サンプルの記述内容に書き換えて、修正を行った後に保存します。
サンプルを修正するうえでの注意点を以下に記載します。

    1. 1行目の「#cloud-config」部分はコメントではなく、cloud-initの設定ファイルであることの宣言文のため消さないでください。(それ以降の # の付く行はコメント行です)
    2. サンプルの「赤文字」部分は、利用する環境に合わせて修正願います。
    3. ネットワークの設定は、netplan の設定ファイルを指定場所に書き込んで、
      cloud-init の最終段階で、設定を反映(netplan apply)する手法にしています。
#cloud-config

# ホスト名設定
hostname: ubuntu-sv

# ユーザー作成
users:
  - name: sysadm
    primary_group: sysadm
    groups: [adm, dialout, netdev, sudo]
    sudo: ALL=(ALL) NOPASSWD:ALL
    shell: /bin/bash
    lock_passwd: false
    plain_text_passwd: 'password'

# SShパスワード認証許可
ssh_pwauth: True

# ロケール設定
locale: ja_JP.UTF-8

# タイムゾーン設定
timezone: Asia/Tokyo

# 静的IP設定ファイル書込み
write_files:
  - path: /etc/netplan/90-net-config.yaml
    content: |
      network:
          ethernets:
              eth0:
                  dhcp4: false
                  addresses:
                  - 192.168.1.10/24
                  routes:
                  - to: default
                    via: 192.168.1.1
                  nameservers:
                      addresses:
                      - 192.168.1.1
                  optional: true
          version: 2

# 設定の反映
runcmd:
  - systemctl restart rsyslog
  - netplan apply

3. Raspberry Pi の起動

Raspberry Pi にSDカード(前項で作成したもの)をセットし、LANケーブルを接続した状態で起動(電源投入)します。
このとき Windows PC から、Ubuntu OS に設定した IPアドレスに対して連続で ping を打っておくと、ping 応答があった時点で、cloud-init による初期設定が終了したことが分かります。
※Raspberry Pi 2 Model B では、約2分40秒程度で ping 応答がある状態になりました。

4. SSH 接続後に行う項目と確認事項

Windows PC から、Tera Term で Ubuntu OS に SSH 接続します。SSH 接続が問題なく行えて、ログイン出来た時点で cloud-init による初期設定が、ほぼ問題なく完了したものと考えられます。
下記に、ログイン後に行う項目と確認事項を記載します。

  1. ” hostname ” コマンドを実行し、設定したホスト名と相違ないかを確認します。
  2. ” date ” コマンドを実行し、現在の時刻が日本語表記されるかを確認します。
    正しく表示していれば、ロケールとタイムゾーンの設定が正しく反映しています。
  3. 初期パスワードを変更(” passwd ” コマンド実行)します。本手順では、user-data ファイル内に、初期パスワードがプレーンテキストで残ったままになっているためです。
  4. ” sudo apt update ” コマンドを実行し、パッケージ一覧を更新します。処理が正常に進めば、ネットワーク設定の「デフォルトゲートウェイ」「ネームサーバ」が正しく動作していることを、合わせて確認できます。
  5. ” sudo apt upgrade ” コマンドを実行し、パッケージの更新を行います。

以上で、本手順のヘッドレスインストールは完了です。