snap и gitlab-CI: ошибка: не удается установить связь с сервером: Сообщение http://localhost/v2/snaps/hello-world

#docker #gitlab #gitlab-ci #snapcraft

#docker #gitlab #gitlab-ci #snapcraft

Вопрос:

Если я попытаюсь запустить snap в конвейере gitlab-CI, установив самый простой пакет, произойдет сбой с:

$ snap install привет, мир

ошибка: не удается установить связь с сервером: Сообщениеhttp://localhost/v2/snaps/hello-world : наберите unix /run/snapd.socket: connect: нет такого файла или каталога

Файл конфигурации gitlab-ci yml является самым простым из всех:

 image: ubuntu:18.04

before_script:
  - apt-get update -qq

test:
  script:
    - apt-get install -y snapd
    - snap version
    - snap install hello-world
    - hello-world
  

Что происходит?

Ответ №1:

В моем случае это решается путем запуска snapd службы:

 systemctl start snapd.service
  

Комментарии:

1. вы уверены? вы тестировали это в GitLabCI?

Ответ №2:

К сожалению, привязки используют многие базовые технологии безопасности, используемые docker, и они не очень хорошо работают. Для установки snap также требуется запуск snapd, которого нет в docker (отсюда и ошибка). Боюсь, сегодня вы просто не можете надежно установить привязки в контейнерах docker.

Обратите внимание, что существуют другие системы CI, не основанные на docker. Вы можете, выполнив небольшую пользовательскую работу, использовать LXD в качестве серверной части для вашего GitLab CI runner, который отлично обрабатывает привязки. Вы также можете использовать действия GitHub, которые, похоже, основаны на виртуальной машине Azure, которая также отлично обрабатывает привязки.

Ответ №3:

Кажется, GithubActionsCI не использует Docker, поэтому я использую это сейчас вместо GitLabCI для сборки и тестирования пакетов snap.

Просто обратите внимание:

  • Вам нужен sudo для установки snap с помощью apt-get, а также для установки любого пакета snap с помощью команды snap.
  • Если вы хотите запустить snapcraft (для сборки пакетов, а не просто их тестирования), получение его через apt-get работает, но выдает версию, которая немного устарела (например, она не поддерживает макеты). Если вам нужна более новая версия, вы можете установить ее через snap с помощью snap install snapcraft но вам нужны некоторые обходные пути для ее запуска, такие как sudo chown root:root / и передача --destructive-mode флага (см. https://forum.snapcraft.io/t/permissions-problem-using-snapcraft-in-azure-pipelines/13258/16 ).