MoodleBoxをRaspberryPiに入れた話(備忘録)
- 0.はじめの動機
- 1.作り方
- 2.繋ぎ方
- 3.とにかくSSH
- 4.インターネットに繋ぎたい
- 5.トラブル MoodleBox Wifiが居なくなる
- 6.iPhoneテザリングを有線接続してインターネット側につなぐ
- 7.最後に
*間違いを発見したので、修正しました。
Moodleはウェブサーバは要件ではなく、NginxはMoodleboxで使用されているウェブサーバです。
0.はじめの動機
Learning Management Systemで研修コースを作るのを試してみたい。
でも、ある程度クローズドなネットワークで試してからにしたい。
と考えて、CanvasとMoodleを比較していいたところ、MoodleはRaspberryPi用のRasbianベースのディストリビューション(?)があるというので、なにをするものだかよくわからないけれど、体当たり的に試してみることにしました。
ちなみにCanvasはDockerが動かないとだめで、開発言語がRuby、データベースがPostgreSQLです。
公式サイトはこちら。
ざっくり説明すると、MoodleはPHP+MySQLで構築されているLMSです。MoodleboxはWeb サーバにNginxを使っています。
MoodleboxはAPになって、無線LANを提供してくれる機能がついているラズパイ用のMoodleプラットフォームです。OSは、Rasbianをベースにしているので、ほとんどDebianです。
最終的な設定はこのネットワーク図がわかりやすいです。
手元には、買ったきり元気がなくて電源も入れてないRaspberryPi3B+と、先週ちょっとRaspbianを入れてssh使えるぐらいまでにしたRaspberryPi4(8Gメモリ)がありました。
マイクロSDカードはScanDiskの128GBとSAMSUNGの128GBを使いました。(どっちでも特に変わりないです。)
1.作り方
まず、下記から必要なイメージファイルをダウンロードします。
MoodleBox | Download the disk image
「俺はCUIで戦う、ddするんじゃ」というこだわりがなければ、ラズパイ側には公式でRaspbery Pi ImagerというSDカードにイメージをそのまま書き込んでくれるソフトウエアがあるので、こちらをダウンロードして使うのをおすすめします。
Raspberry Pi OS – Raspberry Pi
まず、マイクロSDカードをPCから書き込めるように挿入します。
「Choose OS」で「Use Custom」を選択して、先程ダウンロードしたMoodleBoxを選択しておきます。
「SD Card」は挿入したSDカードを選択します。
ここで、すでに書き込み先が「SD Card」と限定されているので、超うっかりしている私のようなものでも安心なのが、本当に素晴らしいところです。
書き込みが終わったら、ラズパイに刺します。
終了。
2.繋ぎ方
MoodleBox | How can I connect to the MoodleBox via Wi-Fi
SDカード挿入して、電源入れたら、Moodleとして最初から使うことができます。
ここで、MoodleBox | MoodleBox network topologyに戻って確認してみましょう。
電源を入れた時点で、このMoodleBoxというWifiネットワークがすでに構築され
wlan0はstaticで10.0.0.1に設定されています。
そこで、まず、PCのWifiをこのネットワークに無線接続します。
SSID:MoodleBox
初期パスワード:moodlebox
それから、ブラウザを開き、”moodlebox.home"あるいは”10.0.0.1"と入力します。
すると、ホーム画面が開きます。
初期の管理者ログインのユーザ名とパスワードは以下です。
username: moodlebox
Password: Moodlebox4$
3.とにかくSSH
MoodleBoxは最初からSSHで繋がります。そのため、PCがあれば、(トラブルがなければ)ディスプレイなしで使いはじめることができます。
ssh moodlebox@10.0.0.1
パスワードは
Password: Moodlebox4$
で、パスワードは変更しておくのが良いと思いますが、面倒なので、私はこの時点で公開鍵認証に変更しています。
sshの公開鍵認証については、記事を書いている方がたくさんいらっしゃるので、
"SSH 公開鍵認証 Raspberry pi"とかで検索してください。
設定したら、
PasswordAuthentication no #パスワード認証しない
PermitRootLogin no #ルートログイン許可しない
PubkeyAuthentication yes #公開鍵認証を使用する
にしました。
sudo service sshd restart
もう一個、端末(ターミナル)を開いて、パスワードを聞かれずにsshログインできれば、OKです。ログイン出来なかった場合に設定し直すことができるように、端末は複数開いておきます。
4.インターネットに繋ぎたい
イーサケーブルがお手元にあり、DHCPなルーターが近くにあったりして、すぐにNetwork Topology図にあるようにインターネット側に有線接続できる方はそのようにするのが簡単です。
インターネットに繋いでやりたいことは、全体的なアップグレードと日本語パックのインストールです。
5.トラブル MoodleBox Wifiが居なくなる
インターネット接続は後述するとして、この件はインターネットに繋がっている前提で記載します。apt-get upgradeしたら起きたものです。
以下の手順で、起きなくなると思われます。
/etc/dnsmasq.confを開いて bind-interfaces の行を#でコメントアウト
sudo apt-get update
sudo apt-get upgrade
だめだったやり方
sudo apt-get update
sudo apt-get upgrade
sudo reboot
すると、WiFiからMoodleBoxが消える。
ログを読むとdnsmasqがFailしてる。
sudo service dnsmasq restart
出来ないので、
sudo apt-get autoremove dnsmasq
sudo reboot
sudo apt-get install dnsmasq
立ち直ったかに見えた。が、rebootすると、自動起動がFailする。
netstat見たり、serviceの起動状況見たり、ログを読んだり
あれこれ試しましたが、全く同じエラーの人を発見しました。
[SOLVED]How I can set dnsmasq start after hostapd - Raspberry Pi Forums
/etc/dnsmasq.confを開いて bind-interfaces の行を#でコメントアウトして再起動。
動いた!!!
「interfaceと listen-addressが同じものを指定するものなのでbind-interfaceコマンドで情報がコンフリクトしてリンク出来なくなる」、と。
apt-get upgradeするまでは動いてるから、何かが変わったのかも。(*まだ調べていません)
6.iPhoneテザリングを有線接続してインターネット側につなぐ
私が普段使いたい環境は、ルータと物理的に離れていることと、ちょっと外部へ持ち運んで人に見せたいなどの事情があったので、少しだけネットワーク設定を変更することにしました。
そもそもMoodleBoxはインターネットに繋がなくても使えるのですが、
MoodleBoxネットワークに接続中はインターネットを見ることができない、MoodleBox自体のアップデートや追加プラグインのインストールなどができない、コンテンツにURLを貼ってもそのまま飛べないなど、非常に不便です。
インターネットに繋がっていれば、言語パックのインストールなどは、Moodleの管理画面から出来ます。
インターネットに繋ぎたい。
有線接続をしたい。でも、どこに?
というわけでUSBーLightningケーブルを使用して
ラズパイ(USB)---(Lightning)iPhone
という接続をしていきます。
こちらの記事を参考にさせていただき、必要なものをインストールしてトラブルもなく接続できました。インストール前には、apt-get updateとapt-get upgradeを終わらせておいてください(自戒)。
$ sudo apt-get install ipheth-utils libimobiledevice-utils ifuse usbmuxd
$ sudo mkdir /media/iphone
$ sudo ifuse /media/iphone
これで、PCはMoodle Box に繋がり、Moodle Boxをインストールしたラズパイ はインターネットに繋がりますが、それだけではPCはインターネットまでは繋がりません。
そもそも、オリジナル設定のMoodleBoxが有線でルータにつないでおけば、インターネットまで到達する理由は、/etc/iptables/rules.v4で、wlan0のパケットをeth0に転送(Forward)する設定がしてあるからなのですが、今回のUSBはeth1にするので、転送先をeth1に書き換えることにします。iptables-persistent, netfilter-persistentもMoodleBoxには最初から入っているので、追加インストールは不要です。
sudo cp /etc/iptables/rules.v4 /etc/iptables/rules.v4.bak #バックアップ
し
sudo vi /etc/iptables/rules.v4 #編集する
とか、中身がわかっていて一気に置換する場合は
sed -i -e 's/eth0/eth1/g' rules.v4 #一括編集
で、wlan0との転送をeth0からeth1に書き換えます。
そのままでは設定が反映されないので
sudo service netfilter-persistent reload
これで、iPhoneに繋がります。
iPhoneの接続先は、家庭内や無料接続などのWifiでも、キャリアのでも大丈夫です。
そのため、持ち出した先の無線LANなどを使用してインターネット側につなぐことができます。
*その場合は、初期パスワードを変更するなどMoodle側のセキュリティ設定も確認しておきましょう。
ip addr show
でeth1から確認できます。
7.最後に
MoodleBoxを理解していなかったので、
最初、普通に以下にいつもどおりの無線と有線のネットワーク接続情報を設定したところMoodleとして機能しませんでした。
/etc/dhcpcd.conf
/etc/wpa_supplicant/wpa_supplicant.conf
最初、インターネットに繋ぐ方法を思いつくまでの間は、この辺のネットワーク設定を書いて無線でインターネットに繋いでapt-get upgradeしたり、日本語パックをダウンロードしたりして、終わったら戻すという形で設定してました。(できなくはない)
電圧は足りてません。
vcgencmd measure_volts
vcgencmd get_throttled
あたりを確認していたので、備忘録として書き添えておきます。
ラズパイは、sdカード差し替えるだけで本体を乗り換えられたので、とても便利でした。2個あったので、1個はうまくいった設定だけ載せていき、最終的にラズパイ3のほうで行っていた設定でiPhoneテザリングがうまくいったので、そのまま4に差し替えました。