Internet-in-a-Box(IIAB)は、インターネットにアクセスできない学校・診療所・刑務所・地域向けに、Wikipediaやカーンアカデミー動画、OpenStreetMap、電子書籍などの知識コンテンツをRaspberry Piなどの小型サーバーに詰め込んで配布するプロジェクトです。Ansibleを使って30種類以上の教育アプリやLMSをインストールし、近くのスマートフォンやノートPCからWi-Fi経由でオフライン図書館として利用できるようにします。
中核はAnsibleです。iiab-install(実体はansible.cfgとiiab-stages.ymlに基づく実行)が各roles配下のタスクを順に適用し、nginx・MySQL・Kiwix・Kolibri・MediaWikiなど個々のサービスを設定します。roles/以下には有効なロールと、0-DEPRECATED-ROLESに退役済みロール(ajenti、kalite、moodle-1.9など)が分かれて置かれており、defaults/main.ymlで有効・無効フラグを持ちます。インストール完了後は/etc/iiab/iiab_state.ymlに各サービスのインストール状態が記録され、iiab-summaryコマンドで確認できます。CIでは.github/workflows配下に複数のGitHub Actionsが用意されており、Ubuntu環境で実際にiiab-installを走らせ、expected_state_*.ymlとの差分(diffコマンド)で正しくインストールされたかを検証しています。
- STEP 01
download.iiab.ioの1行インストーラーをRaspberry Piまたはubuntu系サーバーで実行すると、まずscripts/ansibleが動きAnsible本体がセットアップされます。
- STEP 02
続いてiiab-installが走り、roles配下の各コンポーネント(nginx、MySQL、Kiwixなど)が順次インストールされ、環境によっては1時間前後かかります。
- STEP 03
インストール完了後、iiab-summaryコマンドを打つと/etc/iiab/iiab_state.ymlの内容が要約表示され、どのサービスがTrueになったか確認できます。
- STEP 04
ブラウザでhttp://boxまたはhttp://box.lanにアクセスすると、IIABのホームページとhttp://box.lan/adminの管理コンソールが現れます。
- STEP 05
管理コンソールからコンテンツパック(Wikipediaやカーンアカデミーなど)をダウンロードしてドラッグ&ドロップで配置する作業が必要で、これは数GB単位のダウンロードになるため別途時間がかかります。
- STEP 06
GitHub上のCIログ(例えば07min-unittest-on-ubuntu.yml)を見ると、実際にiiab-installを走らせてexpected_state_unittest.ymlとの差分をdiffで検証している様子が確認でき、動作実績の裏付けになります。
実行すると、Raspberry Piやサーバー上に完結したオフライン学習ポータルが立ち上がり、box.lanという名前でWi-Fiホットスポット兼Webサーバーとして機能します。管理コンソールからWikipedia・Kolibri・Kiwix・MediaWiki・Nextcloud・Moodleなど選んだアプリやコンテンツパックにアクセスできるようになり、インターネット接続がない環境でも図書館的な知識基盤が手に入ります。
roles/0-DEPRECATED-ROLES配下にはajenti、kalite、moodle-1.9など多数の退役ロールが残っており、現行のインストールフローでは使われないため、コードを読む際は混同しないよう注意が必要です。
expected_state_large.yml等のテストファイルには「IIAB does NOT currently support uninstalling apps/services」と明記されており、一度入れたアプリは後から個別に削除できない設計です。
コンテンツパック(Wikipediaや動画教材など)は数GB〜数十GBに及ぶため、実際に使えるようにするにはインストール後も別途長時間のダウンロード作業が必要です。
CIはUbuntuやRaspberry Pi OS向けの複数ワークフローで検証されていますが、一部のワークフロー(40min-none-on-rpios-lite-zero2w.yml.pausedなど)は.pausedとなっており現在無効化されています。
学校・診療所・地域コミュニティなど、インターネットが不安定または存在しない場所で「持ち運べる図書館サーバー」を作りたい人に向いています。README・roles構成・CIのexpected_state検証ファイルから、Ansibleベースの実際に動くインストールフローであることが確認でき、GitHub Actions上で本物のiiab-installを実行し状態ファイルをdiffで照合している点は信頼性の裏付けとして十分です。ただし退役ロールの混在やコンテンツパックの別途ダウンロードが必要な点は、実際に手元で動かす前に把握しておくべき実務上の留意点です。