geschieht sobald das entsprechende geraaaet, wieder in meinen haenden liegt [a] ---- === Ein-Disketten-Router (laeuft, ist aber z.Z. nur ein Webserver) ===
` [--------------------------------------------------------------]` ----[ 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.---- === qemu zum Laufen bringen ===
` [--------------------------------------------------------------]` ----[ 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 http://fabrice.bellard.free.fr/qemu/ 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!