É possível instalar o kernel Linux sozinho?

45

Só estou curioso para saber se é possível instalar o kernel Linux sozinho ou se você precisa usar um dos sabores. Se fosse possível, como você faria isso? Não preciso de um tutorial detalhado. Eu só quero saber como isso seria feito conceitualmente. Não sou bom com coisas de baixo nível e quero saber como você instala um sistema operacional no computador. Eu imagino que tenha algo a ver com o MBR.

Ah, e notei que muitas das respostas sugerem uma certa distribuição de um mínimo de Linux. Eu provavelmente deveria ter afirmado que não pretendo instalar um Linux mínimo ou básico. Esta questão é puramente teórica. Ainda assim, eu realmente aprecio todas as respostas e as consultarei imediatamente, se eu quiser instalar um Linux verdadeiramente personalizado.

cesar
fonte
3
O que você quer dizer com "sozinho" e "sabores"? O Linux não é um sistema operacional, é um kernel, para que serviria um kernel sem um sistema operacional? Você está tentando descobrir a sequência do carregador de inicialização?
Caleb
3
Se você quiser entender como um kernel / OS está entrando no computador, aqui é o lugar para começar. Apenas certifique-se de não fazer perguntas para "novatos", pois elas o morderão, perguntando-as no SO .
Philomath 21/07
3
Sozinho, quero dizer apenas o kernel, menos a interface do usuário e incluiu programas como o OpenOffice. Por 'sabores', quero dizer as diferentes distribuições de linux, como ubuntu, redhat, debian e mandriva. Quase não tenho ideia do que estou falando. Eu estava imaginando que o kernel do Linux tinha alguns recursos básicos do bash, como o DOS. Eu acho que posso ter minhas idéias de kernels e sistemas operacionais emaranhados.
cesar
4
Sim, eles são REALMENTE confusos :) O Bash é apenas um programa de usuário que roda como um processo gerenciado pelo kernel. Um kernel por si só não oferece nada além de uma plataforma para executar outras coisas. A sugestão do LFS (Linux From Scratch) na resposta de Shadur está bem no alvo. Você aprenderia muito sobre o que são todas as partes diferentes e o que faz de uma distro uma distro e onde o kernel termina e a área do usuário começa criando um sistema inicial.
Caleb
2
Na verdade, o DOS kerneltambém não tinha bashrecursos básicos . A interface do usuário padrão foi fornecida pelo programa shell COMMAND.COM. O mais próximo que você pode chegar de um kernel simples de fazer qualquer coisa útil seria inicializar usando o parâmetro kernel init=/bin/bash(assumindo que um Linux mínimo esteja em disco). Como respondido, se você tiver apenas o gerenciador de inicialização e o kernel, ele irá parar muito rapidamente quando não for encontrado init.
StarNamer 27/07/2012

Respostas:

51

Tecnicamente, você pode instalar apenas um gerenciador de inicialização e o kernel sozinho, mas assim que o kernel inicializar, ele irá reclamar por não conseguir iniciar o "init", então ele ficará parado e você não poderá fazer nada com ele.

BTW, é uma parte do gerenciador de inicialização que está no MBR. O kernel fica em algum lugar na área regular de um disco. O gerenciador de inicialização está configurado para saber onde está, para que possa carregar o kernel e executá-lo.

Shawn J. Goff
fonte
Como você o colocaria no MBR?
Cesar
Todo carregador de inicialização vem com uma ferramenta para se instalar no MBR. Existem também ferramentas mais amigáveis, como o Boot-Repair ( help.ubuntu.com/community/Boot-Repair ).
Shawn J. Goff
Bem, você poderia criar um initramfs e incorporá-lo na imagem do kernel, e então você tem um sistema totalmente funcional a partir de apenas um arquivo de imagem do kernel :-)
Patrick
@ ShawnJ.Goff Por que o kernel se queixaria de não poder iniciar o init, se fornecermos o initramfs?
Pratik Singhal
4
@ ps06756 Se você possui o initramfs, esse não é o kernel "sozinho" como a pergunta. Se o initramfs tiver um init, o kernel não irá reclamar.
Shawn J. Goff
18

Acho que você não entende exatamente o que está perguntando, mas pode dar uma olhada no projeto Linux From Scratch .

Shadur
fonte
O LFS seria uma boa idéia para descobrir como criar um sistema mínimo. Ou você pode olhar para o MINIX (e ler o livro ). Ou, para uma introdução diferente (menos trabalho, mas menos informativa), observe os pacotes marcados com “essential” ( aptitude search '?essential') no Debian ou Ubuntu e entenda o que cada um faz (há um pouco mais do que o mínimo).
Gilles 'SO- stop be evil'
12

Se você está perguntando se pode simplesmente instalar ou atualizar um kernel "sobre" um sistema existente sem instalar vários outros programas?

O kernel do Linux é um arquivo binário geralmente nomeado vmlinuz-x.x.x-x-nameno bootdiretório (que geralmente é uma pequena partição separada no início do disco rígido) em que x é um número de versão. "name" é apenas um nome escolhido para o kernel que pode ser definido em tempo de compilação; você pode usá-lo para identificar que tipo de máquina ou arquitetura o kernel é ou por qualquer outro motivo.

Ele é carregado no tempo de inicialização por um gerenciador de inicialização, normalmente GRUBchamado pelo código de inicialização no MBR, chamado pela ROM do BIOS. Uma vez carregado, ele não é "mantido aberto" ou protegido especialmente. Então você pode substituir esse arquivo por outro kernel em funcionamento. Mas, GRUBpossui um recurso interessante que permite selecionar vários kernels para inicializar. Portanto, é bastante inteligente adicionar seu kernel adicional a essa lista, mas mantenha o kernel original conhecido em funcionamento, caso as coisas dêem errado.

Acredito que quase todas as distribuições fazem um kernel "modular" onde os drivers de dispositivo estão em arquivos separados. Portanto, a maioria dos kernels precisa de um sistema de arquivos contendo drivers disponíveis no momento da inicialização e é para isso que serve um "initrd" (disco RAM inicial) ou "initramfs". GRUBcarregará o kernel em um local na memória e o initrd em um local diferente, e saltará para o kernel informando onde está o initrd, iniciando o Linux.

Os drivers também podem ser "incorporados" ao kernel e, portanto, são automaticamente carregados e disponibilizados quando o carregador de inicialização carrega a vmlinuzimagem. Os kernels destinados a trabalhar em diversos sistemas (como os da maioria das distribuições) geralmente minimizam o que é incorporado ao kernel porque o hardware disponível será verificado mais tarde no processo de inicialização e apenas os módulos que representam o hardware atual serão carregados.

Existem ferramentas para modificar e criar initrds. O Debian tem boas ferramentas e imagino que outras distribuições também.

Portanto, se você baixar um kernel mais recente do kernel.org e compilá-lo para criar uma nova imagem binária do kernel, é necessário criar ou atualizar um initrd com drivers que funcionem com esse kernel. O antigo initrd não funcionará porque os drivers precisam corresponder à versão do kernel em execução.

O arquivo initrd é nomeado de initrd.img-x.x.x.x-namemaneira semelhante ao kernel e pode ser substituído após a inicialização, assim como o kernel, e as práticas recomendadas indicam que você não exclui um initrd em funcionamento conhecido até saber que pode inicializar com êxito no seu novo kernel + initrd.

Espero que isso proporcione algum contexto.

Se você está procurando por uma instalação "barebones" do Linux que tenha pouco ou nenhum programa adicional instalado, minha opção favorita sempre foi instalar a netinstimagem Debian . Praticamente você tem apenas as ferramentas mais básicas necessárias para executar um console de texto da linha de comando e nanocomo um editor de texto.

LawrenceC
fonte
5

Rootfs executáveis ​​únicos

O sistema mínimo absoluto executa um único /initprograma, como expliquei no Single Application Linux | Superusuário

Mínimo Linux Live

https://github.com/ivandavidov/minimal

Para um sistema interativo mais interessante, este é um pequeno script (principalmente educacional) que:

  • baixa a fonte do kernel e do busybox
  • compila-os
  • gera um ISO inicializável de 8Mb com eles

O ISO deixa você em um shell mínimo com o busybox.

Com o QEMU, você pode facilmente inicializar no sistema.

Eu o modifiquei para permitir a execução no diretório de origem do kernel: https://github.com/cirosantilli/runlinux

Uso:

git clone https://github.com/ivandavidov/minimal
cd minimal/src
./build_minimal_linux_live.sh
# Wait.
# Install QEMU.
# minimal_linux_live.iso was generated
./qemu64.sh

e você será deixado dentro de uma janela QEMU com seu novo sistema mínimo. Impressionante.

Por ser pequena, é uma boa opção para ler a fonte e entender o que está acontecendo.

Testado no Ubuntu 16.04.

Buildroot

https://buildroot.org/

Grande conjunto de scripts Makefile que gerenciam:

  • Cadeia de ferramentas de compilação cruzada do GCC
  • compilação do kernel
  • compilação do carregador de inicialização
  • geração de rootfs
  • tem toneladas de receitas de download / construção de pacotes na árvore de origem, incluindo coisas complexas como o GTK. Existe um sistema de dependência.

Exemplo mínimo:

git clone git://git.buildroot.net/buildroot
cd buildroot
git checkout 2016.05
make qemu_x86_defconfig
# Can't use -jN, use `BR2_JLEVEL=2` instead.
BR2_JLEVEL=2 make
# Wait.
# cat board/qemu/x86_64/readme.txt
qemu-system-x86_64 -M pc -kernel output/images/bzImage -drive file=output/images/rootfs.ext2,if=virtio,format=raw -append root=/dev/vda -net nic,model=virtio -net user
# You are now in a shell with BusyBox utilities.

Ele ainda tem receitas para construir o X11 do zero: Como instalar o X11 no meu próprio sistema Linux Buildroot?

Coisas profissionais.

Alpine Linux

https://github.com/gliderlabs/docker-alpine

Distribuição incorporada com um gerenciador de pacotes que oferece binários pré-compilados em um site.

Veja também

Ciro Santilli adicionou uma nova foto
fonte
3

Gostaria de sugerir a sugestão de Shadur de que você deve sujar as mãos da maneira do Linux desde o zero.
Além disso, algo semelhante, tente o Pocket Linux .

O Pocket Linux Guide demonstra como criar um pequeno sistema GNU / Linux baseado em console usando apenas o código fonte e algumas disquetes. Destina-se a usuários de Linux que desejam obter um entendimento mais profundo sobre como seu sistema funciona sob o manto de recursos e ferramentas específicos de distribuição.

Philomath
fonte
2
Embora observe que ninguém em sã consciência recomenda / LFS ou PocketLinux para qualquer tipo de tarefa importante de produção - eles são bons para aprender como as coisas funcionam, mas há uma razão pela qual a maioria das distribuições vem com um conjunto completo de ferramentas e front-ends para a maioria das coisas.
Shadur 21/07
3

É possível instalar um kernel Linux sem as ferramentas usuais de espaço do usuário. Isso geralmente é feito em sistemas embarcados, como roteadores. Normalmente, o kernel é carregado a partir da memória ROM ou Flash e foi personalizado para o dispositivo em questão (geralmente com os drivers necessários compilados no kernel em vez de serem carregados como módulos).

Pelo menos um programa de espaço do usuário precisa existir, para se tornar o processo 'init' (não necessariamente chamado init, mas iniciado pelo kernel como processo 1 e o pai automático de qualquer processo órfão) - a menos que o kernel tenha sido modificado (em vez do que simplesmente personalizado) para não exigir isso.

Certamente não é necessário ter um shell disponível para ter um dispositivo baseado em Linux, embora isso possa facilitar o desenvolvimento!

Toby Speight
fonte
2

Muitas distribuições fornecem instalações "principais". Isso é o que você quer. Veja ubuntu-minimal, debian net-install, archlinux (o padrão é apenas o núcleo).

As outras respostas são úteis se você quiser aprender, mas esse pode não ser o caso = p

user606723
fonte