Estou tentando desenvolver 0ad
o serviço travis-ci e estou enfrentando falhas aleatórias de apt-get install
(ou apt-get dist-upgrade
) com o código de retorno 137 sem qualquer informação adicional. travis-ci é baseado no Ubuntu 12.04. O que 137 está indicando? Um exemplo de saída pode ser encontrado emhttps://travis-ci.org/krichter722/0ad/jobs/92938434.
Mais algumas informações do sistema.
$ uname -a && lsb_release -a
Linux testing-worker-linux-89e97461-1-15272-linux-4-69692739 2.6.32-042stab090.5 #1 SMP Sat Jun 21 00:15:09 MSK 2014 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04 LTS
Release: 12.04
Codename: precise
Responder1
Uma resposta sobre o status de retorno de sinal/erro de um processo... bem... ok...
DeBash página de manual(egeralmenteemmaioriadocumentação do shell), bem abaixo na seção intitulada "Gramática de conchas" e então "Comandos Simples", há uma declaração inocente que diz assim:
The return value of a simple command is its exit status,
or 128+n if the command is terminated by signal n.
O valor de retorno de qualquer processo shell (bash, sh, dash, ksh, csh, et al) (comando simples) é um valor não assinado de 8 bits, com o intervalo esperado de 0-255. Os costumes de uso típico usam zero (0) como 'sucesso' e qualquer outra coisa como 'erro'. O shell indica que um processo foi interrompido/abortado/sinalizado adicionando 128 ao valor do sinal e usando-o como valor de retorno.
Se você tiver idade suficiente, você deve se lembrar de ter abortado o 'Erro 139' (Sinal 11) durante uma compilação do kernel (éUSADOpara levar a noite toda!) se você tivesse problemas de memória ou superaquecimento.
O erro 137 indica que o processo apt-get recebeu um sinal 9 (128+9=137) e o sinal 9 éMATAR.
Se você não tiver certeza sobre os nomes dos sinais e os números, observe a saída do kill -l
comando:
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
... lots more ... 64 total
Ah! Maravilhoso artigo na Wikipedia, emStatus de saída, especificamente oShell e scriptsseção. Explica que enquanto umespereo status de saída de um processo é um número inteiro (int), os processos shell recebem apenas os 8 bits inferiores. Também fala sobre a lógica '128+n'. (Talvez a declaração da Wikipedia sobre ksh usando '256+n' esteja incorreta, já que opágina de manual kshdiz '128+n')
Leia atentamente o artigo da Wikipedia, pois ele explica as diversas interpretações feitas por diferentes linguagens de programação e interfaces.
Espero que isto ajude.
(E sim, eu leio TODAS as páginas de manual, não é?)
Termo aditivo:
travis-cifazsugerirparanãouso apt-get upgrade
(e por extensão, apt-get dist-upgrade
) nas máquinas virtuais. Instale o que desejar, mas as VMs geralmente estão bem abastecidas e atualizadas.
Uso deapt-get upgrade
poderiacontribuíram para o recebimento do apt-getSIGKILL. Sem mais informações detravis-ci, não conseguimos determinar exatamente o porquê. Mas, normalmente...SIGKILLé usado quando você fez algo ruim, uso excessivo de recursos, alto uso de CPU e coisas do gênero... novamente, não sabemos, não podemos dizer pelos logs que vimos. (Como um aparte, vejalimite(na página de manual do bash) esetrlimit/getrlimit(2)e como seus vários limites são tratados...RLIMIT_CPU(ou-t) parece apropriado aqui)
Responder2
Como não há mensagem de erro apt-get
, concordo com a ideia do @lornix. Mas espero apenas um problema com o tamanho disponível na cota do sistema de arquivos ou pode ser o recurso de download paralelo do apt-get. (Ele usa um thread para cada fonte por padrão)
Aqui bastante otimizado para minimizar recursos (mas mais tempo)
uname -a && lsb_release -a && df
sudo apt-get update
sudo apt-get install python-software-properties
sudo add-apt-repository --yes ppa:wfg/0ad.dev
sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get remove oracle-java7-installer oracle-java8-installer postgresql-9.2 postgresql-contrib-9.2 postgresql-9.2-postgis-2.1 postgresql-9.3 postgresql-contrib-9.3 postgresql-9.3-postgis-2.1 postgresql-9.4 postgresql-contrib-9.4 postgresql-9.4-postgis-2.1 postgresql-9.1 postgresql-9.1-postgis-2.1 postgresql-9.1-postgis-scripts postgresql-9.2-postgis-scripts postgresql-9.3-postgis-scripts postgresql-9.4-postgis-scripts postgresql-client postgresql-client-9.1 postgresql-client-9.2 postgresql-client-9.3 postgresql-client-9.4 postgresql-client-common postgresql-common postgresql-contrib-9.1
yes | sudo apt-get -o Acquire::Queue-mode=access -yy --yes upgrade
yes | sudo apt-get -o Acquire::Queue-mode=access -yy --yes dist-upgrade