Compare commits

...

59 Commits

Author SHA1 Message Date
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
bea552de6a v3.2.1 2021-02-07 01:15:14 +02:00
419f3cddc4 Merge pull request #106 from balena-io/update-codeowners
Add Matt and Paulo to CODEOWNERS
2021-02-06 23:13:38 +00:00
b92a3c8092 v3.2.0 2021-01-29 17:55:27 +02:00
746be65846 Add Matt and Paulo to CODEOWNERS
Change-type: patch
2021-01-29 15:54:49 +00:00
6250c85551 Merge pull request #105 from balena-io/update-services
Update services
2021-01-29 15:53:14 +00:00
3898342a5b Update services
Update open-balena-api from 0.109.2 to 0.119.5
Update balena-mdns-publisher from 1.7.9 to 1.9.2
Update open-balena-registry from 2.13.11 to 2.14.4
Update open-balena-vpn from 9.16.1 to 9.17.4

Change-type: minor
2021-01-29 17:34:31 +02:00
ab0b7467fd v3.1.4 2021-01-29 17:18:53 +02:00
7cdce1a1c7 Merge pull request #104 from balena-io/close-port-3128
SECURITY: Close port 3128
2021-01-29 15:16:55 +00:00
da4c1678ec SECURITY: Close tunneling port (3128)
Port 3128, which was used for tunneling into devices, was plain TCP and has now been closed. Tunnelling is now via `tunnel.mydomain.com:443` (see #101). balena-cli versions before v12.38.5 are now incompatible and using the tunnel command will throw an error.

Refs: #101
Change-type: patch
2021-01-29 17:13:19 +02:00
6fdc700806 v3.1.3 2021-01-26 14:14:42 +02:00
e6d0be1c74 Merge pull request #103 from balena-io/edit-codeowners
Remove Rich from CODEOWNERS
2021-01-26 12:12:15 +00:00
a0ef371621 Remove Rich from CODEOWNERS
Change-type: patch
2021-01-26 13:30:04 +02:00
cd98a0df3f v3.1.2 2021-01-22 16:10:08 +02:00
296a746e96 Merge pull request #101 from balena-io/switch-tunnel-to-tls
tunnel: Expose tunnel service via TLS
2021-01-22 14:08:00 +00:00
b3d184c13c tunnel: Expose tunnel service via TLS
In order to support the new CLI and balenaCloud deployment
schemes for the tunnel service, the service is now exposed via
the TLS port 443 on the `tunnel.{domain}` server name.

Change-type: patch
Signed-off-by: Rich Bayliss <rich@balena.io>
2021-01-22 11:55:33 +00:00
3b9433e9cc v3.1.1 2020-11-10 17:59:55 +02:00
763da0eb45 Merge pull request #97 from balena-io/update-versions
Update open-balena-api
2020-11-10 15:57:48 +00:00
bfce474ff0 Update open-balena-api
Fixes a bug with a migration that would keep obsolete DB columns around and prevent creation of applications and devices.

See https://github.com/balena-io/open-balena-api/pull/507

Fixes #94 #95

Change-type: patch
2020-11-10 17:54:33 +02:00
308322f774 v3.1.0 2020-11-03 18:22:26 +02:00
c2077e5037 Merge pull request #96 from balena-io/set-default-bucket-prefix-images
Change S3 OS images folder from resinos to images
2020-11-03 16:20:37 +00:00
7790290d0e Change S3 OS images folder from resinos to images
Change-type: minor
Signed-off-by: Stevche Radevski <stevche@balena.io>
2020-11-03 17:15:14 +01:00
857e6b3bd7 v3.0.1 2020-10-29 13:43:03 +02:00
cbee20731b Merge pull request #93 from balena-io/update-api
Update the API fixing an issue with migrations
2020-10-29 11:41:04 +00:00
eec16b843d Update the API fixing an issue with migrations
When updating from previous versions, the API will fail to execute the database migrations. This updates the API version to include a fix for this.

Change-type: patch
2020-10-29 13:35:30 +02:00
a3126359e0 v3.0.0 2020-10-28 14:17:36 +02:00
6438da8498 Merge pull request #88 from balena-io/v3
Update versions of services
2020-10-28 12:16:01 +00:00
1f7ed769c0 Update versions of services
Change-type: major
2020-10-28 14:06:47 +02:00
41b1800166 Reorder README sections to bring “Getting Started” further up 2020-10-28 13:10:18 +02:00
77e3cfcdb6 v2.0.5 2020-10-12 14:42:08 +03:00
d3f11819ce Merge pull request #89 from balena-io/comparison-table
docs: add table comparing features of openBalena and balenaCloud
2020-10-12 11:40:27 +00:00
3816f09bc4 v2.0.4 2020-10-08 23:23:24 +03:00
7154c5903f Merge pull request #90 from balena-io/cli-incompatibility
docs: note that balenaCLI is incompatible >12.2.2
2020-10-08 20:21:43 +00:00
71a692b28b docs: note that balenaCLI is incompatible >12.2.2
Connects-to: #85
Change-type: patch
Signed-off-by: Matthew McGinn <matthew@balena.io>
2020-10-08 15:35:02 -04:00
feeb830405 docs: add table comparing features of openBalena and balenaCloud
Connects-to: #62
Change-type: patch
Signed-off-by: Matthew McGinn <matthew@balena.io>
2020-10-08 17:11:56 +00:00
eb262fe9a2 v2.0.3 2020-06-01 12:41:28 +03:00
6db5e59958 Merge pull request #79 from balena-io/add-balenaos-version
docs: Add PSA about balenaOS version breakage
2020-06-01 09:39:28 +00:00
d33560755f docs: Add PSA about balenaOS version breakage
Due to a change in the balena-supervisor codebase, only balenaOS
versions <= 2.49.0 are working with open-balena.

This documentation change is a band-aid while we resolve the issue.

Change-type: patch
Signed-off-by: Rich Bayliss <rich@balena.io>
2020-06-01 10:35:00 +01:00
f427982714 v2.0.2 2020-04-03 16:56:38 +03:00
b99e497ac9 Merge pull request #75 from Langhalsdino/patch-1
Add units to the default timeouts in haproxy.cfg
2020-04-03 16:54:57 +03:00
de0293563f Added units to haproxy.cfg default timeouts
I added unit 's' (second) to the default timeouts in order to make them more readable.

Change-type: patch
2020-03-27 15:43:11 +01:00
17419557a5 v2.0.1 2020-01-17 12:30:31 +02:00
c58ee37f17 Merge pull request #65 from balena-io/cert-provider-update
cert-provider: Update to support ACMEv2 on staging provider
2020-01-17 10:28:43 +00:00
d67e29223f cert-provider: Update to support ACMEv2 on staging provider
Acquiring a staging certificiate from LetsEncrypt was failing, so acme.sh was
updated to version 2.8.5, which includes support for using ACMEv2 on the
LetsEncrypt servers.

Changes to the state flow to make access retries infinite as it became apparent
that in some scenarios the certificate acquisition could fail to occur due to
containers taking longer to become accessible.

Change-type: patch
Signed-off-by: Rich Bayliss <rich@balena.io>
2020-01-17 10:24:43 +00:00
12 changed files with 6806 additions and 60 deletions

2
.github/CODEOWNERS vendored
View File

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -25,42 +25,25 @@ To learn more about openBalena, visit [balena.io/open][open-balena-website].
- **Built-in VPN**: Access your devices regardless of their network environment
## 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
## 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].
## Getting Started
Our [Getting Started][getting-started] guide is the most direct path to getting
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:
- balenaOS v2.58.3
- balena CLI v12.38.5
If you are updating from previous openBalena versions, ensure you update the balena
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
While we're still working on the project documentation, please refer to the
@ -89,6 +72,54 @@ 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 |
| 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.
## License
OpenBalena is licensed under the terms of AGPL v3. See [LICENSE](LICENSE) for details.

View File

@ -1 +1 @@
2.0.0
3.4.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

@ -22,7 +22,7 @@ services:
# the resin backend (eg. that for BALENA_ROOT_CA if present).
MDNS_TLD: ${OPENBALENA_HOST_NAME}
# List of subdomains to advertise. This must include all required hosts.
MDNS_SUBDOMAINS: '["api", "db", "registry", "s3", "vpn"]'
MDNS_SUBDOMAINS: '["api", "db", "registry", "s3", "tunnel", "vpn"]'
# The expectation is the DBus socket to use is always at the following location.
DBUS_SESSION_BUS_ADDRESS: "unix:path=/host/run/dbus/system_bus_socket"
# Selects the interface used for incoming connections from the wider subnet.

View File

@ -32,7 +32,7 @@ services:
HOST: api.${OPENBALENA_HOST_NAME}
IMAGE_MAKER_URL: img.${OPENBALENA_HOST_NAME}
IMAGE_STORAGE_BUCKET: resin-production-img-cloudformation
IMAGE_STORAGE_PREFIX: resinos
IMAGE_STORAGE_PREFIX: images
IMAGE_STORAGE_ENDPOINT: s3.amazonaws.com
JSON_WEB_TOKEN_EXPIRY_MINUTES: 10080
JSON_WEB_TOKEN_SECRET: ${OPENBALENA_JWT_SECRET}
@ -85,6 +85,7 @@ services:
REGISTRY2_S3_SECRET: ${OPENBALENA_S3_SECRET_KEY}
REGISTRY2_SECRETKEY: ${OPENBALENA_REGISTRY_SECRET_KEY}
REGISTRY2_STORAGEPATH: /data
REGISTRY2_DISABLE_REDIRECT: "false"
vpn:
extends:
@ -154,9 +155,9 @@ services:
ports:
- "80:80"
- "443:443"
- "3128:3128"
expose:
- "222"
- "3128"
- "5432"
- "6379"
networks:
@ -168,6 +169,7 @@ services:
- db.${OPENBALENA_HOST_NAME}
- s3.${OPENBALENA_HOST_NAME}
- redis.${OPENBALENA_HOST_NAME}
- tunnel.${OPENBALENA_HOST_NAME}
environment:
BALENA_HAPROXY_CRT: ${OPENBALENA_ROOT_CRT}
BALENA_HAPROXY_KEY: ${OPENBALENA_ROOT_KEY}
@ -183,5 +185,5 @@ services:
- cert-provider:/usr/src/app/certs
environment:
ACTIVE: ${OPENBALENA_ACME_CERT_ENABLED}
DOMAINS: "api.${OPENBALENA_HOST_NAME},registry.${OPENBALENA_HOST_NAME},s3.${OPENBALENA_HOST_NAME},vpn.${OPENBALENA_HOST_NAME}"
DOMAINS: "api.${OPENBALENA_HOST_NAME},registry.${OPENBALENA_HOST_NAME},s3.${OPENBALENA_HOST_NAME},vpn.${OPENBALENA_HOST_NAME},tunnel.${OPENBALENA_HOST_NAME}"
OUTPUT_PEM: /certs/open-balena.pem

View File

@ -1,6 +1,6 @@
export OPENBALENA_API_VERSION_TAG=v0.19.5
export OPENBALENA_DB_VERSION_TAG=v2.0.3
export OPENBALENA_MDNS_PUBLISHER_VERSION_TAG=v1.6.2
export OPENBALENA_REGISTRY_VERSION_TAG=v2.11.1
export OPENBALENA_S3_VERSION_TAG=v2.8.5
export OPENBALENA_VPN_VERSION_TAG=v8.10.0
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.16.1
export OPENBALENA_S3_VERSION_TAG=v2.9.9
export OPENBALENA_VPN_VERSION_TAG=v9.17.11

View File

@ -6,9 +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
RUN git clone https://github.com/Neilpang/acme.sh.git && \
cd acme.sh && \
git checkout 08357e3cb0d80c84bdaf3e42ce0e439665387f57 . && \
git fetch && git fetch --tags && \
git checkout 2.8.5 . && \
./acme.sh --install \
--cert-home /usr/src/app/certs

View File

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
# the acme.sh client script, installed via Git in the Dockerfile...
ACME_BIN="$(realpath ~/.acme.sh/acme.sh)"
@ -45,14 +45,20 @@ retryWithDelay() {
DELAY=${3:-5}
local ATTEMPT=0
while [ $RETRIES -gt $ATTEMPT ]; do
let "ATTEMPT++"
while [ "$RETRIES" -gt "$ATTEMPT" ]; do
(( ATTEMPT++ ))
logInfo "($ATTEMPT/$RETRIES) Connecting..."
if $1; then
logInfo "($ATTEMPT/$RETRIES) Success!"
return $?
fi
echo "($ATTEMPT/$RETRIES) Retrying in ${DELAY} seconds..."
sleep $DELAY
if [ "$RETRIES" -gt "$ATTEMPT" ]; then
logInfo "($ATTEMPT/$RETRIES) Failed. Retrying in ${DELAY} seconds..."
sleep "$DELAY"
else
logInfo "($ATTEMPT/$RETRIES) Failed!"
fi
done
return 1
@ -62,7 +68,7 @@ waitForOnline() {
ADDRESS="${1,,}"
logInfo "Waiting for ${ADDRESS} to be available via HTTP..."
retryWithDelay "curl --output /dev/null --silent --head --fail http://${ADDRESS}" 6 5
retryWithDelay "curl --output /dev/null --silent --head --fail --max-time 5 http://${ADDRESS}"
}
isUsingStagingCert() {
@ -167,7 +173,10 @@ acquireCertificate() {
pre-flight || logErrorAndStop "Unable to continue due to misconfiguration. See errors above."
waitForOnline "${ACME_DOMAINS[0]}" || logErrorAndStop "Unable to access ${ACME_DOMAINS[0]} on port 80. This is needed for certificate validation."
while ! waitForOnline "${ACME_DOMAINS[0]}"; do
logInfo "Unable to access ${ACME_DOMAINS[0]} on port 80. This is needed for certificate validation. Retrying in 30 seconds..."
sleep 30
done
if ! lastAcquiredCertFor "production"; then
acquireCertificate "staging" || logErrorAndStop "Unable to acquire a staging certificate."

View File

@ -2,9 +2,9 @@ global
tune.ssl.default-dh-param 1024
defaults
timeout connect 5000
timeout client 50000
timeout server 50000
timeout connect 5s
timeout client 50s
timeout server 50s
frontend http-in
mode http
@ -34,6 +34,10 @@ frontend ssl-in
tcp-request content accept if { req.ssl_hello_type 1 }
acl is_ssl req.ssl_ver 2:3.4
acl host_tunnel req_ssl_sni -i "tunnel.${HAPROXY_HOSTNAME}"
use_backend redirect-to-tunnel-in if host_tunnel
use_backend redirect-to-https-in if is_ssl
use_backend vpn-devices if !is_ssl
@ -42,6 +46,11 @@ backend redirect-to-https-in
balance roundrobin
server localhost 127.0.0.1:444 send-proxy-v2
backend redirect-to-tunnel-in
mode tcp
balance roundrobin
server localhost 127.0.0.1:3129
frontend https-in
mode http
option forwardfor
@ -118,3 +127,8 @@ listen vpn-tunnel
mode tcp
bind *:3128
server balena_vpn vpn:3128 check port 3128
listen vpn-tunnel-tls
mode tcp
bind *:3129 ssl crt /etc/ssl/private/open-balena.pem
server balena_vpn vpn:3128 check port 3128