Como preencher um sistema de arquivos raiz do zero?

0

minha situação é a seguinte: Eu tenho um kernel recém-compilado, todos os aplicativos e bibliotecas compilados para a nova plataforma, eu sei como inicializar usando o meu gerenciador de inicialização, mas não tenho um sistema de arquivos raiz.

Eu gostaria de saber se existe um guia oficial ou bem testado sobre como preencher um novo sistema de arquivos raiz para um determinado kernel linux, quais bibliotecas um kernel Linux realmente precisa e todos os sinos e assobios que eu preciso para executar um kernel linux e uma caixa linux minimalista.

Eu acho que o mais óbvio é a biblioteca C, eu preciso de uma biblioteca ac de qualquer maneira, mas eu realmente não sei se posso usar apenas uma biblioteca C + todos os programas extras e bibliotecas dos meus gostos, ou o O kernel precisa de algo mais, mesmo em termos de arquivos de configuração eu realmente não encontrei algo explícito sobre quais arquivos o kernel linux está esperando encontrar em um sistema de arquivos raiz.

Tudo o que eu encontrei é algo sobre a estrutura de diretórios de um sistema de arquivos que quer ser compatível com linux, o que basicamente diz que você deve ter /lib , /usr , /bin e mais diretórios, mas nada substancial sobre criando um novo sistema de arquivos.

PS

essa questão é não sobre como criar um sistema de arquivos, como inicializá-lo ou qualquer outra coisa; Eu só quero saber quais arquivos são necessários para completar o par kernel + filesystem para que eu possa inicializar uma nova caixa linux.

    
por user31223 14.10.2016 / 17:12

1 resposta

2

O kernel do Linux não se importa muito. O carregador de boot diz ao kernel onde montar um sistema de arquivos raiz - tipicamente uma imagem ramdisk inicial (initrd), mas também pode ser o sistema de arquivos raiz - eo kernel iniciará o processo init a partir de /sbin/init ( /init em um initramfs), a menos que seja dito o contrário.

Até mesmo o local dos sistemas de arquivos do kernel - /proc , /sys , /dev if udev e assim por diante - é basicamente o espaço do usuário para decidir.

O projeto Base de padrões do Linux padronizou esses recursos em várias distribuições Linux. (Bem, mais ou menos. Ainda há algumas pequenas diferenças, por exemplo, na nomenclatura de dispositivos, e fala-se sobre a mesclagem de /usr/bin em /bin e /usr/lib em /lib ). Uma versão do mesmo foi aceita como um padrão ISO, ISO / IEC 23360. A versão atual do LSB, em outubro de 2016, é LSB 5 .

Os desenvolvedores de kernel do Linux se esforçam muito para manter as coisas compatíveis com versões anteriores na interface do espaço do usuário. É por isso que as informações da versão 2.6 são muito aplicáveis a 4.4. É praticamente somente quando novas instalações e interfaces são introduzidas que novas versões divergem das antigas, e você precisa encontrar a documentação para elas.

Você mencionou que já compilou algumas bibliotecas e aplicativos. Em caso afirmativo, as configurações de tempo de compilação que você usou (verifique configure settings, --prefix e assim por diante) e os diretórios dessas bibliotecas e aplicativos procuram seus arquivos de configuração (e fuso horário para a biblioteca C, internacionalização e assim por diante ) determine a estrutura de diretórios que você realmente precisa.

Linux From Scratch! é uma comunidade que desenvolve livros sobre como compilar e construir uma distribuição Linux a partir do zero. Não é exatamente mínimo - você pode omitir certos pacotes em algumas situações, remover outros e assim por diante -, mas tudo é explicado.

Rob Landley é bem conhecido por documentar coisas do kernel Linux. Sua introdução ao initramfs , como usar initramfs , e programação para initramfs , são muito interessantes se você quiser crie um sistema mínimo que seja executado diretamente a partir de um initramfs, como muitos dispositivos incorporados fazem.

Em relação a systemctl ou systemd em geral, eu indicaria sua página inicial , e te darei boa sorte. Eu mesmo estou procurando maneiras de evitá-lo e usar sistemas init mais robustos, que ainda reconhecem a filosofia Unix do que se aglomerar em uma bagunça monolítica por capricho. (Na minha experiência, os primeiros permanecem funcionais e podem ser mantidos a longo prazo, e os últimos, embora frequentemente amados pelos usuários finais devido às novas características aglomeradas e ao polimento externo, contribuem para sistemas frágeis e quebrados e administradores de sistemas a longo prazo. Sua experiência e opiniões podem variar, estou apenas descrevendo as minhas.)

Quando desenvolvi um pendrive simples para avaliar nós de cluster Linux, eu examinei os sistemas Debian e CentOS mínimos que você pode instalar, para descobrir os detalhes que o OP está pedindo (exceto que eu não estava procurando por um sistema mínimo, mas um pequeno sistema leve que pode executar os mesmos binários que são executados no próprio cluster final, ou seja, incluindo serviços básicos e bibliotecas). Hoje, eu recomendo olhar para Devuan , porque ele suporta vários sistemas init. Experimentar essas em máquinas virtuais deve ser muito informativo.

Pratique regras sobre teoria ou padrões. Não há normas impostas ou quaisquer padrões realmente; mesmo LSB e ISO / IEC 23360 são mais como diretrizes para uma interoperabilidade bem sucedida. A documentação do kernel Linux extraída das fontes do kernel do Linux descreve as expectativas do kernel, mas, como mencionado, há muito, muito poucos, que afetam a árvore do sistema de arquivos. E mesmo esses tendem a ser configuráveis no tempo de inicialização ou em tempo de compilação.

    
por 14.10.2016 / 18:30