
Ich habe ein CIS-Benchmark-kompatibles Basis-Image. Ich ziehe dieses, um ein unveränderliches Image für meine Anwendung zu unterscheiden, wenn ich versuche,
apt-get install -y docker.io
Ich erhalte eine Fehlermeldung
==> 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.
Dies liegt daran, dass noexec
sich im /tmp
Dateisystem CIS-kompatible Images festgelegt haben.
Kennt jemand eine Befehlszeile oder eine gleichwertige Methode, um apt-get dazu zu bringen, ein anderes Dateisystem für Installationsskripte zu verwenden, oder muss ich Aufgaben planen, um aus der Quelle zu installieren? Beachten Sie, dass dies nicht nur docker.io
, sondern auch andere betrifft. Ich suche nach einer apt-get
-Level-Lösung, nicht nach einer app-spezifischen Paketmethode.
Antwort1
Ich habe den Code von hinzugefügtdieser Beitragim Skript, das (Pipeline-Orchestrator einfügen) ausgeführt wird, um das Basisimage abzurufen und die imagespezifische Software zu installieren.
Da das Skript sudo verwendet hat und dies standardmäßig nicht das Root-Konto übernimmt, wurde bei der Ausführung von sudo der Standard-Ubuntu-Benutzer übernommen, sodass die temporäre Datei am falschen Ort eingerichtet wird und nicht funktioniert. Da apt-get
zum Ausführen Root erforderlich ist, habe ich Folgendes hinzugefügt, um sicherzustellen, dass nur Root mein Skript ausführen kann:
if [[ ${EUID} -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi
Anschließend habe ich das Sudo-Präfix aus den Befehlen in meinem Bash-Skript entfernt und das gesamte Skript mit einem Sudo ausgeführt, damit der Orchestrator mein Skript als Root-Benutzer ausführt, was bedeutete, dass der Orchestrator die temporäre Datei auf der Build-Maschine korrekt erstellt hat.
Vertrauen Sie @djdomi.