2015-06-08 02:58:53 +02:00
2015-12-12 01:39:51 +01:00
# Building the registry source
2015-08-26 20:08:13 +02:00
## Use-case
This is useful if you intend to actively work on the registry.
2015-12-12 01:39:51 +01:00
### Alternatives
2015-08-26 20:08:13 +02:00
Most people should use the [official Registry docker image ](https://hub.docker.com/r/library/registry/ ).
People looking for advanced operational use cases might consider rolling their own image with a custom Dockerfile inheriting `FROM registry:2` .
2016-10-18 14:31:08 +02:00
OS X users who want to run natively can do so following [the instructions here ](https://github.com/docker/docker.github.io/blob/master/registry/recipes/osx-setup-guide.md ).
2015-08-26 20:08:13 +02:00
### Gotchas
2015-08-28 21:46:09 +02:00
You are expected to know your way around with go & git.
2015-08-26 20:08:13 +02:00
If you are a casual user with no development experience, and no preliminary knowledge of go, building from source is probably not a good solution for you.
2022-07-05 15:08:59 +02:00
## Configure the development environment
2015-04-02 17:11:19 +02:00
2015-07-31 14:36:43 +02:00
The first prerequisite of properly building distribution targets is to have a Go
2015-06-03 20:59:56 +02:00
development environment setup. Please follow [How to Write Go Code ](https://golang.org/doc/code.html )
for proper setup. If done correctly, you should have a GOROOT and GOPATH set in the
environment.
2022-07-05 15:08:59 +02:00
Next, fetch the code from the repository using git:
2015-04-02 17:11:19 +02:00
2022-11-07 16:06:46 +01:00
git clone https://github.com/distribution/distribution
2022-07-05 15:08:59 +02:00
cd distribution
2015-04-02 17:11:19 +02:00
2022-07-05 15:08:59 +02:00
If you are planning to create a pull request with changes, you may want to clone directly from your [fork ](https://help.github.com/en/articles/about-forks ).
## Build and run from source
First, build the binaries:
$ make
+ bin/registry
+ bin/digest
+ bin/registry-api-descriptor-template
+ binaries
2015-06-11 20:08:16 +02:00
Now create the directory for the registry data (this might require you to set permissions properly)
2015-08-26 20:08:13 +02:00
mkdir -p /var/lib/registry
2015-06-11 20:08:16 +02:00
... or alternatively `export REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/somewhere` if you want to store data into another location.
The `registry`
2015-04-02 17:11:19 +02:00
binary can then be run with the following:
2022-07-05 15:08:59 +02:00
$ ./bin/registry --version
./bin/registry github.com/distribution/distribution/v3 v2.7.0-1993-g8857a194
2015-06-03 20:59:56 +02:00
2022-07-05 15:08:59 +02:00
The registry can be run with a development config using the following
2015-07-31 14:36:43 +02:00
incantation:
2015-04-02 17:11:19 +02:00
2022-07-05 15:08:59 +02:00
$ ./bin/registry serve cmd/registry/config-dev.yml
INFO[0000] debug server listening :5001
WARN[0000] No HTTP secret provided - generated random secret. This may cause problems with uploads if multiple registries are behind a load-balancer. To provide a shared secret, fill in http.secret in the configuration file or set the REGISTRY_HTTP_SECRET environment variable. environment=development go.version=go1.18.3 instance.id=e837df62-a66c-4e04-a014-b063546e82e0 service=registry version=v2.7.0-1993-g8857a194
INFO[0000] endpoint local-5003 disabled, skipping environment=development go.version=go1.18.3 instance.id=e837df62-a66c-4e04-a014-b063546e82e0 service=registry version=v2.7.0-1993-g8857a194
INFO[0000] endpoint local-8083 disabled, skipping environment=development go.version=go1.18.3 instance.id=e837df62-a66c-4e04-a014-b063546e82e0 service=registry version=v2.7.0-1993-g8857a194
INFO[0000] using inmemory blob descriptor cache environment=development go.version=go1.18.3 instance.id=e837df62-a66c-4e04-a014-b063546e82e0 service=registry version=v2.7.0-1993-g8857a194
INFO[0000] providing prometheus metrics on /metrics
INFO[0000] listening on [::]:5000 environment=development go.version=go1.18.3 instance.id=e837df62-a66c-4e04-a014-b063546e82e0 service=registry version=v2.7.0-1993-g8857a194
2015-04-02 17:11:19 +02:00
If it is working, one should see the above log messages.
2022-07-05 15:08:59 +02:00
### Build reference
2015-04-02 17:11:19 +02:00
2022-07-05 15:08:59 +02:00
The regular `go` commands, such as `go test` , should work per package.
2015-04-02 17:11:19 +02:00
A `Makefile` has been provided as a convenience to support repeatable builds.
2022-07-05 15:08:59 +02:00
Run `make` to build the binaries:
2015-04-02 17:11:19 +02:00
2016-03-31 19:46:02 +02:00
$ make
2022-07-05 15:08:59 +02:00
+ bin/registry
+ bin/digest
+ bin/registry-api-descriptor-template
2015-08-26 20:08:13 +02:00
+ binaries
2015-04-02 17:11:19 +02:00
2016-11-24 00:45:04 +01:00
The above provides a repeatable build using the contents of the vendor
2022-07-05 15:08:59 +02:00
directory. We can verify this worked by running
2015-04-02 17:11:19 +02:00
the registry binary generated in the "./bin" directory:
2018-02-27 23:46:06 +01:00
$ ./bin/registry --version
2020-08-24 13:18:39 +02:00
./bin/registry github.com/distribution/distribution v2.0.0-alpha.2-80-g16d8b2c.m
2015-04-02 17:11:19 +02:00
2022-07-05 15:08:59 +02:00
Run `make test` to run all of the tests.
Run `make validate` to run the validators, including the linter and vendor validation. You must have docker with the buildx plugin installed to run the validators.
2015-04-23 18:13:52 +02:00
### Optional build tags
Optional [build tags ](http://golang.org/pkg/go/build/ ) can be provided using
the environment variable `DOCKER_BUILDTAGS` .
2022-07-12 15:54:34 +02:00
< dl >
< dt > noresumabledigest< / dt >
< dd > Compiles without resumable digest support< / dd >
< dt > include_gcs< / dt >
< dd > Adds support for < a href = "https://cloud.google.com/storage" > Google Cloud Storage< / a > < / dd >
< dt > include_oss< / dt >
< dd > Adds support for < a href = "https://www.alibabacloud.com/product/object-storage-service" > Alibaba Cloud Object Storage Service (OSS)< / a > < / dd >
< / dl >