uname está quebrado: como eu determino o kernel atualmente em execução?

13
> uname -r
FATAL: kernel too old
> cat /proc/cmdline
FATAL: kernel too old

Existem 3 arquivos * .vmlinuz-linux em / boot. Como faço para determinar qual kernel está sendo executado atualmente?

Observe que estou executando em um ambiente limitado com um mínimo de shell. 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 opinião?

    
por William Pursell 21.07.2017 / 21:37

4 respostas

19

Você atualizou sua libc (a biblioteca de sistema mais básica) e agora nenhum programa funciona. Para ser preciso, nenhum programa vinculado dinamicamente funciona.

Em seu cenário particular, a reinicialização deve funcionar. A libc agora instalada requer um kernel mais novo, e se você reiniciar, você deve pegar aquele kernel mais novo.

Desde que você ainda tenha um shell em execução, geralmente há uma maneira de recuperar, mas pode ser complicado se você não planejar. Se você não tem um shell, geralmente não há outra solução além de reinicializar.

Aqui você pode não conseguir recuperar sem reinicializar, mas pode pelo menos descobrir facilmente o kernel que está sendo executado. Apenas use uma maneira de ler /proc/version que não requer um comando externo.

read v </proc/version; echo $v
echo $(</proc/version)               # in zsh/bash/ksh

Se você ainda tiver uma cópia do libc antigo, poderá executar programas com ele. Por exemplo, se a libc antiga estiver em /old/lib e você tiver executáveis que funcionam com essa libc antiga em /old/bin , você pode executar

LD_LIBRARY_PATH=/old/lib /old/lib/ld-linux.so.2 /old/bin/uname

Se 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 seja iniciado). Por exemplo, no Debian / Ubuntu / Mint /…, instale um ou mais busybox-static (coleção de arquivos básicos Ferramentas de linha de comando do Linux incluindo um shell), sash (shell com alguns recursos extras), zsh-static (apenas um shell, mas com algumas ferramentas úteis incorporadas).

busybox-static uname
sash -c '-cat /proc/version'
zsh-static -c '</proc/version'
    
por 22.07.2017 / 01:35
6

Esse parece ser o erro que a glibc lança se estiver rodando em um kernel que é mais antigo do que a biblioteca é compilada para suportar. A mensagem de erro está na macro DL_SYSDEP_OSCHECK(FATAL) em sysdeps/unix/sysv/linux/dl-osinfo.h

Existe uma opção de tempo de compilação para isso:

--enable-kernel=version
This option is currently only useful on GNU/Linux systems. The version parameter should have the form X.Y.Z and describes the smallest version of the Linux kernel the generated library is expected to support. The higher the version number is, the less compatibility code is added, and the faster the code gets.

Portanto, parece que, por algum motivo, você está executando um sistema com um kernel antigo, mas um glibc instalado que não suporta mais o kernel antigo. Como você conseguiu isso é difícil dizer sem informações sobre qual sistema ele é, mas pode-se supor que isso poderia acontecer se a biblioteca fosse atualizada, mas o kernel não fosse.

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á-la):

/lib/x86_64-linux-gnu/libc-2.23.so: ELF 64-bit LSB shared object, x86-64, ..., for GNU/Linux 2.6.32, stripped

Em meus sistemas Debian semi-atuais, a versão necessária do kernel é 2.6.32 como acima em todos os binários que eu verifiquei, o que tornaria muito improvável que ocorresse um problema com a versão do kernel.

    
por 21.07.2017 / 22:44
5

Tente com isso:

cat /proc/version
    
por 21.07.2017 / 21:42
0

Use o comando strings para extrair as informações imprimíveis do arquivo vmlinuz .

strings vmlinuz | grep version

Exemplo de saída:

4.9.0-6-amd64 ([email protected]) (gcc version 6.3.0 20170516
(Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02)
    
por 06.04.2018 / 21:56

Tags