when I try to preload an Image I get following Error:
[debug] new argv=[/home/holger/balena-cli/balena,/snapshot/versioned- source/bin/balena,preload,balena-cloud-raspberrypi4-64-2.69.1+rev1-v12.3.5.img,--app,eis-rpi4,-- commit,current,--splash-image,../eis-balena/image/splash.png] length=10
Building Docker preloader image. [=== ] 12%
Step 1/7 : FROM docker:17.12.0-ce-dind
Building Docker preloader image. [====== ] 25%
Step 2/7 : RUN apk update && apk add --no-cache python3 parted btrfs-progs util-linux sfdisk file coreutils sgdisk
---> Using cache
Building Docker preloader image. [========= ] 37%
Step 3/7 : COPY ./requirements.txt /tmp/
---> Using cache
Building Docker preloader image. [============ ] 50%
Step 4/7 : RUN pip3 install -r /tmp/requirements.txt
---> Using cache
Building Docker preloader image. [=============== ] 62%
Step 5/7 : COPY ./src /usr/src/app
---> Using cache
Building Docker preloader image. [================== ] 75%
Step 6/7 : WORKDIR /usr/src/app
---> Using cache
Building Docker preloader image. [===================== ] 87%
Step 7/7 : CMD ["python3", "/usr/src/app/preload.py"]
---> Using cache
---> cce425548fb6
Successfully built cce425548fb6
Building Docker preloader image. [========================] 100%
| Checking that the image is a writable file
| Finding a free tcp port and getting balena settings
| Checking if the image is an edison zip archive
| Creating preloader container
/ Starting preloader container
- Fetching application admin/eis-rpi4
| Reading image informationWaiting for Docker to start...
\ Reading image informationDocker started
- Reading image information
/ Fetching application 1
/ Estimating required additional space
| Cleaning up temporary files
Error [ERR_TLS_CERT_ALTNAME_INVALID]: Hostname/IP does not match certificate's altnames: Host: registry2.xxx.de. is not in the cert's altnames: DNS:api.xxx.de, DNS:registry.xxx.de, DNS:s3.xxx.de, DNS:vpn.xxx.de
RequestError: Error [ERR_TLS_CERT_ALTNAME_INVALID]: Hostname/IP does not match certificate's altnames: Host: registry2.xxx.de. is not in the cert's altnames: DNS:api.xxx.de, DNS:registry.eis-cloud.einsatzverwaltung.de, DNS:s3.xxx.de, DNS:vpn.xxx.de
at new RequestError (/snapshot/versioned-source/node_modules/request-promise- core/lib/errors.js:14:15)
at Request.<anonymous> (/snapshot/versioned-source/node_modules/request-promise- core/lib/plumbing.js:87:29)
at Request.RP$callback [as _callback] (/snapshot/versioned-source/node_modules/request- promise-core/lib/plumbing.js:46:31)
at /snapshot/versioned-source/node_modules/request/request.js:185:22
at Request.emit (events.js:315:20)
at Request.EventEmitter.emit (domain.js:482:12)
at Request.onRequestError (/snapshot/versioned-source/node_modules/request/request.js:877:8)
at ClientRequest.emit (events.js:327:22)
at ClientRequest.EventEmitter.emit (domain.js:482:12)
at TLSSocket.socketErrorListener (_http_client.js:426:9)
at TLSSocket.emit (events.js:315:20)
at TLSSocket.EventEmitter.emit (domain.js:482:12)
at emitErrorNT (internal/streams/destroy.js:92:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
From previous event:
at Request.<anonymous> (/snapshot/versioned-source/node_modules/request-promise- core/lib/plumbing.js:36:28)
at Request.RP$initInterceptor [as init] (/snapshot/versioned-source/node_modules/request- promise-core/configure/request2.js:41:27)
at new Request (/snapshot/versioned-source/node_modules/request/request.js:127:8)
at request (/snapshot/versioned-source/node_modules/request/index.js:53:10)
at Preloader.registry (/snapshot/versioned-source/node_modules/balena- preload/build/preload.js:406:22)
at /snapshot/versioned-source/node_modules/balena-preload/build/preload.js:446:51
at processImmediate (internal/timers.js:456:21)
at process.topLevelDomainCallback (domain.js:137:15)
Why does it try to download the image from DNS Subdomain registry2 instead of registry?
It’s version 12.40.0 of balena-cli with current openBalena Server.
Just experienced a similar issue. The Get Started guide still specifies to point registry. not registry2. Should we be updating? I imagine this is more likely a bug?
After searching the issues, it looks like Balena cloud points to registry2, but OpenBalena has always been registry.
Tried with both 12.40.0 and 12.40.2 (the latest):
Error: getaddrinfo ENOTFOUND registry2.xx registry2.xx:443
RequestError: Error: getaddrinfo ENOTFOUND registry2.xx registry2.xx:443
at new RequestError (/usr/local/lib/balena-cli/node_modules/request-promise-core/lib/errors.js:14:15)
at Request.plumbing.callback (/usr/local/lib/balena-cli/node_modules/request-promise-core/lib/plumbing.js:87:29)
at Request.RP$callback [as _callback] (/usr/local/lib/balena-cli/node_modules/request-promise-core/lib/plumbing.js:46:31)
at self.callback (/usr/local/lib/balena-cli/node_modules/request/request.js:185:22)
at Request.emit (events.js:198:13)
at Request.EventEmitter.emit (domain.js:448:20)
at Request.onRequestError (/usr/local/lib/balena-cli/node_modules/request/request.js:877:8)
at ClientRequest.emit (events.js:203:15)
at ClientRequest.EventEmitter.emit (domain.js:448:20)
at TLSSocket.socketErrorListener (_http_client.js:401:9)
at TLSSocket.emit (events.js:198:13)
at TLSSocket.EventEmitter.emit (domain.js:448:20)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at process._tickCallback (internal/process/next_tick.js:63:19)
From previous event:
at Request.plumbing.init (/usr/local/lib/balena-cli/node_modules/request-promise-core/lib/plumbing.js:36:28)
at Request.RP$initInterceptor [as init] (/usr/local/lib/balena-cli/node_modules/request-promise-core/configure/request2.js:41:27)
at new Request (/usr/local/lib/balena-cli/node_modules/request/request.js:127:8)
at request (/usr/local/lib/balena-cli/node_modules/request/index.js:53:10)
at Preloader.registry (/usr/local/lib/balena-cli/node_modules/balena-preload/build/preload.js:406:22)
at Bluebird.map (/usr/local/lib/balena-cli/node_modules/balena-preload/build/preload.js:446:51)
at runCallback (timers.js:705:18)
at tryOnImmediate (timers.js:676:5)
at processImmediate (timers.js:658:5)
at process.topLevelDomainCallback (domain.js:126:23)
If you have a way to inspect the database, it’d be useful to see the name the images of the release you’re trying to preload get stored with. The database table is image, the column is stored at-image location.
Hmm, and I might be having some other issues, related or not I’m not sure. This is the last entry from haproxy, seems the backend may never have come up.
haproxy_1 | [WARNING] 056/203449 (11) : Server backend_api/balena_api_1 is DOWN, reason: Layer4 connection problem, info: "Connection refused", check duration: 0ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue.
haproxy_1 | [ALERT] 056/203449 (11) : backend 'backend_api' has no server available!
*Correction on the above. It does come up, but then seems to fall over again the following day.
Hi there, if you check the compose file that created your openBalena instance, it probably only mentionsregistry.. You could try to modify DOMAINS and add registry2. along side of registry., so that both are accepted (as well as add appropriate DNS entry).
I would try setting this to registry2… as well as adding the DNS entry and the additional domain here and see if that gets around the preload issue.
Had a look at trying to inspect the database today, but a bit beyond me I’m afraid. /var/lib/postgresql/data seems to be the mount point for it in the db container? Would need some pointers on best way to go about it if it’s going to be necessary for debugging, my apologies.
Went down again today, still doing so every few days. I’m hoping I am not conflating issues here, this may or may not be related to the registry issue. Will keep them together here for now until we can identify if it is or not.
This time, I managed to locate the following error in the journalctl logs of balena/open-balena-api:v0.119.5. The container is still running, as is every other container, but it is non-responsive on mydomain.com/ping where I usually monitor the server status. It had just been idling, no action taken to trigger the error:
Mar 12 18:21:19 41d36e52e116 api[982]: )) [ 2021-03-12T18:21:19.126Z, 68 ]
Mar 12 18:21:19 41d36e52e116 api[982]: 2021-03-12T18:21:19.135Z 172.20.0.8 s/vpn PATCH /resin/service_instance(68) 200 34.843ms -
Mar 12 18:21:28 41d36e52e116 kernel: [UFW BLOCK] IN=eth0 OUT= MAC=96:00:00:7a:73:5b:d2:74:7f:6e:37:e3:08:00 SRC=103.89.88.99 DST=my-ip LEN=40 TOS=0x00 PREC=0x00 TTL=238 ID=22434 PROTO=TCP SPT=51346 DPT=3741 WINDOW=1024 RES=0x00 SYN URGP=0
Mar 12 18:21:29 41d36e52e116 api[982]: Parsing GET /Auth/permission?$select=name&$filter=(is_of__api_key/any(khp:khp/api_key/any(k:k/key eq @apiKey))) or (is_of__role/any(rhp:rhp/role/any(r:r/is_of__api_key/any(khr:khr/api_key/any(k:k/key eq @apiKey)))))&$orderby=name asc&@apiKey='hidden-the-key'
Mar 12 18:21:29 41d36e52e116 api[982]: Running GET /Auth/permission?$select=name&$filter=(is_of__api_key/any(khp:khp/api_key/any(k:k/key eq @apiKey))) or (is_of__role/any(rhp:rhp/role/any(r:r/is_of__api_key/any(khr:khr/api_key/any(k:k/key eq @apiKey)))))&$orderby=name asc&@apiKey='hidden-the-key'
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT "permission"."name"
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "permission"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE (EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "api key-has-permission" AS "permission.api key-has-permission"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission"."id" = "permission.api key-has-permission"."permission"
Mar 12 18:21:29 41d36e52e116 api[982]: AND EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "api key" AS "permission.api key-has-permission.api key"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission.api key-has-permission"."api key" = "permission.api key-has-permission.api key"."id"
Mar 12 18:21:29 41d36e52e116 api[982]: AND ("permission.api key-has-permission.api key"."key") IS NOT NULL AND ("permission.api key-has-permission.api key"."key") = ($1)
Mar 12 18:21:29 41d36e52e116 api[982]: )
Mar 12 18:21:29 41d36e52e116 api[982]: )
Mar 12 18:21:29 41d36e52e116 api[982]: OR EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "role-has-permission" AS "permission.role-has-permission"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission"."id" = "permission.role-has-permission"."permission"
Mar 12 18:21:29 41d36e52e116 api[982]: AND EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "role" AS "permission.role-has-permission.role"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission.role-has-permission"."role" = "permission.role-has-permission.role"."id"
Mar 12 18:21:29 41d36e52e116 api[982]: AND EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "api key-has-role" AS "permission.role-has-permission.role.api key-has-role"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission.role-has-permission.role"."id" = "permission.role-has-permission.role.api key-has-role"."role"
Mar 12 18:21:29 41d36e52e116 api[982]: AND EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "api key" AS "permission.role-has-permission.role.api key-has-role.api key"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission.role-has-permission.role.api key-has-role"."api key" = "permission.role-has-permission.role.api key-has-role.api key"."id"
Mar 12 18:21:29 41d36e52e116 api[982]: AND ("permission.role-has-permission.role.api key-has-role.api key"."key") IS NOT NULL AND ("permission.role-has-permission.role.api key-has-role.api key"."key") = ($1)
Mar 12 18:21:29 41d36e52e116 api[982]: )
Mar 12 18:21:29 41d36e52e116 api[982]: )
Mar 12 18:21:29 41d36e52e116 api[982]: )
Mar 12 18:21:29 41d36e52e116 api[982]: ))
Mar 12 18:21:29 41d36e52e116 api[982]: ORDER BY "permission"."name" ASC [ 'hidden-the-key' ]
Mar 12 18:21:29 41d36e52e116 api[982]: Parsing GET /Auth/api_key(key=@apiKey)?$select=is_of__actor&@apiKey='hidden-the-key'
Mar 12 18:21:29 41d36e52e116 api[982]: Running GET /Auth/api_key(key=@apiKey)?$select=is_of__actor&@apiKey='hidden-the-key'
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT "api key"."is of-actor" AS "is_of__actor"
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "api key"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE ("api key"."key") IS NOT NULL AND ("api key"."key") = ($1) [ 'hidden-the-key' ]
Mar 12 18:21:29 41d36e52e116 api[982]: Parsing PATCH /resin/service_instance(68)
Mar 12 18:21:29 41d36e52e116 api[982]: Parsing GET /Auth/permission?$select=name&$filter=(is_of__api_key/any(khp:khp/api_key/any(k:k/key eq @apiKey))) or (is_of__role/any(rhp:rhp/role/any(r:r/is_of__api_key/any(khr:khr/api_key/any(k:k/key eq @apiKey)))))&$orderby=name asc&@apiKey='hidden-the-key'
Mar 12 18:21:29 41d36e52e116 api[982]: Running GET /Auth/permission?$select=name&$filter=(is_of__api_key/any(khp:khp/api_key/any(k:k/key eq @apiKey))) or (is_of__role/any(rhp:rhp/role/any(r:r/is_of__api_key/any(khr:khr/api_key/any(k:k/key eq @apiKey)))))&$orderby=name asc&@apiKey='hidden-the-key'
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT "permission"."name"
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "permission"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE (EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "api key-has-permission" AS "permission.api key-has-permission"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission"."id" = "permission.api key-has-permission"."permission"
Mar 12 18:21:29 41d36e52e116 api[982]: AND EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "api key" AS "permission.api key-has-permission.api key"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission.api key-has-permission"."api key" = "permission.api key-has-permission.api key"."id"
Mar 12 18:21:29 41d36e52e116 api[982]: AND ("permission.api key-has-permission.api key"."key") IS NOT NULL AND ("permission.api key-has-permission.api key"."key") = ($1)
Mar 12 18:21:29 41d36e52e116 api[982]: )
Mar 12 18:21:29 41d36e52e116 api[982]: )
Mar 12 18:21:29 41d36e52e116 api[982]: OR EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "role-has-permission" AS "permission.role-has-permission"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission"."id" = "permission.role-has-permission"."permission"
Mar 12 18:21:29 41d36e52e116 api[982]: AND EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "role" AS "permission.role-has-permission.role"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission.role-has-permission"."role" = "permission.role-has-permission.role"."id"
Mar 12 18:21:29 41d36e52e116 api[982]: AND EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "api key-has-role" AS "permission.role-has-permission.role.api key-has-role"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission.role-has-permission.role"."id" = "permission.role-has-permission.role.api key-has-role"."role"
Mar 12 18:21:29 41d36e52e116 api[982]: AND EXISTS (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT 1
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "api key" AS "permission.role-has-permission.role.api key-has-role.api key"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE "permission.role-has-permission.role.api key-has-role"."api key" = "permission.role-has-permission.role.api key-has-role.api key"."id"
Mar 12 18:21:29 41d36e52e116 api[982]: AND ("permission.role-has-permission.role.api key-has-role.api key"."key") IS NOT NULL AND ("permission.role-has-permission.role.api key-has-role.api key"."key") = ($1)
Mar 12 18:21:29 41d36e52e116 api[982]: )
Mar 12 18:21:29 41d36e52e116 api[982]: )
Mar 12 18:21:29 41d36e52e116 api[982]: )
Mar 12 18:21:29 41d36e52e116 api[982]: ))
Mar 12 18:21:29 41d36e52e116 api[982]: ORDER BY "permission"."name" ASC [ 'hidden-the-key' ]
Mar 12 18:21:29 41d36e52e116 api[982]: Parsing GET /Auth/api_key(key=@apiKey)?$select=is_of__actor&@apiKey='hidden-the-key'
Mar 12 18:21:29 41d36e52e116 api[982]: Running GET /Auth/api_key(key=@apiKey)?$select=is_of__actor&@apiKey='hidden-the-key'
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT "api key"."is of-actor" AS "is_of__actor"
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "api key"
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE ("api key"."key") IS NOT NULL AND ("api key"."key") = ($1) [ 'hidden-the-key' ]
Mar 12 18:21:29 41d36e52e116 api[982]: Running PATCH /resin/service_instance(68)
Mar 12 18:21:29 41d36e52e116 api[982]: UPDATE "service instance"
Mar 12 18:21:29 41d36e52e116 api[982]: SET "last heartbeat" = $1
Mar 12 18:21:29 41d36e52e116 api[982]: WHERE ("service instance"."id") IS NOT NULL AND ("service instance"."id") = ($2)
Mar 12 18:21:29 41d36e52e116 api[982]: AND "service instance"."id" IN ((
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT "service instance"."id"
Mar 12 18:21:29 41d36e52e116 api[982]: FROM (
Mar 12 18:21:29 41d36e52e116 api[982]: SELECT "service instance"."created at", "service instance"."modified at", "service instance"."id", "service instance"."service type", "service instance"."ip address", "service instance"."last heartbeat"
Mar 12 18:21:29 41d36e52e116 api[982]: FROM "service instance"
Mar 12 18:21:29 41d36e52e116 api[982]: ) AS "service instance"
Mar 12 18:21:29 41d36e52e116 api[982]: )) [ 2021-03-12T18:21:29.177Z, 68 ]
Mar 12 18:21:29 41d36e52e116 api[982]: 2021-03-12T18:21:29.183Z 172.20.0.8 s/vpn PATCH /resin/service_instance(68) 200 27.666ms -
Mar 12 18:21:30 41d36e52e116 api[982]: /usr/src/app/src/features/contracts/contracts-directory.ts:123
Mar 12 18:21:30 41d36e52e116 api[982]: new Error(
Mar 12 18:21:30 41d36e52e116 api[982]: ^
Mar 12 18:21:30 41d36e52e116 api[982]: Error: Invalid response while fetching contracts: Internal Server Error
Mar 12 18:21:30 41d36e52e116 api[982]: at Request.handleResponse [as _callback] (/usr/src/app/src/features/contracts/contracts-directory.ts:123:3)
Mar 12 18:21:30 41d36e52e116 api[982]: at Request.self.callback (/usr/src/app/node_modules/request/request.js:185:22)
Mar 12 18:21:30 41d36e52e116 api[982]: at Request.emit (events.js:327:22)
Mar 12 18:21:30 41d36e52e116 api[982]: at Request.EventEmitter.emit (domain.js:467:12)
Mar 12 18:21:30 41d36e52e116 api[982]: at Request.<anonymous> (/usr/src/app/node_modules/request/request.js:1154:10)
Mar 12 18:21:30 41d36e52e116 api[982]: at Request.emit (events.js:327:22)
Mar 12 18:21:30 41d36e52e116 api[982]: at Request.EventEmitter.emit (domain.js:467:12)
Mar 12 18:21:30 41d36e52e116 api[982]: at IncomingMessage.<anonymous> (/usr/src/app/node_modules/request/request.js:1076:12)
Mar 12 18:21:30 41d36e52e116 api[982]: at Object.onceWrapper (events.js:421:28)
Mar 12 18:21:30 41d36e52e116 api[982]: at IncomingMessage.emit (events.js:327:22)
Mar 12 18:21:30 41d36e52e116 api[982]: at IncomingMessage.EventEmitter.emit (domain.js:467:12)
Mar 12 18:21:30 41d36e52e116 api[982]: at endReadableNT (internal/streams/readable.js:1327:12)
Mar 12 18:21:30 41d36e52e116 api[982]: at processTicksAndRejections (internal/process/task_queues.js:80:21)
Mar 12 18:21:30 41d36e52e116 api[982]: Program node index.js exited with code 1
Is there any pointers on where to go next with this? Should I put together a GitHub issue? Is it reproducible, or something off with my setup? I have been down for some time now, any pointers would be greatly appreciated.
Can you please try adding registry2.${OPENBALENA_HOST_NAME} to your compose manifest and recreate the cert-provider service. This will add another SAN to the certificate, which should hopefully workaround this issue while we work out how to restructure our code bases properly around this. FWIW, there hasn’t really been a registry. for some time, everything now runs on registry2..
@ab77 thanks for the pointer. My main concern was whether this was an issue I was experiencing, or whether it could be recreated. The former meaning it wouldn’t necessarily be resolvable without something more drastic.
@dfunckt I tried what you suggested on my local system running the CLI and the preload has now gone through. Thanks for the workaround.
Not sure how many of the other issues I mentioned above are related to this, will see if they reoccur and open another issue in its own thread if they do.