依存関係が満たされていないため、Debian 9stretchにapt-transport-httpsをインストールできません:apt(> = 1.5〜alpha4)

依存関係が満たされていないため、Debian 9stretchにapt-transport-httpsをインストールできません:apt(> = 1.5〜alpha4)

CI/CD パイプラインに Dockerfile が構築されています。 Debian 9 StretchベースのDrupalイメージから始めて、Node 10をインストールします。ビルドイメージは過去3年間働いていましたが、昨日は機能しなくなりました。

問題を再現するには、Dockerfileの指示なしにコンテナを実行できます。

docker run -it drupal:8.6.1-apache bash

次に、Node 10をインストールする必要があるコンテナでこのスクリプトを実行します。

curl -fsSL https://deb.nodesource.com/setup_10.x | bash -

のインストール中にスクリプトが失敗しましたapt-transport-https。自分でインストールしようとすると、次のエラーが表示されます。

apt-get update && apt-get install -y apt-transport-https
...
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 apt-transport-https : Depends: apt (>= 1.5~alpha4) but 1.4.8 is to be installed
E: Unable to correct problems, you have held broken packages.

特定のバージョンをインストールするためにこのコマンドを実行しようとすると、次のようになります。

apt-get install -y apt=1.5~alpha4
...
E: Version '1.5~alpha4' for 'apt' was not found

利用可能なバージョンのリストを表示するためにこれを実行すると、次のようになりますapt

apt list -a apt
...
apt/stable-updates 1.8.2.3 amd64 [upgradable from: 1.4.8]
apt/stable,stable 1.8.2.2 amd64
apt/oldstable 1.4.11 amd64
apt/oldstable 1.4.10 amd64
apt/now 1.4.8 amd64 [installed,upgradable to: 1.8.2.3]

それから私は:

apt-get install -y apt=1.8.2.3
...
The following packages have unmet dependencies:
 apt : Depends: libapt-pkg5.0 (>= 1.7.0~alpha3~) but 1.4.8 is to be installed
       Depends: libgnutls30 (>= 3.6.6) but 3.5.8-5+deb9u5 is to be installed
E: Unable to correct problems, you have held broken packages.

その後、必要なバージョンをインストールしようとすると、次のようになりますlibapt-pkg5.0

The following packages have unmet dependencies:
 libapt-pkg5.0 : Depends: libc6 (>= 2.27) but 2.24-11+deb9u4 is to be installed
                 Depends: libzstd1 (>= 1.3.2) but 1.1.2-1+deb9u1 is to be installed
                 Breaks: apt (< 1.6~) but 1.4.8 is to be installed
                 Recommends: apt (>= 1.8.2.3) but 1.4.8 is to be installed

その後、実行すると:

apt-get install -y libzstd1=1.3.8+dfsg-3+deb10u2 # this seems to install fine
apt-get install -y libc6=2.28-10

次の場合、インストールはlibc6失敗します。

Reading package lists... 0%
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
  linux-libc-dev
Use 'apt autoremove' to remove it.
Suggested packages:
  glibc-doc libc-l10n locales
Recommended packages:
  libidn2-0
The following packages will be upgraded:
  libc6
1 upgraded, 0 newly installed, 0 to remove and 57 not upgraded.
Need to get 2867 kB of archives.
After this operation, 1693 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian buster/main amd64 libc6 amd64 2.28-10 [2867 kB]
Fetched 2867 kB in 1s (1858 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
dpkg: warning: 'ldconfig' not found in PATH or not executable
dpkg: error: 1 expected program not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin
E: Sub-process /usr/bin/dpkg returned an error code (2)

この時点で私はこの問題を解決するのに何時間も費やしましたが、この方向に進む価値があるのか​​、それともこの問題を解決するための別の方法があるのか​​と思います。

aptitude次のように、新しいコンテナのすべての依存関係を満たすことができました。

apt-get update
apt-get install -y aptitude
aptitude install apt-transport-https

それは私に尋ねた:

The following NEW packages will be installed:
  apt-transport-https libseccomp2{a}
The following packages will be upgraded:
  apt{b} libapt-pkg5.0{b}
2 packages upgraded, 2 newly installed, 0 to remove and 59 not upgraded.
Need to get 2575 kB of archives. After unpacking 1189 kB will be used.
The following packages have unmet dependencies:
 apt : Depends: libgnutls30 (>= 3.6.6) but 3.5.8-5+deb9u3 is installed and it is kept back
       Breaks: aptitude (< 0.8.10) but 0.8.7-1 is installed
 libapt-pkg5.0 : Depends: libc6 (>= 2.27) but 2.24-11+deb9u3 is installed and it is kept back
                 Depends: libzstd1 (>= 1.3.2) but it is not going to be installed
                 Breaks: aptitude (< 0.8.9) but 0.8.7-1 is installed
The following actions will resolve these dependencies:

     Keep the following packages at their current version:
1)     apt [1.4.8 (now)]
2)     apt-transport-https [Not Installed]
3)     libapt-pkg5.0 [1.4.8 (now)]



Accept this solution? [Y/n/q/?]

このソリューションは何もしませんが、入力すると次nの質問が表示されます。

The following actions will resolve these dependencies:

      Install the following packages:
1)      libboost-iostreams1.67.0 [1.67.0-13+deb10u1 (stable)]
2)      libboost-system1.67.0 [1.67.0-13+deb10u1 (stable)]
3)      libgpm2 [1.20.4-6.2+b1 (oldstable)]
4)      libncursesw6 [6.1+20181013-2+deb10u2 (stable)]
5)      libtinfo6 [6.1+20181013-2+deb10u2 (stable)]
6)      libunistring2 [0.9.10-1 (stable)]
7)      libzstd1 [1.3.8+dfsg-3+deb10u2 (stable)]

      Upgrade the following packages:
8)      aptitude [0.8.7-1 (now, oldstable) -> 0.8.11-7 (stable)]
9)      aptitude-common [0.8.7-1 (now, oldstable) -> 0.8.11-7 (stable)]
10)     libc-bin [2.24-11+deb9u3 (now) -> 2.28-10 (stable)]
11)     libc-dev-bin [2.24-11+deb9u3 (now) -> 2.28-10 (stable)]
12)     libc6 [2.24-11+deb9u3 (now) -> 2.28-10 (stable)]
13)     libc6-dev [2.24-11+deb9u3 (now) -> 2.28-10 (stable)]
14)     libcwidget3v5 [0.5.17-4+b1 (now, oldstable) -> 0.5.17-11 (stable)]
15)     libgnutls30 [3.5.8-5+deb9u3 (now) -> 3.6.7-4+deb10u4 (stable)]
16)     libhogweed4 [3.3-1+b2 (now, oldstable) -> 3.4.1-1 (stable)]
17)     libidn2-0 [0.16-1+deb9u1 (now, oldstable) -> 2.0.5-1+deb10u1 (stable)]
18)     libnettle6 [3.3-1+b2 (now, oldstable) -> 3.4.1-1 (stable)]
19)     libp11-kit0 [0.23.3-2 (now, oldstable) -> 0.23.15-2+deb10u1 (stable)]
20)     libtasn1-6 [4.10-1.1+deb9u1 (now, oldstable) -> 4.13-3 (stable)]
21)     libxapian30 [1.4.3-2+deb9u3 (now, oldstable) -> 1.4.11-1 (stable)]

Accept this solution? [Y/n/q/?]

この解決策を受け入れるとうまくいきます。正常にインストールされたので、スクリプトをapt-transport-https実行して Node.js をインストールできます。ただし、これは一度、2回curl -fsSL https://deb.nodesource.com/setup_10.x | bash -入力する必要があるインタラクティブなソリューションなので、Dockerのビルド中にこれが自動的に実行される方法を見つけることができません。ny

答え1

画像はbusterDebian 10()のパッケージは拒否されますが、最新の(buster-updates)のパッケージは拒否されるように構成されているため、最終的にapt-transport-https後者からインポートしようとします。この問題を解決するには、/etc/apt/preferences.d/argon2-buster次のように編集してください。

Package: *
Pin: release n=buster*
Pin-Priority: -10

Package: libargon2*
Pin: release n=buster
Pin-Priority: 990

つまり*最初の後に追加されましたbuster。これにより、apt-transport-https問題なくインストールできます。

次のコマンドを使用して自動化できます。

sed -i '2,2s/buster/buster*/' /etc/apt/preferences.d/argon2-buster

答え2

私の場合はphp:7.2.15-apache-stretch。スクリプトがapt-transport-https version =インストールを試みていることがわかりました1.4.11

ところで、この問題が発生する前にビルドされたコンテナ内で実行してみると、apt apt-transport-https -vバージョンが1.4.10

ノードカールの前にインストールを追加しました。

FROM php:7.2.15-apache-stretch
...
RUN apt-get update
...
RUN apt-get install -y apt-transport-https=1.4.10
RUN curl -sL https://deb.nodesource.com/setup_15.x | bash -

関連情報