diff --git a/README.md b/README.md index 45ee54d..6c9fd56 100644 --- a/README.md +++ b/README.md @@ -53,3 +53,127 @@ Attribution-NonCommercial-NoDerivatives 4.0 International License вы должны распространять свои результаты на условиях той же лицензии, что и оригинал. + +## Инсталяция + +``` +$ ./configure --prefix=/usr +$ make +$ sudo make install +$ sudo systemctl daemon-reload +$ sudo systemctl enable mstored +$ sudo systemctl start mstored +``` + +В процессе первого запуска будут инициализирована sqlite база данных +и создан начальный пользователь mstore с паролем mstore, и с полным +набором прав. + +Также будет создан необходимый для работы пользователь anonymous, +от имени которого будут осуществлятся операции, +если не указан какой-либо пользователь явно. + +По умолчанию сервис запускается на порту 443. Если вы желаете запустить сервис +на ином порту, вы можете указать его указать в конфигурационном файле +/etc/mstore/mstored.yaml + +``` +service: + port: 8080 +``` + + +## Операции с образами контейнеров. + +Данный реестр поддерживает работу с OCI архивами образов, а также +фактически аналогичными им архивами Docker Image Spec V2. + +Работа c docker архивами V1 не поддерживается. + +### Загрузка образа контейнера + +Клиентская утилита mstorectl имеет возможности выгрузить образ контейнера с OCI реестра, +а также загрузить его в таковой реестр. + +Копирование в локальный реестр осуществляется последовательной выгрузкой из стороннего реестра в +архив образа и загрузкой в локальный реестр по необходимому пути. + +По умолчанию порт 443, если он иной, то необходимо указать его явно. + +``` +$ mstorectl image pull registry.k8s.io/pause:3.10.1 pause-3.10.1.tar +--- +error: false +result: + filepath: pause-3.10.1.img + size: 323,072 + +$ mstorectl image push pause-3.10.1.tar mstore:mstore@localhost:443/pause:v3.10.1 +--- +error: false +result: {} +``` + +Если компонент образа уже существует по его пути, то он загружен не будет. + +### Удаление образа контейнера + +Если компоненты образа не используются в каком-либо ином образе по данному пути, то +они будут удалены. + +``` +$ mstorectl image delete mstore:mstore@localhost:443/pause:v3.10.1 +``` + +### Просмотр имеющихся репозиториев в реестре + +``` +# mstorectl image catalog localhost +--- +error: false +result: + repositories: + - coredns + - etcd + - kube-apiserver + - kube-controller-manager + - kube-proxy + - kube-scheduler + - mstore/mstore + - pause + - toolbox + +``` + +### Просмотр имеющихся тегов репозитария + +``` +$ mstorectl image tags localhost:443/pause +--- +error: false +result: + imageTags: + name: pause + tags: + - 3.10.1 +``` + +### Проверка репозитариев на корректность и целостность + +Проверка целостности при наличии большого количества образов +может занимать некоторое время. Доступ к загрузке и выгрузке компонено образа +на данное время будет заблокирован. + +Образы контейнеров с некорректными компонентами (отсутствующими +или с несовпадающей контрольной суммой) будут удалены полностью +и выведены в результирующий список. + +``` +$ mstorectl images check mstore:mstore@localhost:443 +--- +error: false +result: + repos: [] + +``` + diff --git a/app/config/variant.go b/app/config/variant.go index 7adb9f4..46b6033 100644 --- a/app/config/variant.go +++ b/app/config/variant.go @@ -6,5 +6,5 @@ const ( logdir = "/var/log/mstore" datadir = "/var/lib/mstore" version = "0.2.5" - srvname = "mstored" + srvname = "mstored" ) diff --git a/app/handler/manifest.go b/app/handler/manifest.go index 47b8379..f638532 100644 --- a/app/handler/manifest.go +++ b/app/handler/manifest.go @@ -157,7 +157,7 @@ func (hand *Handler) GetManifest(rctx *router.Context) { //hand.logg.Debugf("GetManifest type: %s", res.ContentType) //hand.logg.Debugf("GetManifest payload: %s", res.Payload) rctx.SetHeader("Content-Length", res.ContentLength) - //rctx.SetHeader("Content-Type", res.ContentType) + rctx.SetHeader("Content-Type", res.ContentType) rctx.SetHeader("Docker-Content-Digest", res.DockerContentDigest) rctx.SendBytes(code, res.ContentType, []byte(res.Payload)) return diff --git a/pkg/repocli/getman.go b/pkg/repocli/getman.go index 271aaea..e80bde7 100644 --- a/pkg/repocli/getman.go +++ b/pkg/repocli/getman.go @@ -84,7 +84,6 @@ func (cli *Client) GetRawManifest(ctx context.Context, rawrepo string, accepts [ if !accepted { err := fmt.Errorf("Unknown content type: %s", mime) return exist, mime, man, digstr, err - } digstr = resp.Header.Get("Docker-Content-Digest") if digstr == "" {