ぽんこつ自由研究

備忘録的な

MoodleBoxをRaspberryPiに入れた話(備忘録)

*間違いを発見したので、修正しました。

Moodleはウェブサーバは要件ではなく、NginxはMoodleboxで使用されているウェブサーバです。

 

0.はじめの動機

Learning Management Systemで研修コースを作るのを試してみたい。

でも、ある程度クローズドなネットワークで試してからにしたい。

と考えて、CanvasMoodleを比較していいたところ、MoodleはRaspberryPi用のRasbianベースのディストリビューション(?)があるというので、なにをするものだかよくわからないけれど、体当たり的に試してみることにしました。

ちなみにCanvasはDockerが動かないとだめで、開発言語がRuby、データベースがPostgreSQLです。

 

公式サイトはこちら。

moodlebox.net

ざっくり説明すると、MoodlePHPMySQLで構築されているLMSです。MoodleboxはWeb サーバにNginxを使っています。

MoodleboxはAPになって、無線LANを提供してくれる機能がついているラズパイ用のMoodleプラットフォームです。OSは、Rasbianをベースにしているので、ほとんどDebianです。

最終的な設定はこのネットワーク図がわかりやすいです。

moodlebox.net

 

手元には、買ったきり元気がなくて電源も入れてない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"とかで検索してください。

設定したら、

/etc/ssh/sshd_configの設定を、

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 の行を#でコメントアウトして再起動。

動いた!!!

「interfacelisten-addressが同じものを指定するものなのでbind-interfaceコマンドで情報がコンフリクトしてリンク出来なくなる」、と。

apt-get upgradeするまでは動いてるから、何かが変わったのかも。(*まだ調べていません)

 

6.iPhoneテザリングを有線接続してインターネット側につなぐ

私が普段使いたい環境は、ルータと物理的に離れていることと、ちょっと外部へ持ち運んで人に見せたいなどの事情があったので、少しだけネットワーク設定を変更することにしました。

そもそもMoodleBoxはインターネットに繋がなくても使えるのですが、

MoodleBoxネットワークに接続中はインターネットを見ることができない、MoodleBox自体のアップデートや追加プラグインのインストールなどができない、コンテンツにURLを貼ってもそのまま飛べないなど、非常に不便です。

インターネットに繋がっていれば、言語パックのインストールなどは、Moodleの管理画面から出来ます。

 

インターネットに繋ぎたい。

有線接続をしたい。でも、どこに?

iPhoneテザリングだ!

というわけでUSBーLightningケーブルを使用して

ラズパイ(USB)---(Lightning)iPhone

という接続をしていきます。

 

こちらの記事を参考にさせていただき、必要なものをインストールしてトラブルもなく接続できました。インストール前には、apt-get updateとapt-get upgradeを終わらせておいてください(自戒)。

embedded.hatenadiary.org

$ 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側のセキュリティ設定も確認しておきましょう。

iPhone経由でつながっているほうのIPアドレス

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に差し替えました。