Uso prático de uname em chroot?

4

Estou preparando uma imagem do sistema operacional por meio de uma combinação de bootstrapping e chrooting. Algumas ações (por exemplo, a construção de módulos do kernel) dependem de uname output, que relata a configuração do host até dentro do chroot. E essa configuração é diferente do que está sendo implantado. Como o resultado, os cabeçalhos do kernel não são encontrados e outras etapas ficam confusas.

Poderíamos ser criativos e substituir uname por um script de shell que falsifica, mas o que é uma maneira mais prática?

    
por Roman Saveljev 11.08.2016 / 22:09

1 resposta

1

O Linux oferece uma maneira limitada de alterar os valores informados por uname , com o personality chamada de sistema que pode ser invocada através do utilitário setarch ( parte do pacote util-linux disponível em todos os Linux não embarcados). Por exemplo, você pode usar setarch i386 myprogram ou linux32 myprogram em uma máquina amd64 para fazer um programa acreditar que está sendo executado em um sistema x86 de 32 bits.

No entanto, não há como alterar a versão reportada por uname para um número arbitrário.

Também é possível alterar o nome do host para uma árvore de processos, com namespaces UTS .

schroot pode definir esses parâmetros de acordo com a configuração do chroot.

Mas, para compilar software, alterar o relatório de informações por uname não é suficiente. Você também precisa usar o compilador certo para o processador de destino, link com o código correto, etc. Isso é conhecido como compilação cruzada e um ambiente de compilação cruzada não usa nenhuma informação sobre o host para decidir o que construir e como construí-lo. Portanto, esqueça a falsificação de uname e, em vez disso, leia-a, começando com Compilando de forma cruzada um módulo de kernel e com a documentação do kbuild .

    
por 15.08.2016 / 23:22