¿Es posible instalar el kernel de Linux solo?

45

Tengo curiosidad por saber si es posible instalar el kernel de Linux solo, o si necesita usar uno de los sabores. Si fuera posible, ¿cómo lo harías? No necesito un tutorial detallado. Solo quiero saber cómo se haría conceptualmente. No soy bueno con cosas de bajo nivel, y quiero saber cómo se consigue un sistema operativo en la computadora. Me imagino que tiene algo que ver con el MBR.

Ah, y me di cuenta de que muchas de las respuestas sugieren una cierta distribución de algunos Linux mínimos. Probablemente debería haber declarado que no estoy buscando instalar un Linux mínimo o básico. Esta pregunta es puramente teórica. Aún así, realmente aprecio todas las respuestas, y las consultaré de inmediato, si alguna vez quisiera instalar un Linux verdaderamente personalizado.

cesar
fuente
3
¿Qué quieres decir con "solo" y "sabores"? Linux no es un sistema operativo, es un núcleo, ¿para qué sería bueno un núcleo sin un sistema operativo? ¿Estás tratando de descubrir la secuencia del cargador de arranque?
Caleb
3
Si desea comprender cómo un kernel / OS ingresa a la computadora, este es el lugar para comenzar. Sólo asegúrese de no hacer preguntas "novato" no, van a morder, preguntar en SO lugar.
Philomath
3
Por solo, me refiero solo al kernel, menos la interfaz de usuario y los programas incluidos como OpenOffice. Por "sabores", me refiero a las diferentes distribuciones de Linux, como ubuntu, redhat, debian y mandriva. Casi no tengo idea de lo que estoy hablando. Me imaginaba que el kernel de Linux tenía algunas capacidades básicas de bash como DOS. Creo que puedo tener mis ideas de núcleos y sistemas operativos enredados.
cesar
44
Sí, eres REALMENTE enredado :) Bash es solo un programa de usuario que se ejecuta como un proceso administrado por el núcleo. Un kernel por sí solo no le da más que una plataforma para ejecutar otras cosas. La sugerencia de LFS (Linux From Scratch) en la respuesta de Shadur es correcta. Aprendería mucho sobre qué son todas las diferentes piezas y qué hace que una distribución sea una distribución y dónde termina el núcleo y donde comienza la tierra del usuario mediante la construcción de un sistema de memoria virtual.
Caleb
2
En realidad, el DOS kerneltampoco tenía bashcapacidades básicas . La interfaz de usuario estándar fue proporcionada por el programa shell COMMAND.COM. Lo más cerca que podría estar de un núcleo desnudo haciendo algo útil sería arrancar usando el parámetro del núcleo init=/bin/bash(suponiendo que haya un mínimo de Linux en el disco). Como se respondió, si solo tiene el gestor de arranque y el núcleo, se detendrá muy rápidamente cuando no lo encuentre init.
StarNamer

Respuestas:

51

Técnicamente, puede instalar solo un gestor de arranque y el kernel solo, pero tan pronto como se inicie el kernel, se quejará de no poder iniciar "init", entonces simplemente se quedará allí y no podrá hacer nada con él.

Por cierto, es una parte del gestor de arranque que está en el MBR. El núcleo se encuentra en algún lugar del área normal de un disco. El gestor de arranque está configurado para saber dónde está, para que pueda cargar el núcleo y ejecutarlo.

Shawn J. Goff
fuente
¿Cómo lo pondrías en el MBR?
cesar
Cada gestor de arranque viene con una herramienta para instalarse en el MBR. También hay herramientas más amigables como Boot-Repair ( help.ubuntu.com/community/Boot-Repair ).
Shawn J. Goff
Bueno, podría crear un initramfs e incrustarlo en la imagen del kernel, y luego tendría un sistema completamente funcional desde solo un archivo de imagen del kernel :-)
Patrick
@ ShawnJ.Goff ¿Por qué el kernel se quejaría de no poder iniciar init, si proporcionamos initramfs?
Pratik Singhal
44
@ ps06756 Si tiene initramfs, ese no es el núcleo "solo" como se hizo la pregunta. Si initramfs tiene un init, el kernel no se quejará.
Shawn J. Goff el
18

No creo que entiendas exactamente lo que estás preguntando, pero es posible que desees echar un vistazo al proyecto Linux From Scratch .

Shadur
fuente
LFS sería una buena idea para descubrir cómo construir un sistema mínimo. O podrías mirar MINIX (y leer el libro ). O, para una introducción diferente (menos trabajo, pero menos informativo), mire los paquetes etiquetados como "esenciales" ( aptitude search '?essential') en Debian o Ubuntu y entienda lo que cada uno hace (hay un poco más que el mínimo).
Gilles 'SO- deja de ser malvado'
12

Si está preguntando si puede instalar o actualizar un kernel "sobre" un sistema existente sin instalar un montón de otros programas?

El kernel de Linux es un archivo binario que generalmente se nombra vmlinuz-x.x.x-x-nameen el bootdirectorio (que generalmente es una pequeña partición separada al comienzo del disco duro) donde las x son un número de versión. "nombre" es solo un nombre elegido para el núcleo que se puede configurar en tiempo de compilación, puede usarlo para identificar qué tipo de máquina o arquitectura es el núcleo o por cualquier otro motivo.

Se carga en el momento de arranque mediante un gestor de arranque, GRUBque normalmente se invoca mediante el código de arranque en el MBR que se invoca mediante la ROM del BIOS. Una vez que se carga, no se "mantiene abierto" ni se protege especialmente. Entonces puede reemplazar ese archivo con otro núcleo en funcionamiento. Pero GRUBtiene una característica genial que le permite seleccionar múltiples núcleos desde los que arrancar. Por lo tanto, es bastante inteligente agregar su kernel adicional a esa lista, pero mantenga el kernel de trabajo original conocido en caso de que las cosas salgan mal.

Creo que casi todas las distribuciones forman un núcleo "modular" donde los controladores de dispositivos están en archivos separados. Por lo tanto, la mayoría de los núcleos necesitan un sistema de archivos que contenga los controladores disponibles en el momento del arranque y para eso sirve un "initrd" (disco RAM inicial) o "initramfs". GRUBcargará el kernel en una ubicación en la memoria y el initrd en una ubicación diferente, y saltará al kernel diciéndole dónde está el initrd, iniciando Linux.

Los controladores también pueden "integrarse" en el núcleo y, por lo tanto, se cargan automáticamente y están disponibles cuando el gestor de arranque carga la vmlinuzimagen. Los núcleos que están destinados a funcionar en diversos sistemas (como los de la mayoría de las distribuciones) generalmente minimizan lo que está integrado en el núcleo porque el hardware disponible se escaneará más adelante en el proceso de arranque y solo se cargarán los módulos que representan el hardware actual.

Hay herramientas para modificar y crear initrds. Debian tiene buenas herramientas e imagino que otras distribuciones también.

Por lo tanto, si descarga un núcleo más reciente de kernel.org y lo compila para crear una nueva imagen binaria del núcleo, debe crear o actualizar un initrd con controladores que funcionen con ese núcleo. El viejo initrd no funcionará porque los controladores tienen que coincidir con la versión del núcleo que se está ejecutando.

El archivo initrd se llama de initrd.img-x.x.x.x-namemanera similar al kernel, y se puede reemplazar después del arranque al igual que el kernel, y la mejor práctica indicaría que no elimina un initrd que funciona conocido hasta que sepa que puede iniciar su nuevo kernel + initrd con éxito.

Espero que proporcione algo de contexto.

Si está buscando una instalación Linux "básica" que tenga poco o ningún programa adicional instalado, mi opción favorita siempre ha sido instalar la netinstimagen de Debian . Prácticamente solo tiene las herramientas más básicas necesarias para ejecutar una consola de texto de línea de comandos y nanocomo editor de texto.

LawrenceC
fuente
5

Rootfs ejecutables individuales

El sistema mínimo absoluto ejecuta un solo /initprograma como lo he explicado en Single Application Linux | Super usuario

Minimal Linux Live

https://github.com/ivandavidov/minimal

Para un sistema interactivo más interesante, este es un pequeño script (principalmente educativo) que:

  • descarga la fuente del kernel y busybox
  • los compila
  • genera un ISO de arranque de 8 Mb con ellos

El ISO te deja en un shell mínimo con busybox.

Con QEMU puede iniciar fácilmente en el sistema.

Lo he modificado para permitir que se ejecute desde el directorio de origen del 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

y quedará dentro de una ventana QEMU con su nuevo sistema mínimo. Increíble.

Como es pequeño, esta es una buena opción para leer la fuente y comprender lo que está sucediendo.

Probado en Ubuntu 16.04.

Buildroot

https://buildroot.org/

Gran conjunto de scripts de Makefile que gestionan:

  • Cadena de herramientas de compilación cruzada GCC
  • compilación del núcleo
  • compilación del gestor de arranque
  • generación de rootfs
  • tiene toneladas de recetas de descarga / compilación de paquetes en el árbol de origen, incluidas cosas complejas como GTK. Hay un sistema de dependencia.

Ejemplo 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.

Incluso tiene recetas para construir X11 desde cero: ¿Cómo instalar X11 en mi propio sistema Linux Buildroot?

Material profesional.

Alpine Linux

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

Distribución integrada con un administrador de paquetes que ofrece binarios precompilados de un sitio web.

Ver también

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
3

Me gustaría respaldar la sugerencia de Shadur de que debes ensuciarte las manos al estilo Linux From Scratch.
Además, algo similar, prueba Pocket Linux .

La Guía de Pocket Linux muestra cómo construir un pequeño sistema GNU / Linux basado en consola usando solo el código fuente y un par de disquetes. Está destinado a usuarios de Linux que deseen obtener una comprensión más profunda sobre cómo funciona su sistema debajo de la cubierta de características y herramientas específicas de distribución.

Philomath
fuente
2
Aunque tenga en cuenta que nadie en su sano juicio recomienda / o / LFS o PocketLinux para cualquier tipo de tarea de producción importante: son buenos para aprender cómo funcionan las cosas, pero hay una razón por la cual la mayoría de las distribuciones vienen con un conjunto completo de herramientas y frontends para la mayoría de las cosas
Shadur
3

Es posible instalar un kernel de Linux sin las herramientas habituales de espacio de usuario. Esto se hace comúnmente en sistemas integrados como enrutadores. Por lo general, el núcleo se carga desde la memoria ROM o Flash, y se ha personalizado para el dispositivo en cuestión (generalmente con los controladores necesarios compilados en el núcleo en lugar de cargarse como módulos).

Debe existir al menos un programa de espacio de usuario para convertirse en el proceso 'init' (no necesariamente llamado init, pero iniciado por el kernel como proceso 1, y el padre automático de cualquier proceso huérfano), a menos que el kernel haya sido modificado (más bien que simplemente personalizado) para no requerir esto.

¡Ciertamente no es necesario tener un shell disponible para tener un dispositivo basado en Linux que funcione, aunque puede hacer que el desarrollo sea mucho más fácil!

Toby Speight
fuente
2

Muchas distribuciones proporcionan instalaciones "centrales". Esto es lo que quieres. Vea ubuntu-minimal, debian net-install, archlinux (el valor predeterminado es solo core).

Las otras respuestas son útiles si quieres aprender, pero ese podría no ser el caso = p

usuario606723
fuente