В рамках моего проекта GSoC я установил репозиторий CernVM-FS на своем локальном компьютере для изучения и тестирования. Документация cvmfs является авторитетным источником по созданию и обслуживанию репозиториев cvmfs в производственной среде. Вместо этого этот пост будет служить простым руководством по созданию репозитория cvmfs на вашем локальном компьютере.

Для этого я использовал Ubuntu 16.04. Лучше настроить сервер на виртуальной машине или на удаленной машине, к которой у вас есть доступ, поскольку инструменты сервера cvmfs немного навязчивы по отношению к службам systemd и файлам конфигурации.

Установите инструменты

Во-первых, добавьте исходники пакета cvmfs в каталог apt sources.list,

$ wget -qO - https://cvmrepo.web.cern.ch/cvmrepo/apt/cernvm.gpg | sudo apt-key add -
$ echo "deb https://cvmrepo.web.cern.ch/cvmrepo/apt/ xenial-prod main" | sudo tee -a /etc/apt/sources.list
$ sudo apt-get update

Исходники для других версий на базе Debian перечислены здесь. Лучше использовать варианты -prod, поскольку они предназначены для промышленного использования.

Затем установите клиентский и серверный пакеты cvmfs.

$ sudo apt-get install cvmfs cvmfs-server

Создать репозиторий

Теперь создайте новый репозиторий cvmfs с помощью команды cvmfs_server.

$ sudo cvmfs_server mkfs my.new.repo

Это попросит вас выбрать пользователя, которому будет принадлежать этот репозиторий. Я выбрал значение по умолчанию, которое равно root.

Когда команда завершится, она смонтирует my.new.repo под /cvmfs на вашем сервере.

$ ls /cvmfs/my.new.repo
new_repository
$ cat /cvmfs/my.new.repo/new_repository
New CernVM-FS repository for my.new.repo

Как видите, он уже содержит один файл с некоторым содержимым. Если вы попытаетесь написать внутри этого репозитория, это не удастся, потому что это монтирование только для чтения.

Изменить содержимое репозитория

Чтобы изменить содержимое репозитория, вы начинаете с выполнения

$ sudo cvmfs_server transaction my.new.repo

Это наложит файловую систему объединения с копированием при записи на /cvmfs/my.new.repo , что позволит вам вносить изменения в файловую систему.

$ cd /cvmfs/my.new.repo
$ mkdir new_dir
$ echo "Hello, World!" | sudo tee new_dir/hello_world

Как только вы закончите с любыми изменениями, вы зафиксируете их, выполнив:

$ sudo cvmfs_server publish my.new.repo

URL репозитория

Инструменты сервера cvmfs автоматически настроят сервер Apache, который клиенты cvmfs смогут использовать для получения данных репозитория. Чтобы увидеть, по какому URL-адресу размещен наш репозиторий, запустите:

$ sudo cvmfs_server info my.new.repo
Repository name: my.new.repo
Created by CernVM-FS 138
Stratum1 Replication Allowed: yes
Whitelist is valid for another 29 days
Client configuration:
Add my.new.repo to CVMFS_REPOSITORIES in /etc/cvmfs/default.local
Create /etc/cvmfs/config.d/my.new.repo.conf and set
  CVMFS_SERVER_URL=http://localhost/cvmfs/my.new.repo
  CVMFS_PUBLIC_KEY=/etc/cvmfs/keys/my.new.repo.pub
Copy /etc/cvmfs/keys/my.new.repo.pub to the client

Попробуйте скачать с http://localhost/cvmfs/my.new.repo/.cvmfspublished; вы получите манифест репозитория, формат которого описан здесь. Это первый файл метаданных, загруженный до того, как репозиторий cvmfs будет смонтирован на клиентском компьютере.

Настройте клиент cvmfs

Теперь давайте настроим клиент cvmfs для доступа к репозиторию с другого компьютера. Если вы запускали сервер на виртуальной машине, такой как VirtualBox, вы можете просто настроить туннель между гостевым http://localhost:80 и хостом, скажем, http://localhost:8080.

Установите на клиенте только пакет cvmfs, используя описанную выше процедуру. Тогда беги,

$ sudo cvmfs_config setup

Теперь создайте новый файл /etc/cvmfs/default.local со следующим содержимым:

CVMFS_REPOSITORIES=my.new.repo

Затем создайте еще один файл /etc/cvmfs/config.d/my.new.repo.conf со следующим содержимым:

CVMFS_SERVER_URL=http://localhost/cvmfs/my.new.repo
CVMFS_HTTP_PROXY=DIRECT

Ключ CVMFS_HTTP_PROXY, по-видимому, обязателен для монтирования репозитория cvmfs.

Наконец, скопируйте главный открытый ключ для нашего репозитория, хранящийся по адресу /etc/cvmfs/keys/my.new.repo.pub на сервере, в то же место на клиенте.

Теперь вы можете просто попробовать получить доступ к /cvmfs/my.new.repo, и autofs автоматически смонтирует репозиторий.

$ ls /cvmfs/my.new.repo
new_repository
new_dir
$ cat /cvmfs/my.new.repo/new_dir/hello_world
Hello, World!

Включить CORS

Для написания браузерного JavaScript-клиента для CernVM-FS серверы Apache для репозиториев должны установить CORS-заголовки в своих HTTP-ответах, чтобы JavaScript-выборки работали. Однако конфигурации сервера CernVM-FS не устанавливают этот заголовок по умолчанию.

Это просто изменить. На сервере конфигурация Apache для нашего репозитория будет находиться по адресу /etc/apache2/conf-available/cvmfs.my.new.repo.conf. Добавьте в этот файл следующую строку:

Header set Access-Control-Allow-Origin "*"

Затем перезапустите сервер Apache, выполнив:

$ sudo service apache2 restart

Чтобы убедиться, что это сработало, мы проверяем заголовки ответов HTTP, используя wget

$ wget -qS http://localhost:80/cvmfs/my.new.repo/.cvmfspublished
HTTP/1.1 200 OK
Date: Mon, 30 Apr 2018 08:00:27 GMT
Server: Apache/2.4.18 (Ubuntu)
Access-Control-Allow-Origin: *
Accept-Ranges: bytes
Content-Length: 550
Cache-Control: max-age=61
Expires: Mon, 30 Apr 2018 08:01:28 GMT
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/x-cvmfs