Autor Thema: The Making of - Linux mini Distribution  (Gelesen 2587 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
The Making of - Linux mini Distribution
« am: Juli 11, 2005, 20:23:52 »
Inhaltsverzeichnis[/size]

1.Das Grundsystem
            <a href="http://pc-techniker.portalsource.de/forum/index.php?topic=1926.msg7319#msg7319">1.1  Vorbereiten des Systems</a>
            <a href="http://pc-techniker.portalsource.de/forum/index.php?topic=1926.msg7320#msg7320">1.2  Debootstraping. Schaffen einer Basis</a>
            <a href="http://pc-techniker.portalsource.de/forum/index.php?topic=1926.msg7325#msg7325">1.3  Konfiguration der Basis</a>
            <a href="http://pc-techniker.portalsource.de/forum/index.php?topic=1926.msg7425#msg7425">1.4  Building a Kernel</a>   
« Letzte Änderung: Juli 15, 2005, 12:22:03 von Baldrian »
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Re: The Making of - Linux mini Distribution
« Antwort #1 am: Juli 11, 2005, 21:46:59 »
Vorbereiten des Systems


Also, da vieleicht manch einer doch noch nicht ganz so intim mit GNU/Linux geworden ist, werde ich am besten zum Anfang noch mal erklären, wie sich so ein Linux Grundsystem schaffen lässt.

Also, Grundvorrausetzung ist erst einmal ein funktionierendes Linux System.
Welche Distribution ist dabei ansich vollkommen egal.
Jetzt folgen ein zwei erklärungen, bitte erst komplett durch lesen.


Es ist durch den Befehl chroot möglich, ein beliebiges Verzeichnis als neue root (als neues Wurzelverzeichnis) zu definieren.

Es ist möglich mit hilfe von debootstrap[/i] ein Debian Linux System in ein beliebiges Verzeichnis zu installieren.


Durch die Kombination von dieser beiden, ist es möglich, ein komplettes Linux System zu bauen, ohne seine gewohnte Linux Distribution verlassen zu müssen.
Man kann im Konsolen Fenster an seinem Linux schnitzen, während man gleich zeitig im Web surfen kann. Das ist seht angenehm.

Diese Art der Installation bedeutet allerdings zwangsläufig, das diese selbst gebaut Distribution Debian basierend wird. Das hat nichts mit meiner persöhnlichen vorliebe zu tun, sondern es gibt leider keine andere Distribution die so etwas wie eine debootstrap[/i] Installation bietet.
Es gibt zwar neuerdings auch rpmstrap[/i] für Fedora, allerdings erst als Version 0.0.2 das ist für meinen geschmack, dann ein doch noch etwas sehr frühes stadium.

Gut, unsere Distribution würde dann also Debian basierend werden.
Ich hoffe das ist ok. Aber wie gesagt gibt es sonst leider keine wirklich einfache Alternative um sich so etwas selbst zusammen zu bauen.

Einspruch ist natürlich möglich.

Um eine Debian Grund-Installation mit debootstrap[/i] vor zu nehmen, braucht man natürlich erst einmal debootstrap[/i].
Dazu geht man am besten wie folgt vor:
Man öffnet eine Konsole und gibt dort erst einmal folgendes ein, um debootstrap[/i] herunter zu laden.
wget http://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_0.2.45-0.2.tar.gzdanach entpackt man das herrunter geladenen Archiv mit
tar xvzf debootstrap_0.2.45-0.2.tar.gzund wechselt in den Ordner
cd debootstrapund gibt dort zum compilieren ein simples
makewird dann root mit su
und gibt zum installieren dann
make installein oder für Leute die lieber checkinstall nutzen, natürlich ein
checkinstall
So damit wäre debootstrap[/i] schon mal installiert.

Jetzt sollte man sich Gedanken über das spätere Zielverzeichnis machen.
Theoretisch kann man das eigene kleine Linux in jeden x beliebigen  Ordner installieren, allerdings ist es von Vorteil, wenn man eine separate Partition nutzt, weil sich so das System auch später wirklich über einen Bootmanager starten läst und nicht nur in einer chroot Umgebung laufen kann.

Als größe der Ziel Partition empfehle ich so um die 3GB. Das läst einerseits Platz für alle Wünsche, aber ist auch kein unangenehmer Platzfresser.
Wer eine freie Partition hat, kann diese natürlich verwenden. Wer umpartitionieren muss, dem empfehle ich  qtparted oder einen Partitionierer seiner Wahl, allerdings sollte dieser sowohl ntfs als auch die Linux-Dateisysteme ext2, ext3 u. reiserfs[/i] beherschen.

Nachdem man eine neue Partition angelegt hat, muss diese in die /etc/fstab[/i] eintragen. Das geschiet mit dem Editor der Wahl.
Wie so eine Zeile in der /etc/fstab[/i] auf gebaut ist, sieht man eigentlich an den anderen Einträgen.
Zuerst kommt die Bezeichnung des Gerätes. Zum Beispiel /dev/hdb1[/i] wäre es für die erste Partition der zweiten Festplatte.
Dann kommt der Mount Punkt. Wir nennen ihn der Einfachheit einfach mal lpo[/i] (lpo = linux projekt ordner) dann würden wir folgendes eintragen /mnt/lpo[/i].
Jetzt kommt das Datei System. Wir nehmen aus stabilitäts gründen ein ext3[/i] Dateisystem, also tragen wir das dort auch ein.
Um die Verzeichnis Optionen kümmern wir uns erst einmal nicht. Einfach defaults an diese Stelle schreiben.
Zum Abschluss noch zwei Nullen hintendran und speichern.

Jetzt formatieren wir das Laufwerk, auf das später unser System soll.
Wie ich bereits schrieb, empfehle ich erst mal ein ext3[/i] Dateisystem.
Dazu gibt man dann folgendes ein
mke2fs -j /dev/"ziel gerät"Dann müssen wir noch den oben bezeichneten Mountpunkt erstellen.
mkdir /mnt/lpoUnd wir mounten das ganze dann auch noch gleich.
mount /mnt/lpo
« Letzte Änderung: Juli 11, 2005, 23:02:56 von Baldrian »
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Re: The Making of - Linux mini Distribution
« Antwort #2 am: Juli 11, 2005, 22:21:30 »
Debootstrap. Schaffen einer Basis

Na dann, kann es ja los gehen.
mit
debootstrab --arch i386 sid /mnt/lpo http://ftp.de.debian.org/debianwird mit hilfe von debootstrap[/i] ein Debian Sid Basis System in dem Verzeichnis /mnt/lpo[/i] (wo wir auch unser Partition hin gemounted haben) erstellt.
Mit dem Befehl
chroot /mnt/lpokönnten wir jetzt dieses Debain System als neues Wurzelverzeichnis definieren und dadurch mit dem Debian System wie mit der eigenen Linux Distribution arbeiten.
Es fehlt nur noch ein wenig konfigurations Arbeit, aber der Grundstein fürs eigene Linux ist damit auf jeden Fall schon mal gelegt.
« Letzte Änderung: Juli 12, 2005, 10:29:04 von Baldrian »
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Re: The Making of - Linux mini Distribution
« Antwort #3 am: Juli 12, 2005, 11:37:19 »
Konfiguration der Basis

Bevor es jetzt wirklich los gehen kann, muss man das Basis System noch ein wenig konfigurieren.
Ich gehe bei den folgenden Befehlen davon aus, das man mit chroot[/i] in das Projekt verzeichnis geweschselt ist.
Also mit
# chroot /mnt/lpoBei Debian wird für chroot[/i] automatisch /bin/bash[/i] als Folgebefehl gesetzt. Bei anderen Distributionen könnte das allerdings anders sein. Dann sollte man anstelle des Befehls oben, diesen hier verwenden.
# chroot /mnt/lpo /bin/bash
In unserem neuen System sollten wir jetzt als erstes die Datei /etc/fstab[/i] erstellen, damit wir proc[/i] mounten können.
Das machen wir mit dem Editor nano[/i].
# nano /etc/fstabIn die /etc/fstab[/i] kommen jetzt erst mal nur folgende Einträge:

proc                /proc                 proc          defaults                0   0
/dev/...*           /                        ext3          defaults                0   1
/dev/...*2         none                 swap         sw                        0   0
/dev/cdrom      /media/cdrom    iso9660    ro,user,noauto     0   0


* hier kommt das Device für die Partition, auf der unser Projekt installiert wurde hin. Also könnte der eintrag zum Beispiel so aussehen /dev/hdb1[/i].
*2 hier kommt das Device für die Partition, auf der sich das Swap Dateisystem befindet. Könnte zum Beispiel /dev/hda5[/i] sein.

Wenn die /etc/fstab[/i] soweit fertig ist, speichern wir sie mit nano[/i] mit der Tastenkombination Strg+O[/i] und verlassen dann nano[/i] mit Strg+X[/i].

Jetzt mounten wir im anschluss gleich proc[/i].
# mount -t proc proc /proc

Damit unser Tastatur-Layout auch in der Konsole stimmr, sollten wir diese auch konfigurieren.
# dpkg-reconfigure console-dataDie Konfiguration ist ansich selbst erklärend. Sollte es denoch Fragen geben, dann Fragt bitte.


Als nächstes sollte man das Netzwek konfigurieren.
Eventuell ist dieses bereits automatisch erfolgt. Zum Beispiel wenn man eine debootstrap[/i] Installation unter Debian macht. Da ich allerdings nicht weiß, wie es sich hiermit unter anderen Distributionen verhält, erkläre ich es lieber einmal kurz.
Zuerst weist man Seiner Netzwerkkarte, welche die verbindung zum Router hält eine IP und Netmask zu. Als Beispiel
# ifconfig eth0 192.168.0.11 netmask 255.255.255.0 upNatürlich müssen IP und Netmask dem eigenen Netzwerk angepasst werden.
Dann gibt man das Gateway bzw. den Router an.
# route add default gw 192.168.0.1Auch hier ist die IP gegebenenfalls anzupassen.
Zum Schluß müssen wir noch die /etc/resolv.conf[/i] editieren und dort die NamensServer (DNS) des Providers eintragen.
# nano /etc/resolv.confSo ein Eintrag könnte etwa wie folgt aussehen:

nameserver 195.50.140.252
nameserver 145.253.2.81

Natürlich braucht man hier die IP Adressen des eigenen Providers.
Wer diese nicht kennt, kann einfach in der /etc/resolv.conf[/i] seines eigenen Linux Systems nach gucken.


Damit man das Basis System auch noch durch weitere Pakete ergänzen kann, sollte man zu guter letzt noch apt[/i] einrichten.
apt[/i] ist der Paketmanager von Debian.

Damit apt[/i] weiß, woher es neue Pakete bekommen kann, müssen wir einen Eintrag in der /etc/apt/sources.list[/i] vornehmen.
# nano /etc/apt/sources.listDort trägt man jetzt erst mal nur den folgenden Mirror ein:
deb http://ftp.de.debian.org/debian unstable main[/i]
Danach wieder mit Strg+O[/i] speichern und nano[/i] mit Strg+X[/i] verlassen.

apt[/i] soll sich jetzt eine aktuelle Liste, aller verfügbaren Pakete holen.
apt-get update

So, jetzt fehlt nur noch eines.
Damit auch wirklich alles passt, sollte man noch Land und Sprache so wie deren Formatierung einrichten.
Dafür braucht man das Paket locales[/i], welches wir gleich mal mit apt[/i] installieren wollen.
# apt-get install localesAm besten ist es hier de_DE@euro ISO-8859-15[/i] zu wählen.

"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."

Offline Baldrian

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 2426
  • Bewertung der Beiträge: 28
  • Geschlecht: Männlich
    • Profil anzeigen
    • ecarux.de
Re: The Making of - Linux mini Distribution
« Antwort #4 am: Juli 15, 2005, 12:19:57 »
Building a Kernel


So, so. Jetzt braucht unser eigenes kleines Linux eigentlich nur noch einen eigenen Kernel damit man es auch nutzen kann.
Wir sollten zwar weiterhin mit einer chroot umgebung daran arbeiten, allerdings ist ein Kernel natürlich dafür notwendig, das man sein Linux auch starten kann. Ansonsten könnte man ja nie die Früchte seiner Arbeit bewundern.

Gut, einen Kernel zu bauen hört sich schwieriger an, als es ist.
Es ist oft viel komplizierter irgendwelche pakete zu bauen, als einen Kernel. Das liegt daran, das der Kernel keine Abhängigkeiten hat.

Um den Kernel compilieren zu können, müssen wir folgende Pakete unter unserem kleinen Debian installieren.
gcc, make, libncurses5-dev, kernel-package wget bzip2 patch[/i]
also machen wir das mal schnell und schmerzlos mit apt[/i]
# apt-get install gcc, make, libncurses5-dev, kernel-package wget bzip2 patchEventuell möchte apt[/i] gleich noch ein paar Pakete mehr mit installieren, das ist OK.
Dafür haben wir schließlich apt[/i], damit es sich um die Abhängigkeiten kümmert.

So, es gibt von hier aus jetzt zwei Möglichkeiten.
Die Einfache und die etwas aufwendigere.

Bei der einfachen benutzt ihr einfach folgendes kleines Script, das ich geschrieben habe.
http://msys-online/download/kernel-build.sh
Das ladet ihr mit
# wget http://msys-online/download/kernel-build.shherunter und gebt dann nur noch
# sh kernel-build.shein.
Das Script kümmert sich dann um alles.
Lädt die Quelle des aktuellen Kernel 2.6.12.2 runter, patcht diesen ein bisschen, compiliert diesen und baut zu guter letzt ein deb[/i] Paket, welches den Kernel enthält.

Aber schon mal als Warnung, das compilieren eines Kernel kann schon mal ein Stündchen dauern. Also nicht erschrecken.


Bei der aufwendigeren Möglichkeit muss man das selber machen, was ansonsten das Script macht.
Aber warum dami rum quälen, wenn es doch dieses Script gibt?
Weil es ja durchaus sein kann, das ein gewisses interrese am Lernen besteht.
Das Script ist für die jenigen gedacht, die sich vieleicht zum Anfang ihrer Linux Karriere etwas mit dem selbst bau eines Kernel überfordert fühlen. So ging es mir nämlich auch.
Oder für die jenigen, die nichts mehr lernen müssen und sich lieber die Tip arbeit sparen wollen. Scripte können das leben sehr vereinfachen.

So nun, wie man das jetzt selber macht.

Zuerst wechselt man mit
# cd /usr/src in das Verzeichnis /usr/src. Dies ist das traditionelle Verzeichnis für die Kernel Sourcen.
Die Kernel Quellen laden wir von kernel.org runter mit
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.12.2.tar.bz2 und entpacken das ganze mit
# tar xvjf linux-2.6.12.2.tar.bz2dann setzen wir einen soft Link von linux[/i] auf linux-2.6.12.2 mit
# ln -s linux-2.6.12.2 linuxund wechseln dann über den Link linux[/i] in das Verzeichnis  linux-2.6.12.2.
# cd linux
Warum ist die Sache mit dem Link nötig?
Weil andere Programme die Kernel Quelle unter /usr/src/linux[/i] erwarten. Der Link sollte also immer auf die Quelle des aktuell verwendeten Kernel gerichtet sein.

So, der Kernel von Kernel.org ist ein sogenannter vanilla[/i] Kernel.
Um den Kernel etwas unseren bedürfnissen anzupassen und ihn mit Funktionen zu versehen, die nicht von grund auf in dem Kernel integriert sind, muss man den Kernel patchen[/i].
Wenn man das Script von oben benutzt, werden folgende Funktionen in den Kernel gepatcht.
Squashfs - Ein sehr schnelles hoch komprimiertes Read Only Datei System
Bootsplash - Erlaubt einen Bootsplash während des boot vorgangs, der über den Framebuffer
                        ausgegeben wird.
inotify - inorify erlaubt ein echtzeit indexing.

Wer will kann hier natürlich was auch immer in den Kernel patchen.
Aber so, werden die drei Dinge von oben gepatcht.
wget http://www.kernel.org/pub/linux/kernel/people/rml/inotify/v2.6/0.23/inotify-0.23-rml-2.6.12-15.patch && \
patch -p1 < inotify-0.23-rml-2.6.12-15.patch && \
wget http://www.bootsplash.de/files/bootsplash-3.1.6-2.6.12.diff && \
patch -p1 < bootsplash-3.1.6-2.6.12.diff && \
wget http://mesh.dl.sourceforge.net/sourceforge/squashfs/squashfs2.2.tar.gz && \
tar xvzf squashfs2.2.tar.gz && \
patch -p1 < squashfs2.2/linux-2.6.12/squashfs2.2-patch && \
rm -rf squashfs2.2

Jetzt muss der Kernel noch configuriert werden.
Ich habe hier eine .config die man nutzen kann. http://msys-online.de/download/2.6.12-config
Herunterlasen könnt ihr sie mit
# wget http://msys-online.de/download/2.6.12-config damit sie auch verwendet wird, muss man sie noch in .config umbenennen.
# mv 2.6.12-config .configund danach um die .config zu übergeben einfach ein
# make oldconfigeingeben.
Wer die konfiguration seines Kernels lieber selbst übernehmen möchte, der sollte anstelle von make oldconfig[/i] lieber ein make menuconfig[/i] eingeben.
Daraufhin würde dann ein Konfigurationsmenü erscheinen.

Nachdem man den Kernel konfiguriert hat, braucht man den kernel nur noch compilieren.
Unter debian gibt es hierfür zum glück eine sehr einfache und elegante Lösung.
Debian kann aus dem Kernel im gegensatz zu anderen Distributionen nämlich ein .deb Paket bauen.
Dadurch kann man einen gebauten Kernel sowohl auch auf anderen systemen verwenden, als ihn auch ganz simpel installieren und auch wieder deinstallieren.

Um so ein Paket bauen zu lassen, muss man nur folgendes eingeben
# make-kpkg cleansäubert noch schnell das Verzeichnis und dann
# make-kpkg --initrd kernel_image
So, jetzt compiliert er.
Das kann wie gesagt etwas länger dauern.
Wenn das ganze fertig ist, befindet sich um schluss das Kernel Packet unter /usr/src[/i].

Das Kernel Paket läst sich dann einfach mit
# dpkg -i /usr/src/kernel-image-2.6.12.2_10.00.Custom_i386.debinstallieren.
Wenn man wärend dessen gefragt wird, ob man die Option initrd[/i] benutzen möchte, sollte man dieses mit ja beantworten.

« Letzte Änderung: Juli 19, 2005, 13:01:53 von Baldrian »
"Was auch immer geschieht, nie dürft ihr so tief sinken,
von dem Kakao, durch den man euch zieht, auch noch zu trinken."