Raspberry Pi 4 Model BにUbuntu 20.04 Serverを導入してMateデスクトップを起動する

# 用意した物

1. microSDカード(SDXC) 64GB
1. Raspberry Pi 4 type B (メモリ4GB)
1. microSDカード書き込み用PC (Windows10で動作)
1. インターネットに繋がったWiFiルータ

# Ubuntu Server 20.04.2の入ったmicroSDカードの作成

microSDカード書き込み用PCで作業します。

## Raspberry Pi Imagerのインストール

Raspberry Pi OSの公式Webサイトにアクセスして、Raspberry Pi Imagerをダウンロード＆インストールします。

https://www.raspberrypi.org/software/

執筆時点(2021.3.7)では、バージョンは1.5でした。

## Raspberry Pi ImagerによるmicroSDカードへのOSイメージの書き込み

メディアリーダー/ライターにmicroSDカードを挿入して、Raspberry Pi Imagerを起動します。

![Raspberry Pi Imager v1.5 2021_03_07 15_04_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/55c61faf-ecf7-8af8-cc17-9adc4e724705.png)

起動したら"Operating System"の下の"CHOOSE OS"を、選択します。

![Raspberry Pi Imager v1.5 2021_03_07 15_05_17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/7779257a-9e02-d80f-038b-c47f881746e4.png)

"Operating System"というウィンドウが開くので、"Other general purpose OS"を選択します。

![Raspberry Pi Imager v1.5 2021_03_07 15_05_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/37e54e2c-0dff-182d-12e9-b1d33e366606.png)

表示が切り替わるので、"Ubuntu"を選択します。

![Raspberry Pi Imager v1.5 2021_03_07 15_05_48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/76ec07b9-514c-506e-85eb-49ebb8491d54.png)

さらに表示が切り替わるので、"Ubuntu Server 20.04.2 LTS(RPi 3/4/400) 64-bit server OS with long-term support for arm64 architectures"を選択します。

見た目が32bit版と紛らわしいので、間違わないように注意しておいたほうが良いと思います。

![Raspberry Pi Imager v1.5 2021_03_07 15_15_37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/a4a5f3e1-493f-d04b-dc57-4461eea5574e.png)

"Operating System"というウィンドウが消えて、元のウィンドウの"Operating System"欄に"UBUNTU SERVER 20.04.2 LTS (RPI 3/4/400)"と表示されていることを確認します。

そして、"SD Card"の"CHOOSE SD ..."を選択します。

![Raspberry Pi Imager v1.5 2021_03_07 15_15_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/25a19d3c-d8d1-f3e2-a5f6-8be8889740f6.png)

"SD Card"というウィンドウが開くので、書き込み先のmicroSDカードを指しているものを選択します。

![Raspberry Pi Imager v1.5 2021_03_07 15_16_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/8604859b-5e93-a406-873f-ebde25847a07.png)

"SD Card"ウィンドウが消えて、元のウィンドウの"SD Card"欄に、選択した書き込み先が表示されていることを確認します。

そして、"WRITE"を選択します。

![Raspberry Pi Imager v1.5 2021_03_07 15_16_19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/191cffe1-6baf-5e2e-fa66-4cddb209d509.png)

確認のダイアログが表示されるので、問題なければ"YES"を選択します。

![Raspberry Pi Imager v1.5 2021_03_07 15_20_50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/ec432c5f-0eb1-2382-d610-83d291921bd1.png)

OSイメージのダウンロードとmicroSDカードへの書き込みが始まるので、完了するまで待ちます。

![Raspberry Pi Imager v1.5 2021_03_07 15_24_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1169654/83fe5c16-b160-a734-bc93-77285a176be0.png)

完了したらダイアログが表示されるので、microSDカードを取り出して、"CONTINUE"を選択します。

最後に、"X"を選択して、Raspberry Pi Imagerを終了します。

# Raspberry Pi上のUbuntu Server 20.04.2へのMateのインストール

## 初回ログイン時の設定

ここからは、Raspberry Pi 4で作業します。

イメージが書き込まれたmicroSDカードをRaspberry Pi 4に挿入して、起動します。

起動シーケンスが続いたあとに、ログインプロンプトで表示が止まります。

しばらくすると、遅れて起動したサービスの表示が現れて画面表示が乱れますが、適当にキーボードの"Enter"を押すと、クリーンにできます。

```bash
ubuntu 20.04.2 LTS ubuntu tty1
ubuntu login:
```

初期アカウントは"ubuntu"、初期パスワードは"ubuntu"になっています。

ここでは、"ubuntu"を入力します。次にパスワードを聞かれるので、再び"ubuntu"と入力します。

すぐに、パスワード変更の指示が表示されて、現在のパスワードを要求されるので、さらに"ubuntu"と入力します。

そして、新しいパスワードの入力が要求されるので、パスワードに適切な文字列を入力し、確認のためにもう一度、新しいパスワードを入力します。

## アカウントの作成と初期アカウントの削除

初期アカウントのままで作業を続けるのは、セキュリティ的に良くないので、初期アカウントと同一のサブグループを持つ新しいアカウントを作成します。

```bash
sudo useradd -G $(id -nG | sed -e "s/$(id -ng)//g" -e 's/^\s//g' -e 's/ /,/g') -s /bin/bash -k /etc/skel -m {アカウント名}
sudo passwd {アカウント名}
exit
```

新しく作成したアカウントでログインできることを確認します。

無事にログインができたら、初期アカウントを削除します。

```bash
sudo deluser --remove-home ubuntu
```

## ホスト名の変更

初期ホスト名は"ubuntu"になっているが、これもセキュリティ的に良くないのと、複数台をセットアップするときに面倒になるので、変更します。

```bash
sudo hostnamectl set-hostname {ホスト名}
```
ホスト名の変更を反映させるために、ここで再起動します。

```bash
sudo reboot
```

再起動が完了したら、作業用のアカウントでログインしておきます。

## Swap領域の作成

Ubuntu 20.04では、デフォルトではSwap領域が作成されていません。

比較的規模の大きなソフトウェアを動作させる予定がなければ、読み飛ばしてください。

もし、その予定があるなら、メモリが足りなくなった際にフリーズする場合があるので、Swap領域を作成しておきます。

ここでは、大きめの8GBを確保して設定する場合について、以下に示しておきます。

```bash
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo sh -c 'echo "/swapfile\tnone\tswap\tsw\t0\t0" >> /etc/fstab'
```

## WiFi接続の設定

有線LAN接続の場合は、読み飛ばしてください。

Netplanの設定ファイルを、標準で入っているスクリーンエディタ(Vim,Nano)で開きます。

```bash
sudo vim /etc/netplan/50-cloud-init.yaml
```

以下のように、WiFi関連の設定を記述した"wifis"キーを追加します。

```yaml:/etc/netplan/50-cloud-init.yaml
network:
  version: 2
  renderer: NetworkManager
  ethernets:
    eth0:
      dhcp4: true
      optional: true
  wifis:
    wlan0:
      dhcp4: true
      optional: true
      access-points:
        "{アクセスポイントのSSID}":
          auth:
            key-management: psk
            password: "{パスワード}"
```

Netplanの設定を、反映させます。

```bash
sudo netplan apply
```

うまく設定できていれば、hostnameコマンドでIPアドレスが取得できていることが確認できます。

```bash
hostname -I
```

## 時刻同期の設定

Raspberry Piでは時刻を常時保持できないため、IPネットワーク経由で時刻同期する設定を行います。

この設定をしておかないと、aptによるパッケージのアップデートができない場合があります。

Systemd-timesyncdの設定ファイルを、スクリーンエディタで開きます。

```bash
sudo vim /etc/systemd/timesyncd.conf
```

そして、以下のように"NTP"の項目に、適切なNTPサーバを記入します。

```:/etc/systemd/timesyncd.conf
[Time]
NTP=ntp.nict.jp
#NTP=
#FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
```

Systemd-timesyncdサービスを再起動し、statusコマンドで"Active: active (running)"になっていることを確認します。

```bash
sudo systemctl restart systemd-timesyncd.service
sudo systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
     Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-03-07 07:13:18 UTC; 18s ago
       Docs: man:systemd-timesyncd.service(8)
   Main PID: 4883 (systemd-timesyn)
     Status: "Initial synchronization to time server 133.243.238.163:123 (ntp.nict.jp)."
      Tasks: 2 (limit: 4436)
     CGroup: /system.slice/systemd-timesyncd.service
             └─4883 /lib/systemd/systemd-timesyncd

Mar 07 07:13:17 ubuntu systemd[1]: Starting Network Time Synchronization...
Mar 07 07:13:18 ubuntu systemd[1]: Started Network Time Synchronization.
Mar 07 07:13:18 ubuntu systemd-timesyncd[4883]: Initial synchronization to time server 133.243.238.163:123 (ntp.nict.jp).
```

## Mateパッケージのインストール

aptコマンドだけで、インストールできます。

```bash
sudo apt update && sudo apt dist-upgrade -y
sudo apt install -y ubuntu-mate-desktop
```

パッケージのダウンロードに結構時間がかかりますが、途中でディスプレイマネージャの選択で入力待ちになるので、放置する場合には注意が必要です。

ディスプレイマネージャの選択肢は、gdm3とlightdmですが、これは好みの方を選択すれば良いと思います。

手元の環境では、最終的に2時間半程度かかりました。

終了したら、再起動します。

```bash
sudo reboot
```

起動シーケンス後、グラフィカルログインの画面になればOKです。

# 参考サイト
https://qiita.com/hiro-han/items/56c4fb6a1ad4c1713a7f