インストール スクリプトに /tmp を使用する apt-get を停止する方法

インストール スクリプトに /tmp を使用する apt-get を停止する方法

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 さん、信用します。

関連情報