Unterschiede zwischen den Revisionen 1 und 2
Revision 1 vom 2004-12-16 23:45:02
Größe: 8240
Autor: anonym
Kommentar: missing edit-log entry for this revision
Revision 2 vom 2012-06-13 21:26:25
Größe: 8240
Autor: anonym
Kommentar: converted to 1.6 markup
Es wurden keine Änderungen gefunden!

geschieht sobald das entsprechende geraaaet, wieder in meinen haenden liegt [a]


Ein-Disketten-Router (laeuft, ist aber z.Z. nur ein Webserver)

<pre>    [--------------------------------------------------------------]


[ RamdiskProjektFork: RouterFirewallDialoutFileserver v.0.2 ]


   [--------------------------------------------------------------]

Was machen wir:

  • - Testumgebung von qemu nutzen, um eine Ramdisk zu baun, die samt Kernel
    • auf 1 Diskette passt.
    -docs: Bootdisk-HOWTO -software:
    • -dietbins, minit, embutils. alles auf www.fefe.de
      • -dietlibc wird dafuer aufm build host benoetigt.

      (- checkpassword von http://cr.yp.to/checkpwd.html) -thhtpd -dropbear als sshd

1. datei erstellen, in die das ganze reinsoll

  • touch rootfs.img dd if=/dev/zero of=rootfs.img bs=1k count=6000 (muss getestet werden,
    • ob das in 8 MB passt, sonst eben kleiner)
    mke2fs rootfs.img (ext2 rauf) mount -o loop /mnt/rootfs/ rootfs.img mkdir bin, dev, etc, mnt, lib, sbin, usr, var, var/log, var/run touch /var/log/wtmp touch /var/log/utmp (beide Zeilen unelegant, aber einloggen klappt) cd dev mit cp -dpR die devicenodes vom eigenen /dev reinkopieren (nur die
    • noetigen, also ttyS0, tty, tty1, urandom, fd0*, hda*)
    cd etc fstab, inittab, passwd, group, shadow, hostname von eigener Kiste reinkopieren, werden spaeter angepasst

2. minit

  • -make -makefile angucken und entsprechend die Programme ins rootfs schreiben -die mkfifo-Zeile (ohne das - am Anfang) ausfuehren -das tutorial zu minit lesen (ist einfach) -mit Hilfe von fefes minit-Verzeichnis verstehen und selbst baun: -verzeichnisse ctrlaltdel, default, remount, mountproc blind kopieren -verzeichnis getty erstellen - getty/depends erstellen und
    • getty/S0 reinschreiben
    -getty/S0 erstellen fuer serial port console -getty/S0/params sieht so aus:
    • ttyS0 --noparams
    -dann noch 'touch respawn', damit das teil beim abkratzen gleich neu
    • startet
    -ln -s /sbin/fgetty getty/S0/run

3. fgetty

  • -entpacken und maken -entprechend 'make install' im Makefile ins rootfs kopieren -/mnt/rootfs/etc/inittab wie enpfohlen anpassen:
    • #fgetty sachen fuer virtuelle terminals (kann aus, also # davor) 1:123:respawn:/sbin/fgetty /dev/tty1 --noclear 2:123:respawn:/sbin/fgetty /dev/tty2 --noclear #fgetty am seriellen port S1:123:respawn:/sbin/fgetty /dev/ttyS0 --noclear
    (-checkpasswd entpacken) braucht man wohl garnicht

4. - dietbins mount und (b)ash nach /bin kopieren

  • - /etc/passwd anpassen fuer die shell - in /root .profile erstellen mit Inhalt
    • export PATH=/sbin:/bin

5. init=/sbin/minit als kernel parameter übertragen

  • ERSTER LAUFFAEHIGER ZUSTAND MIT LOGIN KLAPPT AB HIER *******************

6. -dietbins busybox nach /bin packen

  • -mal ./busybox aufrufen -entsprechend allen angegebenen Namen immer folgendes in /bin tippen: ln -s busybox name
  • ******************* SCHICK ISSES AB HIER ******************************

6. thhtpd installieren

  • -sourcen ausm Netz ziehn -mit
    • CC="diet gcc -nostdinc" ./configure --disable-nls \ --disable-shared --enable-static configuren und mit make compilen - schliesslich wird sie folgendermassen kopiert objcopy --strip-all thhtpd /mnt/rootfs/sbin/thttpd -jetzt ist die binary bei mir noch 90k gross. -/etc/mime.types vom host aufs target kopieren (weiss nicht ob noetig) -aufgerufen wird sie mit thttpd -d /path/to/html_files/ -c **.cgi , wobei das -c Argument bedeutet, dass alle .cgi-Dateien als solche auch ausgeführt werden.

      -jetzt sollte im Browser unter http://172.20.0.2/ der Content zu sehn sein. -damit alles automatisch läuft, sollten in minit noch eth0 und lo die Einträge von fefes minit stehn, eth0 mit 172.20.0.2 (später die richtige IP-Adresse und ein up am Ende der params) - die beiden noch in /etc/default/depends eintragen - dann einen eintrag für thttpd erstellen:

      • -die params sieht dann so aus:
        • -d /path/to/html_files/ -c
        • *.cgi
  • ************ EIN WEBSERVER LÄUFT AB HIER ****************************

7. sshd rauf für remote administration

  • -dropbear ziehn und entpacken -config.h schoen klein machen (keinx, kein forawrding und sowas) -CC="diet gcc -nostdinc" ./configure --disable-nls \
    • --disable-shared --enable-static --disable-zlib --disable-openpty
    -make -make strip -jetzt haben wir ein 120k binary. das kommt nach /opt/dropbear -./dropbearkey -t rsa -f dropbear_rsa_host_key den key auch nach /etc kopieren, dann muss der generator nicht mit aufs image. -nun noch in der /root/.profile den path anpassen -/etc/shells erstellen, in der untereinander /bin/sh und /bin/bash steht -/dev/ptmx und /dev/pts/ auf rootfs kopieren -/var/log/lastlog touchen -es gibt shellprobleme. duerfte an der shellimplementation in dietlibc liegen.
    • -ich hack grade in der auth.c rum, um das zu umgehn
  • ***********************************************************************

xx. Ip-Adresse anpassen xx. initrd

  • passwort fuer www-data entfernen
  • ************* NOTIZEN ***************************************

MARKER

  • passwd == foo == 21wY00k4MUlpI

Fehlermeldung:utmpfd!=4 || wtmpfd!=5

  • Lösung: wohl folgendes:
    • mkdir /var mkdir /var/log mkdir /var/run touch /var/log/wtmp touch /var/log/utmp
    dann kommt zwar noch die Fehlermeldung, aber einloggen klappt.
    • TODO: man utmp. kapieren, Fehler entfernen.

</pre>


qemu zum Laufen bringen

<pre>   [--------------------------------------------------------------]


[ Wie baue ich eine Testumgebung fuers Ramdiskprojekt v.0.2 ]


   [--------------------------------------------------------------]

Was machen wir: - Qemu installieren - gepatchten Kernel configuren und compilen

1. Qemu Sourcen (od das vl-Testpaket) und qemu-doc.html ziehn von

2. Die aktuellen Kernelsourcen kopieren:

  • $ su $ cd /usr/src $ cp -Rs /usr/src/kernel-source-2.4.18 qemulinux

3. im Qemukernelsourcenverzeichnis folgendes machen:

  • rm include/asm cd include ln -s asm-i386 asm rm asm/page.h cp /usr/src/kernel-source-2.4.18/include/asm/page.h .

4. entsprechend qemudoc.html Abschnitt 3.4 in page.h

  • #define PAGE_OFFSET (0xc0000000) durch #define PAGE_OFFSET (0x90000000) ersetzen.

5. nach /usr/src/qemulinux/arch/i386 gehen

  • rm vmlinux.lds cp /usr/src/kernel-source-2.4.18/arch/i386/vmlinux.lds .

6. entsprechend qemudoc.html Abschnitt 3.4 in vmlinux.lds

  • = 0xc0000000 + 0x100000; durch
  • = 0x90000000 + 0x100000; ersetzen.

7. kernel baun

  • cd /usr/src/qemulinux rm .config make menuconfig WICHTIG: bei character devices:
    • Virtuelle Terms aus (muss nicht, wenn an, dann in die /etc/inittab serial getty anmachen und kernelparam console=ttyS0) UND: config_serial=y config_serial_console = y sonst klappt der Kernel zwar, aber es ist dunkel.
    make clean make dep make bzImage

8. vl-Paket entpacken

9. ins vl-Verzeichnis gehen und vl-sh starten. sollte klappen.

10. eigenen Kernel reinkopieren und testen.

  • ziemlich witzig: bei 2.4.18 kernel panic mangels root device: "I have no Root and I want to scream" ist ne Anlehnung an das Endzeit-Horrorwerk "I have no mouth and I must scream"

11. beliebiges rootfs bei vl.sh reinschreiben. kernelparams einfach ranhaengen.

12. Netzwerksupport

  • -host kernel muss den 'universal tun/tab device driver' bei network devices an haben -vl-ifup nach /etc kopieren -beim host als root
    • -mkdir /dev/net -mknod /dev/net/tun c 10 200
    -jetzt ist noch das Problem da, das die beiden Geräte gegenseitig ihre
    • Mac-Adressen nicht finden. dafür gibts die Datei /etc/ethers. also in der emulation mal ifconfig eingeben und das beim host reintippen, also 01:23:23:23:21:00 172.20.0.2 beim host und entsprechend umgekehrt mit 172.20.0.1 im target-rootfs eintragen.
    -als root (user hat bei mir nicht geklappt) vl.sh starten -fertig!

</pre>

RamDiskProjekt (zuletzt geändert am 2012-06-13 21:26:25 durch anonym)


Creative Commons Lizenzvertrag
This page is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.