Problem with Mender server production!

Hi Mender Team,
I’m newbie in Mender and I think I need some help from your guys.
I have set up a mender server production by following the docs Production installation and I want to connect my RPI4 to mender server for deploy purpose. In docs have mention that I need to be made certificates available to Mender Client by include the certificates in the client builds . I check for Build for production and it said include certificates by using layer. I don’t have layer so i create it following this create your own layer and after that I don’t know what I supposed to do next. It really confused when reading the Yocto Docs? How can I build my mender server production with included certificates in mender client which is my RPI4? Sorry, my english is not good. Hope your guys can understand and help me figure out what I have done wrong.
Thanks

1 Like

Update
I now can connect my RPI4 to MenderServer by include server.crt in mender.conf file by hand. Also I have to create artifact_info file by hand to let the server recognize the RPI4.

image

Here is the status of command systemctl status mender-client.service

Dec 02 18:02:56 raspberrypi mender[520]: time=“2020-12-02T18:02:56+07:00” level=warning msg=“Inventory tool /usr/share/mender/inventory/mender-inventory-geo wait failed: exit status 3”
Dec 02 18:02:56 raspberrypi mender[520]: time=“2020-12-02T18:02:56+07:00” level=info msg=“State transition: inventory-update [Sync] -> check-wait [Idle]”
Dec 02 18:02:56 raspberrypi mender[520]: time=“2020-12-02T18:02:56+07:00” level=info msg=“State transition: check-wait [Idle] -> update-check [Sync]”
Dec 02 18:02:58 raspberrypi mender[520]: time=“2020-12-02T18:02:58+07:00” level=info msg=“State transition: update-check [Sync] -> check-wait [Idle]”
Dec 02 18:02:59 raspberrypi mender[520]: time=“2020-12-02T18:02:59+07:00” level=info msg=“State transition: check-wait [Idle] -> inventory-update [Sync]”
Dec 02 18:03:01 raspberrypi mender[520]: time=“2020-12-02T18:03:01+07:00” level=warning msg=“Inventory tool /usr/share/mender/inventory/mender-inventory-geo wait failed: exit status 3”
Dec 02 18:03:01 raspberrypi mender[520]: time=“2020-12-02T18:03:01+07:00” level=warning msg=“Inventory tool /usr/share/mender/inventory/mender-inventory-geo wait failed: exit status 3”
Dec 02 18:03:01 raspberrypi mender[520]: time=“2020-12-02T18:03:01+07:00” level=info msg=“State transition: inventory-update [Sync] -> check-wait [Idle]”
Dec 02 18:03:01 raspberrypi mender[520]: time=“2020-12-02T18:03:01+07:00” level=info msg=“State transition: check-wait [Idle] -> update-check [Sync]”
Dec 02 18:03:02 raspberrypi mender[520]: time=“2020-12-02T18:03:02+07:00” level=info msg=“State transition: update-check [Sync] -> check-wait [Idle]”

Here is the output of command journactl -u mender-client.service

Dec 02 01:17:24 raspberrypi systemd[1]: Started Mender OTA update service.
Dec 02 01:17:25 raspberrypi mender[520]: time=“2020-12-02T01:17:25+07:00” level=info msg=“Loaded configuration file: /var/lib/mender/mender.conf”
Dec 02 01:17:25 raspberrypi mender[520]: time=“2020-12-02T01:17:25+07:00” level=info msg=“Loaded configuration file: /etc/mender/mender.conf”
Dec 02 01:17:25 raspberrypi mender[520]: time=“2020-12-02T01:17:25+07:00” level=info msg=“Mender running on partition: /dev/mmcblk0p2”
Dec 02 01:17:25 raspberrypi mender[520]: time=“2020-12-02T01:17:25+07:00” level=info msg=“State transition: init [none] -> init [none]”
Dec 02 01:17:25 raspberrypi mender[520]: time=“2020-12-02T01:17:25+07:00” level=info msg=“State transition: init [none] -> idle [Idle]”
Dec 02 01:17:25 raspberrypi mender[520]: time=“2020-12-02T01:17:25+07:00” level=info msg=“authorization data present and valid”
Dec 02 01:17:25 raspberrypi mender[520]: time=“2020-12-02T01:17:25+07:00” level=info msg=“State transition: idle [Idle] -> check-wait [Idle]”
Dec 02 01:17:25 raspberrypi mender[520]: time=“2020-12-02T01:17:25+07:00” level=info msg=“State transition: check-wait [Idle] -> inventory-update [Sync]”
Dec 02 01:17:37 raspberrypi mender[520]: time=“2020-12-02T01:17:37+07:00” level=warning msg=“Inventory tool /usr/share/mender/inventory/mender-inventory-geo wait failed: exit status 3”
Dec 02 01:17:37 raspberrypi mender[520]: time=“2020-12-02T01:17:37+07:00” level=warning msg=“Inventory tool /usr/share/mender/inventory/mender-inventory-geo wait failed: exit status 3”
Dec 02 17:47:32 raspberrypi mender[520]: time=“2020-12-02T17:47:32+07:00” level=error msg=“Failed to submit inventory data: Patch https://myserver.com/api/devices/v1/inventory/device/attributes: dial tcp 192.168.0.127:443: connect: no route to host”
Dec 02 17:47:32 raspberrypi mender[520]: time=“2020-12-02T17:47:32+07:00” level=warning msg="Failed to refresh inventory: failed to submit inventory data: inventory submit failed: Patch https://myserver.com/api/devices/v1/inventory/device/attributes: dial
Dec 02 17:47:32 raspberrypi mender[520]: time=“2020-12-02T17:47:32+07:00” level=error msg=“Failed to submit inventory data: Patch https://myserver.com/api/devices/v1/inventory/device/attributes: dial tcp 192.168.0.127:443: connect: no route to host”
Dec 02 17:47:32 raspberrypi mender[520]: time=“2020-12-02T17:47:32+07:00” level=warning msg="Failed to refresh inventory: failed to submit inventory data: inventory submit failed: Patch https://myserver.com/api/devices/v1/inventory/device/attributes: dial
Dec 02 17:47:32 raspberrypi mender[520]: time=“2020-12-02T17:47:32+07:00” level=info msg=“State transition: inventory-update [Sync] -> check-wait [Idle]”
Dec 02 17:47:32 raspberrypi mender[520]: time=“2020-12-02T17:47:32+07:00” level=info msg=“State transition: check-wait [Idle] -> update-check [Sync]”
Dec 02 17:47:35 raspberrypi mender[520]: time=“2020-12-02T17:47:35+07:00” level=error msg="Error receiving scheduled update data: POST update check request failed: Post https://myserver.com/api/devices/v1/deployments/device/deployments/next: dial tcp 192.1
Dec 02 17:47:35 raspberrypi mender[520]: time=“2020-12-02T17:47:35+07:00” level=error msg="Error receiving scheduled update data: POST update check request failed: Post https://myserver.com/api/devices/v1/deployments/device/deployments/next: dial tcp 192.1
Dec 02 17:47:36 raspberrypi mender[520]: time=“2020-12-02T17:47:36+07:00” level=error msg="Update check failed: transient error: POST update check request failed: Post https://myserver.com/api/devices/v1/deployments/device/deployments/next: dial tcp 192.16
Dec 02 17:47:36 raspberrypi mender[520]: time=“2020-12-02T17:47:36+07:00” level=error msg="Update check failed: transient error: POST update check request failed: Post https://myserver.com/api/devices/v1/deployments/device/deployments/next: dial tcp 192.16
Dec 02 17:47:36 raspberrypi mender[520]: time=“2020-12-02T17:47:36+07:00” level=info msg=“State transition: update-check [Sync] -> error [Error]”
Dec 02 17:47:36 raspberrypi mender[520]: time=“2020-12-02T17:47:36+07:00” level=info msg="Handling error state, current error: transient error: POST update check request failed: Post https://myserver.com/api/devices/v1/deployments/device/deployments/next:
Dec 02 17:47:36 raspberrypi mender[520]: time=“2020-12-02T17:47:36+07:00” level=info msg=“State transition: error [Error] -> idle [Idle]”
Dec 02 17:47:36 raspberrypi mender[520]: time=“2020-12-02T17:47:36+07:00” level=info msg=“authorization data present and valid”
Dec 02 17:47:36 raspberrypi mender[520]: time=“2020-12-02T17:47:36+07:00” level=info msg=“State transition: idle [Idle] -> check-wait [Idle]”
Dec 02 17:47:36 raspberrypi mender[520]: time=“2020-12-02T17:47:36+07:00” level=info msg=“State transition: check-wait [Idle] -> inventory-update [Sync]”
Dec 02 17:47:48 raspberrypi mender[520]: time=“2020-12-02T17:47:48+07:00” level=warning msg=“Inventory tool /usr/share/mender/inventory/mender-inventory-geo wait failed: exit status 3”
Dec 02 17:47:48 raspberrypi mender[520]: time=“2020-12-02T17:47:48+07:00” level=warning msg=“Inventory tool /usr/share/mender/inventory/mender-inventory-geo wait failed: exit status 3”

I try to upload file image with .mender extension but when is done it named my image is system1-v1 instead of my original image name?


Hope your guys help me solve this problem
Best regards.

It seems your RpI is not able to contact the server for some reason.:

Dec 02 17:47:32 raspberrypi mender[520]: time=“2020-12-02T17:47:32+07:00” level=error msg=“Failed to submit inventory data: Patch https://myserver.com/api/devices/v1/inventory/device/attributes: dial tcp 192.168.0.127:443: connect: no route to host”

I don’t know why the artifact_info file would not be created automatically if you are using meta-mender with your Yocto build. Do you have all the Mender config variables setup?

Also, it looks like you are trying to use the example server.crt rather than the one you created with your production setup.

Drew

Thanks for reply
Actually I just use Yocto to create a layer instead. I don’t build anything with Yocto. Artifact_info was create by hand. Same with server.crt, I have to change the path in mender.conf by hand, the original the path is demo.crt and you mention Mender config varialbes setup, can you give me some example of that please I think I don’t really understand you. Sorry, my english is not good.

1 Like

Update
When I command mender-inventory-geo can’t run efficient
Does this relate to Error Failed to submit inventory data you have included?

What target distro are you running? You only need to use the Yocto layer if you are doing Yocto builds.

No, the mender-inventory-geo stuff should not affect what you are seeing here.

Hi again

What target distro are you running?

I’m using Centos 7 Minimal 2003 on my workstation and my RPI4 is using Raspbian

You only need to use the Yocto layer if you are doing Yocto builds.

No, I don’t mean to use Yocto, I use Yocto layer because at the end of Task Certificates and Keys of Procution installation is said is needed to include Certificates in client build by add it in layers
My goal is setup a Mender Server by following docs Production installation, connect RPI4 to it ( with server.crt inlcude in mender.conf so i don’t need to change it by hand ) and starting deploy my stuff using my mender server.

No, the mender-inventory-geo stuff should not affect what you are seeing here.

After I move the mender-inventory-geo to another directory the error above is gone when I command systemctl statsus mender-client.service

● mender-client.service - Mender OTA update service
Loaded: loaded (/lib/systemd/system/mender-client.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-12-03 13:10:26 +07; 19min ago
Main PID: 5832 (mender)
Tasks: 14 (limit: 4915)
Memory: 10.6M
CGroup: /system.slice/mender-client.service
└─5832 /usr/bin/mender -daemon

Dec 03 13:29:18 raspberrypi mender[5832]: time=“2020-12-03T13:29:18+07:00” level=info msg=“State transition: check-wait [Idle] → update-check [Sync]”
Dec 03 13:29:18 raspberrypi mender[5832]: time=“2020-12-03T13:29:18+07:00” level=info msg=“State transition: update-check [Sync] → check-wait [Idle]”
Dec 03 13:29:22 raspberrypi mender[5832]: time=“2020-12-03T13:29:22+07:00” level=info msg=“State transition: check-wait [Idle] → inventory-update [Sync]”
Dec 03 13:29:22 raspberrypi mender[5832]: time=“2020-12-03T13:29:22+07:00” level=info msg=“State transition: inventory-update [Sync] → check-wait [Idle]”
Dec 03 13:29:23 raspberrypi mender[5832]: time=“2020-12-03T13:29:23+07:00” level=info msg=“State transition: check-wait [Idle] → update-check [Sync]”
Dec 03 13:29:23 raspberrypi mender[5832]: time=“2020-12-03T13:29:23+07:00” level=info msg=“State transition: update-check [Sync] → check-wait [Idle]”
Dec 03 13:29:27 raspberrypi mender[5832]: time=“2020-12-03T13:29:27+07:00” level=info msg=“State transition: check-wait [Idle] → inventory-update [Sync]”
Dec 03 13:29:27 raspberrypi mender[5832]: time=“2020-12-03T13:29:27+07:00” level=info msg=“State transition: inventory-update [Sync] → check-wait [Idle]”
Dec 03 13:29:28 raspberrypi mender[5832]: time=“2020-12-03T13:29:28+07:00” level=info msg=“State transition: check-wait [Idle] → update-check [Sync]”
Dec 03 13:29:29 raspberrypi mender[5832]: time=“2020-12-03T13:29:29+07:00” level=info msg=“State transition: update-check [Sync] → check-wait [Idle]”

It me again.
I have found something weird that the time on my workstation is different. Here is when I command timedatect

Local time: Thu 2020-12-03 02:04:57 UTC
Universal time: Thu 2020-12-03 02:04:57 UTC
RTC time: Thu 2020-12-03 03:36:02
Time zone: UTC (UTC, +0000)
NTP enabled: n/a
NTP synchronized: no
RTC in local TZ: no
DST active: n/a

After that about 30sec I create I deploy on server


the time is different
here is output when command timedatectl on RPI4

Local time: Thu 2020-12-03 15:41:41 +07
Universal time: Thu 2020-12-03 08:41:41 UTC
RTC time: n/a
Time zone: Asia/Bangkok (+07, +0700)
System clock synchronized: yes
NTP service: inactive
RTC in local TZ: no

Does this related to my problem?

Update
I have made some change to the time on both workstation and RPI4 and start deploy Fresh OS Raspbian again, it stuck at 99% so I reboot RPI by hand and guess what, it work, at least for 30sec maybe. I know it work because I have to login back to my device ( RPI4 ) and it password has been change to Fresh OS Raspbian password but after that it rollback and State Deployment on Mender UI change to fail.
Here is the log of deployment, hope it useful!

2020-12-03 09:56:34 +0000 UTC info: Running Mender client version: 2.4.0
2020-12-03 09:56:35 +0000 UTC info: State transition: update-fetch [Download_Enter] → update-store [Download_Enter]
2020-12-03 09:56:35 +0000 UTC info: No public key was provided for authenticating the artifact
2020-12-03 09:56:35 +0000 UTC info: Opening device “/dev/mmcblk0p3” for writing
2020-12-03 09:56:35 +0000 UTC info: Native sector size of block device /dev/mmcblk0p3 is 512 bytes. Mender will write in chunks of 1048576 bytes
2020-12-03 10:07:26 +0000 UTC info: All bytes were successfully written to the new partition
2020-12-03 10:07:26 +0000 UTC info: The optimized block-device writer wrote a total of 3565 frames, where 0 frames did need to be rewritten (i.e., skipped)
2020-12-03 10:07:27 +0000 UTC info: Wrote 3737124864/3737124864 bytes to the inactive partition
2020-12-03 10:07:28 +0000 UTC info: State transition: update-store [Download_Enter] → update-after-store [Download_Leave]
2020-12-03 10:07:28 +0000 UTC info: State transition: update-after-store [Download_Leave] → update-install [ArtifactInstall]
2020-12-03 10:07:28 +0000 UTC info: Enabling partition with new image installed to be a boot candidate: 3
2020-12-03 10:07:28 +0000 UTC info: State transition: update-install [ArtifactInstall] → reboot [ArtifactReboot_Enter]
2020-12-03 10:07:28 +0000 UTC info: Rebooting device(s)
2020-12-03 10:07:28 +0000 UTC info: Mender rebooting from active partition: /dev/mmcblk0p2
2020-11-12 04:01:07 +0000 UTC info: Running Mender client version: 2.4.0
2020-11-12 04:01:07 +0000 UTC info: State transition: init [none] → after-reboot [ArtifactReboot_Leave]
2020-11-12 04:01:07 +0000 UTC info: State transition: after-reboot [ArtifactReboot_Leave] → after-reboot [ArtifactReboot_Leave]
2020-11-12 04:01:07 +0000 UTC info: State transition: after-reboot [ArtifactReboot_Leave] → update-commit [ArtifactCommit_Enter]
2020-11-12 04:01:08 +0000 UTC info: Device unauthorized; attempting reauthorization
2020-11-12 04:01:09 +0000 UTC warning: Reauthorization failed with error: transient error: authorization request failed: (request_id: ): authentication request rejected server error message: dev auth: unauthorized
2020-11-12 04:01:09 +0000 UTC error: Got unexpected HTTP status when reporting status: 401
2020-11-12 04:01:09 +0000 UTC error: error reporting update status: (request_id: ): reporting status failed, bad status 401 server error message: failed to parse server response: json: cannot unmarshal object into Go struct field .error of type string
2020-11-12 04:01:09 +0000 UTC error: Failed to send status report to server: transient error: (request_id: ): reporting status failed, bad status 401 server error message: failed to parse server response: json: cannot unmarshal object into Go struct field .error of type string
2020-11-12 04:01:09 +0000 UTC info: State transition: update-commit [ArtifactCommit_Enter] → update-pre-commit-status-report-retry [ArtifactCommit_Enter]
2020-12-03 10:57:43 +0000 UTC info: State transition: update-pre-commit-status-report-retry [ArtifactCommit_Enter] → update-commit [ArtifactCommit_Enter]
2020-12-03 10:57:44 +0000 UTC info: Device unauthorized; attempting reauthorization
2020-12-03 10:57:44 +0000 UTC warning: Reauthorization failed with error: transient error: authorization request failed: (request_id: ): authentication request rejected server error message: dev auth: unauthorized
2020-12-03 10:57:44 +0000 UTC error: Got unexpected HTTP status when reporting status: 401
2020-12-03 10:57:44 +0000 UTC error: error reporting update status: (request_id: ): reporting status failed, bad status 401 server error message: failed to parse server response: json: cannot unmarshal object into Go struct field .error of type string
2020-12-03 10:57:44 +0000 UTC error: Failed to send status report to server: transient error: (request_id: ): reporting status failed, bad status 401 server error message: failed to parse server response: json: cannot unmarshal object into Go struct field .error of type string
2020-12-03 10:57:44 +0000 UTC info: State transition: update-commit [ArtifactCommit_Enter] → update-pre-commit-status-report-retry [ArtifactCommit_Enter]
2020-12-03 10:58:14 +0000 UTC info: State transition: update-pre-commit-status-report-retry [ArtifactCommit_Enter] → update-commit [ArtifactCommit_Enter]
2020-12-03 10:58:14 +0000 UTC info: Device unauthorized; attempting reauthorization
2020-12-03 10:58:15 +0000 UTC warning: Reauthorization failed with error: transient error: authorization request failed: (request_id: ): authentication request rejected server error message: dev auth: unauthorized
2020-12-03 10:58:15 +0000 UTC error: Got unexpected HTTP status when reporting status: 401
2020-12-03 10:58:15 +0000 UTC error: error reporting update status: (request_id: ): reporting status failed, bad status 401 server error message: failed to parse server response: json: cannot unmarshal object into Go struct field .error of type string
2020-12-03 10:58:15 +0000 UTC error: Failed to send status report to server: transient error: (request_id: ): reporting status failed, bad status 401 server error message: failed to parse server response: json: cannot unmarshal object into Go struct field .error of type string
2020-12-03 10:58:15 +0000 UTC info: State transition: update-commit [ArtifactCommit_Enter] → update-pre-commit-status-report-retry [ArtifactCommit_Enter]
2020-12-03 10:58:45 +0000 UTC info: State transition: update-pre-commit-status-report-retry [ArtifactCommit_Enter] → update-commit [ArtifactCommit_Enter]
2020-12-03 10:58:45 +0000 UTC info: Device unauthorized; attempting reauthorization
2020-12-03 10:58:45 +0000 UTC warning: Reauthorization failed with error: transient error: authorization request failed: (request_id: ): authentication request rejected server error message: dev auth: unauthorized
2020-12-03 10:58:45 +0000 UTC error: Got unexpected HTTP status when reporting status: 401
2020-12-03 10:58:45 +0000 UTC error: error reporting update status: (request_id: ): reporting status failed, bad status 401 server error message: failed to parse server response: json: cannot unmarshal object into Go struct field .error of type string
2020-12-03 10:58:45 +0000 UTC error: Failed to send status report to server: transient error: (request_id: ): reporting status failed, bad status 401 server error message: failed to parse server response: json: cannot unmarshal object into Go struct field .error of type string
2020-12-03 10:58:45 +0000 UTC info: State transition: update-commit [ArtifactCommit_Enter] → update-pre-commit-status-report-retry [ArtifactCommit_Enter]
2020-12-03 10:58:45 +0000 UTC error: transient error: Tried sending status report maximum number of times.
2020-12-03 10:58:45 +0000 UTC info: State transition: update-pre-commit-status-report-retry [ArtifactCommit_Enter] → rollback [ArtifactRollback]
2020-12-03 10:58:45 +0000 UTC info: Performing rollback
2020-12-03 10:58:45 +0000 UTC info: Setting partition for rollback: 2
2020-12-03 10:58:45 +0000 UTC info: State transition: rollback [ArtifactRollback] → rollback-reboot [ArtifactRollbackReboot_Enter]
2020-12-03 10:58:45 +0000 UTC info: Rebooting device(s) after rollback
2020-12-03 10:58:45 +0000 UTC info: Mender rebooting from inactive partition: /dev/mmcblk0p3
2020-12-03 10:07:56 +0000 UTC info: Running Mender client version: 2.4.0
2020-12-03 10:07:56 +0000 UTC info: Mender shut down in state: rollback-reboot
2020-12-03 10:07:56 +0000 UTC info: State transition: init [none] → verify-rollback-reboot [ArtifactRollbackReboot_Leave]
2020-12-03 10:07:56 +0000 UTC info: State transition: verify-rollback-reboot [ArtifactRollbackReboot_Leave] → after-rollback-reboot [ArtifactRollbackReboot_Leave]
2020-12-03 10:07:56 +0000 UTC info: State transition: after-rollback-reboot [ArtifactRollbackReboot_Leave] → update-error [ArtifactFailure]
2020-12-03 10:07:56 +0000 UTC info: State transition: update-error [ArtifactFailure] → cleanup [Error]
2020-12-03 10:07:56 +0000 UTC info: State transition: cleanup [Error] → update-status-report [none]
2020-12-03 10:07:56 +0000 UTC info: Device unauthorized; attempting reauthorization

OK. I see your confusion on the certificate installation bits. The docs do link back to Yocto but that is only relevant if you are using Yocto. Since you are using Raspbian and therefore our mender-convert option, you need to include the updated server.crt file in your rootfs overlay. I’ll try to clean that up in the docs. Basically, you just copy the appropriate crt file that was created when you did the Production Installation setup into the mender-convert overlay and when you run mender-convert it will automatically be a part of your image.

Yes, moving the mender-inventory-geo script out of that directory will resolve the issue in your case. I think we have a better version of that script that is in our dev branch now and will be part of the next release.

Your RPI will be unable to connect to the server until the time is synchronized. That is a requirement for proper TLS certificate verification. See this link for more details.

I’m not sure what to make of your last post about a manual reboot. I suggest we get the certificate issue resolved properly and get the time sync properly first and then revisit it.

Drew

Thank for reply, it me again

OK. I see your confusion on the certificate installation bits. The docs do link back to Yocto but that is only relevant if you are using Yocto. Since you are using Raspbian and therefore our mender-convert option, you need to include the updated server.crt file in your rootfs overlay. I’ll try to clean that up in the docs. Basically, you just copy the appropriate crt file that was created when you did the Production Installation setup into the mender-convert overlay and when you run mender-convert it will automatically be a part of your image
OK. I see your confusion on the certificate installation bits. The docs do link back to Yocto but that is only relevant if you are using Yocto. Since you are using Raspbian and therefore our mender-convert option, you need to include the updated server.crt file in your rootfs overlay. I’ll try to clean that up in the docs. Basically, you just copy the appropriate crt file that was created when you did the Production Installation setup into the mender-convert overlay and when you run mender-convert it will automatically be a part of your image

I notice that you mention mender-convert, I don’t see it in any task of Production Installation so why you mention it? Because as I know the docs just said about create server at all

Yes, moving the mender-inventory-geo script out of that directory will resolve the issue in your case. I think we have a better version of that script that is in our dev branch now and will be part of the next release.

Can you tell me the specific time please, I’m interns of a company so it kinda important to me. I’ll be much appreciated

Your RPI will be unable to connect to the server until the time is synchronized. That is a requirement for proper TLS certificate verification. See this link for more detail

Well, I have made the time on workstation and RPI sync together ( at least is in same time and timezone ) and now RPI can be connect to server but can’t deploy.

The mender-convert utility is the tool we use to update the client images to include Mender, to have the appropriate configuration, certificates, partitions, etc. Details are here.. The “Production Installation” instructions you ran through were just the server-side steps.

The next release date is not firm yet but we expect it by the end of Dec.

Drew

The next release date is not firm yet but we expect it by the end of Dec

Thanks a lot for you infomation

The mender-convert utility is the tool we use to update the client images to include Mender, to have the appropriate configuration, certificates, partitions, etc. Details are here.. The “Production Installation” instructions you ran through were just the server-side steps.

I think i get it. You idea was on my workstation, create a image of Raspbian which was include all configuration, cert , etc with mender convert and after that flash it into SD card and put it into RPI so when RPI boot up it can auto connect to mender server right? But if i want to connect a fresh OS RPI to server, is there anyway to do that?

I think what you are interested in is covered by our docs here and here.

Note that without the multiple-partition setup that is configured by mender-convert you will not be able to do robust full image updates as that requires the dual A/B partition setup.

Thanks for all infomation you give me Mr @drewmoseley, I’m now can successfully build Productions installation.

I have another problem here. Hope you can explain for me
For the last few days ago, I create a snapshot on RPi which installed some stuff ( RPI already connected to Hosted Mender ) using mender artifact. After that I upload that snapshot to Hosted Mender and started deploy to a fresh RPI ( connected to Hosted Mender ). Deployment were failed so I want to ask that does the difference between tenant token related to this because according to the docs it said snapshot can be used to deploy to another device.

I have resolved this. Because I use same device so Identity is conflict.