Ist es möglich, den Linux-Kernel alleine zu installieren?


45

Ich bin nur neugierig, ob es möglich ist, den Linux-Kernel alleine zu installieren, oder ob Sie eine der Varianten verwenden müssen. Wenn es möglich wäre, wie würden Sie es tun? Ich brauche kein detailliertes Tutorial. Ich möchte nur wissen, wie es konzeptionell gemacht wird. Ich bin nicht gut mit Low-Level-Sachen und möchte wissen, wie Sie ein Betriebssystem in den Computer bekommen. Ich stelle mir vor, es hat etwas mit dem MBR zu tun.

Oh und mir ist aufgefallen, dass viele der Antworten auf eine bestimmte Distribution von minimalem Linux hindeuten. Ich hätte wahrscheinlich sagen sollen, dass ich nicht auf der Suche bin, ein minimales oder nacktes Linux zu installieren. Diese Frage ist rein theoretisch. Trotzdem schätze ich alle Antworten sehr und werde sofort darauf zurückgreifen, falls ich jemals ein wirklich personalisiertes Linux installieren möchte.


3
Was meinst du mit "allein" und "Aromen"? Linux ist kein Betriebssystem, es ist ein Kernel. Wofür wäre ein Kernel ohne Betriebssystem gut? Versuchen Sie stattdessen, die Bootloader-Sequenz herauszufinden?
Caleb

3
Wenn Sie verstehen möchten, wie ein Kernel / Betriebssystem in den Computer gelangt , können Sie hier beginnen. Stellen Sie nur sicher, dass Sie dort keine "Newbie" -Fragen stellen, sie werden Sie beißen und sie stattdessen auf SO stellen .
Philomath

3
Mit allein meine ich nur den Kernel, abzüglich der Benutzeroberfläche und eingeschlossener Programme wie OpenOffice. Mit "Flavours" meine ich die verschiedenen Distributionen von Linux, wie Ubuntu, RedHat, Debian und Mandriva. Ich habe fast keine Ahnung, wovon ich spreche. Ich stellte mir vor, dass der Linux-Kernel einige grundlegende Bash-Funktionen wie DOS hatte. Ich denke, ich kann meine Ideen von Kerneln und Betriebssystemen durcheinander bringen.
Cesar

4
Ja, Sie sind sie WIRKLICH verwickelt :) Bash ist nur ein User-Land-Programm, das als ein vom Kernel verwalteter Prozess ausgeführt wird. Ein Kernel allein bietet Ihnen nichts als eine Plattform, auf der Sie andere Dinge ausführen können. Der Vorschlag von LFS (Linux From Scratch) in Shadurs Antwort ist genau richtig. Sie würden viel darüber lernen, was all die verschiedenen Teile sind und was eine Distribution zu einer Distribution macht und wo der Kernel endet und User-Land beginnt, indem Sie ein Scratch-System erstellen.
Caleb

2
Eigentlich hatte das DOS kernelauch keine Grundfähigkeiten bash. Die Standardbenutzeroberfläche wurde vom Shell-Programm bereitgestellt COMMAND.COM. Am ehesten können Sie einen Kernel mit dem Kernel-Parameter booten init=/bin/bash(vorausgesetzt, ein minimales Linux befindet sich auf der Festplatte). Wie gesagt, wenn Sie nur den Bootloader und den Kernel haben, stoppt dieser sehr schnell, wenn er nicht gefunden wird init.
StarNamer

Antworten:


51

Sie können technisch nur einen Bootloader und den Kernel alleine installieren, aber sobald der Kernel bootet, wird er sich darüber beschweren, dass "init" nicht gestartet werden kann, dann wird er einfach dort sitzen und Sie können nichts damit anfangen.

Übrigens ist es ein Teil des Bootloaders, der sich im MBR befindet. Der Kernel befindet sich irgendwo im regulären Bereich einer Festplatte. Der Bootloader ist so konfiguriert, dass er weiß, wo er sich befindet, sodass er den Kernel laden und ausführen kann.


Wie würden Sie es in den MBR einfügen?
Cesar

Jeder Bootloader wird mit einem Tool geliefert, mit dem er sich selbst im MBR installieren kann. Es gibt auch freundlichere Tools wie Boot-Repair ( help.ubuntu.com/community/Boot-Repair ).
Shawn J. Goff

Nun, Sie könnten ein initramfs erstellen und es in das Kernel-Image einbetten, und dann hätten Sie ein voll funktionsfähiges System aus nur einer Kernel-Image-Datei :-)
Patrick

@ ShawnJ.Goff Warum sollte sich der Kernel beschweren, init nicht starten zu können, wenn wir die initramfs bereitstellen?
Pratik Singhal

4
@ ps06756 Wenn du das initramfs hast, ist das nicht der Kernel "alleine" wie die gestellte Frage. Wenn das initramfs ein Init hat, beschwert sich der Kernel nicht.
Shawn J. Goff

18

Ich glaube nicht, dass Sie genau verstehen, was Sie fragen, aber vielleicht möchten Sie sich das Linux From Scratch- Projekt ansehen .


LFS wäre eine gute Idee, um herauszufinden, wie ein Minimum-System aufgebaut werden kann. Oder Sie schauen sich MINIX an (und lesen das Buch ). Oder schauen Sie sich für eine andere Einführung (weniger Arbeit, aber weniger informativ) die Pakete aptitude search '?essential'an, die unter Debian oder Ubuntu mit dem Tag "essential" ( ) versehen sind, und verstehen Sie, was jeder tut (es gibt etwas mehr als das Nötigste).
Gilles 'SO - hör auf, böse zu sein'

12

Wenn Sie sich fragen, ob Sie einen Kernel einfach "über" ein vorhandenes System installieren oder aktualisieren können, ohne eine Reihe anderer Programme zu installieren?

Der Linux-Kernel ist eine Binärdatei, die normalerweise vmlinuz-x.x.x-x-nameim bootVerzeichnis (das normalerweise eine separate kleine Partition am Anfang der Festplatte ist) genannt wird, wobei die x eine Versionsnummer sind. "name" ist nur ein gewählter Name für den Kernel, der zur Kompilierungszeit festgelegt werden kann. Sie können ihn verwenden, um den Typ der Maschine oder Architektur, für die der Kernel ist, oder einen anderen Grund zu bestimmen.

Es wird zur Startzeit von einem Bootloader geladen, der normalerweise GRUBüber den Bootcode im MBR aufgerufen wird, der vom BIOS-ROM aufgerufen wird. Sobald es geladen ist, wird es nicht "offen gehalten" oder speziell geschützt. Sie können diese Datei also durch einen anderen funktionierenden Kernel ersetzen. Hat GRUBaber eine coole Funktion, mit der Sie mehrere Kernel zum Booten auswählen können. Es ist also ziemlich klug, Ihren zusätzlichen Kernel zu dieser Liste hinzuzufügen, aber den ursprünglich bekannten Kernel für den Fall, dass etwas schief geht, beizubehalten.

Ich glaube, fast alle Distributionen machen einen "modularen" Kernel, in dem sich die Gerätetreiber in separaten Dateien befinden. Daher benötigen die meisten Kernel ein Dateisystem mit Treibern, die beim Booten zur Verfügung stehen, und dafür ist ein "initrd" (anfänglicher RAM-Datenträger) oder "initramfs" gedacht. GRUBLädt den Kernel an einem Speicherort und die initrd an einem anderen Speicherort und springt zum Kernel, der angibt, wo sich die initrd befindet, und startet Linux.

Treiber können auch in den Kernel "eingebaut" werden und werden daher automatisch geladen und sind verfügbar, wenn der Bootloader das vmlinuzImage lädt . Kernel, die auf verschiedenen Systemen (wie z. B. den meisten Distributionen) funktionieren sollen, minimieren in der Regel die in den Kernel eingebauten Komponenten, da die verfügbare Hardware später im Startprozess gescannt wird und nur Module geladen werden, die die vorhandene Hardware repräsentieren.

Es gibt Tools zum Ändern und Erstellen von initrds. Debian hat nette Werkzeuge und ich kann mir vorstellen, dass dies auch bei anderen Distributionen der Fall ist.

Wenn Sie also einen neueren Kernel von kernel.org herunterladen und ihn kompilieren, um ein neues Kernel-Binär-Image zu erstellen, müssen Sie eine initrd mit Treibern erstellen oder aktualisieren, die mit diesem Kernel funktionieren. Die alte initrd funktioniert nicht, da die Treiber mit der Version des laufenden Kernels übereinstimmen müssen.

Die initrd-Datei hat einen initrd.img-x.x.x.x-nameähnlichen Namen wie der Kernel und kann nach dem Booten wie der Kernel ersetzt werden. Best Practice besagt, dass Sie eine bekannte funktionierende initrd erst dann löschen, wenn Sie wissen, dass Sie Ihren neuen Kernel + initrd erfolgreich booten können.

Ich hoffe, das bietet einen gewissen Kontext.

Wenn Sie nach einer "Barebones" -Linux-Installation suchen, auf der nur wenige oder gar keine zusätzlichen Programme installiert sind, hat meine Lieblingsauswahl immer das Debian- netinstImage installiert . Ziemlich viel Sie haben nur die grundlegendsten Werkzeuge, die benötigt werden, um eine Befehlszeilentextkonsole und nanoals Texteditor auszuführen .


5

Einzelne ausführbare Rootfs

Das absolute Minimum-System führt ein einzelnes /initProgramm aus, wie ich unter Linux für einzelne Anwendungen | erläutert habe Super User

Minimales Linux Live

https://github.com/ivandavidov/minimal

Für ein interessanteres interaktives System ist dies ein (meist lehrreiches) kleines Skript, das:

  • Lädt die Quelle für den Kernel und die Busybox herunter
  • kompiliert sie
  • erzeugt daraus einen bootfähigen 8Mb ISO

Die ISO lässt Sie dann in einer Minimal-Shell mit Busybox zurück.

Mit QEMU können Sie problemlos in das System booten.

Ich habe es so geändert, dass es über das Kernel-Quellverzeichnis ausgeführt werden kann: https://github.com/cirosantilli/runlinux

Verwendungszweck:

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

und Sie werden in einem QEMU-Fenster mit Ihrem neuen Minimalsystem zurückgelassen. Genial.

Da es klein ist, ist dies eine gute Option, um die Quelle zu lesen und zu verstehen, was los ist.

Getestet unter Ubuntu 16.04.

Baumwurzel

https://buildroot.org/

Große Auswahl an Makefile-Skripten, die Folgendes verwalten:

  • GCC Cross Compilation Toolchain
  • Kernel-Kompilierung
  • Bootloader-Kompilierung
  • Generierung von Rootfs
  • hat Unmengen von Rezepten zum Herunterladen / Erstellen von Paketen im Quellbaum, einschließlich komplexer Dinge wie GTK. Es gibt ein Abhängigkeitssystem.

Minimales Beispiel:

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.

Es gibt sogar Rezepte, um X11 von Grund auf neu zu erstellen: Wie installiere ich X11 auf meinem eigenen Linux Buildroot-System?

Professionelles Zeug.

Alpines Linux

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

Embedded Distribution mit einem Paketmanager, der vorkompilierte Binärdateien von einer Website anbietet.

Siehe auch


3

Ich möchte dem Vorschlag von Shadur folgen, dass Sie Ihre Hände auf die Art von Linux From Scratch schmutzig machen sollten.
Versuchen Sie es auch mit Pocket Linux .

Das Pocket Linux-Handbuch zeigt, wie Sie ein kleines konsolenbasiertes GNU / Linux-System nur mit Quellcode und einigen Disketten erstellen. Es richtet sich an Linux-Benutzer, die ein tieferes Verständnis für die Funktionsweise ihres Systems unter dem Deckmantel verteilungsspezifischer Funktionen und Tools erlangen möchten.


2
Beachten Sie zwar, dass niemand, der bei klarem Verstand ist, / entweder / LFS oder PocketLinux für eine wichtige Produktionsaufgabe empfiehlt - sie eignen sich gut zum Erlernen der Funktionsweise von Dingen, aber es gibt einen Grund, warum die meisten Distributionen über einen vollständigen Satz an Tools und Frontends verfügen für die meisten Sachen.
Shadur

3

Es ist möglich, einen Linux-Kernel ohne die üblichen User-Space-Tools zu installieren. Dies geschieht üblicherweise in eingebetteten Systemen wie Routern. Normalerweise wird der Kernel aus dem ROM- oder Flash-Speicher geladen und für das betreffende Gerät angepasst (normalerweise werden die erforderlichen Treiber im Kernel kompiliert und nicht als Module geladen).

Es muss mindestens ein User-Space-Programm vorhanden sein, um der 'init'-Prozess zu werden (nicht notwendigerweise aufgerufen init, sondern vom Kernel als Prozess 1 gestartet, und das automatische übergeordnete Element von verwaisten Prozessen) - es sei denn, der Kernel wurde geändert (stattdessen) als einfach angepasst), um dies nicht zu verlangen.

Es ist sicherlich nicht erforderlich, eine Shell zur Verfügung zu haben, um ein funktionsfähiges Linux-basiertes Gerät zu haben, obwohl dies die Entwicklung erheblich erleichtern kann!


2

Viele Distributionen bieten "Core" -Installationen an. Das ist, was du willst. Siehe ubuntu-minimal, debian net-install, archlinux (Standard ist nur core).

Die anderen Antworten sind nützlich, wenn Sie lernen möchten, aber das ist möglicherweise nicht der Fall = p

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.