console-setup faz com que o apt-get update seja interrompido

0

Desejo instalar o apache2 automaticamente na minha instância do EC2 durante o primeiro carregamento. Estou usando a imagem básica do Ubuntu 16.04 LTS:

ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-20180522 (ami-a4dc46db)

Meu script de dados do usuário está abaixo:

#!/bin/bash
apt-get update && apt-get upgrade -y
apt-get install apache2 -y

Ao fazer o login e esperar muito pacientemente, descobri que o apache2 não estava sendo instalado. Como esse script é executado como raiz, não consegui ver a saída como se a tivesse executado manualmente, então redirecionei toda a saída para um arquivo de log.

#!/bin/bash
apt-get update && apt-get upgrade -y &>/var/log/erich

Aqui está a parte que trava, esperando a entrada do usuário:

Setting up console-setup (1.108ubuntu15.4) ...
debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
Configuring console-setup
-------------------------


  1. ARMSCII-8         8. ISIRI-3342    15. ISO-8859-16  22. ISO-8859-8
  2. CP1251            9. ISO-8859-1    16. ISO-8859-2   23. ISO-8859-9
  3. CP1255            10. ISO-8859-10  17. ISO-8859-3   24. KOI8-R
  4. CP1256            11. ISO-8859-11  18. ISO-8859-4   25. KOI8-U
  5. GEORGIAN-ACADEMY  12. ISO-8859-13  19. ISO-8859-5   26. TIS-620
  6. GEORGIAN-PS       13. ISO-8859-14  20. ISO-8859-6   27. UTF-8
  7. IBM1133           14. ISO-8859-15  21. ISO-8859-7   28. VISCII

Encoding to use on the console:

Eu posso apt-mark hold desse pacote como uma medida de intervalo, mas isso não é uma solução. Como posso definir o tipo de codificação padrão?

    
por erich 18.06.2018 / 20:21

2 respostas

2

Pesquisando alguns erros do debconf que meu script encontra, outro perguntas respondidas todas parecem ter a mesma coisa em comum - execução remota via SSH. Esse também parece ser o método da Amazon de executar scripts de dados do usuário quando as instâncias são provisionadas.

Essas conexões SSH parecem não ter acesso a determinadas variáveis de ambiente ou dados de configuração padrão, portanto, defini-las explicitamente ajuda a reduzir os erros. A configuração da variável de ambiente DEBCONF_FRONTEND=noninteractive como sugerida aqui e em outras perguntas não funciona nesse caso específico.

Consegui definir a codificação padrão (que fazia meu script ser interrompido) para o pacote de configuração do console usando debconf-set-selections para atualizar o banco de dados de configuração antes da primeira chamada para apt-get . É necessário um arquivo como argumento, para que a linha de configuração possa ser gravada em um arquivo temporário e excluída posteriormente:

echo "console-setup   console-setup/charmap47 select  UTF-8" > encoding.conf
debconf-set-selections encoding.conf
rm encoding.conf
apt-get update && apt-get upgrade -y

Além disso, eu consegui suprimir muitos dos avisos do debconf adicionando export TERM=xterm ao topo do script.

    
por 20.06.2018 / 18:57
1

Você deve definir a seguinte variável de ambiente no topo do seu script: export DEBCONF_FRONTEND=noninteractive ; consulte o manual para mais explicações (consulte link ). Além disso, para ter certeza, adicione a opção -qq a apt-get .

Preste atenção que eu uso export , pois irá propagar a variável de ambiente para o ambiente atual e os filhos (ao contrário da VAR=VALUE notação). Isso é necessário porque apt-get gerará outros processos para configurar os pacotes.

Este é um trecho da página do manual do Bash:

export [-fn] [name[=word]] ... export -p The supplied names are marked for automatic export to the environment of subsequently executed commands. If the -f option is given, the names refer to functions...

Espero que isso ajude!

    
por 19.06.2018 / 14:15