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.
- -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)
- noetigen, also ttyS0, tty, tty1, urandom, fd0*, hda*)
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
- ttyS0 --noparams
- startet
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
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
- -die params sieht dann so aus:
- 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.
- ************ 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
- -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
- 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.
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
- 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.
</pre>