LineageOS Updater Backend
Copyright (c) 2017 The LineageOS Project
Adding a new device
- Add your device to devices.json, sorted alphanumerically by codename. Fields are documented below.
- Submit your change to gerrit (this repository is configured for use with
devices.json is an array of objects, each with several fields:
model: should be the first thing on the line, and is the device's codename (
PRODUCT_DEVICE) - e.g.
oem: the manufacturer of the device. (
PRODUCT_BRAND) - e.g.
name: the user-friendly name of the device - e.g.
Galaxy S III (Intl). Long values will overflow and look bad, so limit this to around 25 characters.
has_recovery: (optional) whether or not the device has a separate recovery partition. Defaults to
Development set up:
- Install requirements with
pip install -r requirements.txt
- Configure your environment appropriately - see
config.pyfor possible variables.
- Supply a device_deps.json, devices.json, and optional devices_local.json. (See https://github.com/LineageOS/hudson/tree/master/updater for example)
- Run with
FLASK_APP=app.py flask run
Example API Calls:
Obtaining rom list for a device:
GET /api/v1/<device>/<romtype>/<incremental>?after=<utc_timestamp>&version=<14.1> (incremental can be anything, it is currently unused)
<device> - Name of device. Example:
<romtype> - Type of rom. Example:
<incremental> - Caller device's incremental ID (ro.build.incr). Can be anything.
<after> - Timestamp for current build on device. (optional)
<romversion> - Version of rom. Example:
This project depends on a mirrorbits server (https://github.com/etix/mirrorbits) running our mirrorbits API (https://github.com/lineageos-infra/mirrorbits-api). Please see the README in that project for more information.
Don't want to run mirrorbits/mirrorbits-api?
To run the server stand-alone you can use the included
docker-compose script to bring up a simple nginx server to host your builds for you.
- Place your builds in
./nginx/builds/. These will be exposed on http://example.com/builds when you start the server. They don't need to be android builds, just make sure they have differing sha256s and match the filename format foobar-VERSION-BUILDDATE-BUILDTYPE-DEVICE-foobar.zip.
python gen_mirror_json.py ./nginx/builds > ./nginx/builds.json
- Make sure you have device_deps.json, devices.json, and optional devices_local.json in the root directory of this repo.
docker-composeon your system.
- Make sure that
./nginx/default.confuse suitable hostnames for your setup (rather than "updater" and "nginx", you should use the address of the computer running docker).
Building and Running
- To build, use
docker-compose buildin the root of the repo.
- To start the server, run
docker-compose upin the root of the repo (include a
-dflag to run in detached mode)
- To stop the server, run
docker-compose downin the root of the repo.