
CISベンチマーク準拠のベースイメージがあります。これをプルして、アプリケーション用の不変イメージを区別します。
apt-get install -y docker.io
エラーが発生します
==> amazon-ebs: Can't exec "/tmp/docker.io.config.NzitwJ": Permission denied at /usr/share/perl/5.26/IPC/Open3.pm line 178.
==> amazon-ebs: open2: exec of /tmp/docker.io.config.NzitwJ configure failed: Permission denied at /usr/share/perl5/Debconf/ConfModule.pm line 59.
これは、CIS 準拠のイメージがファイルシステムnoexec
上に設定されているためです/tmp
。
インストール スクリプトに別のファイル システムを使用するように apt-get を設定するコマンド ラインまたは同等の方法をご存知の方はいらっしゃいますか。それとも、ソースからインストールするタスクをスケジュールする必要がありますか。これは だけでなくdocker.io
、他の にも影響することに注意してください。アプリ固有のパッケージ メソッドではなく、 レベルのソリューションを探していますapt-get
。
答え1
コードを追加しましたこの郵便受けベースイメージをプルし、イメージ固有のソフトウェアをインストールするために実行されるスクリプト(パイプラインオーケストレーターを挿入)内。
スクリプトは sudo を使用していましたが、デフォルトでは root アカウントが採用されないため、sudo を実行するとデフォルトの ubuntu ユーザーが採用され、tmp ファイルが間違った場所に設定され、機能しなくなります。apt-get
実行するには root が必要なので、スクリプトを root だけが実行できるようにするために以下を追加しました。
if [[ ${EUID} -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
次に、bash スクリプト内のコマンドの sudo プレフィックスを削除し、スクリプト全体を sudo で実行して、オーケストレーターがスクリプトをルート ユーザーとして実行するようにしました。これにより、オーケストレーターはビルド マシン上に tmp ファイルを正しく作成しました。
@djdomi さん、信用します。