diff options
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 163 |
1 files changed, 0 insertions, 163 deletions
diff --git a/README.md b/README.md deleted file mode 100644 index 4da98c4..0000000 --- a/README.md +++ /dev/null | |||
| @@ -1,163 +0,0 @@ | |||
| 1 | meta-sota | ||
| 2 | ========= | ||
| 3 | |||
| 4 | This layer enables over-the-air updates with OSTree and RVI SOTA client. | ||
| 5 | |||
| 6 | [OSTree](https://github.com/ostreedev/ostree) is a tool for atomic full file | ||
| 7 | system upgrades with rollback capability. Main advantage of OSTree compared | ||
| 8 | to traditional dual partition model is that OSTree minimizes network bandwidth | ||
| 9 | and data storage footprint by sharing files with the same contents across file | ||
| 10 | system deployments. | ||
| 11 | |||
| 12 | [RVI SOTA client](https://github.com/advancedtelematic/rvi_sota_client) adds | ||
| 13 | authentication and provisioning capabilities to OTA and is integrated with | ||
| 14 | OSTree. | ||
| 15 | |||
| 16 | Build | ||
| 17 | ----- | ||
| 18 | |||
| 19 | ### Quickstart ### | ||
| 20 | [ATS Garage Quickstart](https://github.com/advancedtelematic/garage-quickstart-rpi) | ||
| 21 | is an example yocto-based project combining stadard poky distribution with | ||
| 22 | OSTree capabilities. For detailed getting started tutorial see [README](https://github.com/advancedtelematic/garage-quickstart-rpi/blob/master/README.adoc). | ||
| 23 | |||
| 24 | ### Adding meta-updater capabilities to your build ### | ||
| 25 | If you already have a Yocto-base project and you want to add atomic filesystem | ||
| 26 | updates to it you need to do just three things: | ||
| 27 | |||
| 28 | 1. Clone meta-updater layer and add it to your [conf/bblayers.conf](https://www.yoctoproject.org/docs/2.1/ref-manual/ref-manual.html#structure-build-conf-bblayers.conf). | ||
| 29 | 2. Clone BSP integration layer (meta-updater-${PLATFORM}, e.g. | ||
| 30 | meta-updater-raspberrypi) and add it to your conf/bblayers.conf. If your board | ||
| 31 | isn't yet supported, you could write BSP integration work yourself. See [Supported boards](#supported-boards) | ||
| 32 | section for the details. | ||
| 33 | 3. Set up your [distro](https://www.yoctoproject.org/docs/2.1/ref-manual/ref-manual.html#var-DISTRO). | ||
| 34 | If you are using "poky", the default distro in Yocto, you can change it in your | ||
| 35 | conf/local.conf to "poky-sota". Alternatively if you are using your own or third | ||
| 36 | party distro configuration, you can add 'require conf/distro/sota.conf.inc' to | ||
| 37 | it, thus combining capabilities of your distro with meta-updater features. | ||
| 38 | |||
| 39 | You can then build your image as usual (bitbake <your-image-name>). After building | ||
| 40 | the root file system bitbake will then create an [OSTree-enabled version](https://ostree.readthedocs.io/en/latest/manual/adapting-existing/) | ||
| 41 | of it, commit it to your local OSTree repo and optionally push it to a remote | ||
| 42 | server. Additionally a live disk image will be created (normally named | ||
| 43 | ${IMAGE_NAME}.<boardpref>-sdimg-ota e.g. core-image-raspberrypi3.rpi-sdimg-ota). | ||
| 44 | You can control this behaviour though OSTree-related variables in your | ||
| 45 | local.conf, see [respective section](#sota-related-variables-in-localconf) | ||
| 46 | for details. | ||
| 47 | |||
| 48 | ### Build with OpenIVI ### | ||
| 49 | ### Build in AGL ### | ||
| 50 | |||
| 51 | With AGL you can just add agl-sota feature while configuring your build | ||
| 52 | environment as in | ||
| 53 | |||
| 54 | source meta-agl/scripts/aglsetup.sh -m porter agl-demo agl-appfw-smack agl-devel agl-sota | ||
| 55 | |||
| 56 | you can then just run | ||
| 57 | |||
| 58 | bitbake agl-demo-platform | ||
| 59 | |||
| 60 | and get as a result "ostree_repo" folder in your images directory | ||
| 61 | (tmp/deploy/images/${MACHINE}/ostree_repo) containing your OSTree repository | ||
| 62 | with rootfs committed as an OSTree deployment, 'otaimg' bootstrap image which | ||
| 63 | is an OSTree physical sysroot as a burnable filesystem image and optionally | ||
| 64 | some machine-dependent live images (e.g. '*.rpi-sdimg-ota' for Raspberry Pi or | ||
| 65 | '*.porter-sdimg-ota' Renesas Porter board). | ||
| 66 | |||
| 67 | Although aglsetup.sh hooks provide reasonable defaults for SOTA-related | ||
| 68 | variables you may want to tune some of them. | ||
| 69 | |||
| 70 | Supported boards | ||
| 71 | ---------------- | ||
| 72 | |||
| 73 | Currently supported platforms are | ||
| 74 | |||
| 75 | * [Raspberry Pi3](https://github.com/advancedtelematic/meta-updater-raspberrypi) | ||
| 76 | * [Minnowboard](https://github.com/advancedtelematic/meta-updater-minnowboard) | ||
| 77 | * [Native QEMU emulation](https://github.com/advancedtelematic/meta-updater-qemux86-64) | ||
| 78 | |||
| 79 | ### Adding support for your board | ||
| 80 | If your board isn't yet supported you can add board integration code yourself. | ||
| 81 | The main purpose of this code is to provide a bootloader that will get use of | ||
| 82 | [OSTree's boot directory](https://ostree.readthedocs.io/en/latest/manual/atomic-upgrades/) | ||
| 83 | In meta-updater integration layers finished so far it is done by | ||
| 84 | |||
| 85 | 1. Making the board boot into [U-Boot](http://www.denx.de/wiki/U-Boot) | ||
| 86 | 2. Making U-boot import variables from /boot/loader/uEnv.txt and load the | ||
| 87 | kernel with initramfs and kernel command line arguments according to what is | ||
| 88 | set this file. | ||
| 89 | |||
| 90 | You may take a look into [Minnowboard](https://github.com/advancedtelematic/meta-updater-minnowboard) | ||
| 91 | or [Raspberry Pi](https://github.com/advancedtelematic/meta-updater-raspberrypi) | ||
| 92 | integration layers for examples. | ||
| 93 | |||
| 94 | It is still possible to make other loaders work with OSTree as well. | ||
| 95 | |||
| 96 | SOTA-related variables in local.conf | ||
| 97 | ------------------------------------ | ||
| 98 | |||
| 99 | * OSTREE_REPO - path to your OSTree repository. | ||
| 100 | Defaults to "${DEPLOY_DIR_IMAGE}/ostree_repo" | ||
| 101 | * OSTREE_BRANCHNAME - the branch your rootfs will be committed to. | ||
| 102 | Defaults to "ota" | ||
| 103 | * OSTREE_OSNAME - OS deployment name on your target device. For more | ||
| 104 | information about deployments and osnames see | ||
| 105 | [OSTree documentation](https://ostree.readthedocs.io/en/latest/manual/deployment/) | ||
| 106 | Defaults to "poky". | ||
| 107 | * OSTREE_INITRAMFS_IMAGE - initramfs/initrd image that is used as a proxy while | ||
| 108 | booting into OSTree deployment. Do not change this setting unless you are | ||
| 109 | sure that your initramfs can serve as such proxy. | ||
| 110 | * OSTREE_PUSH_CREDENTIALS - when set adds pushing your ostree commit to a remote | ||
| 111 | repo. sota-tools will then use credentials in the file pointed to by this | ||
| 112 | variable. | ||
| 113 | |||
| 114 | Usage | ||
| 115 | ----- | ||
| 116 | |||
| 117 | ### OSTree ### | ||
| 118 | OSTree includes its own simple http server. It just exposes the whole OSTree | ||
| 119 | repository to the network so that any remote device can pull data from it to | ||
| 120 | device's local repository. To use OSTree http server you need OSTree installed | ||
| 121 | on your build machine. Alternatively, you could run version built inside Yocto | ||
| 122 | using bitbake's [devshell](http://www.openembedded.org/wiki/Devshell). | ||
| 123 | |||
| 124 | To expose your repo run ostree trivial-httpd using any free port. | ||
| 125 | |||
| 126 | ostree trivial-httpd tmp/deploy/images/qemux86-64/ostree_repo -P 57556 | ||
| 127 | |||
| 128 | You can then run from inside your device or QEMU emulation, provided your | ||
| 129 | network is set up correctly. | ||
| 130 | |||
| 131 | # agl-remote identifies the remote server in your local repo | ||
| 132 | ostree remote add --no-gpg-verify agl-remote http://192.168.7.1:57556 agl-ota | ||
| 133 | |||
| 134 | # agl-ota is a branch name in the remote repo, set in OSTREE_BRANCHNAME | ||
| 135 | ostree pull agl-remote agl-ota | ||
| 136 | |||
| 137 | # agl is OS name as set in OSTREE_OSNAME | ||
| 138 | ostree admin deploy --os=agl agl-remote:agl-ota | ||
| 139 | |||
| 140 | After restart you should boot into the newly deployed OS image. | ||
| 141 | |||
| 142 | E.g. for the raspberrypi3 you can try this sequence: | ||
| 143 | |||
| 144 | # add remote | ||
| 145 | ostree remote add --no-gpg-verify agl-snapshot https://download.automotivelinux.org/AGL/snapshots/master/latest/raspberrypi3/deploy/images/raspberrypi3/ostree_repo/ agl-ota | ||
| 146 | |||
| 147 | # pull | ||
| 148 | ostree pull agl-snapshot agl-ota | ||
| 149 | |||
| 150 | # deploy | ||
| 151 | ostree admin deploy --os=agl agl-snapshot:agl-ota | ||
| 152 | |||
| 153 | ### SOTA tools ### | ||
| 154 | SOTA tools now contains only one tool, garage-push that lets you push the | ||
| 155 | changes in OSTree repository generated by bitbake process. It communicates with | ||
| 156 | an http server capable of querying files with HEAD requests and uploading them | ||
| 157 | with POST requests. garage-push is used as following: | ||
| 158 | |||
| 159 | garage-push --repo=/path/to/ostree-repo --ref=mybranch --credentials=~/.sota-tools.json --user=username --password= | ||
| 160 | |||
| 161 | You can set OSTREE_PUSH_CREDENTIALS in your local.conf to make your build | ||
| 162 | results be automatically synchronized with a remote server. | ||
| 163 | Credentials are stored in JSON format which is described in [sota-tools documentation](https://github.com/advancedtelematic/sota-tools/blob/master/README.adoc) | ||
