コンテナ内でapt-get updateが失敗する yarnリポジトリに署名がない

GitHub Actions でイメージをビルドしていますが、apt-get update を実行しようとすると失敗します。まだ原因を調査中ですが、2時間前に行ったインストールでは、コンテナ内で apt-get update を実行するとこのエラーが発生します。

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
  以下の署名が無効です: 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: The following signatures were invalid: 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

コンテナ内の cat /VERSION の出力を共有していただけますか?日次イメージビルド CI にエラーは見られません。

これは標準的なインストールだと誓います。 . .

# cat /VERSION
2.0.20230116

CIで何か愚かなことをしていないか確認中です(それは完全に可能です)。何が apt-get update を実行しているのかさえわかりません。

編集:私のCIには vim をインストールするテンプレートがあります。それは apt-get update を実行します。通常のインストールでは、見える限り apt-get update を実行するものはありません。そのため、あなたのCIが失敗しない理由がわかりました。

インポートテンプレートやPostgresアップグレードテンプレートの多く(下記参照)は 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

はい、それが私の次の質問になります。そのようなアップデートの実行はデフォルトではなく、追跡が困難なばらつきをもたらすためです。ほとんどのサイトでは静的なOSを使用し、OSレベルのものを更新するために新しいイメージに依存しています。

yarn apt リポジトリが壊れた場合、CI も壊れると想定されます。

これは来週確認できます。OSレベルのものを更新するために新しいベースイメージをリリースする必要があるかもしれません。

「いいね!」 1

了解しました。~~確認ですが、新しいphpbb3インポートコンテナをビルドする必要があり、それができません。~~修正方法は以下の通りです。

こちらをご覧ください。

しかし、apt-key は非推奨であるため、curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - を使用することが推奨されています。

コンテナ内で次のように実行すると:

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 を実行できます:

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

同様に、templates/import/phpbb3.template.ymlapt-get update の前に次を追加すると:

          - 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

新しいコンテナをビルドできるようになります。

「いいね!」 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 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'"]}

discourse-doctorからは以下が出力されます。

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.

新規インストール以外に何かできることはありますか?

このトピックに移動しました @fidelio レポートをまとめておくためです。:+1:

「いいね!」 2

「意欲的なアマチュア」として、簡単な質問があります。
コンテナ内でCurlコマンドを実行するにはどうすればよいですか?

上記の投稿で、apt-getを実行するテンプレートにcurlコマンドを含めることができると記載しました。 Apt-get update fails inside container yarn repo not signed - #6 by rahim123

@fidelio こんにちは。Discourseインスタンス内でSQLiteのような別のデータベースに接続する必要がありますか?つまり、別のフォーラムからデータをインポートしていますか?それ以外の場合は、その機能を無効にすることができ、通常のDiscourseアプリコンテナは正常に再構築されます。

PG 13にアップグレードしておらず、pg12テンプレートを使用しているのではないでしょうか?それはいずれにしても解決すべき問題です。OSのアップグレードが必要であり、新しいVMへの移行が最善策である可能性が高いです。

「いいね!」 1

こんにちは、@rahim123 さん。現段階ではどちらも必要ありません。機能は無効にするにはどうすればよいですか?

@pfaffman ああ、彼のログが libsqlite3-dev のインストールを試みていたと不満を言っていたのが奇妙に思えただけです。それとも、Discourse は通常、何かでそれを使用しますか?

@fidelio/var/discourse/containers/app.yml ファイルの templates: セクションをここに貼り付けていただけますか? ファイルの下の方にあるパスワードは含めないようにしてください。また、/var/discourse/discourse-doctor を実行すると、システムの構成方法に関する公開可能なレポートの生成に役立ちます。

「いいね!」 1

@rahim123 はい、こちらが discourse-doctor レポートです。

containers/app.yml を検出しました。

==================== YML SETTINGS ====================
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 INFO ====================
DOCKER VERSION: Docker version 18.06.1-ce, build e68fc7a

DOCKER PROCESSES (docker ps -a)

CONTAINER ID        IMAGE                           COMMAND             CREATED             STATUS              PORTS                                      NAMES
ce58652241d9        local_discourse/app             “/sbin/boot”        2 weeks ago         Up 14 minutes       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app
8e6b8ec432b4        local_discourse/mail-receiver   “/sbin/boot”        11 months ago       Up 11 months        0.0.0.0:25->25/tcp                         mail-receiver

ce58652241d9        local_discourse/app             “/sbin/boot”        2 weeks ago         Up 14 minutes       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   app

Discourse コンテナ app は実行中です。


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

WARNING:
非公式のプラグインが含まれているようです。
問題が発生している場合は、無効にしてから再構築してみてください。

公式リストについては https://github.com/discourse/discourse/blob/main/lib/plugin/metadata.rb を参照してください。

========================================
community.bfs-filmeditor.de の Discourse バージョン: TYPO3 CMS
localhost の Discourse バージョン: TYPO3 CMS


==================== MEMORY INFORMATION ====================
RAM (MB): 4039

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

==================== DISK SPACE CHECK ====================
---------- OS Disk Space ----------
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        78G   60G   18G  78% /

---------- Container Disk Space ----------
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

==================== DISK INFORMATION ====================
Disk /dev/vda: 80 GiB, 85899345920 bytes, 167772160 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 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

Partition table entries are not in disk order.

==================== END DISK INFORMATION ====================

クイックメッセージは無効にしましたが、まだ削除していません。

参考までに、Babble はしばらくの間動作していなかったと思います。

「いいね!」 3

discourse-doctor が有効なテンプレートを表示してくれると思っていたのですが、そうではないようです。これも投稿していただけますか?

「いいね!」 1

そうではありません。良いアイデアのように思えますが、これが重要になったのは今回が初めてだと思います。

「いいね!」 1

GNU nano 2.9.3 containers/app.yml

this is the all-in-one, standalone Discourse Docker container template

After making changes to this file, you MUST rebuild

/var/discourse/launcher rebuild app

BE VERY CAREFUL WHEN EDITING!

YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!

visit http://www.yamllint.com/ to validate this file as needed

templates:

  • “templates/postgres.template.yml”
  • “templates/redis.template.yml”
  • “templates/web.template.yml”
  • “templates/web.ratelimited.template.yml”

Uncomment these two lines if you wish to add Lets Encrypt (https)

  • “templates/web.ssl.template.yml”
  • “templates/web.letsencrypt.ssl.template.yml”
  • “templates/import/mbox.template.yml”

which TCP/IP ports should this container expose?

If you want Discourse to share a port with another webserver like Apache or nginx,

see Run other websites on the same machine as Discourse for details

expose:

  • “80:80” # http
  • “443:443” # https

params:
db_default_text_search_config: “pg_catalog.english”

Set db_shared_buffers to a max of 25% of the total memory.

will be set automatically by bootstrap based on detected RAM, or you can override

db_shared_buffers: “1024MB”

can improve sorting performance, but adds memory usage per-connection

#db_work_mem: “40MB”

Which Git revision should this container use? (default: tests-passed)

#version: tests-passed

env:
LANG: en_US.UTF-8

DISCOURSE_DEFAULT_LOCALE: en

How many concurrent web requests are supported? Depends on memory and CPU cores.

will be set automatically by bootstrap based on detected CPUs, or you can override

UNICORN_WORKERS: 4

これが問題だと思います。先頭に#を付けて、./launcher rebuild appを実行してみてください。

「いいね!」 2