Como parar o apt-get usando /tmp para scripts de instalação

Como parar o apt-get usando /tmp para scripts de instalação

Eu tenho uma imagem base compatível com o benchmark CIS. Extrair isso para diferenciar uma imagem imutável para meu aplicativo, se eu tentar fazer

apt-get install -y docker.io

Eu recebo um erro

==> 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.

Isso ocorre porque as imagens compatíveis com CIS foram noexecdefinidas no /tmpsistema de arquivos.

Alguém conhece uma linha de comando ou maneira equivalente de fazer o apt-get usar um sistema de arquivos diferente para scripts de instalação, ou terei que agendar tarefas para instalar a partir do código-fonte? Observe que isso não afeta apenas docker.io, mas também outros. Estou procurando uma apt-getsolução em nível, não um método de pacote específico do aplicativo.

Responder1

Eu adicionei o código deesta postagemno script que (insira o orquestrador de pipeline) é executado para extrair a imagem base e instalar o software específico da imagem.

Como o script estava usando o sudo, e porque por padrão ele não adota a conta root, a execução do sudo adotou o usuário padrão do ubuntu, então ele configura o arquivo tmp no lugar errado e não funciona. Como apt-getprecisa de root para executá-lo, adicionei isto para garantir que apenas root pudesse executar meu script:

if [[ ${EUID} -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

Em seguida, removi o prefixo sudo dos comandos em meu script bash e executei todo o script com um sudo para fazer o orquestrador executar meu script como usuário root, o que significa que o orquestrador criou o arquivo tmp corretamente na máquina de compilação.

Crédito a @djdomi.

informação relacionada