Compare commits

...

39 Commits

Author SHA1 Message Date
dd59088cd2 v3.5.0 2022-04-29 21:42:18 +03:00
cae93253a9 Merge pull request #143 from balena-io/landr-test
Adding Landr test for openbalena
2022-04-29 18:40:01 +00:00
c4a18f5bf8 add table workaround and docs edits 2022-04-27 14:17:57 -07:00
3b0c106eb1 editing docs 2022-04-27 10:51:18 -07:00
c9fa4cf00f add actual docs and clean up readme 2022-04-27 10:32:33 -07:00
ea605d1444 Merge branch 'landr-test' of https://github.com/balena-io/open-balena into landr-test 2022-04-25 15:28:56 -07:00
966ea04241 test docs 2022-04-14 16:53:33 -07:00
dce59b65a3 test edits 2022-04-14 16:07:04 -07:00
f151d2a6cc landr updates 2022-04-13 16:04:44 -07:00
4efb25afc7 Merge branch 'landr-test' of https://github.com/balena-io/open-balena into landr-test 2022-03-24 14:25:44 -07:00
08890adf92 Merge branch 'landr-test' of https://github.com/balena-io/open-balena into landr-test 2022-03-23 20:09:43 -07:00
44c11d9d16 Adding Landr test for openbalena
Change-type: minor
2022-03-22 01:23:59 +05:30
e5bbfb833f Adding Landr test for openbalena
Change-type: minor
2022-03-22 00:32:25 +05:30
a9107a1d6f Adding Landr test for openbalena
Change-type: minor
2022-03-17 17:09:19 -07:00
f7207fb4a0 v3.4.3 2022-02-22 14:13:16 +02:00
b39074c0ba Merge pull request #139 from bartversluijs/registry-patch-1
chore(registry): removed data volume
2022-02-22 12:11:23 +00:00
3fed389090 chore(registry): removed data volume
Change-type: patch
2022-02-22 12:03:40 +01:00
96afd454bf v3.4.2 2022-02-03 14:40:37 +02:00
0e0e5e1bc5 Merge pull request #131 from torutek/fix-certs
Get cert-provider working again
2022-02-03 12:38:48 +00:00
7c4e9fdc09 Get cert-provider working again
Need new version to use ACME v2 correctly.
Force using letsencrypt (didn't work otherwise, not totally sure why not)
Update bundled staging certs, contents are from:
https://github.com/letsencrypt/website/blob/master/static/certs/staging/letsencrypt-stg-root-dst.pem
https://github.com/letsencrypt/website/blob/master/static/certs/staging/letsencrypt-stg-root-x1.pem
https://github.com/letsencrypt/website/blob/master/static/certs/staging/letsencrypt-stg-root-x2.pem
https://github.com/letsencrypt/website/blob/master/static/certs/staging/letsencrypt-stg-int-e1.pem
https://github.com/letsencrypt/website/blob/master/static/certs/staging/letsencrypt-stg-int-r3.pem
ref https://letsencrypt.org/docs/staging-environment/

Change-type: patch
2021-10-06 09:46:51 +13:00
fbcb35a595 v3.4.1 2021-07-01 00:13:18 +03:00
94f8b159c3 Merge pull request #126 from balena-io/dfunckt-patch-1
Delete CODEOWNERS
2021-06-30 21:11:33 +00:00
a328e8fc1d Delete CODEOWNERS
Change-type: patch
2021-06-30 18:30:12 +03:00
b1fd42669a v3.4.0 2021-06-25 18:39:31 +03:00
39f7f6b0cc Merge pull request #123 from bartversluijs/patch-services
minor: Update API, registry and VPN services
2021-06-25 15:36:25 +00:00
1180bb3462 Update API, registry and VPN services
Update open-balena-api from 0.119.5 to 0.139.0
Update open-balena-registry from 2.16.0 to 2.16.1
Update open-balena-vpn from 9.17.4 to 9.17.11

Change-type: minor
2021-06-25 12:48:59 +02:00
fbf3007d4c v3.3.2 2021-06-04 08:42:20 +03:00
2a3df9cd2a Merge pull request #119 from relaxdiego/master
Auto-install required Vagrant plugins intead of erroring out
2021-06-04 05:40:18 +00:00
d71a90c1ef Auto-install required Vagrant plugins instead of erroring out
Change-type: patch
2021-06-03 09:59:44 +08:00
6739d1257b v3.3.1 2021-05-24 15:40:42 +03:00
381fba943d Merge pull request #116 from balena-io/delete-cli-version-warning
scripts/compose: Delete Balena CLI version warning
2021-05-24 12:39:12 +00:00
66acae8bbf scripts/compose: Delete never called helper function 2021-05-24 14:16:11 +02:00
cd2c3f5e11 scripts/compose: Delete Balena CLI version warning
This can be removed completely now — it was added to ensure existing users also update to the latest (at the time) CLI as they updated their open-balena installation.

Change-type: patch
2021-05-24 14:08:00 +02:00
071b5850a9 v3.3.0 2021-05-05 16:22:49 +03:00
91bc92dbb5 Merge pull request #115 from bartversluijs/patch-registry
Update registry service to v2.16.0
2021-05-05 13:21:13 +00:00
49831a6a60 Update registry service
Change-type: minor
2021-05-05 15:13:27 +02:00
549de52c73 v3.2.2 2021-04-29 14:36:50 +03:00
826b61f08b Merge pull request #112 from balena-io/rmorillo24-patch-OBsupporteddevices
patch: Adding supported devices to OB
2021-04-29 11:35:14 +00:00
0cdf0ef558 patch: Adding supported devices to OB
Added a line in the OB vs balenaCloud which includes a mention to the devices supported by each. This list is mentioned in the FAQ section of the pricing page.
2021-04-28 17:14:52 +02:00
23 changed files with 4076 additions and 683 deletions

2
.github/CODEOWNERS vendored
View File

@ -1,2 +0,0 @@
# Main repo owners:
* @dfunckt @xginn8 @pdcastro

4
.gitignore vendored
View File

@ -2,6 +2,10 @@
.project
.vagrant/
meta.json
landr-dist
*.traineddata
/config
/docker-compose.yml
/package-lock.json

File diff suppressed because it is too large Load Diff

View File

@ -4,6 +4,981 @@ All notable changes to this project will be documented in this file
automatically by Versionist. DO NOT EDIT THIS FILE MANUALLY!
This project adheres to [Semantic Versioning](http://semver.org/).
# v3.5.0
## (2022-04-27)
* Adding Landr test for openbalena [Andrew Nhem]
* Adding Landr test for openbalena [Andrew Nhem]
* Adding Landr test for openbalena [Andrew Nhem]
# v3.4.3
## (2022-02-22)
* chore(registry): removed data volume [Bart Versluijs]
# v3.4.2
## (2021-10-05)
* Get cert-provider working again [dave]
# v3.4.1
## (2021-06-30)
* Delete CODEOWNERS [dfunckt]
# v3.4.0
## (2021-06-25)
<details>
<summary> Update API, registry and VPN services [Bart Versluijs] </summary>
> ## open-balena-api-0.139.0
> ### (2021-05-11)
>
> * Require public apps to be of a non-legacy type [Thodoris Greasidis]
>
> ## open-balena-api-0.138.11
> ### (2021-05-11)
>
> * hostapps: unset a target hostapp when changing device types [Matthew McGinn]
>
> ## open-balena-api-0.138.10
> ### (2021-05-07)
>
> * Use `true = false` rather than `1 = 2` for generating a false result [Pagan Gazzard]
>
> ## open-balena-api-0.138.9
> ### (2021-05-06)
>
> * supervisor-apps: allow provisioning directly to a logstream edition [Matthew McGinn]
>
> ## open-balena-api-0.138.8
> ### (2021-05-05)
>
> * hostapps: test that devices can still PATCH after provisioning to an invalidated release [Matthew McGinn]
>
> ## open-balena-api-0.138.7
> ### (2021-05-04)
>
> * supervisor-releases: copy across all relevant modeling from closed API [Matthew McGinn]
>
> ## open-balena-api-0.138.6
> ### (2021-05-04)
>
> * Remove unnecessary async/await from state endpoint [Pagan Gazzard]
>
> ## open-balena-api-0.138.5
> ### (2021-05-04)
>
> * hostapps: ensure that preprovisioned devices aren't downgraded after check in [Matthew McGinn]
>
> ## open-balena-api-0.138.4
> ### (2021-05-03)
>
> * hostapps: remove rule enforcing valid hostapp releases [Matthew McGinn]
>
> ## open-balena-api-0.138.3
> ### (2021-05-03)
>
> * fixtures: reuse variable rather than hardcode the value [Matthew McGinn]
>
> ## open-balena-api-0.138.2
> ### (2021-05-03)
>
> * fixtures: drop unnecessary state patch value [Matthew McGinn]
>
> ## open-balena-api-0.138.1
> ### (2021-04-30)
>
> * Fix 'dependents' on state not being returned [toochevere]
>
> ## open-balena-api-0.138.0
> ### (2021-04-30)
>
> * Revert "Expose the RPi family config vars to raspberrypi3-unipi-neuron" [Florin Sarbu]
>
> ## open-balena-api-0.137.1
> ### (2021-04-30)
>
> * Add missing foreign key indexes [Pagan Gazzard]
>
> ## open-balena-api-0.137.0
> ### (2021-04-30)
>
> * Expose the RPi family config vars to raspberrypi3-unipi-neuron [Florin Sarbu]
>
> ## open-balena-api-0.136.4
> ### (2021-04-29)
>
> * Refactoring to get ready for v3 state endpoint changes [toochevere]
>
> ## open-balena-api-0.136.3
> ### (2021-04-29)
>
> * Remove unnecessary delete hook for env var validation [Pagan Gazzard]
>
> ## open-balena-api-0.136.2
> ### (2021-04-29)
>
> * Accept additional fields during provisioning if they are provided [Akis Kesoglou]
>
> ## open-balena-api-0.136.1
> ### (2021-04-29)
>
>
> <details>
> <summary> Update dependencies [Pagan Gazzard] </summary>
>
>> ### pinejs-14.22.2
>> #### (2021-03-22)
>>
>> * Enable strict options by default and only disable specific ones [Pagan Gazzard]
>>
> </details>
>
>
> ## open-balena-api-0.136.0
> ### (2021-04-28)
>
> * hostapps: basic implementation of target hostapp release [Matthew McGinn]
>
> ## open-balena-api-0.135.3
> ### (2021-04-26)
>
> * auth: remove unnecessary brackets [Matthew McGinn]
>
> ## open-balena-api-0.135.2
> ### (2021-04-26)
>
> * model: regenerate types to pick up changes [Matthew McGinn]
>
> ## open-balena-api-0.135.1
> ### (2021-04-26)
>
> * applications: allow apps to be marked as public [Matthew McGinn]
>
> ## open-balena-api-0.135.0
> ### (2021-04-15)
>
> * Stop allowing cache clearing for multi-level cache [Pagan Gazzard]
>
> ## open-balena-api-0.134.3
> ### (2021-04-13)
>
> * Add support for the `normalizer` option to the multi-level cache [Pagan Gazzard]
>
> ## open-balena-api-0.134.2
> ### (2021-04-09)
>
>
> <details>
> <summary> Update open-balena-base to 11.1.2 [Pagan Gazzard] </summary>
>
>> ### open-balena-base-11.1.2
>> #### (2021-04-08)
>>
>> * Update nodejs to 14.16.1 and npm to 6.14.12 [Pagan Gazzard]
>>
>> ### open-balena-base-11.1.1
>> #### (2021-03-17)
>>
>> * Drop CircleCI [ab77]
>>
> </details>
>
>
> ## open-balena-api-0.134.1
> ### (2021-04-08)
>
> * Support caching of undefined in the multi-level cache [Pagan Gazzard]
>
> ## open-balena-api-0.134.0
> ### (2021-04-06)
>
> * Support/use multi-level caching that can share cache between instances [Pagan Gazzard]
>
> ## open-balena-api-0.133.7
> ### (2021-04-01)
>
> * Simplify ignored device types handling [Pagan Gazzard]
>
> ## open-balena-api-0.133.6
> ### (2021-03-26)
>
> * Fix contracts sync job to run every 5 minutes instead of 5 seconds [Pagan Gazzard]
>
> ## open-balena-api-0.133.5
> ### (2021-03-26)
>
> * Use primitive memoization mode for build-info-facade [Pagan Gazzard]
>
> ## open-balena-api-0.133.4
> ### (2021-03-23)
>
> * Add scheduler mechanism and use it to synchronize contracts [Pagan Gazzard]
>
> ## open-balena-api-0.133.3
> ### (2021-03-23)
>
> * Optimize getting the list of service installs to create per device [Pagan Gazzard]
>
> ## open-balena-api-0.133.2
> ### (2021-03-22)
>
> * Enable strict options by default and only disable specific ones [Pagan Gazzard]
>
> ## open-balena-api-0.133.1
> ### (2021-03-16)
>
> * Fix typing for partial rate limiter key fns [Pagan Gazzard]
>
> ## open-balena-api-0.133.0
> ### (2021-03-16)
>
> * Prefetch api keys in the background rather than blocking [Pagan Gazzard]
> * Avoid the need to delete `req.apiKey` in prefetch middleware [Pagan Gazzard]
>
> ## open-balena-api-0.132.5
> ### (2021-03-16)
>
> * Add support for async functions when generating rate limiter keys [Pagan Gazzard]
>
> ## open-balena-api-0.132.4
> ### (2021-03-16)
>
>
> <details>
> <summary> Update pinejs to 14.22.1 [Pagan Gazzard] </summary>
>
>> ### pinejs-14.22.1
>> #### (2021-03-16)
>>
>> * Only use the api key if we successfully resolved one [Pagan Gazzard]
>>
>> ### pinejs-14.22.0
>> #### (2021-03-16)
>>
>> * Expose methods to resolve api keys without immediately using them [Pagan Gazzard]
>>
> </details>
>
>
> ## open-balena-api-0.132.3
> ### (2021-03-16)
>
> * Allow PATCHing the same username/email on a given user [Thodoris Greasidis]
>
> ## open-balena-api-0.132.2
> ### (2021-03-16)
>
> * Fix username & email uniqueness check for batch PATCHes [Thodoris Greasidis]
>
> ## open-balena-api-0.132.1
> ### (2021-03-15)
>
>
> <details>
> <summary> Update dependencies [Pagan Gazzard] </summary>
>
>> ### pinejs-14.21.1
>> #### (2021-03-15)
>>
>>
>> <details>
>> <summary> Update dependencies [Pagan Gazzard] </summary>
>>
>>> #### odata-parser-2.2.3
>>> ##### (2021-03-15)
>>>
>>> * Optimize `QuotedText` for the common case of few/no apostrophes [Pagan Gazzard]
>>>
>>> #### pinejs-client-js-6.9.4
>>> ##### (2021-03-10)
>>>
>>> * Update dependencies [Pagan Gazzard]
>>>
>> </details>
>>
>>
>> ### pinejs-14.21.0
>> #### (2021-03-12)
>>
>> * Support postgres exclusion constraints as 409s instead of 500s [Pagan Gazzard]
>>
>> ### pinejs-14.20.1
>> #### (2021-03-12)
>>
>> * Block eagerly fetching affected ids in cases it is not possible to do [Pagan Gazzard]
>>
> </details>
>
>
> ## open-balena-api-0.132.0
> ### (2021-03-15)
>
> * Added optional environment variable configuration for contact repository branch [Micah Halter]
>
> ## open-balena-api-0.131.5
> ### (2021-03-15)
>
> * Add missing `await` [Pagan Gazzard]
>
> ## open-balena-api-0.131.4
> ### (2021-03-15)
>
> * Simplify `toUuid` slightly [Pagan Gazzard]
>
> ## open-balena-api-0.131.3
> ### (2021-03-15)
>
> * Fix device existence check to be true when the device does exist [Pagan Gazzard]
>
> ## open-balena-api-0.131.2
> ### (2021-03-12)
>
> * Emit an error on the request stream for non-200s rather than throwing [Pagan Gazzard]
>
> ## open-balena-api-0.131.1
> ### (2021-03-12)
>
> * Use primitive mode memoization for device existence cache [Pagan Gazzard]
>
> ## open-balena-api-0.131.0
> ### (2021-03-12)
>
> * Switch application slug to using `${orgHandle}/${appName}` [Pagan Gazzard]
> * Fix automatic slug renaming on app rename [Pagan Gazzard]
>
> ## open-balena-api-0.130.0
> ### (2021-03-12)
>
> * Expose the RPi family config vars to raspberrypicm4-ioboard [Thodoris Greasidis]
>
> ## open-balena-api-0.129.9
> ### (2021-03-12)
>
> * Cache device existence check for 5 minutes [Pagan Gazzard]
>
> ## open-balena-api-0.129.8
> ### (2021-03-10)
>
> * Only try to validate username/email if they are present [Pagan Gazzard]
>
> ## open-balena-api-0.129.7
> ### (2021-03-10)
>
> * Add organization handle validation [Pagan Gazzard]
>
> ## open-balena-api-0.129.6
> ### (2021-03-10)
>
> * Add username normalization [Pagan Gazzard]
>
> ## open-balena-api-0.129.5
> ### (2021-03-10)
>
> * Validate username/email on PATCH as well as POST [Pagan Gazzard]
>
> ## open-balena-api-0.129.4
> ### (2021-03-08)
>
>
> <details>
> <summary> Update pinejs to pick up rule optimizations for inserts [Pagan Gazzard] </summary>
>
>> ### pinejs-14.20.0
>> #### (2021-03-08)
>>
>>
>> <details>
>> <summary> Update abstract-sql-compiler bring more rules optimizations [Pagan Gazzard] </summary>
>>
>>> #### abstract-sql-compiler-7.12.0
>>> ##### (2021-03-05)
>>>
>>> * Enable narrowing down create/delete referenced fields for nested exists [Pagan Gazzard]
>>>
>> </details>
>>
>>
> </details>
>
>
> ## open-balena-api-0.129.3
> ### (2021-03-08)
>
> * Ensure service installs exist at the point of pinning an application [Pagan Gazzard]
>
> ## open-balena-api-0.129.2
> ### (2021-03-05)
>
> * Fixed JSON serialization of device-type contracts going into the database. [Micah Halter]
>
> ## open-balena-api-0.129.1
> ### (2021-03-05)
>
> * Fix release tracking of concurrent builds [Thodoris Greasidis]
> * Test new service install creation for pinned applications [Thodoris Greasidis]
> * Test release tracking of concurrent builds [Thodoris Greasidis]
>
> ## open-balena-api-0.129.0
> ### (2021-03-05)
>
> * Added contract to device type and update database synchronization [Micah Halter]
>
> ## open-balena-api-0.128.9
> ### (2021-03-05)
>
>
> <details>
> <summary> Update pinejs to pick up rule optimizations for deletes [Pagan Gazzard] </summary>
>
>> ### pinejs-14.19.0
>> #### (2021-03-01)
>>
>>
>> <details>
>> <summary> Update abstract-sql-compiler bring more rules optimizations [Pagan Gazzard] </summary>
>>
>>> #### lf-to-abstract-sql-4.2.1
>>> ##### (2021-02-17)
>>>
>>> * Correctly use the native name result in the generated abstract sql [Pagan Gazzard]
>>>
>> </details>
>>
>>
>> ### pinejs-14.18.4
>> #### (2021-03-01)
>>
>> * Remove some unnecessary bluebird usage [Pagan Gazzard]
>>
> </details>
>
>
> ## open-balena-api-0.128.8
> ### (2021-03-05)
>
> * State-patch: Optimize noop gateway download updates [Pagan Gazzard]
> * Separate marking old image installs deleted to a function [Pagan Gazzard]
> * State-patch: Use 1 GET for updating any number of gateway downloads [Pagan Gazzard]
> * State-patch: Use 1 GET for updating any number of image installs [Pagan Gazzard]
>
> ## open-balena-api-0.128.7
> ### (2021-03-03)
>
> * Use already available primary key values in device state-patch [Pagan Gazzard]
>
> ## open-balena-api-0.128.6
> ### (2021-03-01)
>
>
> <details>
> <summary> Update dependencies [Pagan Gazzard] </summary>
>
>> ### pinejs-14.18.3
>> #### (2021-02-26)
>>
>> * Warn when setting a `request.values` property that will not take effect [Pagan Gazzard]
>>
>> ### pinejs-14.18.2
>> #### (2021-02-15)
>>
>> * Gracefully handle `HttpError` thrown from PREPARSE hooks [Pagan Gazzard]
>>
> </details>
>
>
> ## open-balena-api-0.128.5
> ### (2021-03-01)
>
> * Add device type is default for application [JSReds]
>
> ## open-balena-api-0.128.4
> ### (2021-02-26)
>
> * Allow pinejs to enforce the at most one app with a given name rule [Pagan Gazzard]
>
> ## open-balena-api-0.128.3
> ### (2021-02-25)
>
> * fixtures: autogenerate commit if not provided [Matthew McGinn]
>
> ## open-balena-api-0.128.2
> ### (2021-02-24)
>
>
> <details>
> <summary> Update open-balena-base to 11.1.0 [Pagan Gazzard] </summary>
>
>> ### open-balena-base-11.1.0
>> #### (2021-02-24)
>>
>> * Update nodejs to 14.16.0 [Pagan Gazzard]
>>
> </details>
>
>
> ## open-balena-api-0.128.1
> ### (2021-02-17)
>
>
> <details>
> <summary> Update open-balena-base to 11.0.5 [Pagan Gazzard] </summary>
>
>> ### open-balena-base-11.0.5
>> #### (2021-02-15)
>>
>> * Update nodejs to 14.15.5 and npm to 6.14.11 [Pagan Gazzard]
>>
> </details>
>
>
> ## open-balena-api-0.128.0
> ### (2021-02-17)
>
> * Stop exposing `/resin/` [Pagan Gazzard]
>
> ## open-balena-api-0.127.0
> ### (2021-02-15)
>
> * Add a `boolVar` helper for config to standardize boolean config vars [Pagan Gazzard]
>
> ## open-balena-api-0.126.5
> ### (2021-02-15)
>
> * Run tests against the exposed api version rather than internal [Pagan Gazzard]
>
> ## open-balena-api-0.126.4
> ### (2021-02-12)
>
>
> <details>
> <summary> Update pinejs to 14.18.1 [Pagan Gazzard] </summary>
>
>> ### pinejs-14.18.1
>> #### (2021-02-12)
>>
>>
>> <details>
>> <summary> Update abstract-sql-compiler fix modified fields for upsert queries [Pagan Gazzard] </summary>
>>
>>> #### abstract-sql-compiler-7.10.2
>>> ##### (2021-02-12)
>>>
>>> * Fix `getModifiedFields` for `UpsertQuery`s [Pagan Gazzard]
>>>
>>> #### sbvr-types-3.4.1
>>> ##### (2021-02-10)
>>>
>>> * Remove unnecessary native fact type entries for synonymous forms [Pagan Gazzard]
>>>
>> </details>
>>
>>
>> ### pinejs-14.18.0
>> #### (2021-02-08)
>>
>>
>> <details>
>> <summary> Add support for sbvr date comparison and allow referencing current time [Pagan Gazzard] </summary>
>>
>>> #### lf-to-abstract-sql-4.2.0
>>> ##### (2021-02-05)
>>>
>>>
>>> <details>
>>> <summary> Add support for native `Name`s from sbvr-types [Pagan Gazzard] </summary>
>>>
>>>> ##### sbvr-parser-1.2.0
>>>> ###### (2021-02-05)
>>>>
>>>> * Add support for a `Name` role binding in the lf validator [Pagan Gazzard]
>>>>
>>> </details>
>>>
>>>
>>> #### sbvr-parser-1.2.2
>>> ##### (2021-02-08)
>>>
>>> * Optimize `StartX` rules [Pagan Gazzard]
>>> * Optimize `Identifier` when branch tracking is disabled (the default) [Pagan Gazzard]
>>> * Optimize `IdentifierPart` rule [Pagan Gazzard]
>>>
>>> #### sbvr-parser-1.2.1
>>> ##### (2021-02-08)
>>>
>>> * Update dependencies [Pagan Gazzard]
>>>
>>> #### sbvr-parser-1.2.0
>>> ##### (2021-02-05)
>>>
>>> * Add support for a `Name` role binding in the lf validator [Pagan Gazzard]
>>>
>>> #### sbvr-types-3.4.0
>>> ##### (2021-02-08)
>>>
>>> * Add a `Current Time` name that can be used to refer to the current time [Pagan Gazzard]
>>>
>>> #### sbvr-types-3.3.0
>>> ##### (2021-02-05)
>>>
>>> * Add `is before` & `is after` verbs to the Date & DateTime types [Thodoris Greasidis]
>>>
>> </details>
>>
>>
>> ### pinejs-14.17.1
>> #### (2021-02-08)
>>
>> * Fix .sbvr bundling in webpack [Pagan Gazzard]
>> * Fix extended-sbvr-parser export [Pagan Gazzard]
>>
>> ### pinejs-14.17.0
>> #### (2021-02-08)
>>
>> * Export extended-sbvr-parser from server-glue/server [Pagan Gazzard]
>>
>> ### pinejs-14.16.1
>> #### (2021-02-08)
>>
>> * Simplify server-glue/server exports [Pagan Gazzard]
>>
>> ### pinejs-14.16.0
>> #### (2021-02-01)
>>
>>
>> <details>
>> <summary> Update sbvr-types to 3.2.0, adding support for more `Text (Type)` verbs [Pagan Gazzard] </summary>
>>
>>> #### abstract-sql-compiler-7.10.1
>>> ##### (2021-01-29)
>>>
>>> * Separate code relating to referenced fields out of the main file [Pagan Gazzard]
>>>
>>> #### sbvr-types-3.2.0
>>> ##### (2021-01-29)
>>>
>>> * Add support for the `contains` verb to the text type [Thodoris Greasidis]
>>> * Add support for the`ends with` verb to the text type [Thodoris Greasidis]
>>> * Add support for the `starts with` verb to the text type [Thodoris Greasidis]
>>>
>> </details>
>>
>>
> </details>
>
>
> ## open-balena-api-0.126.3
> ### (2021-02-10)
>
> * Export `getDeviceTypesRoute` [Pagan Gazzard]
>
> ## open-balena-api-0.126.2
> ### (2021-02-10)
>
> * Minor typing improvements [Pagan Gazzard]
>
> ## open-balena-api-0.126.1
> ### (2021-02-09)
>
> * Fix missing field in migration for device family [Stevche Radevski]
>
> ## open-balena-api-0.126.0
> ### (2021-02-08)
>
> * Add synonymous form to device family manufacturer [Stevche Radevski]
>
> ## open-balena-api-0.125.0
> ### (2021-02-08)
>
> * Add device family and manufacturer resources [Stevche Radevski]
>
> ## open-balena-api-0.124.0
> ### (2021-02-05)
>
> * releases: add new metadata to release model [Matthew McGinn]
>
> ## open-balena-api-0.123.1
> ### (2021-02-03)
>
> * Add permission checking to the supervisor proxy [Thodoris Greasidis]
>
> ## open-balena-api-0.123.0
> ### (2021-02-02)
>
> * Add a maximum file size for the BALENA_HOST_SPLASH_IMAGE config var [Thodoris Greasidis]
>
> ## open-balena-api-0.122.0
> ### (2021-02-01)
>
>
> <details>
> <summary> Move tag key and device uuid length validation into SBVR rules [Pagan Gazzard] </summary>
>
>> ### pinejs-14.10.1
>> #### (2021-01-15)
>>
>>
>> <details>
>> <summary> Update dependencies [Pagan Gazzard] </summary>
>>
>>> #### abstract-sql-compiler-7.8.2
>>> ##### (2021-01-15)
>>>
>>> * Fix schema optimizations when table and resource names are different [Pagan Gazzard]
>>>
>>> #### abstract-sql-to-typescript-1.1.1
>>> ##### (2021-01-04)
>>>
>>> * Fix PickExpanded/PickDeferred type helpers [Pagan Gazzard]
>>>
>> </details>
>>
>>
> </details>
>
>
> ## open-balena-api-0.121.0
> ### (2021-02-01)
>
> * vars-schema: Add HOST_CONFIG HDMI config definitions for the RPi family [Thodoris Greasidis]
>
> ## open-balena-api-0.120.3
> ### (2021-02-01)
>
> * Support setting pg statement/query timeouts, defaulting to 60s/61s [Pagan Gazzard]
>
> ## open-balena-api-0.120.2
> ### (2021-01-29)
>
>
> <details>
> <summary> Update pinejs to 14.15.0, reducing the cases we need to run rules [Pagan Gazzard] </summary>
>
>> ### pinejs-14.15.0
>> #### (2021-01-29)
>>
>>
>> <details>
>> <summary> Make use of rule specific referenced fields to run rules in less cases [Pagan Gazzard] </summary>
>>
>>> #### abstract-sql-compiler-7.10.0
>>> ##### (2021-01-29)
>>>
>>> * Add an `action` property to modified fields of create/update/delete [Pagan Gazzard]
>>> * Automatically add `ruleReferencedFields` to `SqlRule`s [Pagan Gazzard]
>>> * Add a `getRuleReferencedFields` which is tailored for rules [Pagan Gazzard]
>>>
>>> #### abstract-sql-compiler-7.9.1
>>> ##### (2021-01-29)
>>>
>>> * Add test for optimizeSchema optimizing rules [Pagan Gazzard]
>>>
>>> #### abstract-sql-compiler-7.9.0
>>> ##### (2021-01-25)
>>>
>>> * Optimize the abstract sql of rules when running `optimizeSchema` [Pagan Gazzard]
>>>
>> </details>
>>
>>
> </details>
>
>
> ## open-balena-api-0.120.1
> ### (2021-01-29)
>
> * CODEOWNERS: Use the balena-api dev team [Thodoris Greasidis]
>
> ## open-balena-api-0.120.0
> ### (2021-01-29)
>
> * Optimize the unique commit per successful release per app rule [Thodoris Greasidis]
>
> ## open-balena-vpn-9.17.11
> ### (2021-05-14)
>
>
> <details>
> <summary> Update open-balena-base to 11.2.0 [Pagan Gazzard] </summary>
>
>> ### open-balena-base-11.2.0
>> #### (2021-05-14)
>>
>> * Update nodejs to 14.17.0 and npm to 6.14.13 [Pagan Gazzard]
>>
> </details>
>
>
> ## open-balena-vpn-9.17.10
> ### (2021-04-09)
>
>
> <details>
> <summary> Update open-balena-base to 11.1.2 [Pagan Gazzard] </summary>
>
>> ### open-balena-base-11.1.2
>> #### (2021-04-08)
>>
>> * Update nodejs to 14.16.1 and npm to 6.14.12 [Pagan Gazzard]
>>
>> ### open-balena-base-11.1.1
>> #### (2021-03-17)
>>
>> * Drop CircleCI [ab77]
>>
> </details>
>
>
> ## open-balena-vpn-9.17.9
> ### (2021-03-29)
>
> * Remove linting on prepush as it's already handled on commit [Pagan Gazzard]
>
> ## open-balena-vpn-9.17.8
> ### (2021-03-29)
>
> * Make more use of native promises and async/await [Pagan Gazzard]
>
> ## open-balena-vpn-9.17.7
> ### (2021-03-29)
>
>
> <details>
> <summary> Update dependencies [Pagan Gazzard] </summary>
>
>> ### pinejs-client-request-7.3.1
>> #### (2021-03-22)
>>
>>
>> <details>
>> <summary> Enable typescript strict mode [Pagan Gazzard] </summary>
>>
>>> #### pinejs-client-js-6.9.5
>>> ##### (2021-03-22)
>>>
>>> * Enable strict tsconfig options by default [Pagan Gazzard]
>>>
>>> #### pinejs-client-js-6.9.4
>>> ##### (2021-03-10)
>>>
>>> * Update dependencies [Pagan Gazzard]
>>>
>> </details>
>>
>>
>> ### pinejs-client-request-7.3.0
>> #### (2020-11-20)
>>
>>
>> <details>
>> <summary> Update dependencies [Pagan Gazzard] </summary>
>>
>>> #### pinejs-client-js-6.9.3
>>> ##### (2020-11-20)
>>>
>>> * Explicitly specify return types for all functions [Pagan Gazzard]
>>>
>>> #### pinejs-client-js-6.9.2
>>> ##### (2020-10-23)
>>>
>>> * Update dev dependencies [Pagan Gazzard]
>>>
>>> #### pinejs-client-js-6.9.1
>>> ##### (2020-09-17)
>>>
>>> * Improve typings [Pagan Gazzard]
>>>
>>> #### pinejs-client-js-6.9.0
>>> ##### (2020-09-07)
>>>
>>> * Add 'getOrCreate' method supporting natural keys [Thodoris Greasidis]
>>>
>>> #### pinejs-client-js-6.8.0
>>> ##### (2020-09-03)
>>>
>>> * Add support for $format [Pagan Gazzard]
>>>
>>> #### pinejs-client-js-6.7.3
>>> ##### (2020-08-26)
>>>
>>> * Improve $orderby typing to allow `[{a: 'desc'}, {b: 'asc'}]` [Pagan Gazzard]
>>>
>> </details>
>>
>>
> </details>
>
>
> ## open-balena-vpn-9.17.6
> ### (2021-02-24)
>
>
> <details>
> <summary> Update open-balena-base to 11.1.0 [Pagan Gazzard] </summary>
>
>> ### open-balena-base-11.1.0
>> #### (2021-02-24)
>>
>> * Update nodejs to 14.16.0 [Pagan Gazzard]
>>
> </details>
>
>
> ## open-balena-vpn-9.17.5
> ### (2021-02-17)
>
>
> <details>
> <summary> Update open-balena-base to 11.0.5 [Pagan Gazzard] </summary>
>
>> ### open-balena-base-11.0.5
>> #### (2021-02-15)
>>
>> * Update nodejs to 14.15.5 and npm to 6.14.11 [Pagan Gazzard]
>>
> </details>
>
>
> ## open-balena-registry-2.16.1
> ### (2021-05-14)
>
>
> <details>
> <summary> Update open-balena-base to 11.2.0 [Pagan Gazzard] </summary>
>
>> ### open-balena-base-11.2.0
>> #### (2021-05-14)
>>
>> * Update nodejs to 14.17.0 and npm to 6.14.13 [Pagan Gazzard]
>>
> </details>
>
>
</details>
# v3.3.2
## (2021-06-03)
* Auto-install required Vagrant plugins instead of erroring out [Mark S. Maglana]
# v3.3.1
## (2021-05-24)
* scripts/compose: Delete Balena CLI version warning This can be removed completely now — it was added to ensure existing users also update to the latest (at the time) CLI as they updated their open-balena installation. [fisehara]
# v3.3.0
## (2021-05-05)
* Update registry service [Bart Versluijs]
# v3.2.2
## (2021-04-28)
* patch: Adding supported devices to OB [rmorillo24]
# v3.2.1
## (2021-02-06)

30
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,30 @@
# Contributing to openbalena
Everyone is welcome to contribute to openBalena. There are many different ways
to get involved apart from submitting pull requests, including helping other
users on the [forums][forums], reporting or triaging [issues][issue-tracker],
reviewing and discussing [pull requests][pulls], or just spreading the word.
All of openbalena is hosted on GitHub. Apart from its constituent components,
which are the [API][open-balena-api], [VPN][open-balena-vpn], [Registry][open-balena-registry],
[S3 storage service][open-balena-s3], and [Database][open-balena-db], contributions
are also welcome to its client-side software such as the [balena CLI][balena-cli],
the [balena SDK][balena-sdk], [balenaOS][balena-os] and [balenaEngine][balena-engine].
[balena-cli]: https://github.com/balena-io/balena-cli
[balena-cloud-website]: https://balena.io/cloud
[balena-engine]: https://github.com/balena-os/balena-engine
[balena-os-website]: https://balena.io/os
[balena-os]: https://github.com/balena-os/meta-balena
[balena-sdk]: https://github.com/balena-io/balena-sdk
[documentation]: https://balena.io/docs/learn/welcome/introduction/
[forums]: https://forums.balena.io/c/open-balena
[getting-started]: https://balena.io/open/docs/getting-started
[issue-tracker]: https://github.com/balena-io/open-balena/issues
[open-balena-api]: https://github.com/balena-io/open-balena-api
[open-balena-db]: https://github.com/balena-io/open-balena-db
[open-balena-registry]: https://github.com/balena-io/open-balena-registry
[open-balena-s3]: https://github.com/balena-io/open-balena-s3
[open-balena-vpn]: https://github.com/balena-io/open-balena-vpn
[open-balena-website]: https://balena.io/open
[pulls]: https://github.com/balena-io/open-balena/pulls

View File

@ -1,22 +1,8 @@
<img alt="openBalena" src="docs/assets/openbalena-logo.svg" height="82">
![logo](./docs/assets/openbalena-logo.svg)
---
OpenBalena is a platform to deploy and manage connected devices. Devices run
[balenaOS][balena-os-website], a host operating system designed for running
containers on IoT devices, and are managed via the [balena CLI][balena-cli],
which you can use to configure your application containers, push updates, check
status, view logs, and so forth. OpenBalenas backend services, composed of
battle-tested components that weve run in production on [balenaCloud][balena-cloud-website]
for years, can store device information securely and reliably, allow remote
management via a built-in VPN service, and efficiently distribute container
images to your devices.
To learn more about openBalena, visit [balena.io/open][open-balena-website].
## Features
**openbalena is an open source platform to manage IoT and edge device fleets at scale.**
## Highlights
- **Simple provisioning**: Adding devices to your fleet is a breeze
- **Easy updates**: Remotely update the software on your devices with a single command
- **Container-based**: Benefit from the power of virtualization, optimized for the edge
@ -24,15 +10,19 @@ To learn more about openBalena, visit [balena.io/open][open-balena-website].
- **Powerful API & SDK**: Extend openBalena to fit your needs
- **Built-in VPN**: Access your devices regardless of their network environment
## Motivation
## Getting Started
openbalena is a platform that helps you deploy and manage connected devices. Devices run [balenaOS][balena-os-website], a host operating system designed for running containers on IoT devices, and are managed via the [balena CLI][balena-cli], which you can use to configure your application containers, push updates, check status, view logs, and more.
Our [Getting Started guide][getting-started] is the most direct path to getting
an openBalena installation up and running and successfully deploying your
application to your device(s).
openbalenas backend services, composed of battle-tested components that weve run in production on [balenaCloud][balena-cloud-website] for years, can store device information securely and reliably, allow remote management via a built-in VPN service, and efficiently distribute container images to your devices.
To learn more about openbalena, visit [balena.io/open][open-balena-website].
## Compatibility
### Setup and Configuration
Our [Getting Started guide][getting-started] is the most direct path to getting an openbalena installation up and running and successfully deploying your application to your device(s).
### Compatibility
The current release of openBalena has the following minimum version requirements:
@ -43,8 +33,7 @@ If you are updating from previous openBalena versions, ensure you update the bal
CLI and reprovision any devices to at least the minimum required versions in order
for them to be fully compatible with this release, as some features may not work.
## Documentation
### Documentation
While we're still working on the project documentation, please refer to the
[balenaCloud documentation][documentation]. BalenaCloud is built on top of
@ -62,67 +51,9 @@ sections are of particular interest:
- [Reference](https://balena.io/docs/reference)
- [FAQ](https://balena.io/docs/faq/troubleshooting/faq)
### License
## Getting Help
You are welcome to submit any questions, participate in discussions and request
help with any issue in [openBalena forums][forums]. The balena team frequents
these forums and will be happy to help. You can also ask other community members
for help, or contribute by answering questions posted by fellow openBalena users.
Please do not use the issue tracker for support-related questions.
## Contributing
Everyone is welcome to contribute to openBalena. There are many different ways
to get involved apart from submitting pull requests, including helping other
users on the [forums][forums], reporting or triaging [issues][issue-tracker],
reviewing and discussing [pull requests][pulls], or just spreading the word.
All of openBalena is hosted on GitHub. Apart from its constituent components,
which are the [API][open-balena-api], [VPN][open-balena-vpn], [Registry][open-balena-registry],
[S3 storage service][open-balena-s3], and [Database][open-balena-db], contributions
are also welcome to its client-side software such as the [balena CLI][balena-cli],
the [balena SDK][balena-sdk], [balenaOS][balena-os] and [balenaEngine][balena-engine].
## Roadmap
OpenBalena is currently in beta. While fully functional, it lacks features we
consider important before we can comfortably call it production-ready. During
this phase, dont be alarmed if things dont work as expected just yet (and
please let us know about any bugs or errors you encounter!). The following
improvements and new functionality is planned:
- Full documentation
- Full test suite
- Simplified deployment
- Remote host OS updates
- Support for custom device types
## Differences between openBalena and balenaCloud
| openBalena | balenaCloud |
| ----- | ---- |
| Device updates using full images | Device updates using [delta images](https://www.balena.io/docs/learn/deploy/delta/) |
| Support for a single user | Support for [multiple users](https://www.balena.io/docs/learn/manage/account/#application-members) |
| Self-hosted deployment and scaling | balena-managed scaling and deployment |
| Community support via [forums][forums] | Private support on [paid plans](https://www.balena.io/pricing/) |
| Deploy via `balena deploy` only | Build remotely with native builders using [`balena push`](https://www.balena.io/docs/learn/deploy/deployment/#balena-push) or [`git push`](https://www.balena.io/docs/learn/deploy/deployment/#git-push) |
| No support for building via `git push` | Use the same CI workflow with [`git push`](https://www.balena.io/docs/learn/deploy/deployment/#git-push) |
| No public URL support | Serve websites directly from device with [public device URLs](https://www.balena.io/docs/learn/manage/actions/#enable-public-device-url) |
| Management via `balena-cli` only | Cloud-based device management dashboard |
| Download images from [balena.io][balena-os-website] | Download preconfigured images directly from the dashboard |
| No supported remote diagnostics | Remote device diagnostics |
Additionally, refer back to the [roadmap](#roadmap) above for planned but not yet implemented features.
## License
OpenBalena is licensed under the terms of AGPL v3. See [LICENSE](LICENSE) for details.
openbalena is licensed under the terms of AGPL v3. See [LICENSE](LICENSE) for details.
[balena-cli]: https://github.com/balena-io/balena-cli
[balena-cloud-website]: https://balena.io/cloud

View File

@ -1 +1 @@
3.2.1
3.5.0

13
Vagrantfile vendored
View File

@ -1,12 +1,11 @@
Vagrant.require_version '>= 2.0.0'
[ 'vagrant-vbguest', 'vagrant-docker-compose' ].each do |p|
unless Vagrant.has_plugin?(p)
raise "Please install missing plugin: vagrant plugin install #{p}"
end
end
Vagrant.require_version '>= 2.2.0'
Vagrant.configure('2') do |config|
config.vagrant.plugins = [
'vagrant-vbguest',
'vagrant-docker-compose'
]
config.vm.define 'openbalena'
config.vm.hostname = 'openbalena-vagrant'
config.vm.box = 'bento/ubuntu-18.04'

View File

@ -5,7 +5,6 @@ volumes:
cert-provider: {}
db: {}
redis: {}
registry: {}
s3: {}
services:
@ -65,8 +64,6 @@ services:
depends_on:
- s3
- redis
volumes:
- registry:/data
environment:
API_TOKENAUTH_CRT: ${OPENBALENA_TOKEN_AUTH_PUB}
BALENA_REGISTRY2_HOST: registry.${OPENBALENA_HOST_NAME}
@ -85,6 +82,7 @@ services:
REGISTRY2_S3_SECRET: ${OPENBALENA_S3_SECRET_KEY}
REGISTRY2_SECRETKEY: ${OPENBALENA_REGISTRY_SECRET_KEY}
REGISTRY2_STORAGEPATH: /data
REGISTRY2_DISABLE_REDIRECT: "false"
vpn:
extends:

View File

@ -1,6 +1,6 @@
export OPENBALENA_API_VERSION_TAG=v0.119.5
export OPENBALENA_API_VERSION_TAG=v0.139.0
export OPENBALENA_DB_VERSION_TAG=v4.1.0
export OPENBALENA_MDNS_PUBLISHER_VERSION_TAG=v1.9.2
export OPENBALENA_REGISTRY_VERSION_TAG=v2.14.4
export OPENBALENA_REGISTRY_VERSION_TAG=v2.16.1
export OPENBALENA_S3_VERSION_TAG=v2.9.9
export OPENBALENA_VPN_VERSION_TAG=v9.17.4
export OPENBALENA_VPN_VERSION_TAG=v9.17.11

226
docs/01-getting-started.md Normal file
View File

@ -0,0 +1,226 @@
# Getting started with openbalena
This guide will walk you through the steps of deploying an openBalena server,
that together with the balena CLI, will enable you to create and manage a fleet
of devices running on your own infrastructure, on premises or in the cloud. The
openBalena servers must be reachable by the devices, which is easiest to achieve
with cloud providers like AWS, Google Cloud, Digital Ocean and others.
This guide assumes a setup with two separate machines:
- The openBalena _server_, running Linux. These instructions were tested with an
Ubuntu 18.04 x64 server.
- The _local machine_, running Linux, Windows or macOS where the balena CLI runs
(as a client to the openBalena server). The local machine should also have a
working installation of [Docker](https://docs.docker.com/get-docker/) so that
application images can be built and deployed to your devices, although it is
also possible to use balenaEngine on a balenaOS device instead of Docker.
## Preparing a server for openBalena
Login to the server via SSH and run the following commands.
1. First, install or update essential software:
```bash
apt-get update && apt-get install -y build-essential git docker.io libssl-dev nodejs npm
```
2. Install docker-compose:
```bash
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
```
Test your docker-compose installation with `$ docker-compose --version`.
3. Create a new user, assign admin permissions and add to `docker` group:
```bash
adduser balena
usermod -aG sudo balena
usermod -aG docker balena
```
### Install openBalena on the server
1. On the server still, login as the new user and change into the home directory:
```bash
su balena
cd ~
```
2. Clone the openBalena repository and change into the new directory:
```bash
git clone https://github.com/balena-io/open-balena.git
cd open-balena/
```
3. Run the `quickstart` script as below. This will create a new `config`
directory and generate appropriate SSL certificates and configuration for the
server. The provided email and password will be used to automatically create
the user account for interacting with the server and will be needed later on
for logging in via the balena CLI. Replace the domain name for the `-d`
argument appropriately.
```bash
./scripts/quickstart -U <email@address> -P <password> -d mydomain.com
```
For more available options, see the script's help:
```bash
./scripts/quickstart -h
```
4. At this point, the openBalena server can be started with:
```bash
systemctl start docker
./scripts/compose up -d
```
The `-d` argument spawns the containers as background services.
5. Tail the logs of the containers with:
```bash
./scripts/compose exec <service-name> journalctl -fn100
```
Replace `<service-name>` with the name of any one of the services defined
in `compose/services.yml`; eg. `api` or `registry`.
6. The server can be stopped with:
```bash
./scripts/compose stop
```
When updating openBalena to a new version, the steps are:
```bash
./scripts/compose down
git pull
./scripts/compose build
./scripts/compose up -d
```
### Domain Configuration
The following CNAME records must be configured to point to the openBalena server:
```text
api.mydomain.com
registry.mydomain.com
vpn.mydomain.com
s3.mydomain.com
tunnel.mydomain.com
```
Check with your internet domain name registrar for instructions on how to
configure CNAME records.
### Test the openBalena server
To confirm that everything is running correctly, try a simple request from the
local machine to the server:
```bash
curl -k https://api.mydomain.com/ping
OK
```
Congratulations! The openBalena server is up and running. The next step is to
setup the local machine to use the server, provision a device and deploy a
small project.
## Install self-signed certificates on the local machine
The installation of the openBalena server produces a few self-signed certificates
that must be installed on the local machine, so that it can securely communicate
with the server.
The root certificate is found at `config/certs/root/ca.crt` on the server. Copy
it to some folder on the local machine and keep a note the path -- it will be
used later during the CLI installation. Follow the steps below for the specific
platform of the local machine.
### Linux:
```bash
sudo cp ca.crt /usr/local/share/ca-certificates/ca.crt
sudo update-ca-certificates
sudo systemctl restart docker
```
### macOS:
```bash
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
osascript -e 'quit app "Docker"' && open -a Docker
```
### Windows:
```bash
certutil -addstore -f "ROOT" ca.crt
```
The Docker daemon on the local machine must then be restarted for Docker to
pick up the new certificate.
## Install the balena CLI on the local machine
Follow the [balena CLI installation
instructions](https://github.com/balena-io/balena-cli/blob/master/INSTALL.md)
to install the balena CLI on the local machine.
By default, the CLI targets the balenaCloud servers at `balena-cloud.com`, and
needs to be configured to target the openBalena server instead. Add the following
line to the CLI's configuration file, replacing `"mydomain.com"` with the domain
name of the openBalena server:
```yaml
balenaUrl: 'mydomain.com'
```
The CLI configuration file can be found at:
- On Linux or macOS: `~/.balenarc.yml`
- On Windows: `%UserProfile%\_balenarc.yml`
If the file does not already exist, just create it.
Wrapping up the CLI installation, set an environment variable that points to the
root certificate copied previously on the local machine. This step is to ensure
the CLI can securely interact with the openBalena server.
| Shell | Command |
| ------------------ | ---------------------------------------------- |
| bash | `export NODE_EXTRA_CA_CERTS='/path/to/ca.crt'` |
| Windows cmd.exe | `set NODE_EXTRA_CA_CERTS=C:\path\to\ca.crt` |
| Windows PowerShell | `$Env:NODE_EXTRA_CA_CERTS="C:\path\to\ca.crt"` |
## Deploy an application
The commands below should be run on a terminal on the local machine (where the
balena CLI is installed). Ensure that the `NODE_EXTRA_CA_CERTS` environment
variable is set, as discussed above.
### Login to openBalena
Run `balena login`, select `Credentials` and use the email and password
specified during quickstart to login to the openBalena server. At any time, the
`balena whoami` command may be used to check which server the CLI is logged in to.
## Getting Help
You are welcome to submit any questions, participate in discussions and request
help with any issue in [openBalena forums][forums]. The balena team frequents
these forums and will be happy to help. You can also ask other community members
for help, or contribute by answering questions posted by fellow openBalena users.
Please do not use the issue tracker for support-related questions.

View File

@ -0,0 +1,143 @@
# Deploy and provision an application
The commands below should be run on a terminal on the local machine (where the
balena CLI is installed). Ensure that the `NODE_EXTRA_CA_CERTS` environment
variable is set, as discussed above.
### Login to openBalena
Run `balena login`, select `Credentials` and use the email and password
specified during quickstart to login to the openBalena server. At any time, the
`balena whoami` command may be used to check which server the CLI is logged in to.
### Create an application
Create a new application with `balena app create myApp`. Select the application's
default device type with the interactive prompt. The examples in this guide assume
a Raspberry Pi 3.
An application contains devices that share the same architecture (such as ARM
or Intel i386), and also contains code releases that are deployed to the devices.
When a device is provisioned, it is added to an application, but can be migrated
to another application at any time. There is no limit to the number of applications
that can be created or to the number of devices that can be provisioned.
At any time, the server can be queried for all the applications it knows about
with the following command:
```bash
balena apps
ID APP NAME DEVICE TYPE ONLINE DEVICES DEVICE COUNT
1 myApp raspberrypi3
```
### Provision a new device
Once we have an application, its time to start provisioning devices. To do this,
first download a balenaOS image from [balena.io](https://balena.io/os/#download).
Pick the development image that is appropriate for your device.
Unzip the downloaded image and use the balena CLI to configure it:
```bash
balena os configure ~/Downloads/balena-cloud-raspberrypi3-2.58.3+rev1-dev-v11.14.0.img --app myApp
```
Flash the configured image to an SD card using [Etcher](https://balena.io/etcher).
Insert the SD card into the device and power it on. The device will register with
the openBalena server and after about two minutes will be inspectable:
```bash
balena devices
ID UUID DEVICE NAME DEVICE TYPE APPLICATION NAME STATUS IS ONLINE SUPERVISOR VERSION OS VERSION
4 59d7700 winter-tree raspberrypi3 myApp Idle true 11.14.0 balenaOS 2.58.3+rev1
balena device 59d7700
== WINTER TREE
ID: 4
DEVICE TYPE: raspberrypi3
STATUS: online
IS ONLINE: true
IP ADDRESS: 192.168.43.247
APPLICATION NAME: myApp
UUID: 59d7700755ec5de06783eda8034c9d3d
SUPERVISOR VERSION: 11.14.0
OS VERSION: balenaOS 2.58.3+rev1
```
It's time to deploy code to the device.
### Deploy a project
Application release images are built on the local machine using the balena CLI.
Ensure the root certificate has been correctly installed on the local machine,
as discussed above.
Let's create a trivial project that logs "Idling...". On an empty directory,
create a new file named `Dockerfile.template` with the following contents:
```dockerfile
FROM balenalib/%%BALENA_MACHINE_NAME%%-alpine
CMD [ "balena-idle" ]
```
Then build and deploy the project with:
```bash
balena deploy myApp --logs
```
The project will have been successfully built when a friendly unicorn appears in
the terminal:
```bash
[Info] Compose file detected
...
[Info] Creating release...
[Info] Pushing images to registry...
[Info] Saving release...
[Success] Deploy succeeded!
[Success] Release: f62a74c220b92949ec78761c74366046
\
\
\\
\\
>\/7
_.-(6' \
(=___._/` \
) \ |
/ / |
/ > /
j < _\
_.-' : ``.
\ r=._\ `.
<`\\_ \ .`-.
\ r-7 `-. ._ ' . `\
\`, `-.`7 7) )
\/ \| \' / `-._
|| .'
\\ (
>\ >
,.-' >.'
<.'_.''
<'
```
This command packages up the local directory, creates a new Docker image from
it and pushes it to the openBalena server. In turn, the server will deploy it to
all provisioned devices and within a couple of minutes, they will all run the
new release. Logs can be viewed with:
```bash
balena logs 59d7700 --tail
[Logs] [10/28/2020, 11:40:16 AM] Supervisor starting
[Logs] [10/28/2020, 11:40:50 AM] Creating network 'default'
[Logs] [10/28/2020, 11:42:38 AM] Creating volume 'resin-data'
[Logs] [10/28/2020, 11:42:40 AM] Downloading image …
[Logs] [10/28/2020, 11:44:00 AM] [main] Idling...
```
Enjoy Balenafying All the Things!

14
docs/03-next-steps.md Normal file
View File

@ -0,0 +1,14 @@
# Next steps
- Try out [local mode](https://www.balena.io/docs/learn/develop/local-mode),
which allows you to build and sync code to your device locally for rapid
development.
- Develop an application with [multiple containers](https://www.balena.io/docs/learn/develop/multicontainer)
to provide a more modular approach to application management.
- Manage your device fleet with the use of [configuration](https://www.balena.io/docs/learn/manage/configuration/)
and [environment](https://www.balena.io/docs/learn/manage/serv-vars/) variables.
- Explore our [example projects](https://balena.io/blog/tags/etcher-featured/)
to give you an idea of more things you can do with balena.
- If you find yourself stuck or confused, help is just [a click away](https://www.balena.io/support).
- Pin selected devices to selected code releases using
[sample scripts](https://github.com/balena-io-examples/staged-releases).

View File

@ -0,0 +1,17 @@
# Differences between openBalena and balenaCloud
| openBalena | balenaCloud |
| ----- | ---- |
| Device updates using full images | Device updates using [delta images](https://www.balena.io/docs/learn/deploy/delta/) |
| Support for a single user | Support for [multiple users](https://www.balena.io/docs/learn/manage/account/#application-members) |
| Self-hosted deployment and scaling | balena-managed scaling and deployment |
| Community support via [forums][forums] | Private support on [paid plans](https://www.balena.io/pricing/) |
| Deploy via `balena deploy` only | Build remotely with native builders using [`balena push`](https://www.balena.io/docs/learn/deploy/deployment/#balena-push) or [`git push`](https://www.balena.io/docs/learn/deploy/deployment/#git-push) |
| No support for building via `git push` | Use the same CI workflow with [`git push`](https://www.balena.io/docs/learn/deploy/deployment/#git-push) |
| No public URL support | Serve websites directly from device with [public device URLs](https://www.balena.io/docs/learn/manage/actions/#enable-public-device-url) |
| Management via `balena-cli` only | Cloud-based device management dashboard |
| Download images from [balena.io][balena-os-website] | Download preconfigured images directly from the dashboard |
| No supported remote diagnostics | Remote device diagnostics |
| Supported devices: Raspberry Pi family, the Intel NUC, the NVIDIA Jetson TX2, and the balenaFin | All the devices listed in balena's [reference documentation](https://www.balena.io/docs/reference/hardware/devices/) |
Additionally, refer back to the [roadmap](#roadmap) above for planned but not yet implemented features.

13
docs/05-roadmap.md Normal file
View File

@ -0,0 +1,13 @@
# openbalena roadmap
OpenBalena is currently in beta. While fully functional, it lacks features we
consider important before we can comfortably call it production-ready. During
this phase, dont be alarmed if things dont work as expected just yet (and
please let us know about any bugs or errors you encounter!). The following
improvements and new functionality is planned:
- Full documentation
- Full test suite
- Simplified deployment
- Remote host OS updates
- Support for custom device types

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@ -11,10 +11,6 @@ echo_bold() {
printf "\\033[1m%s\\033[0m\\n" "$@"
}
echo_bold_stderr() {
printf "\\033[1m%s\\033[0m\\n" "$@" 1>&2
}
VERSIONS_FILE="${BASE_DIR}/compose/versions"
if [ ! -f "$VERSIONS_FILE" ]; then
echo_bold "No service versions defined in ${VERSIONS_FILE}"
@ -35,9 +31,6 @@ if [ ${OPENBALENA_HOST_NAME: -6} == ".local" ]; then
INCLUDE_MDNS="-f ${BASE_DIR}/compose/mdns.yml"
fi
# show a warning to update your balena CLI tool...
echo_bold_stderr "IMPORTANT: Please update your Balena CLI installation to version v12.38.5"
# shellcheck source=/dev/null
source "${VERSIONS_FILE}"; docker-compose \
--project-name 'openbalena' \

View File

@ -6,11 +6,11 @@ VOLUME [ "/usr/src/app/certs" ]
RUN apk add --update bash curl git openssl ncurses socat
# from https://github.com/Neilpang/acme.sh/releases/tag/2.8.5
# from https://github.com/Neilpang/acme.sh/releases/tag/3.0.1
RUN git clone https://github.com/Neilpang/acme.sh.git && \
cd acme.sh && \
git fetch && git fetch --tags && \
git checkout 2.8.5 . && \
git checkout 3.0.1 . && \
./acme.sh --install \
--cert-home /usr/src/app/certs

View File

@ -159,7 +159,7 @@ acquireCertificate() {
fi
logInfo "Issuing certificates..."
"$ACME_BIN" --issue "${ACME_OPTS[@]}" "${ACME_DOMAIN_ARGS[@]}"
"$ACME_BIN" --server letsencrypt --issue "${ACME_OPTS[@]}" "${ACME_DOMAIN_ARGS[@]}"
logInfo "Installing certificates..." && \
"$ACME_BIN" --install-cert "${ACME_DOMAIN_ARGS[@]}" \

View File

@ -1,56 +1,119 @@
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFmDCCA4CgAwIBAgIQU9C87nMpOIFKYpfvOHFHFDANBgkqhkiG9w0BAQsFADBm
MQswCQYDVQQGEwJVUzEzMDEGA1UEChMqKFNUQUdJTkcpIEludGVybmV0IFNlY3Vy
aXR5IFJlc2VhcmNoIEdyb3VwMSIwIAYDVQQDExkoU1RBR0lORykgUHJldGVuZCBQ
ZWFyIFgxMB4XDTE1MDYwNDExMDQzOFoXDTM1MDYwNDExMDQzOFowZjELMAkGA1UE
BhMCVVMxMzAxBgNVBAoTKihTVEFHSU5HKSBJbnRlcm5ldCBTZWN1cml0eSBSZXNl
YXJjaCBHcm91cDEiMCAGA1UEAxMZKFNUQUdJTkcpIFByZXRlbmQgUGVhciBYMTCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALbagEdDTa1QgGBWSYkyMhsc
ZXENOBaVRTMX1hceJENgsL0Ma49D3MilI4KS38mtkmdF6cPWnL++fgehT0FbRHZg
jOEr8UAN4jH6omjrbTD++VZneTsMVaGamQmDdFl5g1gYaigkkmx8OiCO68a4QXg4
wSyn6iDipKP8utsE+x1E28SA75HOYqpdrk4HGxuULvlr03wZGTIf/oRt2/c+dYmD
oaJhge+GOrLAEQByO7+8+vzOwpNAPEx6LW+crEEZ7eBXih6VP19sTGy3yfqK5tPt
TdXXCOQMKAp+gCj/VByhmIr+0iNDC540gtvV303WpcbwnkkLYC0Ft2cYUyHtkstO
fRcRO+K2cZozoSwVPyB8/J9RpcRK3jgnX9lujfwA/pAbP0J2UPQFxmWFRQnFjaq6
rkqbNEBgLy+kFL1NEsRbvFbKrRi5bYy2lNms2NJPZvdNQbT/2dBZKmJqxHkxCuOQ
FjhJQNeO+Njm1Z1iATS/3rts2yZlqXKsxQUzN6vNbD8KnXRMEeOXUYvbV4lqfCf8
mS14WEbSiMy87GB5S9ucSV1XUrlTG5UGcMSZOBcEUpisRPEmQWUOTWIoDQ5FOia/
GI+Ki523r2ruEmbmG37EBSBXdxIdndqrjy+QVAmCebyDx9eVEGOIpn26bW5LKeru
mJxa/CFBaKi4bRvmdJRLAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB
Af8EBTADAQH/MB0GA1UdDgQWBBS182Xy/rAKkh/7PH3zRKCsYyXDFDANBgkqhkiG
9w0BAQsFAAOCAgEAncDZNytDbrrVe68UT6py1lfF2h6Tm2p8ro42i87WWyP2LK8Y
nLHC0hvNfWeWmjZQYBQfGC5c7aQRezak+tHLdmrNKHkn5kn+9E9LCjCaEsyIIn2j
qdHlAkepu/C3KnNtVx5tW07e5bvIjJScwkCDbP3akWQixPpRFAsnP+ULx7k0aO1x
qAeaAhQ2rgo1F58hcflgqKTXnpPM02intVfiVVkX5GXpJjK5EoQtLceyGOrkxlM/
sTPq4UrnypmsqSagWV3HcUlYtDinc+nukFk6eR4XkzXBbwKajl0YjztfrCIHOn5Q
CJL6TERVDbM/aAPly8kJ1sWGLuvvWYzMYgLzDul//rUF10gEMWaXVZV51KpS9DY/
5CunuvCXmEQJHo7kGcViT7sETn6Jz9KOhvYcXkJ7po6d93A/jy4GKPIPnsKKNEmR
xUuXY4xRdh45tMJnLTUDdC9FIU0flTeO9/vNpVA8OPU1i14vCz+MU8KX1bV3GXm/
fxlB7VBBjX9v5oUep0o/j68R/iDlCOM4VVfRa8gX6T2FU7fNdatvGro7uQzIvWof
gN9WUwCbEMBy/YhBSrXycKA8crgGg3x1mIsopn88JKwmMBa68oS7EHM9w7C4y71M
7DiA+/9Qdp9RBWJpTS9i/mDnJg1xvo8Xz49mrrgfmcAXTCJqXi24NatI3Oc=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICTjCCAdSgAwIBAgIRAIPgc3k5LlLVLtUUvs4K/QcwCgYIKoZIzj0EAwMwaDEL
MAkGA1UEBhMCVVMxMzAxBgNVBAoTKihTVEFHSU5HKSBJbnRlcm5ldCBTZWN1cml0
eSBSZXNlYXJjaCBHcm91cDEkMCIGA1UEAxMbKFNUQUdJTkcpIEJvZ3VzIEJyb2Nj
b2xpIFgyMB4XDTIwMDkwNDAwMDAwMFoXDTQwMDkxNzE2MDAwMFowaDELMAkGA1UE
BhMCVVMxMzAxBgNVBAoTKihTVEFHSU5HKSBJbnRlcm5ldCBTZWN1cml0eSBSZXNl
YXJjaCBHcm91cDEkMCIGA1UEAxMbKFNUQUdJTkcpIEJvZ3VzIEJyb2Njb2xpIFgy
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEOvS+w1kCzAxYOJbA06Aw0HFP2tLBLKPo
FQqR9AMskl1nC2975eQqycR+ACvYelA8rfwFXObMHYXJ23XLB+dAjPJVOJ2OcsjT
VqO4dcDWu+rQ2VILdnJRYypnV1MMThVxo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD
VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU3tGjWWQOwZo2o0busBB2766XlWYwCgYI
KoZIzj0EAwMDaAAwZQIwRcp4ZKBsq9XkUuN8wfX+GEbY1N5nmCRc8e80kUkuAefo
uc2j3cICeXo1cOybQ1iWAjEA3Ooawl8eQyR4wrjCofUE8h44p0j7Yl/kBlJZT8+9
vbtH7QiVzeKCOTQPINyRql6P
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFWzCCA0OgAwIBAgIQTfQrldHumzpMLrM7jRBd1jANBgkqhkiG9w0BAQsFADBm
MQswCQYDVQQGEwJVUzEzMDEGA1UEChMqKFNUQUdJTkcpIEludGVybmV0IFNlY3Vy
aXR5IFJlc2VhcmNoIEdyb3VwMSIwIAYDVQQDExkoU1RBR0lORykgUHJldGVuZCBQ
ZWFyIFgxMB4XDTIwMDkwNDAwMDAwMFoXDTI1MDkxNTE2MDAwMFowWTELMAkGA1UE
BhMCVVMxIDAeBgNVBAoTFyhTVEFHSU5HKSBMZXQncyBFbmNyeXB0MSgwJgYDVQQD
Ex8oU1RBR0lORykgQXJ0aWZpY2lhbCBBcHJpY290IFIzMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAu6TR8+74b46mOE1FUwBrvxzEYLck3iasmKrcQkb+
gy/z9Jy7QNIAl0B9pVKp4YU76JwxF5DOZZhi7vK7SbCkK6FbHlyU5BiDYIxbbfvO
L/jVGqdsSjNaJQTg3C3XrJja/HA4WCFEMVoT2wDZm8ABC1N+IQe7Q6FEqc8NwmTS
nmmRQm4TQvr06DP+zgFK/MNubxWWDSbSKKTH5im5j2fZfg+j/tM1bGaczFWw8/lS
nukyn5J2L+NJYnclzkXoh9nMFnyPmVbfyDPOc4Y25aTzVoeBKXa/cZ5MM+WddjdL
biWvm19f1sYn1aRaAIrkppv7kkn83vcth8XCG39qC2ZvaQIDAQABo4IBEDCCAQww
DgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDATAS
BgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTecnpI3zHDplDfn4Uj31c3S10u
ZTAfBgNVHSMEGDAWgBS182Xy/rAKkh/7PH3zRKCsYyXDFDA2BggrBgEFBQcBAQQq
MCgwJgYIKwYBBQUHMAKGGmh0dHA6Ly9zdGcteDEuaS5sZW5jci5vcmcvMCsGA1Ud
HwQkMCIwIKAeoByGGmh0dHA6Ly9zdGcteDEuYy5sZW5jci5vcmcvMCIGA1UdIAQb
MBkwCAYGZ4EMAQIBMA0GCysGAQQBgt8TAQEBMA0GCSqGSIb3DQEBCwUAA4ICAQCN
DLam9yN0EFxxn/3p+ruWO6n/9goCAM5PT6cC6fkjMs4uas6UGXJjr5j7PoTQf3C1
vuxiIGRJC6qxV7yc6U0X+w0Mj85sHI5DnQVWN5+D1er7mp13JJA0xbAbHa3Rlczn
y2Q82XKui8WHuWra0gb2KLpfboYj1Ghgkhr3gau83pC/WQ8HfkwcvSwhIYqTqxoZ
Uq8HIf3M82qS9aKOZE0CEmSyR1zZqQxJUT7emOUapkUN9poJ9zGc+FgRZvdro0XB
yphWXDaqMYph0DxW/10ig5j4xmmNDjCRmqIKsKoWA52wBTKKXK1na2ty/lW5dhtA
xkz5rVZFd4sgS4J0O+zm6d5GRkWsNJ4knotGXl8vtS3X40KXeb3A5+/3p0qaD215
Xq8oSNORfB2oI1kQuyEAJ5xvPTdfwRlyRG3lFYodrRg6poUBD/8fNTXMtzydpRgy
zUQZh/18F6B/iW6cbiRN9r2Hkh05Om+q0/6w0DdZe+8YrNpfhSObr/1eVZbKGMIY
qKmyZbBNu5ysENIK5MPc14mUeKmFjpN840VR5zunoU52lqpLDua/qIM8idk86xGW
xx2ml43DO/Ya/tVZVok0mO0TUjzJIfPqyvr455IsIut4RlCR9Iq0EDTve2/ZwCuG
hSjpTUFGSiQrR2JK2Evp+o6AETUkBCO1aw0PpQBPDQ==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDCzCCApGgAwIBAgIRALRY4992FVxZJKOJ3bpffWIwCgYIKoZIzj0EAwMwaDEL
MAkGA1UEBhMCVVMxMzAxBgNVBAoTKihTVEFHSU5HKSBJbnRlcm5ldCBTZWN1cml0
eSBSZXNlYXJjaCBHcm91cDEkMCIGA1UEAxMbKFNUQUdJTkcpIEJvZ3VzIEJyb2Nj
b2xpIFgyMB4XDTIwMDkwNDAwMDAwMFoXDTI1MDkxNTE2MDAwMFowVTELMAkGA1UE
BhMCVVMxIDAeBgNVBAoTFyhTVEFHSU5HKSBMZXQncyBFbmNyeXB0MSQwIgYDVQQD
ExsoU1RBR0lORykgRXJzYXR6IEVkYW1hbWUgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
IgNiAAT9v/PJUtHOTk28nXCXrpP665vI4Z094h8o7R+5E6yNajZa0UubqjpZFoGq
u785/vGXj6mdfIzc9boITGusZCSWeMj5ySMZGZkS+VSvf8VQqj+3YdEu4PLZEjBA
ivRFpEejggEQMIIBDDAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUH
AwIGCCsGAQUFBwMBMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOv5JcKA
KGbibQiSMvPC4a3D/zVFMB8GA1UdIwQYMBaAFN7Ro1lkDsGaNqNG7rAQdu+ul5Vm
MDYGCCsGAQUFBwEBBCowKDAmBggrBgEFBQcwAoYaaHR0cDovL3N0Zy14Mi5pLmxl
bmNyLm9yZy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3N0Zy14Mi5jLmxlbmNy
Lm9yZy8wIgYDVR0gBBswGTAIBgZngQwBAgEwDQYLKwYBBAGC3xMBAQEwCgYIKoZI
zj0EAwMDaAAwZQIwXcZbdgxcGH9rTErfSTkXfBKKygU0yO7OpbuNeY1id0FZ/hRY
N5fdLOGuc+aHfCsMAjEA0P/xwKr6NQ9MN7vrfGAzO397PApdqfM7VdFK18aEu1xm
3HMFKzIR8eEPsMx4smMl
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEqzCCApOgAwIBAgIRAIvhKg5ZRO08VGQx8JdhT+UwDQYJKoZIhvcNAQELBQAw
GjEYMBYGA1UEAwwPRmFrZSBMRSBSb290IFgxMB4XDTE2MDUyMzIyMDc1OVoXDTM2
MDUyMzIyMDc1OVowIjEgMB4GA1UEAwwXRmFrZSBMRSBJbnRlcm1lZGlhdGUgWDEw
ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtWKySDn7rWZc5ggjz3ZB0
8jO4xti3uzINfD5sQ7Lj7hzetUT+wQob+iXSZkhnvx+IvdbXF5/yt8aWPpUKnPym
oLxsYiI5gQBLxNDzIec0OIaflWqAr29m7J8+NNtApEN8nZFnf3bhehZW7AxmS1m0
ZnSsdHw0Fw+bgixPg2MQ9k9oefFeqa+7Kqdlz5bbrUYV2volxhDFtnI4Mh8BiWCN
xDH1Hizq+GKCcHsinDZWurCqder/afJBnQs+SBSL6MVApHt+d35zjBD92fO2Je56
dhMfzCgOKXeJ340WhW3TjD1zqLZXeaCyUNRnfOmWZV8nEhtHOFbUCU7r/KkjMZO9
AgMBAAGjgeMwgeAwDgYDVR0PAQH/BAQDAgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAw
HQYDVR0OBBYEFMDMA0a5WCDMXHJw8+EuyyCm9Wg6MHoGCCsGAQUFBwEBBG4wbDA0
BggrBgEFBQcwAYYoaHR0cDovL29jc3Auc3RnLXJvb3QteDEubGV0c2VuY3J5cHQu
b3JnLzA0BggrBgEFBQcwAoYoaHR0cDovL2NlcnQuc3RnLXJvb3QteDEubGV0c2Vu
Y3J5cHQub3JnLzAfBgNVHSMEGDAWgBTBJnSkikSg5vogKNhcI5pFiBh54DANBgkq
hkiG9w0BAQsFAAOCAgEABYSu4Il+fI0MYU42OTmEj+1HqQ5DvyAeyCA6sGuZdwjF
UGeVOv3NnLyfofuUOjEbY5irFCDtnv+0ckukUZN9lz4Q2YjWGUpW4TTu3ieTsaC9
AFvCSgNHJyWSVtWvB5XDxsqawl1KzHzzwr132bF2rtGtazSqVqK9E07sGHMCf+zp
DQVDVVGtqZPHwX3KqUtefE621b8RI6VCl4oD30Olf8pjuzG4JKBFRFclzLRjo/h7
IkkfjZ8wDa7faOjVXx6n+eUQ29cIMCzr8/rNWHS9pYGGQKJiY2xmVC9h12H99Xyf
zWE9vb5zKP3MVG6neX1hSdo7PEAb9fqRhHkqVsqUvJlIRmvXvVKTwNCP3eCjRCCI
PTAvjV+4ni786iXwwFYNz8l3PmPLCyQXWGohnJ8iBm+5nk7O2ynaPVW0U2W+pt2w
SVuvdDM5zGv2f9ltNWUiYZHJ1mmO97jSY/6YfdOUH66iRtQtDkHBRdkNBsMbD+Em
2TgBldtHNSJBfB3pm9FblgOcJ0FSWcUDWJ7vO0+NTXlgrRofRT6pVywzxVo6dND0
WzYlTWeUVsO40xJqhgUQRER9YLOLxJ0O6C8i0xFxAMKOtSdodMB3RIwt7RFQ0uyt
n5Z5MqkYhlMI3J1tPRTp1nEt9fyGspBOO05gi148Qasp+3N+svqKomoQglNoAxU=
-----END CERTIFICATE-----