ラズベリーパイでUnifiコントローラーを建てる(2023年11月)

Raspberry Pi4 B(4GB版) へUnifiコントローラーのインストールを行ったのですが、地味に大変辛かったので、備忘録代わりにインストール手順を記載します。
主に下記の記事を参考にしています。

https://help.ui.com/hc/en-us/articles/220066768-Updating-and-Installing-Self-Hosted-UniFi-Network-Servers-Linux-

https://community.ui.com/questions/MongoDB-to-be-updated-to-support-64-bit-kernel-in-Raspberry-Pi/1e3977c8-f3e2-4601-8a5b-de76938eba7c

https://rewse.jp/blog/install-ubiquiti-unifi-network-application-raspberry-pi/

https://community.ui.com/questions/Step-By-Step-Tutorial-Guide-Raspberry-Pi-with-UniFi-Controller-and-Pi-hole-from-scratch-headless/e8a24143-bfb8-4a61-973d-0b55320101dc

また、使用したラズベリーパイおよびOSの詳細は下記のとおりです

```
cappuccino@unifi-console:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"
cappuccino@unifi-console:~$  cat /proc/device-tree/model
Raspberry Pi 4 Model B Rev 1.2
```

## 使用したラズベリーパイのOS(Ubuntu)の用意

Raspberry Pi Imagerでラズパイへ挿すmicroSDカードの準備を行います

https://www.raspberrypi.com/software/

「other general-purpose OS」> 「Ubuntu」 > 「Ubuntu Server 22.04.3 LTS (64-bit)」をインストールします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/d063031e-529c-43ac-ef83-fb468f776c0f.png)

その他によしなに必要な設定を実施し、microSDカードへOSの書き込みを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/76ffbd5c-c939-68cf-14f4-57c65f34fbc0.png)

Unifiコントローラーにはmongodb3.6が必要だが、raspberry pi osのリポジトリには64bit版のmongodb3.6が含まれていない?&unifiコントローラー7.5以上は64bitOSでないと動かない・・・という罠があるようなので、raspberry pi OSはおすすめしません
まぁubuntuも古いバージョンのリポジトリにしか mongodb3.6のarm64版は入っていないんですが・・・

## ラズベリーパイの設定
ラズベリーパイのコンソールへアクセスし、下記設定を行います

#### インストール操作に必要なパッケージをインストールします
```
sudo apt-get update -y  &&  sudo apt-get install -y ca-certificates apt-transport-https
```

ついでにアップデートもしておきます
```
sudo apt-get upgrade -y
```

#### リポジトリの設定を変更(mongoDBの設定を追加)します
mongoDB3.6のarm64版が必要になるので、リポジトリ指定を昔のubuntuのリポジトリからゴニョゴニョしてこれを取得できるようにしています
```
wget -qO - https://www.mongodb.org/static/pgp/server-3.6.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
sudo apt-get update
```

参考: 
https://qiita.com/n0bisuke/items/76afae90635264797ba1
https://www.mongodb.com/docs/v3.6/tutorial/install-mongodb-on-ubuntu/
https://www.mongodb.com/docs/v3.6/administration/production-notes/#prod-notes-supported-platforms

 #### libssl1.0.0の追加
 mongoDB3.6の依存パケージらしいのですが、ubuntu22.04にはもう存在していないようです。
 そのため、こちらも昔のubuntuのパッケージを持ってきてインストール無理やりインストールします
```
wget http://launchpadlibrarian.net/668090466/libssl1.0.0_1.0.2n-1ubuntu5.13_arm64.deb
sudo dpkg -i libssl1.0.0_1.0.2n-1ubuntu5.13_arm64.deb
```

参考:
https://askubuntu.com/questions/1403619/mongodb-install-fails-on-ubuntu-22-04-depends-on-libssl1-1-but-it-is-not-insta
https://launchpad.net/ubuntu/focal/arm64/libssl1.1/1.1.1f-1ubuntu2

#### unifiコントローラーをインストールします

wgetの引数は、下記URLから適当なバージョンのダウンロードリンク(Linux版のURLをコピーしてください)を渡します
https://www.ui.com/download/releases/network-server

```
wget https://dl.ui.com/unifi/8.0.7/unifi_sysvinit_all.deb
sudo dpkg -i unifi_sysvinit_all.deb; sudo apt install -f -y
```

#### `systemctl`で一応プロセスとして動いていることを確認します
```
~$ systemctl status unifi
● unifi.service - unifi
     Loaded: loaded (/lib/systemd/system/unifi.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2023-11-30 01:09:58 JST; 3min 24s ago
    Process: 112656 ExecStartPre=/usr/sbin/unifi-network-service-helper init (code=exited, status=0/SUCCESS)
    Process: 112706 ExecStartPre=/usr/sbin/unifi-network-service-helper init-uos (code=exited, status=0/SUCCESS)
    Process: 112718 ExecStartPost=/usr/sbin/unifi-network-service-helper healthcheck (code=exited, status=0/SUCCESS)
   Main PID: 112716 (java)
      Tasks: 90 (limit: 4416)
     Memory: 633.2M
        CPU: 2min 54.715s
     CGroup: /system.slice/unifi.service
             ├─112716 /usr/bin/java -Dfile.encoding=UTF-8 -Djava.awt.headless=true -Dapple.awt.UIElement=true -Dunifi.c>             └─113374 bin/mongod --dbpath /usr/lib/unifi/data/db --port 27117 --unixSocketPrefix /usr/lib/unifi/run --l>

Nov 30 01:07:35 unifi-console systemd[1]: Starting unifi...
Nov 30 01:07:36 unifi-console unifi[112704]: init complete...
Nov 30 01:07:36 unifi-console unifi-network-service-helper[112704]: <13>Nov 30 01:07:36 unifi: init complete...
Nov 30 01:07:40 unifi-console java[112716]: WARN Unable to load properties from '/usr/lib/unifi/data/system.properties'>Nov 30 01:09:59 unifi-console unifi-network-service-helper[114864]: <13>Nov 30 01:09:58 unifi: unifi is up and running.>Nov 30 01:09:58 unifi-console systemd[1]: Started unifi.　
```

## Unifiコントローラーのセットアップ

#### ブラウザからhttps://<ラズベリーパイのIPアドレス>:8443でアクセスします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/d18cbd2f-2b37-12ac-598f-66574dcba0ef.png)

#### ホスト名と地域名の設定、そして利用規約への同意を行います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/627f8a1d-a839-0965-3d23-5b3136a7b3d1.png)

#### UIアカウントでログインします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/dfbf8f12-ff46-85f3-6bd5-31599b2a944a.png)

ubiquitiアカウントがない方はよしなにアカウントを作成してください
どこかにusernameかどこかに日本語文字列が混ざるとどこかの処理が一生進まないみたいな罠があった記憶なので、一応留意していただければと思います。

#### 完成!!!
ダッシュボードを拝むことができました
バージョン`8.0.7`がインストールされていますね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/6d4691a1-9bd5-9b0e-d617-4234533ae23c.png)

## その他メモ
### 下記手順で固定IPを割り当てます
ubuntuではnetplanを使用してIPアドレスの設定を行います
```
cd /etc/netplan
sudo touch 99-config.yaml
sudo vim 99-config.yaml
```

下記のような感じで、設定ファイルに設定を記載します
```
network:
  ethernets:
    eth0:
      optional: true
      dhcp4: no
      dhcp6: no
      addresses:
      - 172.16.23.2/24
      nameservers:
        addresses:
        - 8.8.8.8
        - 8.8.4.4
      routes:
        - to: default
          via: 172.16.23.1
    wlan0:
      optional: true
  version: 2
```

* gateway4でのデフォゲの指定はdeprecateｄになったようです

https://rohhie.net/ubuntu22-04-netplan-gateway4-has-been-deprecated/
https://tex2e.github.io/blog/linux/ubuntu-netplan

設定完了後、設定ファイルの権限を修正したうえでnteplanの提要を行います
```
 sudo chmod 600 *
 sudo netplan apply
 ```

### Ubiquitiのスイッチを参加させる
今回作成したラズパイと同一のサブネットに、ubiquitiのスイッチを接続し起動します。（もしくは本体正面左下のResetボタンを5秒以上押してリセットします）

その後、サイドメニューの二重丸アイコン(Unifi Devices)を押下して管理する機器一覧を表示すると、自動的にこちらに表示されます。
「Click to Adopt」を押下し、ubiquitiのスイッチをunifiコントローラーへ参加させます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/213714/c428a89a-c190-e176-92a6-1073f6f8996d.png)