Apt-get update falla dentro del contenedor yarn repo no firmado

Tengo una acción de GitHub que compila imágenes y falla cuando intenta hacer un apt-get update. Todavía estoy investigando qué está pasando con eso, pero en una instalación que hice hace 2 horas, obtengo este error si hago un apt-get update dentro del contenedor.

root@monstera-web-only:/# apt-get update
Get:1 http://deb.debian.org/debian bullseye InRelease [116 kB]
Get:2 https://dl.yarnpkg.com/debian stable InRelease [17.1 kB]
Get:3 http://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]
Get:4 http://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]
Get:5 http://deb.debian.org/debian bullseye-backports InRelease [49.0 kB]
Get:6 http://apt.postgresql.org/pub/repos/apt bullseye-pgdg InRelease [91.7 kB]
Get:7 http://deb.debian.org/debian bullseye/main amd64 Packages [8,183 kB]
Err:2 https://dl.yarnpkg.com/debian stable InRelease
  Las siguientes firmas no fueron válidas: EXPKEYSIG 23E7166788B63E1E Yarn Packaging <yarn@dan.cx>
Get:8 http://deb.debian.org/debian-security bullseye-security/main amd64 Packages [216 kB]
Get:9 http://deb.debian.org/debian bullseye-updates/main amd64 Packages [14.6 kB]
Get:10 http://deb.debian.org/debian bullseye-backports/main amd64 Packages [384 kB]
Get:11 https://deb.nodesource.com/node_18.x bullseye InRelease [4,586 B]
Get:12 http://apt.postgresql.org/pub/repos/apt bullseye-pgdg/main amd64 Packages [268 kB]
Get:13 https://deb.nodesource.com/node_18.x bullseye/main amd64 Packages [774 B]
Reading package lists... Done
W: GPG error: https://dl.yarnpkg.com/debian stable InRelease: Las siguientes firmas no fueron válidas: EXPKEYSIG 23E7166788B63E1E Yarn Packaging <yarn@dan.cx>
E: The repository 'https://dl.yarnpkg.com/debian stable InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
1 me gusta

No veo ningún error en nuestro CI de compilación de imágenes diario. ¿Puedes compartir la salida de cat /VERSION desde dentro del contenedor?

Juro que esta es una instalación estándar. . .

# cat /VERSION
2.0.20230116

Todavía estoy revisando mi CI para ver si tengo algo estúpido allí (lo cual es totalmente posible). No está claro qué está haciendo un apt-get update.

EDITAR: Mi CI tiene una plantilla que instala vim. Hace un apt-get update. Nada en una instalación normal hace un apt-get update que pueda ver, así que eso explica por qué tu CI no falla.

Muchas de las plantillas de importación y las plantillas de actualización de postgres (listadas a continuación) hacen un apt-get update, por lo que este será un problema en algún momento.

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 me gusta

Sí, esa sería mi próxima pregunta, ya que ejecutar una actualización como esa no es lo predeterminado e introducirá variaciones difíciles de rastrear, porque la mayoría de los sitios usan un sistema operativo estático y dependen de una nueva imagen para actualizar cosas a nivel del sistema operativo.

Si el repositorio apt de yarn se rompe, supongo que también romperá nuestra CI.

Puedo verificar esto la próxima semana. Quizás necesitemos lanzar una nueva imagen base para ello.

1 me gusta

Suena bien. Solo para confirmar, necesito crear un nuevo contenedor de importación de phpbb3 y no puedo. Aquí te explico cómo solucionarlo.

Aquí tienes esto:

Pero recomienda usar curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - pero apt-key está obsoleto.

Si hago esto en el contenedor:

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

Entonces puedo hacer esto:

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

De manera similar, si agrego

          - 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

antes de apt-get update en templates/import/phpbb3.template.yml, puedo construir un nuevo contenedor.

3 Me gusta

@Falco ¡Disculpa por mi publicación duplicada!

@pfaffman ¡Muchas gracias! Confirmo que esta solución alternativa también funciona con mysql-dep.template.yml.

2 Me gusta

Estoy recibiendo errores similares en una actualización.

Err:7 https://dl.yarnpkg.com/debian stable InRelease
  Las siguientes firmas no fueron válidas: 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 failed with return #<Process::Status: pid 532 exit 100>

Location of failure: /usr/local/lib/ruby/gems/3.1.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'

exec failed with the params {"cd"=>"$home", "cmd"=>["apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y libsqlite3-dev", "echo \"gem 'sqlite3'\" >> Gemfile", "su discourse -`Preformatted text`c 'bundle config unset deployment'", "su discourse -c 'bundle install --no-deployment --path vendor/bundle --jobs 4 --without test development'"]}

Desde discourse-doctor obtengo:

Checking your domain name . . .

Connection to xxx succeeded.

You should probably remove any non-standard plugins and rebuild.

Attempting to restart existing container. . .

x86_64 arch detected.

WARNING: containers/app.yml file is world-readable. You can secure this file by running: chmod o-rwx containers/app.yml

starting up existing container

+ /usr/bin/docker start app

Error response from daemon: driver failed programming external connectivity on endpoint app (c143632e34e1ae05e48759bdf163b4bbe5dc9aaf895f1fb7521f7e3784c26577): Error starting userland proxy: listen tcp 0.0.0.0:443: bind: address already in use

Error: failed to start containers: app

Failed to restart the container.

¿Hay algo que pueda hacer aparte de una nueva instalación?

He deslizado esto a este tema @fidelio para mantener los informes agrupados. :+1:

2 Me gusta

Como soy un ‘aficionado ambicioso’, una pregunta rápida: ¿Cómo ejecuto el comando Curl ‘dentro del contenedor’?

En una publicación anterior, incluyo que el comando curl se puede incluir en la plantilla que realiza apt-get. Apt-get update fails inside container yarn repo not signed - #6 by rahim123

@fidelio Hola, ¿necesitas conectarte a otra base de datos como SQLite desde tu instancia de Discourse, es decir, estás realizando una importación de datos desde otro foro? De lo contrario, puedes deshabilitar esa funcionalidad y el contenedor normal de la aplicación Discourse se reconstruirá sin problemas.

Mi suposición es que no ha actualizado a PG 13 y está usando la plantilla pg12? Ese es un problema que debería resolverse de todos modos. Y es una buena apuesta que el sistema operativo necesita ser actualizado y mudarse a una nueva máquina virtual es lo que hay que hacer.

1 me gusta

Hola @rahim123. No, no necesito hacer ninguna de esas cosas en esta etapa. ¿Cómo desactivo la funcionalidad?

@pfaffman Ah, solo parecía extraño que su registro de errores se quejara de intentar instalar libsqlite3-dev, ¿o Discourse normalmente usa eso para algo?

@fidelio ¿Podrías pegar aquí la sección templates: de tu archivo /var/discourse/containers/app.yml? Asegúrate de no incluir ninguna contraseña que esté más abajo en el archivo. También puedes ejecutar /var/discourse/discourse-doctor y te ayudará a generar un informe público de cómo está configurado tu sistema.

1 me gusta

@rahim123 Claro, aquí está el informe de discourse-doctor:

Found containers/app.yml
==================== CONFIGURACIÓN DE 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

==================== INFORMACIÓN DE DOCKER ====================
VERSIÓN DE DOCKER: Docker version 18.06.1-ce, build e68fc7a

PROCESOS DE DOCKER (docker ps -a)

CONTAINER ID        IMAGEN                           COMANDO             CREADO              ESTADO              PUERTOS                                      NOMBRES
ce58652241d9        local_discourse/app             “/sbin/boot”        hace 2 semanas      Arriba 14 minutos   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app
8e6b8ec432b4        local_discourse/mail-receiver   “/sbin/boot”        hace 11 meses       Arriba 11 meses     0.0.0.0:25->25/tcp                         mail-receiver

ce58652241d9        local_discourse/app             “/sbin/boot”        hace 2 semanas      Arriba 14 minutos   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app

El contenedor de Discourse app está en ejecución

==================== PLUGINS ====================
          - 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

ADVERTENCIA:
Tienes lo que parecen ser plugins no oficiales.
Si tienes problemas, deberías deshabilitarlos e intentar reconstruir de nuevo.

Consulta https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb para la lista oficial.

========================================
Versión de Discourse en community.bfs-filmeditor.de: TYPO3 CMS
Versión de Discourse en localhost: TYPO3 CMS

==================== INFORMACIÓN DE MEMORIA ====================
RAM (MB): 4039

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

==================== COMPROBACIÓN DE ESPACIO EN DISCO ====================
---------- Espacio en disco del SO ----------
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        78G   60G   18G  78% /

---------- Espacio en disco del contenedor ----------
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

==================== INFORMACIÓN DE DISCO ====================
Disco /dev/vda: 80 GiB, 85899345920 bytes, 167772160 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño del sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: gpt
Identificador del disco: C1F9A1FE-534C-4DAC-9299-5CC180C29DCE

Device      Start       End   Sectors  Size Type
/dev/vda1  227328 167772126 167544799 79.9G Linux filesystem
/dev/vda14   2048     10239      8192    4M BIOS boot
/dev/vda15  10240    227327    217088  106M Microsoft basic data

Las entradas de la tabla de particiones no están en el orden del disco.

==================== FIN DE INFORMACIÓN DE DISCO ====================

He deshabilitado los mensajes rápidos pero aún no los he eliminado.

Para que conste, creo que babble ha estado roto durante algún tiempo:

3 Me gusta

Pensé que discourse-doctor mostraba qué plantillas están habilitadas, supongo que no. ¿Podrías publicar esto también?

1 me gusta

No lo hace. Aunque parece que podría ser una buena idea, es la primera vez que recuerdo que fuera importante.

1 me gusta

Aquí está:

 GNU nano 2.9.3                                                                         containers/app.yml                                                                                   
 
 
 ## esta es la plantilla de contenedor Docker de Discourse todo en uno y autónoma
 ##
 ## Después de realizar cambios en este archivo, DEBE reconstruir
 ## /var/discourse/launcher rebuild app
 ##
 ## ¡TENGA MUCHO CUIDADO AL EDITAR!
 ## ¡LOS ARCHIVOS YAML SON EXTREMADAMENTE SENSIBLES A ERRORES DE ESPACIO EN BLANCO O ALINEACIÓN!
 ## visite http://www.yamllint.com/ para validar este archivo según sea necesario
 
 templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
 ## Descomente estas dos líneas si desea agregar Let's Encrypt (https)
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/import/mbox.template.yml"
 ## ¿qué puertos TCP/IP debe exponer este contenedor?
 ## Si desea que Discourse comparta un puerto con otro servidor web como Apache o nginx,
 ## consulte https://meta.discourse.org/t/17247 para obtener detalles
 expose:
  - "80:80"   # http
  - "443:443" # https
 
 params:
  db_default_text_search_config: "pg_catalog.english"
 
  ## Establezca db_shared_buffers en un máximo del 25% de la memoria total.
  ## se establecerá automáticamente mediante bootstrap según la RAM detectada, o puede anularlo
  db_shared_buffers: "1024MB"
 
  ## puede mejorar el rendimiento de la ordenación, pero aumenta el uso de memoria por conexión
  #db_work_mem: "40MB"
 
  ## ¿Qué revisión de Git debe usar este contenedor? (predeterminado: tests-passed)
  #version: tests-passed
 
 env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en
 
  ## ¿Cuántas solicitudes web concurrentes se admiten? Depende de la memoria y los núcleos de CPU.
  ## se establecerá automáticamente mediante bootstrap según las CPU detectadas, o puede anularlo
  UNICORN_WORKERS: 4

Creo que este es el problema, intenta poner un # delante y ejecutar ./launcher rebuild app.

2 Me gusta