> uname -r
FATAL: kernel too old
> cat /proc/cmdline
FATAL: kernel too old
Existem 3 * arquivos .vmlinuz-linux em / boot. Como determino qual kernel está sendo executado atualmente?
Observe que estou executando em um ambiente limitado com um shell mínimo. Eu também tentei:
> sh -c 'read l < /proc/version; echo $l'
FATAL: kernel too old
> dd if=/proc/version
FATAL: kernel too old
Alguma ideia?
chrome://system/
Respostas:
Você atualizou sua libc (a biblioteca mais básica do sistema) e agora nenhum programa funciona. Para ser preciso, nenhum programa vinculado dinamicamente funciona.
No seu cenário específico, a reinicialização deve funcionar. A libc agora instalada requer um kernel mais recente e, se você reiniciar, deverá obter esse kernel mais recente.
Contanto que você ainda tenha um shell em execução, geralmente há uma maneira de se recuperar, mas pode ser complicado se você não planejou. Se você não possui um shell, normalmente não há outra solução além da reinicialização.
Aqui você pode não conseguir se recuperar sem reiniciar, mas pode pelo menos facilmente descobrir qual kernel está executando. Basta usar uma maneira de ler
/proc/version
que não requer um comando externo.Se você ainda tiver uma cópia da libc antiga, poderá executar programas com ela. Por exemplo, se a libc antiga estiver dentro
/old/lib
e você tiver executáveis que funcionam com essa libc antiga/old/bin
, você poderá executarSe você tiver alguns binários vinculados estaticamente, eles ainda funcionarão. Eu recomendo instalar utilitários de sistema vinculados estatisticamente para esse tipo de problema (mas você precisa fazer isso antes que o problema comece). Por exemplo, no Debian / Ubuntu / Mint /…, instale um ou mais do busybox-static (coleção de ferramentas básicas de linha de comando do Linux, incluindo um shell), sash (shell com alguns recursos adicionais) e zsh-static (apenas um shell, mas com algumas ferramentas úteis integradas).
fonte
Esse parece ser o erro que o glibc lança se estiver sendo executado em um kernel mais antigo do que o suportado pela biblioteca. A mensagem de erro está na
DL_SYSDEP_OSCHECK(FATAL)
macro emsysdeps/unix/sysv/linux/dl-osinfo.h
Há uma opção de tempo de compilação para isso:
Parece que, por alguma razão, você está executando um sistema com um kernel antigo, mas com uma glibc instalada que não suporta mais o kernel antigo. É difícil dizer como você conseguiu a informação sem informações sobre qual sistema é, mas pode-se supor que isso poderia acontecer se a biblioteca for atualizada, mas o kernel não.
file
parece mostrar a versão mínima exigida por um executável ou uma biblioteca (mas é claro que você precisa de uma biblioteca de trabalho para executá-lo):Nos meus sistemas Debian semi-atuais, a versão requerida do kernel é
2.6.32
como acima em todos os binários que verifiquei, o que tornaria bastante improvável que ocorresse um problema com a versão do kernel.fonte
Tente com isto:
fonte
> cat /proc/version FATAL: kernel too old
cat
não está disponível.head /proc/version
||tail /proc/version
||sed '1q;d' /proc/version
Use o
strings
comando para extrair as informações imprimíveis dovmlinuz
arquivo.Saída de amostra:
fonte