diff --git a/README.md b/README.md index c5f2eebd53045..97ed7820ddf1d 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ Rclone *("rsync for cloud storage")* is a command-line program to sync files and * Koofr [:page_facing_up:](https://rclone.org/koofr/) * Leviia Object Storage [:page_facing_up:](https://rclone.org/s3/#leviia) * Liara Object Storage [:page_facing_up:](https://rclone.org/s3/#liara-object-storage) + * Linode Object Storage [:page_facing_up:](https://rclone.org/s3/#linode) * Mail.ru Cloud [:page_facing_up:](https://rclone.org/mailru/) * Memset Memstore [:page_facing_up:](https://rclone.org/swift/) * Mega [:page_facing_up:](https://rclone.org/mega/) diff --git a/backend/s3/s3.go b/backend/s3/s3.go index eb66175239620..bca0d72147c70 100644 --- a/backend/s3/s3.go +++ b/backend/s3/s3.go @@ -121,6 +121,9 @@ var providerOption = fs.Option{ }, { Value: "Liara", Help: "Liara Object Storage", + }, { + Value: "Linode", + Help: "Linode Object Storage", }, { Value: "Minio", Help: "Minio Object Storage", @@ -516,7 +519,7 @@ func init() { }, { Name: "region", Help: "Region to connect to.\n\nLeave blank if you are using an S3 clone and you don't have a region.", - Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,IONOS,Petabox,Liara,Qiniu,RackCorp,Scaleway,Storj,Synology,TencentCOS,HuaweiOBS,IDrive", + Provider: "!AWS,Alibaba,ArvanCloud,ChinaMobile,Cloudflare,IONOS,Petabox,Liara,Linode,Qiniu,RackCorp,Scaleway,Storj,Synology,TencentCOS,HuaweiOBS,IDrive", Examples: []fs.OptionExample{{ Value: "", Help: "Use this if unsure.\nWill use v4 signatures and an empty region.", @@ -883,6 +886,42 @@ func init() { Value: "storage.iran.liara.space", Help: "The default endpoint\nIran", }}, + }, { + // Linode endpoints: https://www.linode.com/docs/products/storage/object-storage/guides/urls/#cluster-url-s3-endpoint + Name: "endpoint", + Help: "Endpoint for Linode Object Storage API.", + Provider: "Linode", + Examples: []fs.OptionExample{{ + Value: "us-southeast-1.linodeobjects.com", + Help: "Atlanta, GA (USA), us-southeast-1", + }, { + Value: "us-ord-1.linodeobjects.com", + Help: "Chicago, IL (USA), us-ord-1", + }, { + Value: "eu-central-1.linodeobjects.com", + Help: "Frankfurt (Germany), eu-central-1", + }, { + Value: "it-mil-1.linodeobjects.com", + Help: "Milan (Italy), it-mil-1", + }, { + Value: "us-east-1.linodeobjects.com", + Help: "Newark, NJ (USA), us-east-1", + }, { + Value: "fr-par-1.linodeobjects.com", + Help: "Paris (France), fr-par-1", + }, { + Value: "us-sea-1.linodeobjects.com", + Help: "Seattle, WA (USA), us-sea-1", + }, { + Value: "ap-south-1.linodeobjects.com", + Help: "Singapore ap-south-1", + }, { + Value: "se-sto-1.linodeobjects.com", + Help: "Stockholm (Sweden), se-sto-1", + }, { + Value: "us-iad-1.linodeobjects.com", + Help: "Washington, DC, (USA), us-iad-1", + }}, }, { // oss endpoints: https://help.aliyun.com/document_detail/31837.html Name: "endpoint", @@ -1235,7 +1274,7 @@ func init() { }, { Name: "endpoint", Help: "Endpoint for S3 API.\n\nRequired when using an S3 clone.", - Provider: "!AWS,ArvanCloud,IBMCOS,IDrive,IONOS,TencentCOS,HuaweiOBS,Alibaba,ChinaMobile,GCS,Liara,Scaleway,StackPath,Storj,Synology,RackCorp,Qiniu,Petabox", + Provider: "!AWS,ArvanCloud,IBMCOS,IDrive,IONOS,TencentCOS,HuaweiOBS,Alibaba,ChinaMobile,GCS,Liara,Linode,Scaleway,StackPath,Storj,Synology,RackCorp,Qiniu,Petabox", Examples: []fs.OptionExample{{ Value: "objects-us-east-1.dream.io", Help: "Dream Objects endpoint", @@ -1723,7 +1762,7 @@ func init() { }, { Name: "location_constraint", Help: "Location constraint - must be set to match the Region.\n\nLeave blank if not sure. Used when creating buckets only.", - Provider: "!AWS,Alibaba,ArvanCloud,HuaweiOBS,ChinaMobile,Cloudflare,IBMCOS,IDrive,IONOS,Leviia,Liara,Qiniu,RackCorp,Scaleway,StackPath,Storj,TencentCOS,Petabox", + Provider: "!AWS,Alibaba,ArvanCloud,HuaweiOBS,ChinaMobile,Cloudflare,IBMCOS,IDrive,IONOS,Leviia,Liara,Linode,Qiniu,RackCorp,Scaleway,StackPath,Storj,TencentCOS,Petabox", }, { Name: "acl", Help: `Canned ACL used when creating buckets and storing or copying objects. @@ -3015,6 +3054,8 @@ func setQuirks(opt *Options) { virtualHostStyle = false urlEncodeListings = false useMultipartEtag = false + case "Linode": + // No quirks case "LyveCloud": useMultipartEtag = false // LyveCloud seems to calculate multipart Etags differently from AWS case "Minio": diff --git a/docs/content/_index.md b/docs/content/_index.md index 6527cb91e55c4..5c6c2b86f6270 100644 --- a/docs/content/_index.md +++ b/docs/content/_index.md @@ -138,6 +138,7 @@ WebDAV or S3, that work out of the box.) {{< provider name="Koofr" home="https://koofr.eu/" config="/koofr/" >}} {{< provider name="Leviia Object Storage" home="https://www.leviia.com/object-storage" config="/s3/#leviia" >}} {{< provider name="Liara Object Storage" home="https://liara.ir/landing/object-storage" config="/s3/#liara-object-storage" >}} +{{< provider name="Linode Object Storage" home="https://www.linode.com/products/object-storage/" config="/s3/#linode" >}} {{< provider name="Mail.ru Cloud" home="https://cloud.mail.ru/" config="/mailru/" >}} {{< provider name="Memset Memstore" home="https://www.memset.com/cloud/storage/" config="/swift/" >}} {{< provider name="Mega" home="https://mega.nz/" config="/mega/" >}} diff --git a/docs/content/s3.md b/docs/content/s3.md index 3f4d37e35fb89..23eb9e4bd2967 100644 --- a/docs/content/s3.md +++ b/docs/content/s3.md @@ -22,8 +22,9 @@ The S3 backend can be used with a number of different providers: {{< provider name="IBM COS S3" home="http://www.ibm.com/cloud/object-storage" config="/s3/#ibm-cos-s3" >}} {{< provider name="IDrive e2" home="https://www.idrive.com/e2/?refer=rclone" config="/s3/#idrive-e2" >}} {{< provider name="IONOS Cloud" home="https://cloud.ionos.com/storage/object-storage" config="/s3/#ionos" >}} - {{< provider name="Leviia Object Storage" home="https://www.leviia.com/object-storage/" config="/s3/#leviia" >}} +{{< provider name="Leviia Object Storage" home="https://www.leviia.com/object-storage/" config="/s3/#leviia" >}} {{< provider name="Liara Object Storage" home="https://liara.ir/landing/object-storage" config="/s3/#liara-cloud" >}} +{{< provider name="Linode Object Storage" home="https://www.linode.com/products/object-storage/" config="/s3/#linode" >}} {{< provider name="Minio" home="https://www.minio.io/" config="/s3/#minio" >}} {{< provider name="Petabox" home="https://petabox.io/" config="/s3/#petabox" >}} {{< provider name="Qiniu Cloud Object Storage (Kodo)" home="https://www.qiniu.com/en/products/kodo" config="/s3/#qiniu" >}} @@ -5403,6 +5404,7 @@ Name Type ==== ==== leviia s3 ``` + ### Liara {#liara-cloud} Here is an example of making a [Liara Object Storage](https://liara.ir/landing/object-storage) @@ -5504,6 +5506,139 @@ server_side_encryption = storage_class = ``` +### Linode {#linode} + +Here is an example of making a [Linode Object Storage](https://www.linode.com/products/object-storage/) +configuration. First run: + + rclone config + +This will guide you through an interactive setup process. + +``` +No remotes found, make a new one? +n) New remote +s) Set configuration password +q) Quit config +n/s/q> n + +Enter name for new remote. +name> linode + +Option Storage. +Type of storage to configure. +Choose a number from below, or type in your own value. +[snip] + X / Amazon S3 Compliant Storage Providers including AWS, ...Linode, ...and others + \ (s3) +[snip] +Storage> s3 + +Option provider. +Choose your S3 provider. +Choose a number from below, or type in your own value. +Press Enter to leave empty. +[snip] +XX / Linode Object Storage + \ (Linode) +[snip] +provider> Linode + +Option env_auth. +Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars). +Only applies if access_key_id and secret_access_key is blank. +Choose a number from below, or type in your own boolean value (true or false). +Press Enter for the default (false). + 1 / Enter AWS credentials in the next step. + \ (false) + 2 / Get AWS credentials from the environment (env vars or IAM). + \ (true) +env_auth> + +Option access_key_id. +AWS Access Key ID. +Leave blank for anonymous access or runtime credentials. +Enter a value. Press Enter to leave empty. +access_key_id> ACCESS_KEY + +Option secret_access_key. +AWS Secret Access Key (password). +Leave blank for anonymous access or runtime credentials. +Enter a value. Press Enter to leave empty. +secret_access_key> SECRET_ACCESS_KEY + +Option endpoint. +Endpoint for Linode Object Storage API. +Choose a number from below, or type in your own value. +Press Enter to leave empty. + 1 / Atlanta, GA (USA), us-southeast-1 + \ (us-southeast-1.linodeobjects.com) + 2 / Chicago, IL (USA), us-ord-1 + \ (us-ord-1.linodeobjects.com) + 3 / Frankfurt (Germany), eu-central-1 + \ (eu-central-1.linodeobjects.com) + 4 / Milan (Italy), it-mil-1 + \ (it-mil-1.linodeobjects.com) + 5 / Newark, NJ (USA), us-east-1 + \ (us-east-1.linodeobjects.com) + 6 / Paris (France), fr-par-1 + \ (fr-par-1.linodeobjects.com) + 7 / Seattle, WA (USA), us-sea-1 + \ (us-sea-1.linodeobjects.com) + 8 / Singapore ap-south-1 + \ (ap-south-1.linodeobjects.com) + 9 / Stockholm (Sweden), se-sto-1 + \ (se-sto-1.linodeobjects.com) +10 / Washington, DC, (USA), us-iad-1 + \ (us-iad-1.linodeobjects.com) +endpoint> 3 + +Option acl. +Canned ACL used when creating buckets and storing or copying objects. +This ACL is used for creating objects and if bucket_acl isn't set, for creating buckets too. +For more info visit https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html#canned-acl +Note that this ACL is applied when server-side copying objects as S3 +doesn't copy the ACL from the source but rather writes a fresh one. +If the acl is an empty string then no X-Amz-Acl: header is added and +the default (private) will be used. +Choose a number from below, or type in your own value. +Press Enter to leave empty. + / Owner gets FULL_CONTROL. + 1 | No one else has access rights (default). + \ (private) +[snip] +acl> + +Edit advanced config? +y) Yes +n) No (default) +y/n> n + +Configuration complete. +Options: +- type: s3 +- provider: Linode +- access_key_id: ACCESS_KEY +- secret_access_key: SECRET_ACCESS_KEY +- endpoint: eu-central-1.linodeobjects.com +Keep this "linode" remote? +y) Yes this is OK (default) +e) Edit this remote +d) Delete this remote +y/e/d> y +``` + +This will leave the config file looking like this. + +``` +[linode] +type = s3 +provider = Linode +access_key_id = ACCESS_KEY +secret_access_key = SECRET_ACCESS_KEY +endpoint = eu-central-1.linodeobjects.com +``` + ### ArvanCloud {#arvan-cloud} [ArvanCloud](https://www.arvancloud.com/en/products/cloud-storage) ArvanCloud Object Storage goes beyond the limited traditional file storage.