We setup an S3 compatible backup storage location (we use SWIFT to provide the S3 compatible backup).
Unfortunately, the function "Create a new S3 bucket" does not work.
The following fixes the problem, but this should go into a Virtualmin as a bugfix, because this is too much for most users to handle.
Interestingly it only works with a location called "US" - none of the other location names work.
Start: fixes
- Enable "Create a new S3 bucket"
To enable "Create bucket" function - we need to patch virtualmin sources.
Out-of-the box virtualmin doesn't support US location for buckets. And with non-US location - our storage will return Error during creating bucket. US location for buckets - mean default location (so it's bug in virtualmin, that not such location in list) Add US location to pop-up list:
vim /usr/share/webmin/virtual-server/s3-lib.pl
Find s3_list_locations function and add "US" to return() as first item
Before:
# s3_list_locations(access-key, secret-key)
# Returns a list of all possible S3 locations for buckets
sub s3_list_locations
{
my ($akey, $skey) = @_;
return ( "us-west-1", "us-west-2", "EU", "ap-southeast-1", "ap-southeast-2",
"ap-northeast-1", "sa-east-1", "eu-central-1" );
}
Now:
# s3_list_locations(access-key, secret-key)
# Returns a list of all possible S3 locations for buckets
sub s3_list_locations
{
my ($akey, $skey) = @_;
return ( "US", "us-west-1", "us-west-2", "EU", "ap-southeast-1", "ap-southeast-2",
"ap-northeast-1", "sa-east-1", "eu-central-1" );
}
Set US location as default for Create bucket form
vim /usr/share/webmin/virtual-server/edit_bucket.cgi
Find print &ui_table_start( and inside condition if ($in{'new'}) { change default output from "us-west-1" to ""
Before:
print &ui_table_row($text{'bucket_location'},
&ui_select("location", "us-west-1",
[ &s3_list_locations(@$account) ]));
}
Now:
print &ui_table_row($text{'bucket_location'},
&ui_select("location", "US",
[ &s3_list_locations(@$account) ]));
}
Disable ACL and lifecycle policy applying during creating new bucket due buggy ACL list in virtualmin
We can't leave it blank, as unproper XML will be formed, from other side - user haven't opportunity to type right data there, as he need to know tenant:username - but we generate it with random text and don't display to user. So only 1 proper solution - disable this step. Inside storage all will be fine - default user will be applied (so, account owner user will be applied)
vim /usr/share/webmin/virtual-server/save_bucket.cgi
Comment line with s3_put_bucket_acl and s3_put_bucket_lifecycle
#$err = &s3_put_bucket_acl(@$account, $in{'name'}, $acl);
....
#$err = &s3_put_bucket_lifecycle(@$account, $in{'name'}, $lifecycle);
Restart virtualmin
service webmin restart
Refresh page in browser.
Comments
Submitted by JamieCameron on Fri, 04/01/2016 - 23:27 Comment #1
Interesting - so it sounds like the main problem here is that this S3-compatible service doesn't use the same locations as the real S3 service.
Does real S3 support a location named "US" ?