🐛 Bug Report: S3 storage backend does not support some S3-compatible object storage providers (e.g. Linode) #548

Closed
opened 2026-02-04 20:25:45 +03:00 by OVERLORD · 2 comments
Owner

Originally created by @marvin-roesch on GitHub (Nov 19, 2025).

Reproduction steps

When using an S3-compatible object storage offering such as Linode's, which however does not fully support all the integrity checks that AWS has implemented, putting objects fails.

To reproduce, set up a bucket on such a provider and try to bootstrap a new Pocket ID instance. I currently only know of Linode failing for sure and don't know if it can be easily reproduced with something like MinIO.

See aws/aws-sdk-go-v2#2960 for how to potentially mitigate this when using the AWS Go SDK. There probably should be a config option to enable this backwards compatibility.

Expected behavior

Objects (e.g. the background.webp during bootstrap) should be put on the object storage without issue.

Actual Behavior

The PutObject operation fails with a 400 Bad Request and an error message XAmzContentSHA256Mismatch.

Pocket ID Version

next@sha256:cd69947205721a22d6f1f3e9f7574617ffa2ccf84b29cd056c478bc68bdfb93e (due to unreleased nature of the feature)

Database

Postgres 18

OS and Environment

Kubernetes 1.34.2 on Talos Linux, served via kgateway

Log Output

No response

Originally created by @marvin-roesch on GitHub (Nov 19, 2025). ### Reproduction steps When using an S3-compatible object storage offering such as Linode's, which however does not fully support all the integrity checks that AWS has implemented, putting objects fails. To reproduce, set up a bucket on such a provider and try to bootstrap a new Pocket ID instance. I currently only know of Linode failing for sure and don't know if it can be easily reproduced with something like MinIO. See aws/aws-sdk-go-v2#2960 for how to potentially mitigate this when using the AWS Go SDK. There probably should be a config option to enable this backwards compatibility. ### Expected behavior Objects (e.g. the `background.webp` during bootstrap) should be put on the object storage without issue. ### Actual Behavior The `PutObject` operation fails with a `400 Bad Request` and an error message `XAmzContentSHA256Mismatch`. ### Pocket ID Version next@sha256:cd69947205721a22d6f1f3e9f7574617ffa2ccf84b29cd056c478bc68bdfb93e (due to unreleased nature of the feature) ### Database Postgres 18 ### OS and Environment Kubernetes 1.34.2 on Talos Linux, served via kgateway ### Log Output _No response_
Author
Owner

@stonith404 commented on GitHub (Nov 26, 2025):

Thanks for testing S3. Would you mind testing the latest next image? You should now be able to disable the integrity checks with S3_DISABLE_DEFAULT_INTEGRITY_CHECKS=true.

@stonith404 commented on GitHub (Nov 26, 2025): Thanks for testing S3. Would you mind testing the latest `next` image? You should now be able to disable the integrity checks with `S3_DISABLE_DEFAULT_INTEGRITY_CHECKS=true`.
Author
Owner

@marvin-roesch commented on GitHub (Nov 26, 2025):

Testing on the latest next image, using the new option to disable integrity checks, both the bootstrap process for uploading the default background image etc. and uploading e.g. a profile picture or an OIDC client image seem to work flawlessly with my Linode-hosted bucket.

Thanks a bunch for the fix, @stonith404! Now I can run Pocket ID with some better redundancy 😁

@marvin-roesch commented on GitHub (Nov 26, 2025): Testing on the latest `next` image, using the new option to disable integrity checks, both the bootstrap process for uploading the default background image etc. and uploading e.g. a profile picture or an OIDC client image seem to work flawlessly with my Linode-hosted bucket. Thanks a bunch for the fix, @stonith404! Now I can run Pocket ID with some better redundancy 😁
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/pocket-id#548