Como posso fazer um shell para aparecer na minha própria distro (linux)? [fechadas]

5

Eu estou interessado em Linux e tenho cavado por um tempo. Eu acabei de aprender a compilar um kernel do Linux a partir do código-fonte e inicializá-lo com o Grub, que o coloca no shell do kernel.

Agora, assim que o kernel é carregado na memória, ele procura o init para carregá-lo. Minha agenda é abrir um shell (que um usuário normal pode usar - como bash ).

Então, como posso trazê-lo?

Preciso configurar o init para carregar o shell bash ou há algo que eu possa fazer?

Estou construindo minha própria distro e só preciso que a distro tenha um shell (bash) e nada mais.

    
por Panther Coder 13.02.2017 / 10:15

3 respostas

8

Hmm. Isso não deve ser complicado, mas também é muito complexo:)

Você pode simplesmente fazer o que Alexander sugeriu ( init=/bin/bash ), e você se sairá bem.

O processo init é o que o kernel chama, e inicia todo o seu userland. Terminal de login incluído. Se o seu init apenas gerar esse terminal bash, você está bem. Mas se esse terminal falhar ou sair, o init deve limpar. Se alguns dos processos que você iniciar do terminal morrer, você precisará limpar. Se eles morrerem, então os seus filhos precisam de um novo processo, será o seu início.

Eu recomendo dedicar 10 minutos para ler isto, é uma visão geral muito amigável do que o init faz:

link

Então você vai ficar mais perto de entender o que significa rodar o seu próprio init.

Uma parte relevante desse link diz:

There is only one thing we need to do: provide an initial binary to launch at any of these paths: /sbin/init, /etc/init, /bin/init, or /bin/sh. This process (init) is run as pid 1.

The init process needs to do two things:

  • Never exit (if init exits, the kernel panics)

  • Reap zombie processes

O restante do texto implementa um init simples.

    
por 13.02.2017 / 10:42
4

"terminal" (um computador físico) e "bash" (um shell) são completamente diferentes. Não tenho certeza do que você está perguntando, mas você pode adicionar init=/bin/bash à linha de comando do kernel para inicializar diretamente no bash.

    
por 13.02.2017 / 10:40
4

bash não é um terminal, é um shell.

O processo init , assim que o processo de inicialização terminar e a máquina estiver executando em um nível de execução somente texto (sem o X Windows), chamadas eventualmente getty , que por sua vez chama login . Esse é o processo responsável por apresentar o prompt de login e permitir que os usuários façam o login. É o que acontece em todas as distribuições Linux.

O que você quer fazer é simplesmente definir bash como o shell de login padrão para os usuários (supondo que você quer um ambiente multiusuário).

    
por 13.02.2017 / 10:40