![]() |
VOOZH | about |
Do you need the best of the Internet (Wikipedia, OpenStreetMap, Khan Academy, Stack Exchange, ETC) with local content and learning apps for all?
Customize an "Offline Internet" for your school, for your community — or for your very own family!
Listen to the 23min BBC podcast "How to put the internet in a box" (2020-10-20) to learn how this works. See also a great community example in North India (3min) from 2021. Internet-in-a-Box (IIAB) is used in medical clinics as well, as can be seen in this Dominican Republic video.
Please see our internet-in-a-box.org web site.
Internet-in-a-Box brings the power of a free Digital Library of Alexandria to any community worldwide.
Whether costing $10 or $1000, an Internet-in-a-Box "learning hotspot" brings classroom/library devices to life, in ways that very deeply empower learning and community.
RECAP: To create your own Internet-in-a-Box [1] [2], look over a few live demo examples and check out our growing collection of videos.
Internet-in-a-Box arose from One Laptop Per Child's original school server (2007-2012) and our global grassroots community, adding in the quality content and learning apps shared by the best educational systems worldwide.
Now anyone can do this, building up your local community's very own 21st Century digital library, using free and open source software.
READY, SET, INSTALL: Internet-in-a-Box (IIAB) is built by a global network of professional volunteers, inspired by One Laptop Per Child's famous laptops and their innovative Sugar Learning Platform — but now with a much wider vision of serving all — both in schools and beyond.
See: Is a quick installation possible?
See: What services (IIAB apps) are suggested during installation?
See: Where can I see live demos of Internet-in-a-Box?
Internet-in-a-Box (IIAB) is in use in dozens of countries, from smaller communities to large-scale institutional deployments.
Please see our regular global community updates at: @internet_in_box
Examples include orphanages and schools in Haiti, schools across southern Mexico, rural communities and libraries across southwest Ghana, remote schools in Myanmar/Burma and Cambodia, villages across India, a girls science school in Rwanda, community centers in Kenya, a youth community in rural Malaysia, to South Africa townships — as well as broad Central American deployments like Nicaragua, Costa Rica, and the Dominican Republic.
Libraries and rural medical clinics are also avid users of IIAB, in places like Guatemala, the Dominican Republic.
Many contributors are also using IIAB for more personal/grassroots and home library purposes too, helping refine our community product for increasingly diverse and larger impacts.
See: Where can I see live demos of Internet-in-a-Box?
See: Is a quick installation possible?
Unleash the best of Internet learning without costs or distractions. Pack your Internet-in-a-Box (IIAB) full of incredible Wikipedia + Maps + Literature + Khan Academy + Video!
The first step is to add content gems to your IIAB. Learn how to download high-quality free content, like Wikipedia ZIM files.
Not just schools but also medical clinics, museums, and prisons are taking advantage — as well as individual educators and parents taking charge by building their very own "Library of Alexandria" community learning hotspots.
How can kids best take advantage of these crown jewels of learning? After you've added content, offer your students direct access via IIAB Apps like:
http://box Your Internet-in-a-Box Library! http://box/usb Content from USB sticks/drives, that teachers can insert anytime http://box/maps OpenStreetMap and Satellite Photos for your Continent, or the entire World http://box/wiki MediaWiki 1.44+ (Wikipedia's own wiki software for document collaboration, used to be http://box/mediawiki) http://box/info IT support docs & eventually vids, offlined for all http://box/kiwix Kiwix: amazing content & videos, contained in searchable ZIM files WARNING: use http://box:3000/kiwix/ to avoid the NGINX proxy e.g. for enhanced privacy #852 http://box/books Calibre-Web E-Book Library, an alternative to Calibre (above), with a modern web interface http://box/moodle Moodle 5.1+ (learning management system) http://box/kolibri Kolibri 0.19+ is like KA Lite, but much improved for educators. Unproxied equivalent: http://box:8009/kolibri http://box/nodered Node-RED visual programming for electronics projects (IoT) http://box/wordpress WordPress 6.9+ (blogging & community publishing) http://box/mediawiki Redirects to http://box/wiki (see above) http://box/nextcloud Nextcloud 32+ (students can store their files/photos on Internet-in-a-Box, similar to Dropbox and Google Docs) http://box/sugarizer Sugar Learning Platform originally from One Laptop Per Child
Common network ports are listed in our high-level networking summary. Internet-in-a-Box administrators can also benefit from these web tools:
http://box:9091 Transmission 4 BitTorrent downloader, to accelerate provisioning of learning materials http://box/admin Admin Console to install content & configure IIAB. Also try http://box.lan/admin and http://10.10.10.10/admin http://box/munin Network/Infra monitoring http://box/awstats Usage statistics
See: Can teachers display their own content?
See: Can students upload their own work?
See: Is a quick installation possible?
See: What services (IIAB apps) are suggested during installation?
See: Where can I see live demos of Internet-in-a-Box?
See: How do I customize my Internet-in-a-Box home page?
See: What are the default passwords?
See: How do I add ZIM files, like Wikipedia?
Yes, teachers can spontaneously insert (and remove!) their own USB memory sticks and USB drives anytime. Somewhat like an informal projector, the teacher's content appears for students almost instantly at:
Instructions:
Warnings:
systemctl stop usbmount@dev-sda*iiab_usb_lib_show_all: False in /etc/iiab/local_vars.yml prior to installing IIAB.usb_lib_writable_sticks: False in /etc/iiab/local_vars.yml prior to installing IIAB.CLARIFICATION: it's OK to insert multiple USB sticks/drives at the same time. If so, content from each USB stick/drive is visible within http://box/usb, e.g. in sub-folders that will be obvious, like the following:
http://box/USB0 http://box/USB1
Or possibly:
http://box/usb/USB0 http://box/usb/USB1
See the Install Doc for background details.
CLARIFICATION: If your Linux OS has a graphical desktop, it's common to see popup message warnings like:
Unable to mount 128 GB Volume Device /dev/sdb1 is already mounted at '/media/usb0'.
It's safe to ignore these messages. Or you can make these popup messages go away, typically by clicking through your graphical File Manager's preferences or OS settings, and unchecking the box for "Mount removable media automatically when they are inserted" or "Automatically mount removable media when inserted and on startup." #86
See: What can I do with E-books and Internet-in-a-Box?
See: Can students upload their own work?
See: How do I customize my Internet-in-a-Box home page?
See: How do I add my own content?
See: How do I add ZIM files, like Wikipedia?
See: KA Lite Administration: What tips & tricks exist?
See: WordPress & Moodle Administration: What tips & tricks exist?
See: Can I permanently attach an external USB drive, to add more content?
Yes!
How can teachers prevent cheating, e.g. the copying of other students' uploaded homework? Check out our NEW README to learn how teacher can arrange for student uploads to be either "confidential homeworks" or "creative/collaborative projects".
COMING SOON: Specific tips & tricks to help teachers, including project-based learning ideas (e.g. video/photo journalism essays created by each student), and also ways to extend the life of teachers' USB sticks!
ALTERNATIVE: If you prefer a full LMS (Learning Management System) with student and teacher accounts, to more closely track student progress and assignments, please consider Kolibri, Moodle, or NextCloud.
See: Can teachers display their own content?
See: What are the best places for community support?
You can order a 256GB model from the Wikipedia Store — or order a language-customized version of Internet-in-a-Box from the Wiki Project Med Foundation who will ship from Canada to almost any location worldwide — if you help provide feedback to improve the product for all.
A South Asia edition was also available in India. But it is unclear if they are still willing to ship.
See: Is a quick installation possible?
See: Where can I see live demos of Internet-in-a-Box?
See: How do I back up, shrink & copy IIAB microSD cards?
See: How can I donate to Internet-in-a-Box?
Internet-in-a-Box (IIAB) is free and open source software that runs on many GNU/Linux platforms:
MEMORY: Some do fine with 512MB RAM (even in 2024!) serving static content from the RPi Zero W. Others do just fine serving dozens of simultaneous video streams from an RPi3 (or 3 B+) with 1GB RAM. Finally, certain others require 2GB or 4GB from an RPi 4 — or 8GB or more within a Mini PC — when server-side loads become very intensive. For example if you are running an LMS, experiencing a lot of OpenStreetMap traffic, running a Wikipedia Treasure Hunt with multiple students running full-text searches of Wikipedia — or offering streaming & fileserver-like capabilities broadly to many students.
STORAGE: While there's increasing movement from hard disks to SSDs and microSD cards every year, many others still swear by tried-and-true hard drives. Certainly rotating media are the clear winner when TB (or multi-terabyte) storage is needed at a low price. In the end all storage technologies can fail, each in there own ways. So it's far more more important to start with the actual community's learning goals, engaging educators around their authentic content/interaction needs — and then narrow in on storage capacity/technologies later. Alternative: consider this earlier discussion of external USB hard disks and their possible risks.
HEAT/DIRT/DUST: Ensure your server is positioned with ample room around it for ventilation, away from direct sunlight. Dirt/dust will collect inside it almost regardless, and should certainly be removed from time to time.
Please ask further hardware questions on our community forums !
See: What OS should I use?
See: Is a quick installation possible?
See: Can I use my phone, tablet or laptop as a Raspberry Pi monitor?
See: Can I create a Wi-Fi hotspot using an old laptop?
See: Can I install IIAB onto a USB drive?
See: What are the best places for community support?
Check IIAB Platforms for the latest Linux OS compatibility details!
1) Raspberry Pi OS on Raspberry Pi 4, 5, 400 or 500 is best if this is your first time — regardless if you prefer the full/graphical Raspberry Pi OS with desktop with its great desktop apps for students — or consider Raspberry Pi OS Lite for a more lightweight "headless" server:
2) On PC-like hardware (or virtual machines) pick a 64-bit OS from this list: (either with graphical desktop or "headless", and whether-or-not with LTS multi-year support)
Others like Reno McKenzie & Josh Dennis experimented successfully (tweaks required!) with IIAB on the lean & mean DietPi.com back in 2017. Similarly, Ubermix 4.1 was successfully tested in 2019.
Please avoid Docker, as our Ansible provisioning requires low-level access to the operating system.
Finally, if there are situations where porting to a new OS/distribution will tangibly help schools/libraries/clinics across an entire region, please don't hesitate to reach out as you assess the scope-of-work to complete such a job.
See: What hardware should I use?
See: Is a quick installation possible?
See: What are the best places for community support?
1. Yes! Download one of our IIAB Images for Raspberry Pi to your microSD card. You can then boot the microSD card in almost any Raspberry Pi.
Clarification: the above IIAB images contain software only (you then add content !) and can occasionally be months out-of-date.
2. If you want the very latest IIAB software that undergoes continuous improvement and QA, we recommend you instead use the 1-line-installer at download.iiab.io and check out IIAB's Contributors Guide (versión en español).
First verify that your hardware and Linux OS are appropriate:
Then run IIAB's 1-line installer to install Internet-in-a-Box (IIAB) 8.0's latest pre-release, by typing in:
This can take an hour or more to complete — depending whether you choose SMALL-sized (~11 server apps), MEDIUM-sized (~16 server apps) or LARGE-sized (~29 server apps) as the installer begins. Use our comparison table below, to decide which is most suitable for your needs.
An Ethernet cable (connected to fast, live Internet) is strongly recommended during installation, as well as a modern microSD card (with fast write speeds), and a well-ventilated Raspberry Pi!
While a lot has changed since 2019, consider also the "ZERO to IIAB" installation video on our YouTube channel.
Remember: IIAB's 1-line installer might need you to run sudo iiab multiple times, before IIAB's software install fully completes — e.g. if Internet connectivity is interrupted for any reason. When your IIAB software install is 100% complete, you'll be asked to reboot — typically within about-an-hour-or-so (so you can begin installing content!)
3. Linux hackers: other distros might be possible, but can require extensive babysitting to get right. Consider the long-form "Do Everything from Scratch" install instructions if porting IIAB to a new Linux distribution is your goal.
See: Can I buy my own Internet-in-a-Box?
See: What hardware should I use?
See: What OS should I use?
See: What technical documentation exists?
See: What are the default passwords?
See: How do I customize my Internet-in-a-Box home page?
See: Can I create a Wi-Fi hotspot using an old laptop?
See: How do I back up, shrink & copy IIAB microSD cards?
See: What are the best places for community support?
See: Can I install IIAB onto a USB drive?
When installing Internet-in-a-Box (IIAB) at https://download.iiab.io, you're given a choice of SMALL-sized, MEDIUM-sized or LARGE-sized — to get you started fast!
Which services (IIAB apps) are included in each of these 3? The summary table below helps you choose among IIAB's almost 40 powerful apps — optionally with a complete LMS (learning management system) like Kolibri, Moodle, WordPress, Sugarizer or Nextcloud.
Then, after choosing among these 3 sizes, IIAB's installer encourages you to further refine your choice of IIAB apps — by customizing your very own /etc/iiab/local_vars.yml
| SMALL | MEDIUM | LARGE | IIAB APP URL | DOCS | DESCRIPTION |
|---|---|---|---|---|---|
| X | X | X | box/awstats | AWStats | AWStats is an open source Web analytics reporting tool, suitable for analyzing data from Internet services such as web, streaming media, mail, and FTP servers. AWStats parses and analyzes server log files, producing HTML reports. See Also: Matomo |
| X | X | X | box/books box/libros box/livres | Calibre-Web | Calibre-Web is a web app for organizing E-Books into bookshelves. You can begin your community library with an existing Calibre database. |
| X | X | X | box/kiwix | Kiwix | Kiwix is a free and open-source offline web engine created by Emmanuel Engelhart and Renaud Gaudin in 2007. |
| X | X | X | box/kolibri | Kolibri | Kolibri has largely replaced KA Lite (Khan Academy Lite), providing offline access to a wide range of quality, openly licensed educational content. Supports Kolibri Studio so online teachers can quickly remix & redistribute innovative lesson plans. |
| X | X | X | box/matomo | Matomo | Matomo is a web analytics alternative to Google Analytics, emphasizing privacy and data ownership. See Also: AWStats |
| X | X | X | box/maps | OpenStreetMap | OpenStreetMap is like Google Maps but better, for schools especially, as it works offline and avoids all the advertising. Download detailed "vector maps" for an entire continent, or the entire world! Also includes 10+ zoom levels of satellite imagery! |
| X | X | X | box/usb | USB_LIB | Content from USB sticks/drives, that teachers can insert anytime. |
| I | I | I | (none) | Bluetooth | Bluetooth access to IIAB's Admin Console, for IIAB field operators/administrators and advanced teachers too. Provides two services, pan (or Personal Area Network) and term (terminal emulation) — installed (I) but not enabled. Works on Raspberry Pi only. |
| I | I | I | (none) | Captive Portal | Captive Portal attempts to help people who get frustrated typing in http://box.lan onto their phone, tablet or laptop — attempting to open their browser for them, to display Internet-in-a-Box automatically — installed (I) but not enabled. #1182 |
| I | I | I | (none) | remote.it | https://remote.it can help you remotely maintain an IIAB. Some benefits include: crossing multiple NATs/firewalls using a single TCP port, without requiring router port forwarding, and reducing your network's vulnerability — installed (I) but not enabled. |
| I | I | I | (none) | Tailscale | Tailscale is a modern/mesh VPN that allows for remote administration (e.g. using ssh) of IIAB boxes — installed (I) but not enabled. |
| X | X | box/code | Code on the Go | Code on the Go, is an offline-first Android IDE, created by App Dev for All. Use URL http://box.lan/code to download it from IIAB to your Android phone or tablet. | |
| X | X | box/nextcloud | Nextcloud | Nextcloud puts your data at your fingertips, under your control. Store your documents, calendar, contacts and photos on your local server. | |
| X | X | box/sugarizer | Sugarizer | Program or be programmed! Explore creativity puzzles originally from MIT's One Laptop Per Child global project. (64-BIT ONLY) | |
| X | X | box:9091 | Transmission | Transmission is a BitTorrent client (software) that can accelerate downloading of learning materials. (COMPILING TRANSMISSION 4.0.4+ TOOK AN HOUR AS OF OCTOBER 2023; TRANSMISSION 4.1+ SHOULD FIX THAT IN 2026) | |
| X | X | box/wordpress | WordPress | WordPress is most associated with blogging (personal journaling) but supports other types of web content including more traditional mailing lists and forums, media galleries, and diverse plugins. | |
| X | box/print or localhost:631 | CUPS | CUPS is a modular printing system for Unix-like computer operating systems which allows a computer to act as a print server. | ||
| X | box/gitea | Gitea | Gitea is a lightweight self-hosted Git service similar to GitHub.com, and written in Go. | ||
| X | box:4244 or box/archive ? | Internet Archive | The Internet Archive is famous for their Wayback Machine that keeps a copy of 600+ Billion web pages. Their Decentralized Web allows you to create an offline digital library as part of your IIAB, arising from https://dweb.archive.org (64-BIT ONLY) | ||
| X | box/jupyterhub | JupyterHub | High Schools may want to consider JupyterHub to integrate coding with dynamic interactive graphing — A New Way to Think About Programming — allowing students to integrate science experiment results and program output within their notebook/document/blog. | ||
| X | box/wiki <- box/mediawiki | MediaWiki | MediaWiki is the software that makes Wikipedia possible. It allows students to create community web pages together, with attached images, and includes excellent international language support. | ||
| X | (none) | Luanti | Luanti (formerly Minetest) is a Minecraft-inspired creative/explorational building blocks game. Supports both survival and creative modes along with multiplayer support, dynamic lighting, and an "infinite" map generator. You can customize it with different games/engines and mods. | ||
| X | box/moodle | Moodle | Moodle is a learning platform designed to provide educators, administrators and learners with a single robust, secure and integrated system to create personalised learning environments. | ||
| X | (none) | Mosquitto | Mosquitto (uses the MQTT protocol) is a pub-sub broker for electronics projects and educational Internet of Things (IoT) experiments. It's designed for TCP/IP with remote locations where a "small code footprint" is required or bandwidth is limited. See also: Node-RED | ||
| X | box/munin | Munin | Munin graphs help monitor infra like CPU, disk and especially networking. Munin can help analyze resource trends and "what just happened to kill our performance?" problems. | ||
| X | box/nodered | Node-RED | Node-RED enables electronics projects with a flow-based development tool for visual programming, originally developed by IBM for wiring together hardware devices, APIs and online services as part of the Internet of Things (IoT). "Low-code programming for event-driven applications." See also: Mosquitto | ||
| X | (none) | vnStat | vnStat command is a console-based network traffic monitor. It keeps a log of hourly, daily and monthly network traffic for the selected interface but is not a packet sniffer. | ||
| I | box/phpmyadmin ? | phpMyAdmin | phpMyAdmin is a free and open source administration tool for MySQL and MariaDB — installed (I) but not enabled in LARGE. | ||
| I | (none) | Samba | Samba is the standard Windows interoperability suite of programs for Linux and Unix — installed (I) but not enabled in LARGE. | ||
| box:12080 | AzuraCast | AzuraCast is simple, self-hosted web radio. Use it to schedule student newscasts, podcasts, music (e.g. MP3's and similar) and even do live-streaming. (64-BIT ONLY; 4+ GB RAM RECOMMENDED) | |||
| box:8080 | Calibre | Calibre E-Book Library can be a one-stop solution for all your E-Book needs. Many prefer to use Calibre-Web (above) which adds a friendlier / more modern design, to the same back-end structure. (VERY SLOW INSTALL) | |||
| box:8081 box/stream ? | Cham | Cham is an experimental/lightweight live video streaming platform with adaptive bitrates for IIAB. PR #1743 | |||
| box/dokuwiki (deprecated, Jan 2020) | DokuWiki | DokuWiki was written in PHP, to work on plain text files (and thus not need a database). Novel design, but it never caught on, and was poorly maintained. | |||
| box/elgg (deprecated, August 2021) | Elgg | Elgg is (was) a social networking engine used by offline schools to create a collaborative environment. Includes basic blogging, microblogging, file sharing, networking and groups. | |||
| (none) (deprecated, 2019) | ejabberd | ejabberd is a free and open source instant messaging server. | |||
| box/lokole | Lokole | Lokole is an Email service that works offline for rural communities, students and teachers. With a 3G/4G modem, you can arrange to batch-upload / batch-download emails once per night — for almost no cost at all — depending on mobile data plans in your country. | |||
| box:2812 ? | Monit | Monit is a process supervision tool. View system status from the command line, or browser. Arguably no longer necessary, as a result of systemd: #1849 | |||
| box:83/freepbx (Apache) box/freepbx (NGINX) | PBX | Full-featured PBX for rural telephony etc, that can integrate with GSM (mobile phone) networks. Based on Asterisk (Voice over IP, SIP telephone numbers) and FreePBX (web-based GUI to administer it). (VERY SLOW INSTALL) | |||
| (none) | Squid | Squid is a proxy server that can be helpful for caching and bandwidth shaping, as well as basic allowlist/denylist URL filtering. See IIAB's sample /etc/squid/squid.conf |
See: What can I do with E-books and Internet-in-a-Box?
See: Is a quick installation possible?
See: How do I customize my Internet-in-a-Box home page?
See: What is local_vars.yml and how do I customize it?
See: Can I install IIAB apps on an existing IIAB?
See: Can I upgrade or reinstall IIAB apps?
IIAB Tech Docs explain the infrastructure that makes Internet-in-a-Box possible.
Living Docs are ever-evolving as technical progress is rapid, so please scan this entire document (FAQ.IIAB.IO) and consider monitoring the latest code merges.
Developers can also consider our Contributors Guide (versión en español), first published in October 2017, and overhauled in late 2021.
More generally, see our Tech Skills Videos (alternate view) focused on networking, Raspberry Pi, web basics, and security — with subtitles in English, Spanish and French. Some of which are also on IIAB's YouTube channel.
Offline Field Operators should also check our growing collection of Internet-in-a-Box tech support docs (and eventually videos!) available on your very own Internet-in-a-Box at http://box/info
Finally you can force your IIAB to update these offline docs (when your IIAB is online) by running: /usr/bin/iiab-refresh-wiki-docs
See: What security tips exist?
See: How can I remotely manage my Internet-in-a-Box?
See: What are the best places for community support?
See: How can I help?
Here's a great and portable way to do this, that avoids any networking confusion:
Then, set up the software on your phone, tablet or laptop:
Finally, open the software and "Start Recording". You should now see the Raspberry Pi OS on your screen! ADVANCED TIP: Flipping the USB-C connector upside down to reseat the cable can sometimes help force USB3 instead of USB2, for smoother video.
NOTE: If your Raspberry Pi has a reliable network connection, a completely different approach is to use VNC, which does not require the above 2 cables.
See: How can I remotely manage my Internet-in-a-Box?
Ensure that file /etc/default/locale -> /etc/locale.conf contains a .UTF-8 language. This critical file can work well if it contains a single line, like: LANG=en_US.UTF-8
As of 2025, this is a critical fix when Raspberry Pi OS and/or older software installs mess up your language locale settings.
RECAP: Failure to set a .UTF-8 language can cause very serious problems, to multiple software packages — so be sure to AVOID 8859-1 language encodings!
WORSE: As of February 2025, Raspberry Pi OS continued to include a widget that dangerously lulled people into choosing 8859-1 by default — which effectively damaged IIAB and various apps (with no easy way to recover, using either raspi-config or the graphical configuration tools that come with "Raspberry Pi OS with desktop" !)
More details at #3882.
Ansible is software that orchestrates the installation of Internet-in-a-Box (IIAB) and its apps/services.
FYI the latest Ansible version recommendation is posted near Line 11 of scripts/ansible.
If you must upgrade Ansible, make sure your IIAB is online, and then run:
cd/opt/iiab/iiab
sudoscripts/ansible
Done! (It will explain how to verify your Ansible installation.)
Finally if your IIAB is much older, upgrading Ansible can be challenging (And At Your Own Risk). But if you must: (run as root, when your IIAB is online)
ansible --version to see what version of Ansible is installed.apt purge ansible-core (or apt purge ansible-base or apt purge ansible or pip3 uninstall ansible-core or pip3 uninstall ansible-base or pip3 uninstall ansible) depending on how Ansible was originally installed — if necessary see #564cd /opt/iiab/iiab then sudo scripts/ansibleansible --version and/or pip3 show ansible-core to verify (on rare occasion you might first need to log out and log back in, if Ansible ends up being moved, e.g. from /usr/bin to /usr/local/bin or vice versa)CLARIF: None of the above should be required if you're doing a fresh install on a clean OS, using IIAB's 1-line installer from: https://download.iiab.io (which installs Ansible for you!)
PRO TIP: IIAB's Ansible install script attempts to upgrade ~4 Ansible Collections as well. See the line that begins with: ansible-galaxy collection install --force-with-deps
PRO TIP: For those wanting to run a single Ansible playbook or role, run cd /opt/iiab/iiab then sudo ./runrole <ROLE NAME> (see runrole's source code).
See: Is a quick installation possible?
See: What services (IIAB apps) are suggested during installation?
See: What technical documentation exists?
See: Captive Portal Administration: What tips & tricks exist?
macOS 15+ often prevents browsing local IP addresses like 192.168.0.x, with error messages like "This site can’t be reached" and "ERR_ADDRESS_UNREACHABLE".
TYPICAL FIX:
For KA Lite, Kolibri, Calibre, Calibre-Web, Nextcloud, Moodle, CUPS, Elgg, JupyterHub, Transmission, etc the administrative user is Admin (don't forget the capital A) and the default/initial password is: changeme — WordPress as well, often uses this same account. For MediaWiki however, Admin/changeme2020 is the initial username/password.
An example is Calibre-Web's "teacher" account (Admin/changeme) which can add/remove and convert E-Books, and also change their metadata, at http://box/books. Whereas Calibre itself (if installed, typically at http://box:8080) uses these 7 "student" accounts, to read or download E-Books: box/box, h/h, ht/ht, m/m, mx/mx, p/p or pe/pe (as of Internet-in-a-Box 7.0). If you have access to the Linux command-line, you can change Calibre's accounts by running: calibre-server --manage-users --userdb /library/calibre/users.sqlite
However for IIAB's own Admin Console[*] at http://box/admin, http://box.lan/admin or http://10.10.10.10/admin, the username is iiab-admin and the default/initial password is: g0adm1n (note the numbers 0, 1). GNU/Linux administrators can also use this to login over ssh.
You can do this within http://box.lan/admin -> Utilities menu — or at the command line, if you run: passwd iiab-admin
[*] While the Admin Console can change iiab-admin's password instantly, it's important to understand that many Admin Console changes (within its Configure menu especially) require you click "Save Configuration" then "Install Configured Options" and then wait for this to complete. Monitor for Status "SUCCEEDED" under Utilities menu -> Display Job Status (takes about 20 min on a Raspberry Pi 3, 3 B+ or 4, depending what changes you've requested!)
Finally, certain install-time passwords are listed in /etc/iiab/local_vars.yml — which overrides passwords listed in default_vars.yml. If you modify any of these passwords in local_vars.yml after installing IIAB, don't forget to then run Ansible, e.g. using "Install Configured Options" above! 2020-09-23 Warning: MySQL/MariaDB passwords cannot easily be changed after IIAB install (#2542).
Admin Console: Note that very occasionally it might be necessary to run systemctl restart iiab-cmdsrv.service if http://box.lan/admin shows red errors upon login.
Warning: KA Lite's Admin password cannot be changed in a browser (http://box:8008 can only change KA Lite's user passwords) so you need to run kalite manage changepassword Admin — help is available if you run: kalite manage help changepassword
See: What can I do with E-books and Internet-in-a-Box?
See: What technical documentation exists?
See: Can I password protect the Wi-Fi hotspot?
See: What is local_vars.yml and how do I customize it?
See: What security tips exist?
See: How can I remotely manage my Internet-in-a-Box?
See: KA Lite Administration: What tips & tricks exist?
See: What are the best places for community support?
Please see these live demo examples as used by medical clinics in 2018, hosted by the Wikimedia Foundation (Wikipedia).
Many more examples from schools in Jamaica, Mexico, Haiti and other places around the world, will be posted. Here is a South Asia Medical Version including more than 30 languages. Please contact us if you:
See: Can I buy my own Internet-in-a-Box?
See: Is a quick installation possible?
See: How do I customize my Internet-in-a-Box home page?
OPTIONAL: Some 2019 videos on Internet-in-a-Box's YouTube channel (several available as .mp4 and .webm) are a bit out-of-date, but can illustrate the big picture, showing how to get moving downloading and arranging content on your Internet-in-a-Box (IIAB).
Your IIAB home page is usually reachable at http://box, http://box.lan or http://10.10.10.10 from any nearby smartphone, tablet or laptop/computer. If you've just installed Internet-in-a-Box (IIAB) on your home network, here are some great tricks to find its IP Address.
You can build a beautiful IIAB home page for your community by following these steps:
menu_items_1 array in /library/www/html/home/menu.json..json and/or .html files within /library/www/html/js-menu/menu-files/menu-defs (e.g. to change the description of Practical Action, edit en-practical_action.json and/or en-practical_action.html).logo_url is set to the correct logo filename (in its above-mentioned .json file).Notice: clearing the browser's cache (e.g. Ctrl-Shift-Delete) is sometimes necessary after making any of the above changes!
If you get completely stuck, capture a screenshot (take a photo if copying & pasting is not possible) then get in touch so volunteers can help you work it out.
How This All Works: Please see Admin Console's 5 technical overview docs (NEW, as of 2022!) Dynamic Menuing was originally introduced by IIAB/XSCE 6.1, to reduce front-end hand-coding of HTML, by auto-adjusting all http://SERVERNAMES:PORTS links on-the-fly (using browser-side Javascript). More advanced usages are also now possible, if you read about Menu Item Definitions and HTML Fragments — taking note of the latest 2019 additions.
Alternatives: Some prefer a completely different front-end for their Internet-in-a-Box home page, e.g. WordPress (with this possible IIAB plugin), or MediaWiki, or even Moodle etc. Several of these can be enabled in your IIAB's Admin Console (http://box/admin or http://box.lan/admin) > Configure tab > Services Enabled > Portal — where your choices include:
For example, if you enable "Check to Enable WordPress" or "Check to Enable MediaWiki" — then on the left click "Save Configuration", followed by Install Configured Options — finally monitoring the result (can take 20+ min on an older Raspberry Pi) under Utilities tab > Display Job Status.
See: What can I do with E-books and Internet-in-a-Box?
See: Can teachers display their own content?
See: Is a quick installation possible?
See: What services (IIAB apps) are suggested during installation?
See: What are the default passwords?
See: Where can I see live demos of Internet-in-a-Box?
See: How do I add my own content?
See: How do I change to Mobile view or Desktop view?
See: How do I add ZIM files, like Wikipedia?
See: KA Lite Administration: What tips & tricks exist?
See: WordPress & Moodle Administration: What tips & tricks exist?
See: Can I permanently attach an external USB drive, to add more content?
See: How do I back up, shrink & copy IIAB microSD cards?
Consider Nextcloud to upload your photos and documents to IIAB.
Consider Calibre-Web to upload your E-Books and videos to IIAB.
Or, if you prefer regular files displayed by IIAB's NGINX web server:
iiab-admin (e.g. using a screen/keyboard or ssh).sudo iiab-root-login to set (and enable) user root's sftp password.192.168.0.99 or sftp://10.10.10.10 root22/library/www/html/local_content (Remote site, right side).See: Can teachers display their own content?
See: Can students upload their own work?
See: How do I customize my Internet-in-a-Box home page?
See: How do I add ZIM files, like Wikipedia?
Starting with Internet-in-a-Box 7.0 (#1775) IIAB includes a Mobile/Desktop button, but it's a bit hard to find, so here are basic instructions:
Notes:
See: How do I customize my Internet-in-a-Box home page?
This is a very hard question depending on the growth path of your electrical needs, local supply chains, electricians' norms within the country in question — and of course maintenance, price, theft patterns, etc.
In places like Haiti this typically revolves around a bank of 12-volt deep-cycle batteries like the Trojan T-105. But don't hesitate to get your feet wet researching and designing a right-sized solar nanogrid suitable for your own community.
In 2019, please see this India solar discussion: eka-foundation/home#24
Tips from earlier years can also still be useful:
If you want a self-contained (single-unit) knowledge hotspot, consider the Wi-Fi capability possibly already built into the computer where you install IIAB. Run iw list and look for * AP under "Supported interface modes" to see if it's capable of Access Point mode / AP mode (#3057) as would be enabled by hostapd. (If the iw command isn't yet installed, run sudo apt install iw — also see "Can I create a Wi-Fi hotspot using an old laptop?" just below.)
Optionally, you may want to attach a Wi-Fi Access Point to your IIAB. If you want higher-powered Wi-Fi equipment and antenna(e) fully external to your IIAB server, consider approaches such as the cantenna and MeshNet approaches used by Anish Mangal in India.
Most important: take advantage of community support, where volunteers are eager to help on the xsce-devel@googlegroups.com and server-devel@lists.laptop.org mailing lists. There's always tons to learn from the latest Wi-Fi fieldwork success stories.
Also consider unleashkids@googlegroups.com, which is a great place to ask educators about various schools' filtering recommendations, across different age groups and cultures, whether your school is online or off!
Finally, don't hesitate to blog or write up your own specific recommendations, no matter how large or small your school. This vital engineering shop-talk upholds more schools, libraries and orphanages than we can count (building our community repertoire of Wi-Fi wisdom, often far from the Internet, creating "knowledge/learning hotspots" in every sense) in turn allowing kids to take advantage of amazing free Digital Libraries like https://internet-in-a-box.org
See: Can I create a Wi-Fi hotspot using an old laptop?
See: Any other networking tips?
Yes, it is possible to create a Wi-Fi hotspot (using hostapd) on some laptops and netbooks.
NOTE: To determine whether your PC/machine's internal WiFi chip has Linux/distro support for AP Mode (allowing for many students to connect to this hotspot) please run /usr/sbin/iw list and look for * AP under Supported interface modes: or software interface modes — as outlined at #3057.
Equivalent to the above, most IIAB's should have a line in /etc/iiab/iiab.ini saying either can_be_ap = True or can_be_ap = False (PR #3222).
Similarly, you can try running:
sudo iiab-hotspot-on
REMINDER: If you ever add or remove a USB Wi-Fi adapter (or an entire Wi-Fi router, typically connected over Ethernet), you then need to run:
sudo iiab-network
You're likely to have good luck with Qualcomm Atheros chipsets — certainly older Atheros chipsets have good support in GNU/Linux (https://wiki.debian.org/ath9k).
February 2019 Example: Testing confirmed that IIAB 6.7's hostapd Wi-Fi hotspot worked with the Qualcomm Atheros AR9285 PCI-Express Wireless device found in an Acer Aspire One.
See: What hardware should I use?
See: Any other networking tips?
In addition to serving students (downstream Wi-Fi), some IIAB hardware is also capable of connecting to the internet (upstream Wi-Fi) at the very same time. This is known as AP+STA Mode (a.k.a. Dual Wi-Fi).
WARNING: Not all Wi-Fi firmware supports this (AP+STA Mode), and Wi-Fi performance can sometimes be severely degraded even when it is working.
But if you want to give it a shot, here are 9 suggested steps:
iw list and look at the output. If see * AP and * managed (each on their own line), then there's a good chance it will work.wifi_up_down: truesudo iiab-hotspot-offping mit.eduiw dev just to be aware of your upstream Wi-Fi channel.sudo iiab-test-wifi (to align both channels for AP+STA Mode, as these 2 channels must be the same). Just FYI iiab-test-wifi takes about 30 seconds, but this is much faster than running iiab-network !sudo iiab-hotspot-onsudo rebootping mit.edusystemctl status hostapd — and with actual, functional tests using Wi-Fi capable "student devices".For more detail, please see IIAB Networking and PR #4078.
See: How do I provide Wi-Fi (wireless) to all my kids?
See: Can I create a Wi-Fi hotspot using an old laptop?
See: Any other networking tips?
The Wi-Fi hotspot name (also known as SSID) is what most people use to connect to Internet-in-a-Box using their Wi-Fi devices. In other words the name that appears on the air, for your IIAB's wireless network / Access Point / AP.
How to rename it depends on whether your Wi-Fi hotspot is fully-external (such as a wireless router) or rather under direct OS control (e.g. internal, or a tiny USB-connected wireless adapter) :
host_ssid: Internet in a Box (quotation marks are OPTIONAL)sudo iiab-network
/etc/hostapd/hostapd.conf directly, unless you want these custom settings trashed upon updating your Internet-in-a-Box! If you must edit this file despite the danger, consider systemctl restart hostapd to avoid rebooting.
See: What are the default passwords?
See: Any other networking tips?
See: What is local_vars.yml and how do I customize it?
Internet-in-a-Box (IIAB) is generally intended as a free library completely open to all!
That said, if you have command-line access to your IIAB using a screen/keyboard or ssh, you can try setting a Wi-Fi password as follows: (assuming your IIAB Wi-Fi hotspot is internal, or is a USB Wi-Fi adapter)
sudonano/etc/iiab/local_vars.yml
hostapd_secure: True hostapd_password: ACTUAL_PASSWORD
sudo iiab-network and confirm that it completes without error (about 3 minutes later).See: Any other networking tips?
See: What is local_vars.yml and how do I customize it?
http://box.lan should work in ~99% of all cases, and http://box should work in ~90% of cases; there is no need to change these.
If however a custom name is strongly desired, this can be implemented within each school/library/clinic by editing /etc/iiab/local_vars.yml — and then run sudo iiab-network
Or: log into Admin Console (http://box/admin or http://box.lan/admin) > Configure (menu) > Network Parameters > Host Name > Save Configuration > Install Configured Options (waiting patiently for that to complete under Utilities (menu) > Display Job Status which can take ~20 min on older Raspberry Pi's!)
Many different names have been used in the past, such as http://schoolserver.lan and http://school.lan — anything that resolves locally to http://10.10.10.10 should be sufficient with standard networking (or http://172.18.96.1 if your Internet-in-a-Box pre-dates July 2022). For the record, some of these older names are listed within the following links:
https://github.com/iiab/iiab/blob/master/roles/network/templates/named.unused/school.external.zone.db
https://github.com/iiab/iiab/blob/master/roles/network/templates/named.unused/school.internal.zone.db.j2
https://github.com/iiab/iiab/blob/master/roles/network/templates/named.unused/school.local.zone.db.j2
See: What are the default passwords?
See: Any other networking tips?
See: What is local_vars.yml and how do I customize it?
To set a static (fixed) IP address such as 192.168.1.99, use lines like the following in /etc/iiab/local_vars.yml — and then run sudo iiab-network :
wan_ip: 192.168.1.99 wan_netmask: 255.255.255.0 wan_gateway: 192.168.1.254 wan_nameserver: 192.168.1.254 wan_try_dhcp_before_static_ip: True
By default this is a FALLBACK static (fixed) IP address, which requires an Ethernet cable and link-light showing. If that cable connects IIAB to an Internet router/cablemodem or similar (that is turned on) IIAB should receive a DHCP IP address within about 30 seconds. Or, if there is no DHCP on the wire, IIAB will set its own IP address (typically on eth0) to 192.168.1.99 per this example, about 45 seconds later.
Specifically, if you keep wan_try_dhcp_before_static_ip: True your /etc/dhcpcd.conf will contain: (on any OS where IIAB sets up /etc/dhcpcd.conf)
profile static_eth0 static ip_address=192.168.1.99/24 static routers=192.168.1.254 static domain_name_servers=192.168.1.254 interface eth0 fallback static_eth0
Or if you set wan_try_dhcp_before_static_ip: False your /etc/dhcpcd.conf will contain: (on any OS where IIAB sets up /etc/dhcpcd.conf)
interface eth0 static ip_address=192.168.1.99/24 static routers=192.168.1.254 static domain_name_servers=192.168.1.254
IN GENERAL, you may need to unplug your IIAB's Ethernet cable and plug it back in before a static IP address takes effect! As such, hard-core traditionalists might also want to add the following to /etc/network/interfaces.d/iiab, to force a static IP address even before the Ethernet "carrier" (i.e. link light) is detected:
auto eth0 iface eth0 inet static address 192.168.1.99 broadcast 192.168.1.255 netmask 255.255.255.0 gateway 192.168.1.254 dns-nameservers 192.168.1.254
FYI the above 7 lines also work when nothing at all is added to /etc/dhcpcd.conf, if you want an alternative approach in support of intermittent online updates of your IIAB via Ethernet cable to cablemodem etc (careful though, this unsupported approach is risky as your eth0 will often have 2 IP addresses!)
WHEREAS on Ubuntu, the wan_try_dhcp_before_static_ip variable is currently ignored (i.e. treated as False) and Netplan stores your static IP address settings from /etc/iiab/local_vars.yml into /etc/netplan/01-iiab-config.yaml as follows:
network: version: 2 renderer: networkd ethernets: enp0s3: addresses: - 192.168.1.99/24 gateway4: 192.168.1.254 nameservers: addresses: [192.168.1.254] search: [lan]
Debian 13+ equivalent to be clarified in future (please help us here if you can!)
FINALLY, if IIAB is already installed, also consider IIAB's Admin Console (http://box/admin or http://box.lan/admin) > Configure (menu) > Network Parameters > Check to use a static WAN IP Address instead of DHCP > (enter your) Static WAN IP Address > Save Configuration > Install Configured Options.
See: What are the default passwords?
See: Any other networking tips?
See: What is local_vars.yml and how do I customize it?
If you've just installed Internet-in-a-Box (IIAB) on your home network, here are some great tricks to find its IP Address.
WI-FI RECOMMENDATIONS:
sudo iiab-network and then reboot.
/etc/hostapd/hostapd.conf but not in /etc/wpa_supplicant/wpa_supplicant.conf (right after installing Raspberry Pi OS, you make that happen by running raspi-config -> Localisation Options > WLAN Country). #3097wifi_up_down: True in /etc/iiab/local_vars.ymlsudo iiab-hotspot-off then sudo raspi-config (to [dis]associate from/to any upstream WiFi access point) then sudo iiab-hotspot-on and reboot — as outlined in Section (2) of Common Customizations.PLEASE ALSO LOOK OVER:
sudo iiab-network) after all your Ethernet and Wi-Fi network interfaces are plugged in and turned on properly (or unplugged properly!) according to your final deployment topology.
PRO TIP: If you use a USB-to-Ethernet dongle (for upstream Internet, generally) use a permanent marker on the server's correct USB port, so that it's not accidentally moved to another USB port!
Also, do not swap the dongle for another, as each dongle has a fixed/unique MAC address. Worst case if your dongle is lost or broken, you will later (after the new dongle is inserted) need to run sudo iiab-network
FYI Wi-Fi (e.g. for Internet access, etc) is available on the graphical/desktop version of Ubuntu 24.04 LTS (e.g. use its desktop GUI to set SSID and password) — whereas server versions of Ubuntu don't offer Wi-Fi out of the box.
NOTE: To determine whether your PC/machine's internal WiFi chip has Linux/distro support for AP Mode (allowing for many students to connect to this hotspot) please run /usr/sbin/iw list and look for "AP" under "Supported interface modes:" or "supported interface modes" — as outlined at #3057.
Some prefer Gigabyte BRIX (a drop-in replacement Mini PC, instead of the ASUS [formerly Intel] NUC) as an Atheros internal Wi-Fi module can be inserted, to scale beyond the NUC's soldered-in limit of 12 Wi-Fi connections maximum.
Classrooms within 100 meters of your school server can easily be connected using standard Ethernet wiring, or using Wi-Fi repeaters. Outdoor wiring is possible (preferably fiber optic cables below ground) but check with experts to avoid problems with lightning. Beyond 100 meters, a more deliberate tree and branch solution may be needed.
Please ask questions about your specific school's networking/wiring challenges on mailing list unleashkids@googlegroups.com !
See: How do I provide Wi-Fi (wireless) to all my kids?
See: Can I create a Wi-Fi hotspot using an old laptop?
See: How do I change the Wi-Fi hotspot name?
See: Can I name my server something other than http://BOX.LAN ?
See: How do I set a static IP address?
See: Captive Portal Administration: What tips & tricks exist?
To customize your Internet-in-a-Box (IIAB), modify IIAB configuration variables within /etc/iiab/local_vars.yml
It's best to do this prior to installing IIAB, when IIAB's 1-line installer prompts you with "Edit /etc/iiab/local_vars.yml to customize your Internet-in-a-Box? [Y/n]"
Three common example local_vars.yml files are posted for comparison (SMALL-sized, MEDIUM-sized, and LARGE-sized). See also this medical example used by the Wiki Project Med Foundation e.g. for http://med.iiab.me. In addition see our bare bones example, very useful for unit testing of a single IIAB App.
Customize your IIAB installation (and its selection of apps/services, etc) by proceeding as follows:
cd /opt/iiab/iiab followed by sudo ./runrole <ROLE NAME> to run a single Ansible role or IIAB Stage.
sudo ./runrole (without parameters) to see its options, e.g. sudo ./runrole --reinstall <ROLE NAME>sudo iiab-network to run IIAB's 'network' role.cd /opt/iiab/iiab followed by sudo ./iiab-configure (this can take many minutes on a Raspberry Pi, depending on your changes!)
tail -f /tmp/job-<JOB NUMBER>cd /opt/iiab/iiab followed by sudo ./iiab-install --reinstall
/etc/iiab/iiab_state.yml (to apply more force, At Your Own Risk!)
PRO TIP: Some very practical networking variables are posted in the IIAB Networking document.
See: What services (IIAB apps) are suggested during installation?
See: What are the default passwords?
See: Any other networking tips?
See: Can I upgrade IIAB software?
See: Can I upgrade or reinstall IIAB apps?
See: What are the best places for community support?
Yes. Small medical clinics and electricity-starved remote libraries typically require this, given that Raspberry Pi computers do not have a physical Power Off button, and it's asking way too much for non-technical operators to power off using the Admin Console.
"apache_allow_sudo: True" is the default in /etc/iiab/local_vars.yml to make this possible.
To power off, any user can then click a URL like: http://box/js-menu/menu-files/services/power_off.php (formerly http://box/common/services/power_off.php)
Whereas most schools do not want this, for obvious reasons — a mischievous student could shut down the Internet-in-a-Box at any time! This is the reason most schools prefer "apache_allow_sudo: False". FYI if do you change this variable's value in /etc/iiab/local_vars.yml, you should then run:
cd /opt/iiab/iiab sudo ./runrole www_options
The "Power Off" button can also be customized in IIAB's Admin Console (http://box/admin or http://box.lan/admin) > Content (menu) > Load Menu > (change the settings in) Properties of Current Menu > Save Menu. More detail on the Content Menus help page and #1689.
See: What is local_vars.yml and how do I customize it?
The best way is to run iiab-summary to get a quick ~20 line overview of your Internet-in-a-Box (IIAB) system.
Also, look for iiab_base_ver near the top of your /opt/iiab/iiab/vars/default_vars.yml. This is followed by a number like "8.3" showing the version level (even if you're running a pre-release of that version!) You can also look in /etc/iiab/iiab.env for the line(s) with "IIAB_RELEASE=".
Finally, your iiab branch name is visible if you log into your IIAB's Admin Console (http://box/admin or http://box.lan/admin) and click "About" in the top-right. Look at both fields "Version" and "Commit ID". The "Version" field typically shows "master" (or something like "release-8.3").
The 40-character "Commit ID" string gives more detail. You can compare this to commits within https://github.com/iiab/iiab/commits/master and https://github.com/iiab/iiab/releases — e.g. if you're running the older IIAB 8.2 from December 31, 2024, it would begin with b4319bf.
CAUTION: the letter 'g' is confusingly sometimes added in front of such 7-character githashes (abbreviated from the full 40-character SHA-1 githash) in a few places, like the install image filename(s) at https://download.iiab.io/8.2/
See: Is a quick installation possible?
See: What are the default passwords?
See: Can I upgrade IIAB software?
Please understand this can DESTROY your Internet-in-a-Box if attempted on an older IIAB (do NOT use iiab-update to update from one OS major release/version to the next!)
If your IIAB is more than a few weeks old, it's generally much better (and much safer) to install IIAB from scratch at https://download.iiab.io
But if you're willing to proceed AT YOUR OWN RISK (MAKE A BACKUP FIRST) here are instructions, if your IIAB is online:
NEW WAY uses iiab-update, as of July 2024:
sudo iiab-update if you want minor OS apt updates, in addition to full upgrading of Ansible, Admin Console, Calibre-Web.sudo iiab-update -f if you want it to run very fast (upgrading IIAB's core and IIAB Calibre-Web, but avoiding slow tasks!)OLD WAY, please avoid it: (about 15 commands in total!)
sudo -i
cd /opt/iiab/iiab git config branch.master.remote origin git config branch.master.merge refs/heads/master git checkout master # If 'git branch' output shows 'master' git checkout -b master # Or, create 'master' branch & check it out. git pull
WARNING: At this point it's best to regenerate your /etc/iiab/local_vars.yml settings and customizations, starting with a fresh copy from one of the 3 local_vars_*.yml files (SMALL-sized, MEDIUM-sized, or LARGE-sized) available in /opt/iiab/iiab/vars
WARNING: You may want to delete /etc/iiab/iiab_state.yml (to apply more force, AT YOUR OWN RISK!)
Then attempt to upgrade as follows:
./iiab-install --reinstall # Takes about 10-20 min
cd /opt/iiab/iiab-admin-console git config branch.master.remote origin git config branch.master.merge refs/heads/master git checkout master # If 'git branch' output shows 'master' git checkout -b master # Or, create 'master' branch & check it out. git pull ./install # Takes about 2-4 min
FYI the 2+2 "git config" lines above are NOT necessary if your .git/config file is already correct in each local repo (/opt/iiab/iiab and /opt/iiab/iiab-admin-console) as explained at https://stackoverflow.com/questions/658885/how-do-you-get-git-to-always-pull-from-a-specific-branch
FYI the 2+2 "git checkout" lines above are NOT necessary if each local repo is already on the master branch. You can run 'git branch' in each of the 2 above (local repo) directories, if you want to see what branch they're on.
See: What is local_vars.yml and how do I customize it?
See: How do I know what version of IIAB I'm running?
See: Can I upgrade or reinstall IIAB apps?
See: Can I get content updates every few months or semester?
See: How do I back up, shrink & copy IIAB microSD cards?
Yes, if your IIAB is online! Here are two ways:
1. Log in to Admin Console (e.g. http://box.lan/admin) > Configure > Services Enabled and then:
2. Or at the command-line, run:
sudo -i cd /opt/iiab/iiab ./runrole <APP OR ROLE NAME>
See: What services (IIAB apps) are suggested during installation?
See: What are the default passwords?
See: Can I upgrade or reinstall IIAB apps?
1) Most IIAB Apps can be reinstalled to the very latest available version when you're online, as follows:
sudo -i cd /opt/iiab/iiab ./runrole --reinstall <APP OR ROLE NAME>
WARNING: Make a backup of ALL data and content first, if you do not want to take risks!
SPECIFICALLY: Each app does this a bit differently, but the general rule is to (try) to preserve all content and user data during an app reinstall.
CLARIFICATION 1: IIAB does not support offline reinstalls, as a general rule. In some cases however, you can run ./runrole --reinstall [APP OR ROLE NAME] even when offline, to reinstall certain apps to a cleaner/known state, e.g. whatever app version was most recently downloaded to your system.
CLARIFICATION 2: What is installed (and implicitly, what is not) can be viewed within /etc/iiab/iiab_state.yml
2) HIGH RISK: If your IIAB was recently installed, you can try to reinstall all of your apps to the latest available versions, and reinstall IIAB itself, as follows: (this could take a while!)
sudo -i mv /etc/iiab/iiab_state.yml /etc/iiab/iiab_state.yml.old cd /opt/iiab/iiab git pull # THIS LINE AT YOUR OWN RISK! ./iiab-install --reinstall
WARNING: Make a backup of ALL data and content first, if you do not want to take risks!
CLARIFICATION: IIAB does not support offline reinstalls, as a general rule. In some cases however, the above will still work even when run offline.
3) Prior to February 2020, IIAB implementers were advised to (at their own risk) individually delete the following files or directories, to attempt an upgrade or reinstall of these common IIAB apps. And then run "cd /opt/iiab/iiab" then "./iiab-install --reinstall" or "./runrole --reinstall <ROLE NAME>" :
apt update then apt install kolibri can work to upgrade Kolibri since August 2022. CAUTION: Administrators need to type in the username kolibri when apt upgrading Kolibri as of 2022, due to Kolibri bug learningequality/kolibri-installer-debian#115] (Kolibri version shown by /usr/bin/kolibri --version — a full wipe/purge of Kolibri can be accomplished by apt purge kolibri and then removing [1] /library/kolibri [2] /etc/kolibri and [3] /usr/bin/kolibri as nec.)ls -d /opt/iiab/jupyterhub/lib/python3.*/site-packages/jupyterhub-* (2) http://box/jupyterhub -> log in (e.g. Admin/changeme) -> File menu -> Hub Control Panel -> Admin menu. If you want to reinstall JupyterHub from scratch, first delete directory /opt/iiab/jupyterhub — and read more about JupyterHub operations here: https://github.com/iiab/iiab/blob/master/roles/jupyterhub/README.mdWARNING #1: Data loss of kids', teachers' and users' personal materials is always possible, ALWAYS back up any relevant databases first!
WARNING #2: Beware you will likely lose settings that you've set within Internet-in-a-Box's Admin Console (http://box/admin or http://box.lan/admin).
WARNING #3: Testing is ongoing to make sure this works sufficiently in typical situations like these 2 below, ensuring that a wholesale revert to default settings is at least plausible:
See: What services (IIAB apps) are suggested during installation?
See: What are the default passwords?
See: KA Lite Administration: What tips & tricks exist?
See: How do I back up, shrink & copy IIAB microSD cards?
Great question, keeping in mind the near-impossibility of downloading large Content Packs to remote locations in the developing world.
Despite these obstacles, remote upgrades are becoming increasingly possible now that high-bandwidth connections are available within cities in the developing world. For Example: bringing a rural IIAB device into the city for a night (or a few days) to plug it into an online cablemodem, can be a very efficient and affordable way to update content — particularly within countries that offer unlimited downloads, at a fixed monthly rate.
Notwithstanding, terabyte download costs explain why drop-shipped hard drives containing "complete content catalogs" are often still more economic and efficient than downloading.
Please watch the HOW-TO videos on Internet-in-a-Box's YouTube channel (several available as .mp4 and .WebMD) to get up to speed with downloading & installing content to your IIAB!
On the high end, IIAB's Admin Console (http://box/admin or http://box.lan/admin > Install Content) supports piecewise incremental content updates, e.g. for schools with very high-bandwidth Internet connections. Note that older Content Packs can be individually be removed within Admin Console (http://box.lan/admin) > Manage Content, when there's a need to free up disk space. Likewise IIAB Apps such as KA Lite and Kolibri offer administrative interfaces, supporting deletion of lessons/videos within their environments, as well as downloading new ones.
As a practical matter, remote schools may receive larger updates via hard drive or USB memory stick every semester or every year — e.g. flown in or driven in or mailed in by a partner. Empowering them with new maps / encyclopedias / E-Books / video lessons — as well as other content and apps.
Keep in touch as new options evolve! Please make contact to keep up with other communities' offline content collections and recommendations.
See: What are the default passwords?
See: How do I customize my Internet-in-a-Box home page?
See: How do I add ZIM files, like Wikipedia?
See: Can I permanently attach an external USB drive, to add more content?
See: What are the best places for community support?
Please read more about the iiab-admin Linux user and group, which allow you to log in to IIAB's Admin Console:
Some IIAB installations include ssh keys which permit developers to log into your machine, to enable remote support during Beta programs and similar. You can disable this feature by running terminal command sudo rm /root/.ssh/authorized_keys
Whether running your server online or offline, please see Security and help us contribute to this evolving knowledge & repertoire of 21st century hygiene, thanks to professional volunteers from many backgrounds.
See: What are the default passwords?
See: How can I remotely manage my Internet-in-a-Box?
See: Is campuswide access possible for all server apps?
See: What are the best places for community support?
This is impossible with an Internet-in-a-Box (IIAB) set up in a permanently OFFLINE school or community, as the World Wide Web Consortium sadly does not allow this (reasons explained here). Worse, those who try to force this with self-signed web server certificates find that everyday users (the world's poorest citizens, and others!) do not tolerate the complexity and hassle of scary browser pop-up overrides.
If however you're setting up an IIAB that will be ONLINE (with regular Internet access) then HTTPS encryption is thankfully easy to set up:
gui_port: 443 in /etc/iiab/local_vars.yml preferably prior to installing IIAB. (Or if IIAB software is already installed, modify and then run /usr/bin/iiab-gen-iptables so that your iptables firewall opens up port 443 instead of port 80.)/etc/nginx/server.conf to remove or comment out server_name $hostname; — instead set your actual domain name e.g. server_name MY-DOMAIN.ORG;sudo -i apt install certbot python3-certbot-nginx certbot --nginx -d MY-DOMAIN.ORG
certbot command asks you a few simple questions to help arrange auto-renewal of your web certificate every 60-to-90 days, before it modifies your /etc/nginx/server.conf (check this file carefully for any further manual modifications that you might require!)nginx -t && nginx -s reload to validate then "reload" NGINX.certbot renew --dry-run, certbot renew --force-renewal or simply certbot renewSee: What is local_vars.yml and how do I customize it?
1. Raspberry Pi Connect allows you to connect remotely from a web browser, if your IIAB was built using Raspberry Pi OS: (May 2024 blog post, June 2024 blog post, forum)
apt install rpi-connect if you need full graphical screen sharing — or choose apt install rpi-connect-lite which only supports shell access. Reboot your Raspberry Pi, either way!rpi-connect signin at the Raspberry Pi OS command-line. Finish linking your Raspberry Pi, by visiting the verification URL.2. You can use https://remote.it to remotely support almost any IIAB. Simply run sudo iiab-remoteit at the Linux command-line (of any IIAB that is online) and it tells you what to do. As of 2025, 5 IIAB devices can be managed for free (their personal / non-commercial plan) and larger numbers for $10+/month. Full instructions are here: https://github.com/iiab/iiab/tree/master/roles/remoteit
3. As of September 2024, IIAB not only includes the tailscale command, but also makes this modern/mesh VPN dead simple for newbies and newcomers, using the iiab-vpn command. Please contact us by email (holt@unleashkids.org) to introduce yourself — so we can arrange a cryptographic key for users in need and/or contributors doing good work!
4. Smaller-scale implementers may prefer traditional Linux-and-ssh arrangements across firewalls using https://ngrok.com or https://dataplicity.com or https://www.zerotier.com — possibly in combination with router port-forwarding and Dynamic DNS services like No-IP (https://noip.com).
5. In all 4 above cases, consider low-bandwidth screen sharing using the screen command as explained in IIAB's Contributors Guide.
6. Beginners may prefer graphical screensharing via Zoom, Google Meet, or TeamViewer "unattended access" especially if you have a graphical desktop environment on your Internet-in-a-Box. This can also be priceless when mentoring/learning at a distance, thanks to TeamViewer's screen-sharing, keyboard-sharing and mouse-sharing — helping to onboard new operators who aren't yet comfortable with GNU/Linux and its command line tools. In a graphical desktop environment, simply install TeamViewer, which by default randomizes TeamViewer's password (needed for remote access) every time TeamViewer is launched, preserving local operator control.
And if you want, enable TeamViewer's fully "unattended access" by setting a more permanent password for remote access here: TeamViewer > Extras > Options > Security > Personal Password (for unattended access).
Raspberry Pi: If you're using the Raspberry Pi OS (either the "Lite" server edition, or the "with desktop" edition including a graphical desktop environment) then you probably want the minimal TeamViewer Host. Or consider their TeamViewer Full Client. Either way, it works as a single-click install (or "apt install ./FILENAME.deb", or "dpkg -i FILENAME.deb; apt-get -f install") and includes seamless ongoing upgrades via apt.
Bonus: headless installation/configuration is also now supported (e.g. on Raspberry Pi OS Lite) with "teamviewer info" "teamviewer passwd <ACTUAL-PASSWORD>" and "teamviewer help" per https://community.teamviewer.com/English/kb/articles/6318-how-to-install-teamviewer-for-linux.
Note: Developers' ssh keys may be included with IIAB install images, to facilitate remote support during Beta programs and similar. Read "What security tips exist?" if you want instructions to remove these keys.
Admin Console: If http://box.lan/admin shows red errors when you try to log in, please read the red messages and try reloading the page a minute later — you can also take a look at the output of: systemctl status iiab-cmdsrv.service
See: Can I use my phone, tablet or laptop as a Raspberry Pi monitor?
See: What are the default passwords?
See: What security tips exist?
See: What are the best places for community support?
Please consider AWStats and Matomo in the table above.
EXAMPLE — to help teachers understand which ZIM files are most popular:
kiwix_install: True kiwix_enabled: True
cd /opt/iiab/iiab then sudo ./runrole kiwixBackground:
See: What services (IIAB apps) are suggested during installation?
See: What is local_vars.yml and how do I customize it?
Please read "How do I customize my Internet-in-a-Box home page?" Several HOW-TO videos on Internet-in-a-Box's YouTube channel (some available as .mp4 and .webm) can also help you install content onto your IIAB:
1. To download ZIM files, log in to your Internet-in-a-Box's (IIAB) Admin Console (http://box.lan/admin) -> Install Content -> Get ZIM Files from Kiwix
2. Or, if you already have content on hand (like ZIM files or OER2Go/RACHEL modules) on a portable USB disk or USB flash drive, insert the USB drive into your Internet-in-a-Box (IIAB). Then use your IIAB's Admin Console (http://box.lan/admin) -> Install Content -> Manage Content to copy the content you need, installing it onto your IIAB:
/library layout as your IIAB:
/library/zims/content/library/www/html/modules3. Or, if you prefer the command-line, download the ZIM file you want (e.g. from https://download.kiwix.org/zim/) directly to your IIAB's /library/zims/content — for example:
cd /library/zims/content/
sudo wget https://download.kiwix.org/zim/wikipedia/wikipedia_ht_all_maxi_2026-04.zim
Then run /usr/bin/iiab-make-kiwix-lib to update your IIAB's ZIM file index:
sudo iiab-make-kiwix-lib
While rarely necessary, if you need to completely rebuild your IIAB's ZIM file index, run:
sudo iiab-make-kiwix-lib -f
Optionally, as a final step, you can try to auto-update your IIAB's main page — to add a logo and description for the ZIM file(s) you just added:
sudo iiab-update-menus
4. Finally, whichever approach you choose above, test that your new ZIM file(s) are browsable at http://box/kiwix and that search features (at the top-right of the page) are working!
IN FUTURE:
Technical README: https://github.com/iiab/iiab/tree/master/roles/kiwix#readme
See: What can I do with E-books and Internet-in-a-Box?
See: Can teachers display their own content?
See: Can students upload their own work?
See: What are the default passwords?
See: How do I customize my Internet-in-a-Box home page?
See: How do I add my own content?
See: Can I upgrade or reinstall IIAB apps?
See: Can I permanently attach an external USB drive, to add more content?
Khan Academy videos and exercises are extremely popular thanks to KA Lite, which stores these famous videos (.mp4) and thumbnails (.png) within /library/ka-lite/content, and can be customized in different ways. Note this folder also contains 3 critical subfolders, after you've installed KA Lite's mandatory English content pack as part of a new install: (IIAB's 1-line installer does this for you!)
To change KA Lite's Admin and user-level passwords, see "What are the default passwords?" above.
For starters, log into http://box:8008 as the Admin user, and learn how to install language packs and then download/delete videos in different languages.
Instead of the above, many prefer torrenting the compressed KA Lite videos (available in 7 common languages, also here) as their storage footprint is more than 3X smaller!
Traditionally Windows users use BitTorrent client software like Tixati, and Linux users use command-line BitTorrent tools like aria2 (trying --force-sequential or "aria2c -Z URL1.torrent URL2.torrent" to download several). Or, a visual interface to BitTorrent can now be used as part of your Internet-in-a-Box:
A. Internet-in-a-Box can now kickstart the BitTorrent download(s) for you, if you set transmission_install and transmission_enabled to True in /etc/iiab/local_vars.yml and pick the KA Lite language(s) you need. Install and launch Transmission by running cd /opt/iiab/iiab then sudo ./runrole transmission then sudo iiab-network
B. Monitor your BitTorrent download(s) at http://box:9091 using Admin/changeme until download is confirmed complete (can take hours if not days!)
C. Carefully move all videos/thumbnails from /library/transmission into /library/ka-lite/content (DO NOT OVERWRITE SUBFOLDERS assessment, locale, srt !)
D. Log in to KA Lite at http://box:8008/updates/videos/ using Admin/changeme then click "Scan content folder for videos" (can take many minutes!)
Separately, you can run "/opt/iiab/iiab-factory/content/khan/ka-scan" to remove obsolete videos, which will be moved to /library/ka-videos/obsolete to help you free up space!
More advanced administrators can take a look at the scripts in /opt/iiab/iiab-factory/content/khan and /opt/iiab/iiab-factory/box/generic contributed by Tim Moody.
In general, you can restart the KA Lite service using "systemctl restart kalite-serve" if attempting such changes under the hood. Three common such examples follow:
Mandatory English Pack taking too long to download? Mysteriously, KA Lite's mandatory 1GB (929,916,955 byte) English Pack can take hours to download over certain ISP's and network environments, when installing it using the official command "kalite manage retrievecontentpack download en". Speedier 3-Step Alternative If So: (1) Download en.zip manually (using another ISP if necessary) from https://pantry.learningequality.org/downloads/ka-lite/0.17/content/contentpacks/en.zip using wget or any browser. (2) Install it by running "kalite manage retrievecontentpack local en en.zip" (it's no longer necessary to type in "export KALITE_HOME=/library/ka-lite", as /usr/bin/kalite is now a bash wrapper to "venv" that does that automatically). Brief Help is available if you enter "kalite manage help retrievecontentpack". (3) Run "du -hs /library/ka-lite/content/" to verify that 940MB or more has successfully been installed there (and log in as Admin to http://box:8008 -> Manage -> Language to be 100% sure!)
Multilingual? Consider running 2 or 3 instances of KA Lite on the same Internet-in-a-Box server, e.g. we sometimes put English on port 8008, Spanish on port 8007, and French on port 8006. Examine the /opt/iiab/iiab-factory/content/khan/mk-other-kalite script if you too want *direct* access to Spanish videos in /library/ka-lite-es, or *direct* access to French videos in /library/ka-lite-fr, etc. Typically implementers run "mk-other-kalite es 8007" or "mk-other-kalite fr 8006" (make sure your mk-other-kalite is up-to-date!)
If you do this, make sure your IIAB's firewall (iptables) has the ports open that you need for "campus-wide" (WAN side) access to these materials. Make any changes you need to the ports_externally_visible: variable in /etc/iiab/local_vars.yml and consider these 2 older examples: open ports below 8008, open up port 4244.
Monolingual in Spanish or French or similar? Fool /opt/iiab/iiab-admin-console/roles/js-menu/templates/config.json.j2 (live at /library/www/html/js-menu/config.json) by changing the line with "es-kalitePort" from 8007 to 8008 — or change the line with "fr-kalitePort" from 8006 to 8008 (this works to get rid of English, even if "en-kalite-Port" remains 8008). A separate/crude hack to get other languages to work with ports 8006 or 8007 is to put "lang": "fr", or "lang": "es", in the .json file in the /library/www/html/js-menu/menu-files/menu-defs directory.
More Documentation? Please see the original KA Lite README.
Changing Calibre's port is similar: Modify calibre_port (e.g. from port 8080) in /etc/iiab/local_vars.yml prior to installing IIAB, which you can later confirm in /library/www/html/js-menu/config.json
What about Kolibri, also from Learning Equality? Please see the Kolibri README.
See: What are the default passwords?
See: What is local_vars.yml and how do I customize it?
As of 2026, please read the new IIAB Maps instructions here:
https://github.com/iiab/iiab/blob/master/roles/maps/README.md
How do I set the WordPress URL (like http://box/wordpress) so it works for everyone?
/library/wordpress/wp-config.phpHow do I optimize Matomo or PBX or WordPress for high-traffic usage?
nginx_high_php_limits: True in /etc/iiab/local_vars.yml (NOTE: IIAB enables these higher settings for Moodle and Nextcloud automatically, as of August 2023.)cd /opt/iiab/iiab followed by sudo ./runrole www_options and then reboot.Optionally you might further customize the 6 settings {upload_max_filesize, post_max_size, max_execution_time, max_input_time, memory_limit, max_input_vars} in both /etc/php/<ACTUAL VERSION NUMBER>/*/php.ini files (reboot if so!) This is best done prior to IIAB's install, within /opt/iiab/iiab/roles/www_options/tasks/php-settings.yml
How do I copy a complete installation of WordPress to another Internet-in-a-Box?
How do I integrate IIAB Apps and Content Packs (and custom menuing!) into a larger WordPress site?
Please see Joshua Kanani's WordPress plugin instructions. Thank you for providing feedback in support of this emerging effort!
How do I set the Moodle URL (like http://box.lan/moodle) so it works for everyone?
/opt/iiab/moodle/config.php including their customized school URL in a line like $CFG->wwwroot = 'http://192.168.0.100/moodle'; or $CFG->wwwroot = 'http://myschool.mydomain/moodle';See: What is local_vars.yml and how do I customize it?
See: Can I upgrade or reinstall IIAB apps?
See: Is campuswide access possible for all server apps?
Run this:
sudo -i cd /library/www/html/modules git clone https://gitlab.com/Afrikalan/tuxmath-js --depth 1 rm -rf tuxmath-js/.git*
Using Admin Console, set up a menu item on your IIAB home page, to help students access http://box/modules/tuxmath-js
See: How do I customize my Internet-in-a-Box home page?
Run this:
sudo -i cd /library/www/html/modules git clone https://github.com/jmoenig/Snap en-snap -b v12.0.6 --depth 1 rm -rf en-snap/.git*
Using Admin Console, set up a menu item on your IIAB home page, to help students access http://box/modules/en-snap (or similar!)
Examples:
See: How do I customize my Internet-in-a-Box home page?
When installed on Raspberry Pi OS, Internet-in-a-Box (IIAB) offers the option of a basic Captive Portal since IIAB 6.7, so new users don't have to type in URL's (like http://box, http://box.lan or http://10.10.10.10) into their browser.
This is similar to pages that appear automatically when you connect to Wi-Fi in airports/hotels/restaurants. It helps provide immediate access to those who have trouble typing in URL's, or live in countries that do not use Latin-based languages in their URL's.
DEVELOPERS: please see the Captive Portal README.md for a high-level summary of its mechanics and how it works, then look through the code here: https://github.com/iiab/iiab/tree/master/roles/captiveportal/
CAUTION: IIAB's Captive Portal is experimental, so you need to try it on the smartphones and client devices most common in your community. Please also see these older Known Issues.
Captive Portal is installed but not enabled by default in IIAB 8.3. Here are instructions to enable it:
captiveportal_install: True captiveportal_enabled: True
Conversely, note that many schools prefer to disable Captive Portal entirely, which can be done as follows:
captiveportal_enabled: False
As new phones and devices appear, different browsers on different versions of Android, Windows, iOS and Linux will require usability (UX) refinements and we'd love your help!
If you face Captive Portal issues, please send us screenshots (or photos of any error messages!) by clicking "New issue" in the top-right of: https://github.com/iiab/iiab/issues — don't forget to include the make/model of your client device along with the specific version of its OS and browser!
Finally if you're someone who can improve IIAB's Captive Portal functionality directly, please look over checklist #1182 and explore its Ansible & Python code here.
See: My Android device says "Connected, no Internet" and won't browse http://box
See: Any other networking tips?
See: What is local_vars.yml and how do I customize it?
No: several of these server apps fail when accessed over the WAN side of an Internet-in-a-Box, but work well over the LAN side or internal-WiFi of an Internet-in-a-Box.
Still: WordPress, Nextcloud, Moodle and others can be modified using an evolving arsenal of tricks that we hope you too can help refine!
The challenge is to get the most urgently needed campuswide LMS-like apps working well enough for campus-like environments (rather than perfectly in all situations, unfortunately not possible given modern cybersecurity threats!)
ASIDE: efforts are ongoing to make snappy/mnemonic URL's (like http://box/books) in support of teachers' and medical clinics' desires to rapidly onramp information literacy among new users.
See: What security tips exist?
See: WordPress & Moodle Administration: What tips & tricks exist?
Many Linux OS's offer /etc/rc.local — Internet-in-a-Box (IIAB) recommends /usr/libexec/iiab-startup.sh if you're concerned that local operators might overwrite rc.local
/usr/libexec/iiab-startup.sh is put in place by iiab-startup.yml at the end of Stage 2 during IIAB's installation.
If your Internet-in-a-Box (IIAB) internal storage is full, here's a way to place additional content on an external USB drive or USB memory stick.
Format the USB drive with the ext4 filesystem:
mkfs.ext4 /dev/sdX # Or if the device is partitioned: mkfs.ext4 /dev/sdXN
Before running the above, change 'X' (and 'N' if necessary) to correspond to your actual USB drive. You can uncover this (its device name) by running commands like lsblk or blkid with df -h.
Label the USB drive (e.g. "IIAB-LIBRARY-EXT" in this case) again filling in 'X' (and 'N' if necessary) before you run:
e2label /dev/sdX IIAB-LIBRARY-EXT # Or if the device is partitioned: e2label /dev/sdXN IIAB-LIBRARY-EXT
Put this line (using the same label as above) into your IIAB's /etc/fstab
LABEL=IIAB-LIBRARY-EXT /library-ext ext4 defaults,nofail 0 0
Alternatively, a popular option is to put ALL your content in the USB drive's own top-level library folder. (This works well with Admin Console -> Install Content -> Manage Content to import/export content.) BONUS: If you choose this approach, you can avoid creating the symbolic link[s] mentioned further below!
LABEL=IIAB-LIBRARY-EXT /library-ext ext4 defaults,nofail 0 0 /library-ext/library /library none defaults,bind,nofail 0 0
Either way, create the needed mount point on your IIAB, by running:
mkdir /library-ext
After you've tested that your USB drive automounts correctly on boot, create any symbolic link(s) you need — so that IIAB can find any Content Packs you've placed on the external USB drive.
Example command: (if for example you placed all your OER2Go/RACHEL modules onto the external USB drive, so they appear as /library-ext/www/html/modules/ when mounted)
ln -s /library-ext/www/html/modules/ /library/www/html/modules
CLARIF 1: This example assumes you're copying Content Packs onto the external USB drive so they'll appear under /library-ext using the very same layout of sub-folders that IIAB uses for content within /library on its internal drive.
CLARIF 2: If this USB drive is plugged into another Linux computer, the above example folder might automount differently, e.g. appearing as /media/usb/www/html/modules
CLARIF 3: Use the very same IIAB to set up and verify that the external USB drive's file ownership and read/write permissions work (e.g. use Linux commands chown and chmod if necessary).
CLARIF 4: When copying large Content Packs, we strongly recommend the rsync -av command, so that files are not lost and the copy process can continue if interrupted — while preserving ownership and timestamps.
CLARIF 5: Another way to do this (e.g. on a more temporary basis) is "bind mounting" as mentioned at #2679, #3106, #4332 and "What is a bind mount?"
CLARIF 6: If your Linux OS has a graphical desktop, it's common to see popup message warnings like:
Unable to mount 128 GB Volume Device /dev/sdb1 is already mounted at '/media/usb0'.
It's safe to ignore these messages. Or you can make these popup messages go away, typically by clicking through your graphical File Manager's preferences or OS settings, and unchecking the box for "Mount removable media automatically when they are inserted" or "Automatically mount removable media when inserted and on startup." #86
See: Can teachers display their own content?
See: Can students upload their own work?
See: How do I customize my Internet-in-a-Box home page?
See: How do I add ZIM files, like Wikipedia?
See: Can I install IIAB onto a USB drive?
This can fail with consumer-grade hardware, because the boot device's USB 3.0 frequencies (e.g. radiating from a USB flash drive, Raspberry Pi "hat" or other peripheral — especially those lacking a ferrite RF choke and/or lacking proper USB3 cable shielding) very often interfere with the Raspberry Pi's internal Wi-Fi.
As explained in #2638, raspberrypi/firmware#1430 and this 2012 Intel White Paper:
USB 3.0 Radio Frequency Interference Impact on 2.4GHz Wireless Devices https://www.usb.org/document-library/usb-30-radio-frequency-interference-impact-24-ghz-wireless-devices (PDF)
DO THIS FIRST: A 1st order test of the quality of your hardware is to set up USB 3.0 boot (do this prior to installing IIAB) then connect to your building's 2.4GHz (NOT 5GHz !) Wi-Fi — without an Ethernet cable! Then carefully test web/online tasks like running apt update, downloading large files, ping mit.edu, etc — evaluating packet loss over many minutes to be sure. (If your hardware/layout cannot function reliably as a Wi-Fi client device, don't even bother trying to set it up as an Internet-in-a-Box learning hotspot!)
This can work however, if you've acquired the right RF-shielded hardware, and set it up carefully. So if you've carefully validated your hardware/setup's ability to work with 2.4GHz Wi-Fi, then installing Internet-in-a-Box (IIAB) onto a USB stick or USB drive is possible — e.g. by following Shanti Bhardwa's Steps 1 to 14 (#2585) — or Dirk Uys' Steps 1 to 14 (#1799) for Raspberry Pi 3-and-higher.
For Raspberry Pi Zero W, Step 17 will also be necessary (copying bootcode.bin to the first partition).
THEFT WARNING: Of course there is a risk your USB (flash or hard disk) drive might be stolen, as there's always a temptation for others to "borrow" external USB devices. For many similar/such practical reasons, an IIAB microSD card (placed inside the Raspberry Pi) usually makes much more sense.
PRIVACY AND SECURITY WARNING: If you're booting from a USB device (e.g. an external disk or flash drive) please set usb_lib_enabled: False in /etc/iiab/local_vars.yml prior to installing IIAB, so that your filesystem is not viewable at http://box/usb. You can also do this after installing IIAB, using Admin Console (http://box.lan/admin) > Content > Services Enabled > USB based content libraries (uncheck the checkbox) > Save Configuration > Install Configured Options — give it 1-2 minutes and then verify that this completed in Utilities (menu) > Display Job Status — and finally reboot. (#2552)
See: What hardware should I use?
See: What is local_vars.yml and how do I customize it?
See: Can I permanently attach an external USB drive, to add more content?
Privacy Practices for removing student/teacher personal data and protecting medical confidentiality will emerge at #1516 and/or Security.
IIAB communities around the world would LOVE your help making a 1-to-2 minute "Offline YouTube" (friendly screencast) outlining the best approach(es) below — and how to use them — please if you can, do consider making any such very short video!
1. Self-Clone your entire Internet-in-a-Box (IIAB) e.g. to an external microSD card, using IIAB's Admin Console http://box.lan/admin > Install Content > Clone IIAB (details).
2. Likewise a very easy/friendly approach is possible if you have access to the "Desktop" (graphical) version of Raspberry Pi OS. Simply click the Raspberry start menu (top-left of screen) > Accessories > SD Card Copier:
3. On Linux or macOS, we strongly recommend the built-in command dd if you are comfortable at the command-line.
diskutil listsudo diskutil unmountDisk /dev/disk2sudo dd if=source.img of=/dev/rdisk2 bs=4m status=progress/dev/rdisk2 NOT /etc/disk2) is the raw one. It should let you write 1 byte at a time, and is ~20X faster.status=progress doesn't work, you can type ctrl-T at the shell running dd to send it the INFO signal, to provide you a snapshot of how much has been transferred.sudo diskutil eject /dev/disk24. Consider friendly software balenaEtcher for Windows, Mac and Linux — that should help you copy (clone) an entire IIAB microSD card to another.
4.1 On Windows 10/11, strongly consider dotNet Disk Imager which is a "dotNet equivalent to Win32 Disk Imager, but more lightweight and with more features." [Several of us use this on Windows 8 and Windows 10, e.g. Tim Moody writes: "first time it stopped on the second partition after it asked me to format, like win32 imager...but it has a button to wipe the device and after I did that it completed"].
4.2 On Windows 7 or Windows 8 (must be prior to Windows 10!) consider the "Read" button in Win32 Disk Imager to back up an IIAB microSD to your Windows hard disk:
5. Is it possible Clonezilla can do part of this job? Clonezilla (unlike FileZilla) is free software for disk cloning, disk imaging, data recovery, and deployment.
See: How do I customize my Internet-in-a-Box home page?
See: Can I upgrade or reinstall IIAB apps?
See: What security tips exist?
See: Can I permanently attach an external USB drive, to add more content?
See: Can I install IIAB onto a USB drive?
1) The fastest response will arise if you post a "New issue" here:
Those who do not have GitHub accounts should consider creating one.
Describe your issue in full (with context) so that others may help — including screenshots if possible — and the ACTUAL PASTEBIN URL that is generated after you run sudo iiab-diagnostics
2) Or consider posting to our technical discussion forum:
3) For field/community topics, consider getting in touch using Twitter:
4) And don't hesitate to also write to our mailing list!
FOCUS: teachers/content/learning/libraries. Please take inspiration from our earlier work with almost a thousand "One Laptop Per Child" global grassroots communities, enabling their nearby educational communities to connect on a local level, very powerfully and directly Helping Each Other: http://olpcMAP.net
5) BUSINESS CONTACT: if you need to get in touch regarding strategic alliances or partnerships with Internet-in-a-Box, please email Adam Holt (holt @ unleashkids.org).
See: What are the default passwords?
See: How can I remotely manage my Internet-in-a-Box?
See: What are the default passwords?
See: How can I help?
Please see the Contributing section of Internet-in-a-Box.org
Technical developers please (1) consider our Contributors Guide and (2) look through the tasks in our upcoming milestones.
Implementers and IT people please contact us if you can help improve this very (wiki i.e. editable) document (FAQ.IIAB.IO) as well as our GitHub Tech Docs.
Librarians, videographers and designers are needed to help us deepen our communications — please make contact directly if you're able to help!
The voices and participation of in-field implementers and teachers are always welcome (over WhatsApp or Skype if necessary, even if your English is not perfect!) as you are the 1st-line actionists that literally make this all possible! "TLC's" a.k.a. Technology Learning Coordinators a.k.a. local heros are indeed the secret sauce that make everything possible~
Finally, everyone is encouraged to post ideas and suggestions to our community mailing list:
In 2025, serious digital librarians and humanitarian scrapers are also invited to join our content engineering design discussions that bring together all countries — building off our original Medical & Educational Content Hackathon back in 2017 — but now refining "web scraping" techniques for entirely new (categories of) very-high-quality Content Packs. Don't hesitate to make contact!
See: How can I remotely manage my Internet-in-a-Box?
See: What are the best places for community support?
See: How can I donate to Internet-in-a-Box?
Please write if you can assist specific efforts in Haiti, Mexico — or otherwise.
You may also make tax deductible donations to our supporting NGO, Wiki Project Medicine.
Thank you!
Release History:
Since May 2017, IIAB code has been available at: https://github.com/iiab
Prior to May 2017, XSCE code was available at: https://github.com/xsce/xsce
Older RPM builds from 2013 may be available from https://archive.org
See: What are the best places for community support?
See: How did IIAB/XSCE's design evolve?
Here's our brief-but-growing participatory design archive / lineage:
Community history is vital to all seeking to avoid reinventing mistakes of the past, thanks for Everyone's thoughtful input past & present!