ラズパイ4のメンテナンス
海外からの接続用として大活躍しているラズベリーパイなのですが、以前使っていたバージョン3から現在は4へアップグレードしておりまして、そのメンテナンス情報をまとめておきます。稼働するOSはUbuntu 18.04 LTSで、アプリケーションとしてはSoftEtherVPNとZabbix Agentが稼働しています。まずはOSから。MacOSでの作成方法です。参考にしたサイトは「こちら」です。
RASPI4自体は64bitOS対応ですが、SoftEtherVPNのARM対応は、公式サイトでは32bit版しか提供されないため、ソースからコンパイルする以外は、ここで導入するOSは32bit版を選択する必要があります。Ubuntuの「公式サイト」からダウンロードしておきます。使用するイメージは「ubuntu-18.04-preinstalled-server-armhf+raspi2.img.xz」です。くどいようですが32bit版です。
sudo sh -c 'gunzip -c ubuntu-18.04-preinstalled-server-armhf+raspi2.img.xz | sudo dd of=/dev/disk2 bs=32m'
こんな感じのコマンドでSDカードに書き込みます。「/dev/disk2」の部分は実際の環境に合わせて変更が必要です。書き込みが完了したSDカードを使ってRASPIを起動すると、ポート22が開いているのでSSH接続出来ます。初回の接続は有線接続がおすすめです。初期起動の条件等は通常のUbuntuと同じです。次はアプリケーションの導入についてです。
まずは、ZABBIXの導入から。公式サイトでパッケージを選択しますが、32bitに対応した、ZABBIX 5.0 LTS + RASPI(4) + Ubuntu 18.04 LTSというズバリの組み合わせは存在しません。選択するのは、5.0 LTS + Rasberry Pi OS + 9 (Stretch)という組み合わせです。これで32bit版のリポジトリが入手できます。以下のコマンドが表示されるので、指示に従ってリポジトリを導入し、その後ZABBIX-AGENTを導入します。
# wget https://repo.zabbix.com/zabbix/5.0/raspbian/pool/main/z/zabbix-release/zabbix-release_5.0-1+stretch_all.deb # dpkg -i zabbix-release_5.0-1+stretch_all.deb # apt update
次はSoftEtherVPNの導入です。公式サイトから、Linux + ARM EABI(32bit)の組み合わせで表示されるバージョンをダウンロードします。今回は「SoftEther VPN Server (Ver 4.34, Build 9745, rtm)」を使用しました。ダウンロードしたファイルをtarで解凍してできるvpnserverフォルダでmakeして実行ファイルを作成します。make類は事前にインストールが必要です。最低限、makeとgccの追加導入が必要です。
様々なサイト、果ては2チャンネルにまで、RASPIでは、ここでmakeが失敗するのでソースからコンパイルするしか方法が無いかのように書かれていますが、前述したように、RASPIのOSを32bit版にしておけば、エラーは発生せず、全く問題なく実行ファイルを作成することが出来ます。64bit環境で32bit版をmakeしようとすると、以下のようなエラーが出ます。どうしても64bit環境で実行したい場合はソースからコンパイルするしか方法はありません。
Preparing SoftEther VPN Server... ranlib lib/libcharset.a ranlib lib/libcrypto.a ranlib lib/libedit.a ranlib lib/libiconv.a ranlib lib/libncurses.a ranlib lib/libssl.a ranlib lib/libz.a ranlib code/vpnserver.a gcc code/vpnserver.a -fPIE -O2 -fsigned-char -lm -ldl -lrt -Wl,--no-warn-mismatch -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a -o vpnserver code/vpnserver.a: error adding symbols: File in wrong format collect2: error: ld returned 1 exit status Makefile:18: recipe for target 'i_read_and_agree_the_license_agreement' failed make[1]: *** [i_read_and_agree_the_license_agreement] Error 1
実行ファイル作成が成功したらvpnserverフォルダ自体を/usr/local/下に移動し、パーミションを744等に変更するのと同時に、所有者をrootへ変更します。管理が便利なように「VPNのサービス化」を参考にしてサービス化します。最終的には、以下のようになりました。
[Unit] Description=SoftEther VPN Server After=network.target auditd.service ConditionPathExists=!/usr/local/vpnserver/do_not_run [Service] Type=forking EnvironmentFile=-/usr/local/vpnserver ExecStart=/usr/local/vpnserver/vpnserver start ExecStop=/usr/local/vpnserver/vpnserver stop KillMode=process Restart=on-failure # Hardening PrivateTmp=yes ProtectHome=yes ProtectSystem=full ReadOnlyDirectories=/ ReadWriteDirectories=-/usr/local/vpnserver CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST CAP_NET_RAW CAP_SYS_NICE CAP_SYS_ADMIN CAP_SETUID [Install] WantedBy=multi-user.target
64bitと32bitの性能差が気になると思いますが、現在の環境で、欧州から10MB/s以上のスループットが出ているので、余程大量の接続を処理する必要性が無いのであれば、そもそもラズパイなので32bit環境でも十分だと思います。