Impossível forçar o Debian a fazer instalação autônoma… libc6 quer confirmação interativa

7

Estou tentando criar um script que force uma instalação do Debian Lenny a instalar a versão mais recente do CRAN R. Durante a instalação, parece que a libc6 está atualizada e a instalação quer interativa, confirme que não há problema em reiniciar três serviços (mysql, exim4, cron). Este processo tem que ser desacompanhado enquanto é executado nas máquinas Elastic Map Reduce (EMR) da Amazon. Mas estou ficando sem opções. Aqui estão algumas coisas que eu tentei:

Esta pergunta anterior parece ser exatamente o que estou procurando. Então eu configurei meu script de instalação da seguinte forma:

# set my CRAN repos... yes, I know there's a new convention where to put these. 
echo "deb http://cran.r-project.org/bin/linux/debian lenny-cran/" | sudo tee -a /etc/apt/sources.list
echo "deb-src http://cran.r-project.org/bin/linux/debian lenny-cran/" | sudo tee -a /etc/apt/sources.list

# set the dpkg.cfg options per the previous SuperUser question
echo "force-confold" | sudo tee -a  /etc/dpkg/dpkg.cfg
echo "force-confdef" | sudo tee -a  /etc/dpkg/dpkg.cfg
export DEBIAN_FRONTEND=noninteractive

# add key to keyring so it doesn't complain 
gpg --keyserver pgp.mit.edu --recv-key 381BA480
gpg -a --export 381BA480 > jranke_cran.asc
sudo apt-key add jranke_cran.asc

sudo apt-get update

# install the latest R
sudo apt-get install --yes --force-yes r-base 

Mas este script trava com a seguinte solicitação de entrada:

OK, tentei interromper os serviços usando o seguinte script:

sudo /etc/init.d/mysql stop
sudo /etc/init.d/exim4 stop
sudo /etc/init.d/cron stop
sudo apt-get install --yes --force-yes libc6

Isso não funciona e a tela interativa volta, mas desta vez apenas com o cron listado como o serviço que deve ser reiniciado.

Então existe uma maneira de fazer a libc6 apenas reiniciar esses serviços sem nenhuma entrada do usuário? Ou existe uma maneira de parar o cron para que ele não cause um prompt interativo? Talvez uma opção criativa que eu nunca tenha pensado?

Lembre-se de que esse sistema é ativado, que algum código do Hadoop é executado e, em seguida, é demolido. Assim, posso tolerar os efeitos colaterais e o mau comportamento que talvez não desejemos em uma máquina desktop de produção ou em um servidor da web.

    
por JD Long 22.02.2011 / 16:08

6 respostas

11

Eu não tenho certeza sobre as configurações do Lenny, mas sei que no Squeeze, o sudo é configurado com env_reset , o que significa que ele removerá todas as poucas variáveis env antes de executar o comando.

Isso significa que a variável DEBIAN_FRONTEND que você definiu nunca chegou a apt-get install --yes --force-yes r-base . Se você tiver acesso total ao sudo, ou seja, se estiver nos arquivos sudoers com ALL = ALL permissões, poderá substituir esse comportamento.

Tente usar o seguinte em seu lugar.

sudo DEBIAN_FRONTEND=noninteractive apt-get install --yes --force-yes r-base

Editar: observe que reescrever o script para não usar o sudo em todos os lugares e, em vez disso, executar o script como root também funcionaria. Mas fazer isso seria apenas evitar o problema real que eu apontei em vez de resolvê-lo e aprender com ele.

    
por 22.02.2011 / 19:04
4

Uma variante mais concisa da solução debconf mencionada em outra resposta é a seguinte:

echo 'libc6 libraries/restart-without-asking boolean true' | sudo debconf-set-selections

Eu apenas usei esta solução com sucesso ao atualizar o glibc no Debian 7 (wheezy).

Para os curiosos, a maneira que encontrei a variável de configuração correta para definir foi a seguinte:

sudo apt-get install debconf-utils

sudo apt-get install -y libc6 # answer prompt interactively

debconf-get-selections | grep libc6

    
por 08.03.2014 / 18:16
3

Etapa 1

No host que tinha o pacote instalado manualmente (seleção de opção interativa), execute:

apt-get install debconf-utils
debconf-get-selections > answers.conf


Etapa 2 (Opcional)

Neste ponto, você pode querer filtrar answers.conf para incluir as respostas de configuração apenas para pacotes específicos. Eu testei sem filtrar.


Etapa 3

Ao criar um novo host, inclua answers.conf junto com seu script de instalação automática. Antes de executar apt-get install , no script, execute:

debconf-set-selections --verbose < answers.conf


Resultado

Isso preencherá o banco de dados debconf com respostas predefinidas. As perguntas interativas não serão feitas quando você executar apt-get install .

    
por 22.02.2011 / 17:51
2

Além do que discutimos no e-mail, há também o ditado

If you can't beat'em, join'em.

para que você possa criar uma máquina virtual em seu laptop que corresponda aos pacotes (base) na instância da nuvem e, em seguida, reconstrua seu próprio R 2.12.1 .deb local contra esses pacotes. Como nenhum libc6 atualizado está envolvido, você evitaria o problema.

Ou, de acordo com o seu comentário sobre possíveis efeitos colaterais permitidos, você pode desinstalar o exim4, o mysql e o cron. Seus trabalhos de R não precisarão deles. Algo como

sudo dpkg --force-depends --remove ...names of your packages here...

mas eu não posso acreditar que recomendo isso :) Você pode precisar de uma tentativa e erro para obter todos os pacotes exim e mysql relacionados.

    
por 22.02.2011 / 16:29
1

Eu pude deduzir que o instalador libc6 estava solicitando a reinicialização do cron mesmo que o cron não estivesse rodando o que parece estranho. De qualquer forma, consegui contornar isso renomeando os scripts cron init.d para que o instalador do pacote fosse enganado e não pensasse que o cron estava presente. Ugh. Que bagunça:

sudo /etc/init.d/mysql stop
sudo /etc/init.d/exim4 stop
sudo /etc/init.d/cron stop
sudo mv /etc/init.d/cron /etc/init.d/cron.bak
sudo apt-get install --yes --force-yes libc6
sudo mv /etc/init.d/cron.bak /etc/init.d/cron
sudo /etc/init.d/mysql start
sudo /etc/init.d/exim4 start
sudo /etc/init.d/cron start

Depois desse pequeno baile de kabuki eu posso instalar o ultimo R.

    
por 22.02.2011 / 18:00
0

Você pode tentar:

printf "\n" | sudo apt-get install --yes --force-yes libc6 
    
por 22.02.2011 / 16:24