LeoOS is a Debian-based Operating System distribution for the single-board computer running inside Leo Rover (currently Raspberry Pi 4B). It uses Ubuntu and Fictionlab package archives, comes with a ROS distribution, preconfigured network, a desktop environment, a service for starting base functionalities at boot, and many more.
This repository contains an image-builder configuration for building LeoOS images (OS images for Raspberry Pi computer running inside Leo Rover).
For the built, compressed images, visit the Releases page.
The major version (the first part in the three-part version number) is tied to the Ubuntu and ROS distributions the OS is based on. For now, the version semantics look as follows:
- 1.0.0 and up - Ubuntu 20.04 Focal Fossa and ROS Noetic
- Before 1.0.0 - Ubuntu 18.04 Bionic Beaver and ROS Melodic
The configuration consists of 5 stages, each one creates a valid root filesystem for Raspberry Pi 3/4. The last two stages are exported to bootable SD card images.
Here's a short description and list of changes for each stage:
- stage0 - A minimal bootable Ubuntu 20.04 64-bit system for Raspberry Pi.
- Use multistrap to bootstrap a root filesystem from Ubuntu and Fictionlab Package Archives.
- Set regional configuration (locales, timezone, etc.).
- Copy
config.txt
andcmdline.txt
boot configuration files for RPi.
- stage1 - A lightweight working system that is a base for LeoOS but does not contain anything specific to Leo Rover.
- Add
init_firstboot
script that is called upon first boot of the system and runs scripts from the/etc/firstboot.d
directory. - Add a script to
firtboot
config, which extends the filesystem to fill the SD card space. - Install
network-manager
and configurenetplan
to use it as a default renderer. - Add a script to
firtboot
config, which generates SSH host keys. - Set the hostname to
leo
. - Perform some minor system tweaks: enable bash color prompt, install some polkit and udev rules.
- Create a default user and add him to different groups.
- Install
rng-tools
package to use RPi Hardware TRNG to feed kernel entropy pool. - Install
pi-bluetooth
package to enable the onboard bluetooth module. - Install
zram-config
package to dedicate a portion of the RAM memory for swapping. - Install drivers for Realtek 88XXau WiFi network USB cards.
- Add
- stage2 - A "ROS-ready" minimal system.
- Add ROS apt repository.
- Install some base ROS packages.
- Install
rosdep
andcatkin-tools
python packages. - Initialize
rosdep
.
- stage3 (
lite
image) - The headless (without a graphical interface) version of LeoOS.- Install
hostapd
anddnsmasq
packages. - Configure the network to use the USB WiFi as an Access Point.
- Add a script to
firstboot
config, which sets a unique Access Point SSID based on last 4 characters of RPi serial number. - Add
ap-disable
andap-disable
scripts that can be used to Enable/Disable Access Point at runtime. - Install ROS packages for Leo Rover.
- Add robot configuration files under
/etc/ros
directory. - Add scripts for starting and stopping Leo Rover ROS functionality
- Add the
leo
systemd service which start Leo Rover ROS functionality upon boot. - Install leo_ui and configure a HTTP server to host the Web interface.
- Configure update-motd.
- Install
- stage4 (
full
image) - The full version of LeoOS.