Merge branch 'master' of ssh://git-annex.branchable.com
This commit is contained in:
commit
45c338204f
6 changed files with 125 additions and 0 deletions
30
doc/bugs/S3_remote_errors_with_garage_endpoint.mdwn
Normal file
30
doc/bugs/S3_remote_errors_with_garage_endpoint.mdwn
Normal file
|
@ -0,0 +1,30 @@
|
|||
### Please describe the problem.
|
||||
|
||||
When I attempt to create a S3 remote against my garage[1] cluster, it errors with the following:
|
||||
|
||||
```
|
||||
$ git annex initremote garage type=S3 encryption=none host=my-s3-endpoint.domain.com protocol=https bucket=git-annex requeststyle=path datacenter=garage signature=v4
|
||||
initremote garage (checking bucket...) (creating bucket in garage...)
|
||||
git-annex: S3Error {s3StatusCode = Status {statusCode = 400, statusMessage = "Bad Request"}, s3ErrorCode = "AuthorizationHeaderMalformed", s3ErrorMessage = "Authorization header malformed, expected scope: 20230118/my-s3-endpoint.domain.com/s3/aws4_request", s3ErrorResource = Just "/git-annex/", s3ErrorHostId = Nothing, s3ErrorAccessKeyId = Nothing, s3ErrorStringToSign = Nothing, s3ErrorBucket = Nothing, s3ErrorEndpointRaw = Nothing, s3ErrorEndpoint = Nothing}
|
||||
failed
|
||||
initremote: 1 failed
|
||||
|
||||
$ git annex initremote garage type=S3 encryption=none host=my-s3-endpoint.domain.com protocol=https bucket=git-annex requeststyle=path datacenter=garage
|
||||
initremote garage (checking bucket...) (creating bucket in garage...)
|
||||
git-annex: S3Error {s3StatusCode = Status {statusCode = 400, statusMessage = "Bad Request"}, s3ErrorCode = "InvalidRequest", s3ErrorMessage = "Bad request: Unsupported authorization method", s3ErrorResource = Just "/git-annex/", s3ErrorHostId = Nothing, s3ErrorAccessKeyId = Nothing, s3ErrorStringToSign = Nothing, s3ErrorBucket = Nothing, s3ErrorEndpointRaw = Nothing, s3ErrorEndpoint = Nothing}
|
||||
failed
|
||||
initremote: 1 failed
|
||||
```
|
||||
|
||||
Garage appears to support v4 signatures: https://garagehq.deuxfleurs.fr/documentation/reference-manual/s3-compatibility/#high-level-features - and other S3 tooling works against the endpoint.
|
||||
|
||||
|
||||
### What version of git-annex are you using? On what operating system?
|
||||
|
||||
Fedora Silverblue 37 / git-annex-10.20221212-1.fc37.x86_64
|
||||
|
||||
### Have you had any luck using git-annex before? (Sometimes we get tired of reading bug reports all day and a lil' positive end note does wonders)
|
||||
|
||||
Yes, many years ago - now trying to get it up and running with my self-hosted S3 endpoint.
|
||||
|
||||
[1]: https://garagehq.deuxfleurs.fr/
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="jpds"
|
||||
avatar="http://cdn.libravatar.org/avatar/24d746ec6a7726b162c12ecceb3ee267"
|
||||
subject="comment 1"
|
||||
date="2023-01-18T22:57:58Z"
|
||||
content="""
|
||||
Error on Garage's side is triggered here: https://git.deuxfleurs.fr/Deuxfleurs/garage/src/commit/fcc5033466e58e3beec05ee7748d33522b6b32b0/src/api/signature/payload.rs#L297
|
||||
"""]]
|
|
@ -0,0 +1,10 @@
|
|||
[[!comment format=mdwn
|
||||
username="jpds"
|
||||
avatar="http://cdn.libravatar.org/avatar/24d746ec6a7726b162c12ecceb3ee267"
|
||||
subject="comment 2"
|
||||
date="2023-01-19T15:09:01Z"
|
||||
content="""
|
||||
I took a look at the credentialv4 structure at https://github.com/aristidb/aws/blob/9bdc4ee018d0d9047c0434eeb21e2383afaa9ccf/Aws/Core.hs#L621 and found it curious that it has the region inside the scope (as the garage code) does... however in my error message from git-annex - the hostname of the S3 service is what's inside the scope instead of the 'garage' region name.
|
||||
|
||||
I therefore adjusted the garage API's configuration to have the FQDN as the region and then... git-annex Just Worked.
|
||||
"""]]
|
|
@ -0,0 +1,43 @@
|
|||
[[!comment format=mdwn
|
||||
username="jpds"
|
||||
avatar="http://cdn.libravatar.org/avatar/24d746ec6a7726b162c12ecceb3ee267"
|
||||
subject="comment 3"
|
||||
date="2023-01-19T16:28:19Z"
|
||||
content="""
|
||||
I believe the fix for this is:
|
||||
|
||||
```
|
||||
diff --git a/Remote/S3.hs b/Remote/S3.hs
|
||||
index f5014202e..49f2ebd58 100644
|
||||
--- a/Remote/S3.hs
|
||||
+++ b/Remote/S3.hs
|
||||
@@ -948,8 +948,8 @@ s3Configuration c = cfg
|
||||
| otherwise -> AWS.HTTP
|
||||
cfg = case getRemoteConfigValue signatureField c of
|
||||
Just (SignatureVersion 4) ->
|
||||
- S3.s3v4 proto endpoint False S3.SignWithEffort
|
||||
- _ -> S3.s3 proto endpoint False
|
||||
+ S3.s3v4 proto datacenter False S3.SignWithEffort
|
||||
+ _ -> S3.s3 proto datacenter False
|
||||
|
||||
data S3Info = S3Info
|
||||
{ bucket :: S3.Bucket
|
||||
```
|
||||
|
||||
...however I cannot test it myself right now as it's failing to compile on another bit of code:
|
||||
|
||||
```
|
||||
[452 of 679] Compiling Remote.S3
|
||||
|
||||
git/joeyh/git-annex.branchable.com/Remote/S3.hs:922:68: error:
|
||||
• Couldn't match type ‘B8.ByteString’ with ‘[Char]’
|
||||
Expected type: String
|
||||
Actual type: B8.ByteString
|
||||
• In the first argument of ‘T.pack’, namely ‘datacenter’
|
||||
In the second argument of ‘($)’, namely ‘T.pack datacenter’
|
||||
In the expression: AWS.s3HostName $ T.pack datacenter
|
||||
|
|
||||
922 | | h == AWS.s3DefaultHost = AWS.s3HostName $ T.pack datacenter
|
||||
| ^^^^^^^^^^
|
||||
```
|
||||
"""]]
|
26
doc/todo/Setting_default_preferred_content_expressions.mdwn
Normal file
26
doc/todo/Setting_default_preferred_content_expressions.mdwn
Normal file
|
@ -0,0 +1,26 @@
|
|||
Hey Joey,
|
||||
|
||||
If I understand correctly, the default content expression (when it's empty, e.g. after a `git annex init` or `git clone ...;git annex sync`) is currently apparently `anything`. This means that a `git annex sync --content` (or just `git annex sync` if `git config --set annex.synccontent true`) will fetch all files.
|
||||
|
||||
It would be very handy if there was something like:
|
||||
|
||||
[[!format bash """
|
||||
git annex config --set annex.defaultwanted ...
|
||||
git annex config --set annex.defaultgroup ...
|
||||
git annex config --set annex.defaultgroupwanted ...
|
||||
git annex config --set annex.defaultrequired ...
|
||||
|
||||
# and the corresponding git variant for user-overriding
|
||||
git config [--global|--system] annex.defaultwanted ...
|
||||
git config [--global|--system] annex.defaultgroup ...
|
||||
git config [--global|--system] annex.defaultgroupwanted ...
|
||||
git config [--global|--system] annex.defaultrequired ...
|
||||
"""]]
|
||||
|
||||
These defaults would be applied when `git annex` initializes a repository (i.e. gives it a `annex.uuid`, e.g. `git annex init` or `git annex sync` of a fresh clone of a repo with annex).
|
||||
|
||||
I like my annexed/datalad repos (mostly research data next to analysis code for collaboration) to have `annex.synccontent = true` so people can just do (`datalad save`/`git annex add`) `git annex sync` and be sure afterwards everything is in order and safe. However as the default `wanted` is `anything` (apparently), they also get all files they probably don't want if they don't to `git annex wanted . present` manually (and manual boilerplate config and extra steps is always something that's nice to automate). Something like `git annex config --set annex.defaultwanted present` would solve this.
|
||||
|
||||
Thanks again very much for git-annex, I love it! 💛
|
||||
|
||||
Yann
|
|
@ -0,0 +1,8 @@
|
|||
[[!comment format=mdwn
|
||||
username="yarikoptic"
|
||||
avatar="http://cdn.libravatar.org/avatar/f11e9c84cb18d26a1748c33b48c924b4"
|
||||
subject="comment 6"
|
||||
date="2023-01-18T17:55:49Z"
|
||||
content="""
|
||||
FWIW: I also feel that 2nd one (absent affect on a possibly present locally copy) would be preferable.
|
||||
"""]]
|
Loading…
Add table
Reference in a new issue