-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.go
82 lines (73 loc) · 2.64 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package main
import (
"log"
"net"
"net/url"
"os"
"os/exec"
"strings"
)
const (
registryBinary = "/opt/drycc/registry/bin/registry"
registryHtpasswd = "/opt/drycc/registry/etc/htpasswd"
registryConfigEnvVar = "DRYCC_REGISTRY_CONFIG"
registryRedirectEnvVar = "DRYCC_REGISTRY_REDIRECT"
storageLookupEnvVar = "DRYCC_STORAGE_LOOKUP"
storageBucketEnvVar = "DRYCC_STORAGE_BUCKET"
storageEndpointEnvVar = "DRYCC_STORAGE_ENDPOINT"
storageAccesskeyEnvVar = "DRYCC_STORAGE_ACCESSKEY"
storageSecretkeyEnvVar = "DRYCC_STORAGE_SECRETKEY"
defaultCommand = "serve"
)
func main() {
log.Println("INFO: Starting registry...")
os.Setenv("REGISTRY_STORAGE", "s3")
mEndpoint := os.Getenv(storageEndpointEnvVar)
os.Setenv("REGISTRY_STORAGE_S3_REGIONENDPOINT", mEndpoint)
region := "us-east-1" //region is required in distribution
if endpointURL, err := url.Parse(mEndpoint); err == nil {
if endpointURL.Hostname() != "" && net.ParseIP(endpointURL.Hostname()) == nil {
region = strings.Split(endpointURL.Hostname(), ".")[0]
}
}
os.Setenv("REGISTRY_STORAGE_S3_REGION", region)
os.Setenv("REGISTRY_STORAGE_S3_ACCESSKEY", os.Getenv(storageAccesskeyEnvVar))
os.Setenv("REGISTRY_STORAGE_S3_SECRETKEY", os.Getenv(storageSecretkeyEnvVar))
os.Setenv("REGISTRY_STORAGE_S3_BUCKET", os.Getenv(storageBucketEnvVar))
if os.Getenv(storageLookupEnvVar) == "path" {
os.Setenv("REGISTRY_STORAGE_S3_FORCEPATHSTYLE", "true")
}
if os.Getenv(registryRedirectEnvVar) == "true" {
os.Setenv("REGISTRY_STORAGE_REDIRECT_DISABLE", "false")
} else {
os.Setenv("REGISTRY_STORAGE_REDIRECT_DISABLE", "true")
}
// set default env
os.Setenv("REGISTRY_STORAGE_S3_V4AUTH", "true")
os.Setenv("REGISTRY_STORAGE_S3_SECURE", "false")
os.Setenv("REGISTRY_STORAGE_S3_SKIPVERIFY", "true")
os.Setenv("REGISTRY_STORAGE_DELETE_ENABLED", "true")
os.Setenv("REGISTRY_VALIDATION_DISABLED", "true")
os.Setenv("REGISTRY_STORAGE_S3_ROOTDIRECTORY", "/registry")
// run /bin/init_registry
os.Setenv("REGISTRY_AUTH", "htpasswd")
os.Setenv("REGISTRY_AUTH_HTPASSWD_REALM", "basic-realm")
os.Setenv("REGISTRY_AUTH_HTPASSWD_PATH", registryHtpasswd)
cmd := exec.Command("/bin/init_registry")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
log.Fatal("Error creating the registry bucket: ", err)
}
if len(os.Args) > 1 {
cmd = exec.Command(registryBinary, os.Args[1:]...)
} else {
cmd = exec.Command(registryBinary, defaultCommand, os.Getenv(registryConfigEnvVar))
}
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
log.Fatal("Error starting the registry: ", err)
}
log.Println("INFO: registry started.")
}