# CustomPiOS
**Repository Path**: mirrors_kennethjiang/CustomPiOS
## Basic Information
- **Project Name**: CustomPiOS
- **Description**: A Raspberry Pi and other ARM devices distribution builder
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: devel
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-10-27
- **Last Updated**: 2026-01-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
CustomPiOS
==========
.. image:: https://raw.githubusercontent.com/guysoft/CustomPiOS/devel/media/CustomPiOS.png
.. :scale: 50 %
.. :alt: CustomPiOS logo
A `Raspberry Pi `_ and other ARM devices distribution builder. CustomPiOS opens an already existing image, modifies it and repackages the image ready to ship.
This repository contains the source script to generate a distribution out of an existing `Raspbian `_ distro image, or Armbian devices.
Donate
------
CustomPiOS is 100% free and open source and maintained by Guy Sheffer. If its helping your life, your organisation or makes you happy, please consider making a donation. It means I can code more and worry less about my balance. Any amount counts.
Also many thanks to people contributing code.
|paypal|
.. |paypal| image:: https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif
:target: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=26VJ9MSBH3V3W&source=url
Where to get it?
----------------
`Clone this repo `_. Then follow instructions either to build an existing distro or create your own.
How to use it?
--------------
#. Clone this image ``git clone https://github.com/guysoft/CustomPiOS.git``
#. Run ``./src/make_custom_pi_os -g `` in the repo, distro folder should not exist and contain no spaces. This will both create a folder to build a new distro from, and also download the latest raspbian lite image. The initial distro has a module that has the name of your distro, and you can find it under ``/src/modules/`` (there should be only one module in the modules folder).
#. cd to ``/src``
#. Edit your ``/src/config``, you can also edit the starting module, which is named as your distro at ``modules/``. More on that in the Developing section.
#. Run ``sudo .//src/build_dist`` to build an image. If this fails use the method described in the vagrant build section (which makes sure sfdisk and other things work right).
Features
--------
* Modules - write one module and use it for multiple distros
* Write only the code you need for your distro - no need to maintain complicated stuff like building kernels unless its actually want to do it
* Standard modules give extra functionality out of the box
* Supports over 40 embedded devices using `Armbian `_ and Raspbian.
* Supports Raspberry Pi OS arm64 bit using the ``raspios_lite_arm64`` variant.
Developing
----------
Requirements
~~~~~~~~~~~~
#. `qemu-arm-static `_
#. Downloaded `Raspbian `_ image.
#. root privileges for chroot
#. Bash
#. git
#. realpath
#. sudo (the script itself calls it, running as root without sudo won't work)
#. p7zip-full
#. Python 3.2+
Known to work building configurations
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Using the `CustomPiOS docker image `_
2. Linux (Ubuntu / Debian etc)
3. OS X - `See this thread for information `_
Modules
-------
`See Modules entry in wiki `_
chroot_script
~~~~~~~~~~~~~
This is where the stuff you want to execute inside the distro is written.
In ``start_chroot_script`` write the main code, you can use ``end_chroot_script`` to write cleanup functions, that are run at the end of the module namespace.
Useful commands from common.sh
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CustomPiOS comes with a script ``common.sh`` that has useful functions you can use inside your chroot_script.
To use it you can add to your script ``source /common.sh``.
``unpack [from_filesystem] [destination] [owner]`` - Lets you unpack files from the ``filesystem`` folder to a given destination. ``[owner]`` lets you set which user is going to be the owner. e.g. ``unpack /filesystem/home/pi /home/pi pi``
``gitclone __REPO destination`` - Lets you clone a git repo, and have the settings preset in the ``config`` file. Example usage in OCTOPI module.
In chroot_script::
gitclone OCTOPI_OCTOPRINT_REPO OctoPrint
In ``config``::
[ -n "$OCTOPI_OCTOPRINT_REPO_SHIP" ] || OCTOPI_OCTOPRINT_REPO_SHIP=https://github.com/foosel/OctoPrint.git
Export files from image
~~~~~~~~~~~~~~~~~~~~~~~
CustomPiOS has a feature to export files created in the chroot to archives you can ship as a tar.gz archive.
To export run inside of a chroot_script:
``custompios_export [name of archive] [file path in chroot]``
You can also use:
``copy_and_export [name of archive] [source] [destination]``
and:
``copy_and_export_folder [name of archive] [folder] [destination]``
The results would be saved in the workspace folder.
filesystem
~~~~~~~~~~
Lets you add files to your distro, and save them to the repo. The files can be unpacked using the ``unpack`` command that is in ``common.sh``.
config
~~~~~~
This is where you can create module-specific settings. They can then be overwritten in a distro or variant.
The naming convention is the module name in
Build a Distro From within Raspbian / Debian / Ubuntu / CustomPiOS Distros
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
`See building entry in wiki `_
Building Distro Variants
~~~~~~~~~~~~~~~~~~~~~~~~
`See building entry in wiki `_
Building Using Docker
~~~~~~~~~~~~~~~~~~~~~~
`See Building with docker entry in wiki `_
Building Using Vagrant
~~~~~~~~~~~~~~~~~~~~~~
`See Building with Vagrant entry in wiki `_
Build using CI/CD
~~~~~~~~~~~~~~~~~
You can build CustomPiOS images from a continuous integration system in the cloud.
For an example on how to do this on github take a look at `this github actions yaml `_
Usage
~~~~~
#. If needed, override existing config settings by creating a new file ``src/config.local``. You can override all settings found in ``src/config``. If you need to override the path to the Raspbian image to use for building your distro, override the path to be used in ``BASE_ZIP_IMG``, which is part of the base module. By default the most recent file matching ``*-raspbian.zip`` found in ``src/image`` will be used.
#. Run ``src/build`` as root.
#. The final image will be created at the ``src/workspace``
List of Distributions using CustomPiOS
--------------------------------------
* `OctoPi `_ - The ready-to-go Raspberry Pi image with OctoPrint
* `FarmPi `_ - An Ubuntu ARM 64bit Raspbery Pi image running `OctoFarm `_
* `FullPageOS `_ - A Raspberry Pi distro to display a full page browser on boot
* `Zynthian `_ - Open Synth Platform
* `ElectricSheepPi `_ - A Raspberry Pi distribution to run Electric Sheep digital art
* `AlarmPi `_ - A Raspberry Pi distribution that turns a Raspberry Pi to an IOT telegram-controlled alarm clock
* `RealtimePi `_ - An out-of-the-box Raspebrry Pi/Raspbian distro with a realtime kernel
* `RMS Pi `_ - Raspberry Pi Distro for Winlink RMS
* `V1PI `_ - Use your Raspberry Pi to control your V1Engineering machine
* `HotSpotOS `_ - Makes a Raspberry Pi start a hotspot, if no wifi was found to connect to
* `MtigOS `_ - Distro that lets you receive, store and graph sensor information from ESP8266 chips. It uses and MTIG stack: Mosquitto, Telegraf, InfluxDB and Grafana which are all pre-configured to work together. They automatically update using Docker.
* `Tilti-Pi `_ - Distro that lets you submit BLE data for the `tilt hydrometer `_ via the `tilty `_ package and a built in `dashboard `_
* `MainsailOS `_ - Distro that packages the `Mainsail `_ web UI, the `Moonraker `_ API, and the `Klipper `_ 3D printer firmware in an easy to package.
* `UbuntuDockerPi `_ - Distro ships with Ubuntu ARM 64bit Docker and docker-compose ready to build stuff for arm64v8/aarch64 or host whatever you like.
* `FluiddPi `_ - Distro that packages `Fluidd `_, `Moonraker `_, and `Klipper `_ into the ultimate 3D printer firmware package.
* `My Naturewatch Camera `_ - A Python / OpenCV camera server to stream Pi camera content to a remote client through a website.
Code contribution would be appreciated!