This is a customised Ardupilot firmware builder which allows to integrate custom patches, recall old builds etc. This is hosted on a private server but publicly accessible and the source code can be downloaded by anyone. Detailed instruction on how to build your custom firmware patcher based with this code are in the readme below. A live version of this app can be accessed here: https://ardupilot.equalmass.com

Shiv Tyagi 4eb1a202b8 builder: add requests and packaging as requirements 2 kuukautta sitten
.github 7fa60f9b2d .github: add Tests workflow 5 kuukautta sitten
ap_git fecf71962d ap_git: force-create temp branch while shallow cloning from local repo 4 kuukautta sitten
build_manager bbd40dbcb1 build_manager: do not handle rate limit at module level 6 kuukautta sitten
builder 4eb1a202b8 builder: add requests and packaging as requirements 1 kuukausi sitten
examples a1cf37e4ee examples: do not expose /artifacts dir through apache 1 vuosi sitten
metadata_manager 839c33eae6 metadata_manager: refactor to a provider based versions manager 1 kuukausi sitten
scripts 7a8e1de220 scripts: drop cron based version updation scripts 1 kuukausi sitten
tests 0cbe1e1ec6 tests: add/update tests for provider based versions manager 1 kuukausi sitten
utils 096170efdf utils: remove ratelimiter.py 6 kuukautta sitten
web 231cc3d360 web: use new provider based versions manager 1 kuukausi sitten
.flake8 ba9d691195 .flake8: add flake8 config 7 kuukautta sitten
.gitignore 944367a32f gitignore: ignore anything with the name base 1 vuosi sitten
LICENSE 519e1f8813 Initial commit 6 vuotta sitten
README.md 3dcd431cb7 README: fix commands to run the new web service 7 kuukautta sitten
Vagrantfile 28c381d75c Vagrant: add Vagrant vm definition and creation script 4 vuotta sitten
docker-compose.yml 38a0ebabe9 docker-compose: rename CBS_REMOTES_RELOAD_TOKEN to CBS_ADMIN_TOKEN 1 kuukausi sitten
pytest.ini 57cde470e9 pytest.ini: set CBS_RATE_LIMITER_STORAGE_URI for tests 5 kuukautta sitten

README.md

ArduPilot Custom Firmware Builder

Table of Contents

  1. Overview
  2. Live Versions
  3. Running Locally Using Docker
  4. Running Locally Without Docker on Ubuntu
  5. Directory Structure
  6. Acknowledgements

Overview

The ArduPilot Custom Firmware Builder is a web-based application designed to generate downloadable customized ArduPilot firmware, tailored to user specifications. This tool facilitates the customization and building of firmware by allowing users to select the options that best fit their needs, thus providing a streamlined interface for creating ArduPilot firmware.

Live Versions

  • Stable Version: The stable version of the ArduPilot Custom Firmware Builder can be accessed at custom.ardupilot.org.
  • Beta Version: We maintain a beta version available at custom-beta.ardupilot.org where newly developed features are tested before they are rolled out in the stable version.

Running Locally Using Docker

To minimize setup overhead and enhance ease of use, running this application in Docker containers is highly recommended. Follow the instructions below to run the application locally using Docker:

  1. Install Docker and Docker Compose: Make sure Docker and Docker Compose are installed on your machine. For installation instructions, visit the Docker website.

  2. Clone the Repository:

    git clone https://github.com/ardupilot/CustomBuild.git
    cd CustomBuild
    
  3. Configure Environment Variables: Copy the .env file to the root of the cloned repository from ./examples/.env.sample and configure the necessary parameters within it.

    cp ./examples/.env.sample .env
    
  4. Build and Start the Docker Containers:

    • To build and start the application, run:

      sudo docker compose up --build
      
    • If you want to run the application with the last built image, simply execute:

      sudo docker compose up
      

Use the -d flag to run the application in daemon mode:

   sudo docker compose up -d

Note: When starting the application for the first time, it takes some time to initialize the ArduPilot Git repositories at the backend. This process also involves populating the list of available versions and releases using the GitHub API, so please be patient.

  1. Access the Web Interface: The application binds to port 11080 on your host machine by default. Open your web browser and go to http://localhost:11080 to interact with the web interface. To change the port, set the WEB_PORT environment variable in the .env file mentioned in the Configure Environment Variables section.

  2. Stopping the Application: To stop the application, you can use the following command:

    sudo docker compose down
    

    This will stop and remove the containers, but it will not delete any built images or volumes, preserving your data for future use.

Running Locally Without Docker on Ubuntu

To run the ArduPilot Custom Firmware Builder locally without Docker, ensure you have an environment capable of building ArduPilot. Refer to the ArduPilot Environment Setup Guide if necessary.

  1. Clone the Custom-Build Repository:

    git clone https://github.com/ardupilot/CustomBuild.git
    cd CustomBuild
    
  2. Create and use a virtual environment:

    python3 -m venv path/to/virtual/env
    source path/to/virtual/env/bin/activate
    

If the python venv module is not installed, run:

   sudo apt install python3-venv

To deactive the virtual environment, run:

   deactivate
  1. Install Dependencies:

    pip install -r web/requirements.txt -r builder/requirements.txt
    

If pip is not installed, run:

   sudo apt install python3-pip
  1. Install and Run Redis: Use your package manager to install Redis:

    sudo apt install redis-server
    

    Ensure the Redis server is running:

    sudo systemctl status redis-server
    
  2. Execute the Application:

    • For a development environment with auto-reload, run:

      python3 web/main.py
      

      To change the port, use the --port argument:

      python3 web/main.py --port 9000
      
    • For a production environment, use:

      uvicorn web.main:app --host 0.0.0.0 --port 8080
      

    During the coding and testing phases, use the development environment to easily debug and make changes with auto-reload enabled. When deploying the app for end users, use the production environment to ensure better performance, scalability, and security.

    The application will automatically set up the required base directory at ./base upon first execution. You may customize this path by setting the CBS_BASEDIR environment variable.

  3. Access the Web Interface:

Once the application is running, you can access the interface in your web browser at http://localhost:8080.

The default port is 8080, or the value of the WEB_PORT environment variable if set. You can override this by passing the --port argument when running the application directly (e.g., python3 web/main.py --port 9000) or when using uvicorn (e.g., uvicorn web.main:app --port 5000). Refer to the uvicorn documentation for additional configuration options.

Directory Structure

The default directory structure is established as follows:

/home/<username>
└── CustomBuild
    └── base
        ├── ardupilot            (used by the web component)
        ├── artifacts
        ├── configs
        |   └── remotes.json     (auto-generated, see examples/remotes.json.sample)
        ├── secrets
        |   └── reload_token     (optional)
        ├── tmp
            └── ardupilot        (used by the builder component)

The build artifacts are organized under the base/artifacts subdirectory.

Acknowledgements

This project includes many valuable contributions made during the Google Summer of Code 2021. For more information, please see the GSOC 2021 Blog Post.