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のビルド中にこれが自動的に実行される方法を見つけることができません。n
y
答え1
画像はbuster
Debian 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 -