apt-get update не работает внутри контейнера: репозиторий yarn не подписан

У меня есть GitHub Action, которая собирает образы, и она падает при попытке выполнить apt-get update. Я пока разбираюсь, в чём проблема, но на установке, которую я сделал 2 часа назад, при выполнении apt-get update внутри контейнера возникает следующая ошибка:

root@monstera-web-only:/# apt-get update
Получение:1 http://deb.debian.org/debian bullseye InRelease [116 кБ]
Получение:2 https://dl.yarnpkg.com/debian stable InRelease [17,1 кБ]
Получение:3 http://deb.debian.org/debian-security bullseye-security InRelease [48,4 кБ]
Получение:4 http://deb.debian.org/debian bullseye-updates InRelease [44,1 кБ]
Получение:5 http://deb.debian.org/debian bullseye-backports InRelease [49,0 кБ]
Получение:6 http://apt.postgresql.org/pub/repos/apt bullseye-pgdg InRelease [91,7 кБ]
Получение:7 http://deb.debian.org/debian bullseye/main amd64 Packages [8 183 кБ]
Ошибка:2 https://dl.yarnpkg.com/debian stable InRelease
  Следующие подписи недействительны: EXPKEYSIG 23E7166788B63E1E Yarn Packaging <yarn@dan.cx>
Получение:8 http://deb.debian.org/debian-security bullseye-security/main amd64 Packages [216 кБ]
Получение:9 http://deb.debian.org/debian bullseye-updates/main amd64 Packages [14,6 кБ]
Получение:10 http://deb.debian.org/debian bullseye-backports/main amd64 Packages [384 кБ]
Получение:11 https://deb.nodesource.com/node_18.x bullseye InRelease [4 586 Б]
Получение:12 http://apt.postgresql.org/pub/repos/apt bullseye-pgdg/main amd64 Packages [268 кБ]
Получение:13 https://deb.nodesource.com/node_18.x bullseye/main amd64 Packages [774 Б]
Чтение списков пакетов... Готово
W: Ошибка GPG: https://dl.yarnpkg.com/debian stable InRelease: Следующие подписи недействительны: EXPKEYSIG 23E7166788B63E1E Yarn Packaging <yarn@dan.cx>
E: Репозиторий 'https://dl.yarnpkg.com/debian stable InRelease' не подписан.
N: Обновление из такого репозитория не может быть выполнено безопасно, поэтому по умолчанию отключено.
N: См. страницу справки apt-secure(8) для получения подробностей о создании репозиториев и настройке пользователя.
1 лайк

В нашем ежедневном CI для сборки образов изображений я не вижу никаких ошибок. Можете ли вы предоставить вывод команды cat /VERSION изнутри контейнера?

Клянусь, это стандартная установка. . .

# cat /VERSION 
2.0.20230116

Я всё ещё проверяю свой CI, чтобы убедиться, что там нет какой-нибудь глупости (что вполне возможно). Не совсем понятно, что именно вызывает apt-get update.

РЕДАКТИРОВАНИЕ: В моём CI используется шаблон, который устанавливает vim. Он выполняет apt-get update. В обычной установке, насколько я вижу, apt-get update не выполняется, поэтому ваш CI не падает.

Многие шаблоны импорта и шаблоны обновления PostgreSQL (перечисленные ниже) выполняют apt-get update, так что это станет проблемой в какой-то момент.

root@monstera:/var/discourse# grep -lr 'apt-get update'
templates/postgres.9.5.template.yml
templates/postgres.13.template.yml
templates/postgres.template.yml
templates/import/mbox.template.yml
templates/import/mysql-dep.template.yml
templates/import/vanilla.template.yml
templates/import/chrome-dep.template.yml
templates/import/phpbb3.template.yml
templates/postgres.10.template.yml
templates/postgres.12.template.yml
image/base/slim.Dockerfile
1 лайк

Да, это будет моим следующим вопросом, так как выполнение такого обновления не является стандартной практикой и вносит изменения, которые трудно отследить, поскольку большинство сайтов используют статичную ОС и полагаются на новый образ для обновления компонентов на уровне операционной системы.

Если репозиторий yarn apt сломается, я предполагаю, что это также сломает нашу систему непрерывной интеграции (CI).

Я смогу проверить это на следующей неделе. Возможно, нам потребуется выпустить новый базовый образ для этого.

1 лайк

Звучит хорошо. Только для подтверждения: мне нужно собрать новый контейнер для импорта phpbb3, но я не могу этого сделать. Вот как это исправить.

Вот ссылка:

Там рекомендуется использовать curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -, но apt-key устарел.

Если выполнить это внутри контейнера:

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg -o /usr/share/keyrings/yarn-keyring.asc \
    && sed -i '1s;^deb;deb [signed-by=/usr/share/keyrings/yarn-keyring.asc];' /etc/apt/sources.list.d/yarn.list

то затем можно выполнить:

root@monstera-web-only:/# apt-get update
Hit:1 https://deb.nodesource.com/node_18.x bullseye InRelease
Hit:2 http://deb.debian.org/debian bullseye InRelease                                             
Get:3 https://dl.yarnpkg.com/debian stable InRelease [17.1 kB]                                    
Get:4 http://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]                              
Hit:5 http://deb.debian.org/debian bullseye-updates InRelease                           
Hit:6 http://deb.debian.org/debian bullseye-backports InRelease
Get:7 https://dl.yarnpkg.com/debian stable/main all Packages [10.9 kB]
Get:8 http://deb.debian.org/debian-security bullseye-security/main amd64 Packages [216 kB] 
Hit:9 http://apt.postgresql.org/pub/repos/apt bullseye-pgdg InRelease    
Get:10 https://dl.yarnpkg.com/debian stable/main amd64 Packages [10.9 kB]
Fetched 286 kB in 0s (849 kB/s)     
Reading package lists... Done

Аналогично, если добавить

          - curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg -o /usr/share/keyrings/yarn-keyring.asc && sed -i '1s;^deb;deb [signed-by=/usr/share/keyrings/yarn-keyring.asc];' /etc/apt/sources.list.d/yarn.list

перед apt-get update в файле templates/import/phpbb3.template.yml, то можно собрать новый контейнер.

3 лайка

@Falco Извините за дубликат поста!

@pfaffman Большое спасибо! Подтверждаю, что этот обходной путь работает и с mysql-dep.template.yml.

2 лайка

У меня возникают похожие ошибки при обновлении.

Err:7 https://dl.yarnpkg.com/debian stable InRelease
  Следующие подписи недействительны: EXPKEYSIG 23E7166788B63E1E Yarn Packaging <yarn@dan.cx>
Get:13 http://apt.postgresql.org/pub/repos/apt bullseye-pgdg/main amd64 Packages [268 kB]
Reading package lists...
FAILED

--------------------

Pups::ExecError: cd /var/www/discourse && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libsqlite3-dev завершилась с ошибкой, код возврата #<Process::Status: pid 532 exit 100>

Место ошибки: /usr/local/lib/ruby/gems/3.1.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'

Ошибка выполнения с параметрами {"cd"=>"$home", "cmd"=>["apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libsqlite3-dev", "echo \"gem 'sqlite3'\" >> Gemfile", "su discourse -c 'bundle config unset deployment'", "su discourse -c 'bundle install --no-deployment --path vendor/bundle --jobs 4 --without test development'"]}

Из discourse-doctor я получил:

Проверка вашего доменного имени . . .

Подключение к xxx успешно.

Возможно, вам стоит удалить любые нестандартные плагины и пересобрать систему.

Попытка перезапуска существующего контейнера . . .

Обнаружена архитектура x86_64.

ПРЕДУПРЕЖДЕНИЕ: файл containers/app.yml доступен для чтения всем. Вы можете защитить этот файл, выполнив: chmod o-rwx containers/app.yml

Запуск существующего контейнера

+ /usr/bin/docker start app

Ошибка ответа от демона: драйвер не смог запрограммировать внешнее подключение для конечной точки app (c143632e34e1ae05e48759bdf163b4bbe5dc9aaf895f1fb7521f7e3784c26577): Ошибка запуска пользовательского прокси: listen tcp 0.0.0.0:443: bind: адрес уже используется

Ошибка: не удалось запустить контейнеры: app

Не удалось перезапустить контейнер.

Есть ли что-то, что я могу сделать, кроме чистой установки?}

Я перенёс это в эту тему @fidelio, чтобы отчёты были сгруппированы вместе. :+1:

2 лайка

Поскольку я «амбициозный любитель», у меня быстрый вопрос:
Как выполнить команду Curl «внутри контейнера»?

В сообщении выше я указал, что команду curl можно включить в шаблон, выполняющий apt-get. Apt-get update fails inside container yarn repo not signed - #6 by rahim123

@fidelio Привет! Вам нужно подключиться к другой базе данных, например SQLite, из экземпляра Discourse? То есть вы импортируете данные из другого форума? В противном случае вы можете отключить эту функцию, и обычный контейнер приложения Discourse пересоберётся без проблем.

Мне кажется, что он не обновился до PG 13 и использует шаблон pg12? Это проблема, которую всё равно нужно решить. И, скорее всего, требуется обновление ОС, а переход на новую виртуальную машину — это правильный шаг.

1 лайк

Привет, @rahim123. Нет, на данном этапе мне не нужно делать ни то, ни другое. Как мне отключить эту функцию?

@pfaffman Ах, просто показалось странным, что в его логе ошибок сообщается о попытке установить libsqlite3-dev. Или Discourse обычно использует это для чего-то?

@fidelio Не могли бы вы скопировать сюда секцию templates: из вашего файла /var/discourse/containers/app.yml? Убедитесь, что вы не включили никакие пароли, которые могут находиться ниже в файле. Вы также можете запустить /var/discourse/discourse-doctor, и это поможет вам создать общедоступный отчет о конфигурации вашей системы.

1 лайк

@rahim123 Конечно, вот отчёт discourse-doctor:

Найден файл containers/app.yml

==================== НАСТРОЙКИ YML ====================
DISCOURSE_HOSTNAME=community.bfs-filmeditor.de
SMTP_ADDRESS=in-v3.mailjet.com
DEVELOPER_EMAILS=xxx
SMTP_PASSWORD=xxx
SMTP_PORT=25
SMTP_USER_NAME=xxx
LETSENCRYPT_ACCOUNT_EMAIL=xxx

==================== ИНФОРМАЦИЯ О DOCKER ====================
ВЕРСИЯ DOCKER: Docker version 18.06.1-ce, build e68fc7a

ПРОЦЕССЫ DOCKER (docker ps -a)

CONTAINER ID        IMAGE                           COMMAND             CREATED             STATUS              PORTS                                      NAMES
ce58652241d9        local_discourse/app             "/sbin/boot"        2 недели назад      Запущен 14 минут назад   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app
8e6b8ec432b4        local_discourse/mail-receiver   "/sbin/boot"        11 месяцев назад    Запущен 11 месяцев назад   0.0.0.0:25->25/tcp                         mail-receiver

ce58652241d9        local_discourse/app             "/sbin/boot"        2 недели назад      Запущен 14 минут назад   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app

Контейнер Discourse app запущен


==================== ПЛАГИНЫ ====================
          - git clone https://github.com/discourse/docker_manager.git
          - git clone  https://github.com/davidtaylorhq/discourse-whos-online.git
          - git clone https://github.com/gdpelican/babble.git
          - git clone https://github.com/angusmcleod/discourse-quick-messages.git
          - git clone https://github.com/angusmcleod/discourse-events.git
          - git clone https://github.com/discourse/discourse-calendar.git
          - git clone https://github.com/discourse/discourse-data-explorer.git
          - git clone https://github.com/davidtaylorhq/discourse-telegram-notifications.git

ПРЕДУПРЕЖДЕНИЕ:
Похоже, у вас установлены неофициальные плагины.
Если у вас возникают проблемы, попробуйте отключить их и снова выполнить пересборку.

Список официальных плагинов см. по ссылке: https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb

========================================
Версия Discourse на community.bfs-filmeditor.de: TYPO3 CMS
Версия Discourse на localhost: TYPO3 CMS


==================== ИНФОРМАЦИЯ О ПАМЯТИ ====================
ОЗУ (МБ): 4039

              total        used        free      shared  buff/cache   available
Mem:           3944        1272        1236        1067        1436        1364
Swap:             0           0           0

==================== ПРОВЕРКА МЕСТА НА ДИСКЕ ====================
---------- Место на диске ОС ----------
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        78G   60G   18G  78% /

---------- Место на диске контейнера ----------
Filesystem      Size  Used Avail Use% Mounted on
overlay          78G   60G   18G  78% /
/dev/vda1        78G   60G   18G  78% /shared
/dev/vda1        78G   60G   18G  78% /var/log

==================== ИНФОРМАЦИЯ О ДИСКЕ ====================
Диск /dev/vda: 80 ГиБ, 85899345920 байт, 167772160 секторов
Единицы: сектора по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода-вывода (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: gpt
Идентификатор диска: C1F9A1FE-534C-4DAC-9299-5CC180C29DCE

Устройство      Начало       Конец   Сектора  Размер Тип
/dev/vda1  227328 167772126 167544799 79.9G Файловая система Linux
/dev/vda14   2048     10239      8192    4M Загрузочный раздел BIOS
/dev/vda15  10240    227327    217088  106M Базовый раздел Microsoft

Записи таблицы разделов не отсортированы по порядку на диске.

==================== КОНЕЦ ИНФОРМАЦИИ О ДИСКЕ ====================

Я отключил плагин quick messages, но ещё не удалил его.

Кстати, я думаю, что Babble не работает уже какое-то время:

3 лайка

Я думал, что discourse-doctor показывает, какие шаблоны включены, но, видимо, нет. Не могли бы вы также разместить это?

1 лайк

Он этого не делает. Хотя, возможно, это была бы хорошая идея, впервые я вспоминаю, что это было так важно.

1 лайк

Вот оно:

 GNU nano 2.9.3                                                                         containers/app.yml                                                                                   


## Это шаблон контейнера Docker Discourse «всё в одном», автономный
##
## После внесения изменений в этот файл вы ОБЯЗАНЫ выполнить пересборку
## /var/discourse/launcher rebuild app
##
## БУДЬТЕ *ОЧЕНЬ* ОСТОРОЖНЫ ПРИ РЕДАКТИРОВАНИИ!
## YAML-ФАЙЛЫ ЧРЕЗВЫЧАЙНО ЧУВСТВИТЕЛЬНЫ К ОШИБКАМ В ПРОБЕЛАХ ИЛИ ВЫРАВНИВАНИИ!
## Посетите http://www.yamllint.com/, чтобы проверить этот файл при необходимости

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## Раскомментируйте эти две строки, если хотите добавить Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/import/mbox.template.yml"
## Какие TCP/IP-порты должен открывать этот контейнер?
## Если вы хотите, чтобы Discourse использовал порт совместно с другим веб-сервером, например Apache или nginx,
## см. https://meta.discourse.org/t/17247 для деталей
expose:
  - "80:80"   # http
  - "443:443" # https

params:
  db_default_text_search_config: "pg_catalog.english"

  ## Установите db_shared_buffers максимум на 25% от общего объема памяти.
  ## Будет установлено автоматически при загрузке на основе обнаруженного объема ОЗУ, либо вы можете переопределить
  db_shared_buffers: "1024MB"

  ## Может улучшить производительность сортировки, но увеличивает использование памяти на подключение
  #db_work_mem: "40MB"

  ## Какую ревизию Git должен использовать этот контейнер? (по умолчанию: tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en

  ## Сколько одновременных веб-запросов поддерживается? Зависит от объема памяти и количества ядер процессора.
  ## Будет установлено автоматически при загрузке на основе обнаруженного количества процессоров, либо вы можете переопределить
  UNICORN_WORKERS: 4

Думаю, проблема именно здесь. Попробуйте поставить # в начале этой строки и выполнить команду ./launcher rebuild app.

2 лайка