|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
# E-scripts on busybox
# Author: Eduardo Ochs <eduardoochs@gmail.com>
# Version: 2005may03 15:20
# Quick index (blocks on which I'm working actively):
# (to "bb_etc_inittab")
# (to "bb_etc_profile")
# (to "iso-qemu-main")
# Note: don't expect to just go to the "...-main" blocks, type F9, F9,
# F9, ... and have everything working; there are some steps - like
# downloading the ".tar.gz"s with the source for busybox and grub (use
# psne http://foo.org/bar/file.tar.gz for that) that are not
# automated, and are not going to be.
# which ones of those have an inittab?
# bash, chroot
# |busybox, chroot
# ||busybox, chroot, iptables, telnetd
# |||
# ||| debian's initrd, unpack
# ||| |debian's initrd, qemu
# ||| ||debian's initrd, busybox-0.60, qemu
||| |||
# ||| ||| busybox-1.00, initrd, qemu
# ||| ||| |busybox-1.00, initrd, netcat, qemu
# ||| ||| ||busybox-1.00, initrd, telnetd, qemu
# ||| ||| |||busybox-1.00, initrd, telnetd, grub, iso, qemu
# ||| ||| ||||busybox-1.00, initrd, telnetd, grub, mkisofs, qemu
# ||| ||| |||||
% install-bash
% chroot-bash
% umount-guestfs
% create-guestfs
% mount-guestfs
% install-busybox
% create-devices
% chroot-ash
% block-telnet-port
% qemu-linux-guestimg
% qemu-isoimg
% install-etcpasswdgoup
# «.busybox-config» (to "busybox-config")
# «.busybox-compile» (to "busybox-compile")
# «.busybox-tags» (to "busybox-tags")
# «.bb_umounts» (to "bb_umounts")
# «.bb_mounts» (to "bb_mounts")
# «.bb_mkdirs» (to "bb_mkdirs")
# «.bb_functions» (to "bb_functions")
# «.bb_addbusybox» (to "bb_addbusybox")
# «.bb_etc_passwd_group» (to "bb_etc_passwd_group")
# «.bb_busybox.conf» (to "bb_busybox.conf")
# «.bb_empty_e2fs» (to "bb_empty_e2fs")
# «.bb_chroot_main» (to "bb_chroot_main")
# «.sparse-hda.img» (to "sparse-hda.img")
# «.bb_cp_modules» (to "bb_cp_modules")
# «.bb_etc_profile» (to "bb_etc_profile")
# «.bb_mknods» (to "bb_mknods")
# «.bb_etc_init.d_rcS» (to "bb_etc_init.d_rcS")
# «.bb_etc_inittab» (to "bb_etc_inittab")
# «.bbinitrd-qemu-main» (to "bbinitrd-qemu-main")
# «.iptables-ping» (to "iptables-ping")
# «.iptables-clear» (to "iptables-clear")
# «.iptables-set» (to "iptables-set")
# «.grub-compile» (to "grub-compile")
# «.iso-mkdirs» (to "iso-mkdirs")
# «.iso-menu.lst» (to "iso-menu.lst")
# «.iso-mkisofs» (to "iso-mkisofs")
# «.iso-qemu-run» (to "iso-qemu-run")
# «.iso-qemu-main» (to "iso-qemu-main")
# «.iso-qemu-main-2» (to "iso-qemu-main-2")
# «.cdrecord» (to "cdrecord")
# «.download-iso-run-qemu» (to "download-iso-run-qemu")
# «.standard-initrd.img» (to "standard-initrd.img")
# «.unpack-initrd.img» (to "unpack-initrd.img")
# «.about-loadmodules» (to "about-loadmodules")
# «.rm-some-initrdfiles-modules»(to "rm-some-initrdfiles-modules")
# «.cp-initrdfiles-modules» (to "cp-initrdfiles-modules")
›
(eek "C-a C-q 233 C-o")
(defun mkto2 () (interactive)
(mkto) (eek "<up> C-a C-SPC <down> C-w")
(save-excursion (ee-goto-position "\233") (eek "C-a C-y")))
# (eev "cd $EEVE/; a2ps -=p2iso busybox.e; mv o.ps /tmp/; gv /tmp/o.ps")
#####
#
# compiling busybox 1.00
# 2005feb17
#
#####
# http://www.busybox.net/downloads/busybox-1.00.tar.gz
# http://angg.twu.net/BUSYBOX/config-1.00
# Debian's busybox is 0.60.5, which is very old and doesn't have many
# of the features that we need (for example, a telnetd)... so we use
# the upstream version.
#*
# «busybox-config» (to ".busybox-config")
# Because setting the options in "make menuconfig" takes a long time...
#
mkdir ~/BUSYBOX/
cd ~/BUSYBOX/
wget http://angg.twu.net/BUSYBOX/config-1.00
#*
# «busybox-compile» (to ".busybox-compile")
rm -Rv ~/usrc/busybox-1.00/
tar -C ~/usrc/ -xvzf $S/http/www.busybox.net/downloads/busybox-1.00.tar.gz
cd ~/usrc/busybox-1.00/
# (find-busyboxfile "Makefile" "menuconfig:")
# (find-busyboxfile "scripts/config/")
make -C scripts/config ncurses conf mconf 2>&1 | tee omsc
# (find-fline "~/BUSYBOX/")
# (find-fline "~/BUSYBOX/config-1.00")
cp -iv ~/BUSYBOX/config-1.00 .config
# make menuconfig
# cp -iv .config ~/BUSYBOX/config-1.00
cd ~/usrc/busybox-1.00/
make dep 2>&1 | tee omd
make 2>&1 | tee om
#*
# «busybox-tags» (to ".busybox-tags")
cd ~/usrc/busybox-1.00/
find * -type f -name '*.[ch]' | grep -v '^scripts/' | sort > .files.ch
etags $(<.files.ch)
#*
# (code-c-d "busybox" "~/usrc/busybox-1.00/")
# (find-busyboxfile "")
# (find-busyboxfile "Makefile")
# (find-busyboxfile "Makefile" "menuconfig:")
# (find-busyboxfile "INSTALL")
# (find-busyboxfile "busybox.links")
#####
#
# busybox in a chrooted environment
# 2005apr08
#
#####
#*
# «bb_umounts» (to ".bb_umounts")
umount /tmp/bb/dev/pts
umount /tmp/bb/dev
umount /tmp/bb/proc
#*
# «bb_mounts» (to ".bb_mounts")
mkdir -p /tmp/bb/dev/
mkdir -p /tmp/bb/dev/pts/
mkdir -p /tmp/bb/proc/
mount -t devfs bbdev /tmp/bb/dev
mount -t proc bbproc /tmp/bb/proc
mount -t devpts bbddevpts /tmp/bb/dev/pts
#*
# «bb_mkdirs» (to ".bb_mkdirs")
mkdir -p /tmp/bb/dev/
mkdir -p /tmp/bb/dev/pts/
mkdir -p /tmp/bb/proc/
mkdir -p /tmp/bb/bin
mkdir -p /tmp/bb/sbin
mkdir -p /tmp/bb/usr/bin
mkdir -p /tmp/bb/usr/sbin
mkdir -p /tmp/bb/tmp
ln -s .. /tmp/bb/tmp/bb
chmod 1777 /tmp/bb/tmp/
mkdir -p /tmp/bb/home/edrx/
chown 1000:1000 /tmp/bb/home/edrx/
#*
# «bb_functions» (to ".bb_functions")
bb_getlibs () {
{ for i in $*; do ldd $i; done; } | awk '{print $3}' | sort | uniq;
}
bb_addfiles () { cp --parents -v $* /tmp/bb/; }
bb_addlibsfor () { bb_addfiles $(bb_getlibs $*); }
#*
# «bb_addbusybox» (to ".bb_addbusybox")
cd ~/usrc/busybox-1.00/
cp -v ./busybox /tmp/bb/bin/busybox
for i in $(cat ./busybox.links | sed s_^/__ ); do
echo $i
ln /tmp/bb/bin/busybox /tmp/bb/$i
done
bb_addlibsfor /tmp/bb/bin/busybox
#*
# «bb_etc_passwd_group» (to ".bb_etc_passwd_group")
mkdir /tmp/bb/etc/
cat > /tmp/bb/etc/passwd <<'%%%'
root::0:0:root:/:/bin/sh
edrx::1000:1000:edrx,,,:/home/edrx:/bin/sh
aleph::1001:1001:aleph,,,:/:/bin/sh
beth::1002:1002:beth,,,:/:/bin/sh
r::0:0:root:/:/bin/sh
e::1000:1000:edrx,,,:/home/edrx:/bin/sh
%%%
# root->root, edrx->edrx:
cat > /tmp/bb/etc/passwd <<'%%%'
root:$1$$oCLuEVgI1iAqOA8pwkzAg1:0:0:root:/:/bin/sh
edrx:$1$$nO9T/jR80jiG3aAiOsSSV/:1000:1000:edrx,,,:/home/edrx:/bin/sh
aleph::1001:1001:aleph,,,:/:/bin/sh
beth::1002:1002:beth,,,:/:/bin/sh
r::0:0:root:/:/bin/sh
e::1000:1000:edrx,,,:/home/edrx:/bin/sh
%%%
cat > /tmp/bb/etc/group <<'%%%'
root:*:0:
edrx:!:1000:
aleph:!:1001:
beth:!:1002:
%%%
#*
# «bb_busybox.conf» (to ".bb_busybox.conf")
# (find-busyboxfile "applets/applets.c" "Using fallback suid method")
# (find-busyboxfile "sysdeps/linux/Config.in" "_FEATURE_SUID_CONFIG_QUIET")
# (find-busyboxfile "sysdeps/linux/Config.in" "CONFIG_FEATURE_SUID_CONFIG")
# http://www.softforge.de/bb/suid.html
mkdir /tmp/bb/etc/
touch /tmp/bb/etc/busybox.conf
#*
# «bb_empty_e2fs» (to ".bb_empty_e2fs")
rm -Rv /tmp/bb/
mkdir /tmp/bb/
# dd bs=1024 count=4096 if=/dev/zero of=/tmp/bb.img
dd bs=1024 count=8192 if=/dev/zero of=/tmp/bb.img
mke2fs -F /tmp/bb.img
mount -o loop /tmp/bb.img /tmp/bb/
#*
# «bb_chroot_main» (to ".bb_chroot_main")
* (eechannel-xterm "A")
sudo ~/run-zsh
* (find-sh0 "sudo killall -9 telnetd")
* (eevnow-at "iptables-clear")
* (eevnow-at "iptables-set")
* (eevnow-at "bb_umounts")
rm -Rv /tmp/bb/
* (eevnow-at "bb_mounts")
* (eevnow-at "bb_mkdirs")
* (eevnow-at "bb_functions")
* (eevnow-at "bb_addbusybox")
* (eevnow-at "bb_etc_passwd_group")
* (eevnow-at "bb_busybox.conf")
chroot /tmp/bb /bin/ash
passwd root
root
root
passwd edrx
edrx
edrx
# login
# edrx
# edrx
# exit
telnetd &
exit
#*
* (eechannel-xterm "A")
telnet 127.0.0.1
edrx
edrx
#*
* (eechannel-xterm "bb-root" (ee-split "sudo chroot /tmp/bb /bin/ash"))
# (find-busyboxfile "")
# (find-busyboxfile "docs/BusyBox.txt")
# (find-es "initrd" "add_binaries_and_libs")
#####
#
# iptables (to reject outside connections to telnetd)
# 2005apr19
#
#####
#*
# «iptables-ping» (to ".iptables-ping")
# (find-udw3m "iptables/html/packet-filtering-HOWTO-7.html" "-p icmp -j DROP")
#
iptables -D INPUT -s 127.0.0.1 -p icmp -j DROP
ping -c 2 -W 1 127.0.0.1 | egrep 'from|transmitted'
iptables -A INPUT -s 127.0.0.1 -p icmp -j DROP
iptables -L INPUT
ping -c 2 -W 1 127.0.0.1 | egrep 'from|transmitted'
iptables -L INPUT --line-numbers
iptables -D INPUT 1
#*
# (find-fline "/etc/services")
# (find-udw3m "iptables/html/packet-filtering-HOWTO-7.html" "-p icmp -j DROP")
# (find-sh "iptables --help")
# (find-man "iptables" " -X")
#*
# «iptables-clear» (to ".iptables-clear")
iptables -D INPUT -p TCP --dport telnet -j INPUTFILTER
iptables -F INPUTFILTER
iptables -X INPUTFILTER
#*
# «iptables-set» (to ".iptables-set")
iptables -N INPUTFILTER
iptables -A INPUTFILTER -s 127.0.0.1 -j ACCEPT
iptables -A INPUTFILTER -j DROP
iptables -A INPUT -p TCP --dport telnet -j INPUTFILTER
#*
iptables -L INPUTFILTER --line-numbers
iptables -L
#*
# Some tests (run with F9):
* (eechannel-xterm "A")
* (eebgTWU)
# telnet 127.0.0.1
telnet 200.141.116.226
edrx
edrx
exit
#*
# (find-status "iptables")
# (find-vldifile "iptables.list")
# (find-udfile "iptables/")
# (find-udw3m "iptables/html/packet-filtering-HOWTO.html")
# (find-udw3m "iptables/html/packet-filtering-HOWTO-5.html")
# (find-udw3m "iptables/html/packet-filtering-HOWTO-7.html")
# (find-udfile "iptables/examples/3iptables-ppp_up-rules.gz")
# (find-udfile "focalinux/text/avancado/index.txt.gz")
# (find-udfile "focalinux/text/avancado/index.txt.gz" "iptables -P INPUT DROP")
# (find-available "ebtables")
#####
#
# subroutines specific to making initrds and running qemu
# 2005apr20
#
#####
#*
# «sparse-hda.img» (to ".sparse-hda.img")
python <(cat <<'%%%'
image = open("/tmp/hda.img", "w")
image.truncate(1024 * 1048576L)
image.close()
%%%
)
#*
# «bb_cp_modules» (to ".bb_cp_modules")
# (find-k26confvar "CONFIG_NE2000")
# (find-k26confvar "CONFIG_NE2K_PCI")
# (find-fline "/lib/modules/2.6.8-1-386/")
# (find-fline "/lib/modules/2.6.8-1-386/kernel/drivers/net/")
# (find-fline "/lib/modules/2.6.8-1-386/modules.dep")
# (find-fline "/lib/modules/2.6.8-1-386/modules.dep" "ne2k-pci.ko")
#
cd /lib/modules/2.6.8-1-386/kernel/
cp drivers/net/ne.ko /tmp/bb/tmp/
cp drivers/net/ne2k-pci.ko /tmp/bb/tmp/
cp drivers/net/8390.ko /tmp/bb/tmp/
cp lib/crc32.ko /tmp/bb/tmp/
cp net/sunrpc/sunrpc.ko /tmp/bb/tmp/
cp fs/lockd/lockd.ko /tmp/bb/tmp/
cp fs/nfs/nfs.ko /tmp/bb/tmp/
cp fs/exportfs/exportfs.ko /tmp/bb/tmp/
cp fs/nfsd/nfsd.ko /tmp/bb/tmp/
cp drivers/parport/parport.ko /tmp/bb/tmp/
cp drivers/parport/parport_pc.ko /tmp/bb/tmp/
cp drivers/char/lp.ko /tmp/bb/tmp/
cp drivers/net/plip.ko /tmp/bb/tmp/
cp arch/i386/kernel/apm.ko /tmp/bb/tmp/
cp drivers/ide/ide-core.ko /tmp/bb/tmp/
cp drivers/ide/pci/piix.ko /tmp/bb/tmp/
cp drivers/ide/pci/generic.ko /tmp/bb/tmp/
cp drivers/ide/ide-disk.ko /tmp/bb/tmp/
cp drivers/ide/ide-cd.ko /tmp/bb/tmp/
cp drivers/cdrom/cdrom.ko /tmp/bb/tmp/
cp fs/vfat/vfat.ko /tmp/bb/tmp/
cp fs/fat/fat.ko /tmp/bb/tmp/
cp fs/msdos/msdos.ko /tmp/bb/tmp/
#*
# «bb_etc_profile» (to ".bb_etc_profile")
# (find-busyboxfile "util-linux/mount.c")
# (find-fline "/etc/fstab" "proc")
# (find-esfile "initrd.e" "cat > etc/profile <<'%%%'")
cat > /tmp/bb/etc/profile <<'%%%'
export HOST=172.20.0.1
export HERE=172.20.0.2
export EE=/tmp/ee.sh
alias laf='ls -laF'
alias w=which
mountproc () { mount -t proc proc /proc; }
mountdev () { mount -t devfs devfs /dev; }
mountdevpts () { mount -t devpts devpts /dev/pts; }
mounts () { mountproc; mountdevpts; }
mounts2 () { mountproc; mountdev; mountdevpts; }
insmod_eth () { cd /tmp/; insmod crc32.ko; insmod 8390.ko;
insmod ne2k-pci.ko; }
insmod_plip () { cd /tmp; insmod parport.ko;
insmod plip.ko; insmod parport_pc.ko; }
up_lo () { ifconfig lo 127.0.0.1; route add 127.0.0.1 lo; }
up_eth () { ifconfig eth0 172.20.0.2; route add 172.20.0.0 eth0; }
up_plip () { ifconfig plip0 10.0.0.4 pointopoint 10.0.0.3;
route add 10.0.0.0 plip0; }
prep () { mounts; insmod_eth; up_eth; }
prep2 () { mounts2; insmod_eth; up_eth; }
fromhost () { nc -l -p 1234; }
tohost () { nc -q 0 $HOST 1234; }
ee () { set -v; . $EE; set +v; }
#
vars_eth () { export HOST=172.20.0.1; export HERE=172.20.0.2; }
vars_plip () { export HOST=10.0.0.3; export HERE=10.0.0.4; }
prep2ep () { prep2; insmodps; up_plip; }
%%%
#*
# «bb_mknods» (to ".bb_mknods")
cd /tmp/bb/dev/
mknod null c 1 3
mknod console c 5 1
mknod ptmx c 5 2
#
# mknod tty c 5 0
# mknod tty1 c 4 1
# mknod tty2 c 4 2
# mknod tty3 c 4 3
# mknod tty4 c 4 4
mknod tty c 5 0; for i in $(seq 1 4); do mknod tty$i c 4 $i; done
mknod vcs c 7 0; for i in $(seq 1 4); do mknod vcs$i c 7 $i; done
mknod vcsa c 7 128; for i in $(seq 1 4); do mknod vcsa$i c 7 $[128+$i]; done
mknod hda b 3 0
mknod hda1 b 3 1
mknod hda2 b 3 2
#*
# «bb_etc_init.d_rcS» (to ".bb_etc_init.d_rcS")
# Note that this is optional!
# Use only when you want to do all this at startup.
mkdir -p /tmp/bb/etc/init.d/
cat > /tmp/bb/etc/init.d/rcS <<'%%%'
#!/bin/sh
mount -t proc proc /proc
echo " Before mounts:"; mount
#mount -t devfs devfs /dev
mount -t devpts devpts /dev/pts
echo " After mounts:"; mount
#
# cd /tmp/bb/dev/
# mknod null c 1 3
# mknod console c 5 1
# mknod ptmx c 5 2
#
# mknod tty c 5 0
# mknod tty1 c 4 1
# mknod tty2 c 4 2
# mknod tty3 c 4 3
# mknod tty4 c 4 4
#
# (find-eevex "busybox.e" "bb_etc_profile")
. /etc/profile
up_lo
insmod_plip && up_plip
insmod_eth && up_eth
#
telnetd
%%%
chmod 755 /tmp/bb/etc/init.d/rcS
#*
# Notes about the "job control turned off" problem:
#
# (find-k26file "init/main.c" "/sbin/init")
# (find-busyboxfile "busybox.links" "/sbin/init")
# (find-busyboxfile "docs/BusyBox.txt" "without an inittab")
# (find-busyboxfile "init/init.c" "No inittab file -- set up some default")
# (find-busyboxfile "docs/BusyBox.txt" "controlling tty")
# (find-busyboxfile "init/init.c" "static void set_term(int fd)")
# (find-busyboxfile "init/init.c" "setsid();")
# (find-busyboxfile "shell/ash.c" "can't access tty; job control turned off")
# Entries like "...:/bin/sh" in inittab create "non-login" shells that
# don't read /etc/profile, entries like "...:-/bin/sh" create login
# shells that do...
#
# (find-busyboxfile "shell/ash.c" "if (argv[0] && argv[0][0] == '-')")
# (find-busyboxfile "shell/ash.c" "read_profile(\"/etc/profile\");")
# (find-busyboxfile "init/init.c" "-/bin/sh")
#*
# «bb_etc_inittab» (to ".bb_etc_inittab")
# This is optional too - this is the default inittab with just one
# change: moving the first shell from the default tty, to tty1, i.e.,
# "::askfirst:/bin/sh" -> "tty1::askfirst:/bin/sh".
cat > /tmp/bb/etc/inittab <<'%%%'
::sysinit:/etc/init.d/rcS
::ctrlaltdel:/sbin/reboot
::shutdown:/sbin/swapoff -a
::shutdown:/bin/umount -a -r
::restart:/sbin/init
tty1::askfirst:-/bin/sh
tty2::askfirst:-/bin/sh
tty3::askfirst:-/bin/sh
tty4::askfirst:-/bin/sh
%%%
#*
#####
#
# making an initrd
# 2005apr19
#
#####
#*
# «bbinitrd-qemu-main» (to ".bbinitrd-qemu-main")
* (eechannel-xterm "A")
sudo ~/run-zsh
* (message (find-sh0 "sudo killall -9 telnetd"))
* (eevnow-at "iptables-clear")
* (eevnow-at "iptables-set")
* (eevnow-at "bb_umounts")
rm -Rv /tmp/bb/
dd bs=1024 count=3072 if=/dev/zero of=/tmp/bb.img
mke2fs -F /tmp/bb.img
mkdir /tmp/bb/
mount -o loop /tmp/bb.img /tmp/bb/
* (eevnow-at "bb_mounts")
* (eevnow-at "bb_mkdirs")
* (eevnow-at "bb_functions")
* (eevnow-at "bb_addbusybox")
* (eevnow-at "bb_etc_passwd_group")
* (eevnow-at "bb_busybox.conf")
* (eevnow-at "bb_umounts")
* (eevnow-at "bb_mknods")
* (eevnow-at "bb_etc_profile")
* (eevnow-at "bb_cp_modules")
* (eevnow-at "sparse-hda.img")
cd /tmp/
umount /tmp/bb/
cp -v /boot/vmlinuz-2.6.8-1-386 /tmp/vmlinuz
* (eechannel-xterm "A")
# Try the initrd with qemu.
# (find-man "1 qemu")
cd /tmp/
qemu -hda /tmp/hda.img \
-kernel /tmp/vmlinuz \
-monitor stdio -m 64 \
-pci \
-initrd /tmp/bb.img
#*
# (find-k26file "")
# (find-sh "ifconfig; route")
# (to "bb_etc_profile")
# init
# prep2
# telnetd &
* (eechannel-xterm "B")
telnet 172.20.0.2
root
root
date | netcat -q 0 172.20.0.2 1234
# (find-man "1 qemu" "-nographic")
# (find-man "1 qemu" "-monitor dev")
qemu -m 64 -isa -n /tmp/my-qemu-ifup \
# What to search if plip doesn't work (or is too slow) with the
# default settings, i.e., no IRQ:
#
# (to "bb_etc_profile")
# (find-k26file "drivers/parport/Kconfig")
# (find-k26docfile "parport.txt")
#####
#
# compiling grub 0.96
# 2005may01
#
#####
# ftp://alpha.gnu.org/gnu/grub/grub-0.96.tar.gz
# (code-c-d "grub" "~/usrc/grub-0.96/" "~/usrc/grub-0.96/docs/grub")
# '(add-to-list 'Info-additional-directory-list "~/usrc/grub-0.96/")
# (find-grubfile "")
# (find-grubnode "Top")
# (find-grubnode "Making a GRUB bootable CD-ROM")
# See also:
# http://www.gnu.org/software/grub/grub-2.en.html
#*
# «grub-compile» (to ".grub-compile")
rm -Rv ~/usrc/grub-0.96/
tar -C ~/usrc/ -xvzf $S/ftp/alpha.gnu.org/gnu/grub/grub-0.96.tar.gz
cd ~/usrc/grub-0.96/
./configure 2>&1 | tee oc
make 2>&1 | tee om
#*
# (find-grubnode "Making a GRUB bootable CD-ROM")
# (find-man "8 mkisofs")
# (find-man "8 mkisofs" "-b eltorito_boot_image")
# (find-man "8 mkisofs" "-boot-load-size load_sectors")
# (find-man "8 mkisofs" "-boot-info-table")
# (find-man "8 mkisofs" "-no-emul-boot\n")
# (find-man "8 mkisofs" "\nEL TORITO BOOT INFORMATION TABLE\n")
# (find-fline "/boot/grub/menu.lst")
#*
# «iso-mkdirs» (to ".iso-mkdirs")
rm -Rv /tmp/bb-iso/
mkdir /tmp/bb-iso/
mkdir -p /tmp/bb-iso/boot/grub/
cp -v ~/usrc/grub-0.96/stage2/stage2_eltorito /tmp/bb-iso/boot/grub/
cp -v /boot/vmlinuz-2.6.8-1-386 /tmp/bb-iso/boot/
cp -v /tmp/bb.img /tmp/bb-iso/boot/
#*
# «iso-menu.lst» (to ".iso-menu.lst")
cat > /tmp/bb-iso/boot/grub/menu.lst <<'%%%'
timeout 5
default 0
title Linux 2.6.8 (busybox)
kernel /boot/vmlinuz-2.6.8-1-386 root=/dev/hda1 vga=1
initrd /boot/bb.img
title Linux 2.6.8 (debian default)
kernel /boot/vmlinuz-2.6.8-1-386 root=/dev/hda3 vga=1
initrd /boot/initrd.img-2.6.8-1-386
title halt
halt
%%%
#*
# «iso-mkisofs» (to ".iso-mkisofs")
mkisofs -R \
-b boot/grub/stage2_eltorito -no-emul-boot \
-boot-load-size 4 -boot-info-table \
-o /tmp/bb-iso.iso /tmp/bb-iso/
#*
# «iso-qemu-run» (to ".iso-qemu-run")
# Try the CD image with qemu.
# (find-man "1 qemu")
cd /tmp/
qemu -hda /tmp/hda.img \
-cdrom /tmp/bb-iso.iso \
-boot d \
-monitor stdio -m 64 \
-pci
#*
# «iso-qemu-main» (to ".iso-qemu-main")
* (eechannel-xterm "A")
sudo ~/run-zsh
killall -9 telnetd
* (eevnow-at "bb_umounts")
* (eevnow-at "bb_empty_e2fs")
* (eevnow-at "bb_mkdirs")
* (eevnow-at "bb_functions")
* (eevnow-at "bb_addbusybox")
* (eevnow-at "bb_busybox.conf")
* (eevnow-at "bb_mknods")
* (eevnow-at "bb_cp_modules")
* (eevnow-at "bb_etc_passwd_group")
* (eevnow-at "bb_etc_profile")
* (eevnow-at "bb_etc_init.d_rcS")
* (eevnow-at "bb_etc_inittab")
date > /tmp/bb/tmp/VERSION
echo '# (find-eevex "busybox.e" "iso-qemu-main")' \
>> /tmp/bb/tmp/VERSION
cd /tmp/
umount /tmp/bb/
* (eevnow-at "iso-mkdirs")
* (eevnow-at "iso-menu.lst")
* (eevnow-at "iso-mkisofs")
* (eevnow-at "sparse-hda.img")
* (eevnow-at "iso-qemu-run")
#*
* (eechannel-xterm "B")
telnet 172.20.0.2
root
root
modprobe piix
#####
#
# another initrd for qemu, this one with all the initrd-ish modules
# 2005may12
#
#####
#*
# «iso-qemu-main-2» (to ".iso-qemu-main-2")
* (eechannel-xterm "A")
sudo ~/run-zsh
killall -9 telnetd
* (eevnow-at "bb_umounts")
* (eevnow-at "bb_empty_e2fs")
* (eevnow-at "bb_mkdirs")
* (eevnow-at "bb_functions")
* (eevnow-at "bb_addbusybox")
* (eevnow-at "bb_busybox.conf")
* (eevnow-at "bb_mknods")
* (eevnow-at "bb_cp_modules")
* (eevnow-at "bb_etc_passwd_group")
* (eevnow-at "bb_etc_profile")
* (eevnow-at "bb_etc_init.d_rcS")
* (eevnow-at "bb_etc_inittab")
date > /tmp/bb/tmp/VERSION
echo '# (find-eevex "busybox.e" "iso-qemu-main")' \
>> /tmp/bb/tmp/VERSION
* ;; Experimental:
* (eevnow-at "standard-initrd.img")
* (eevnow-at "unpack-initrd.img")
* (eevnow-at "rm-some-initrdfiles-modules")
* (eevnow-at "cp-initrdfiles-modules")
cd /tmp/
umount /tmp/bb/
* (eevnow-at "iso-mkdirs")
* (eevnow-at "iso-menu.lst")
* (eevnow-at "iso-mkisofs")
* ;; (eevnow-at "sparse-hda.img")
* (eechannel-xterm "QEMU" nil '("-geometry" "79x5"))
sudo chmod 666 /dev/net/tun
sudo chmod 666 /tmp/hda.img
R
* (eevnow-at "iso-qemu-run")
* (eechannel-xterm "A")
telnet 172.20.0.2
root
root
* (eevnow-at "iso-qemu-run")
#*
* (eechannel-xterm "B")
telnet 172.20.0.2
root
root
modprobe piix
* (eechannel-xterm "A")
sudo ~/run-zsh
killall -9 telnetd
* (eevnow-at "bb_umounts")
* (eevnow-at "bb_empty_e2fs")
* (eevnow-at "bb_mkdirs")
* (eevnow-at "bb_functions")
* (eevnow-at "bb_addbusybox")
* (eevnow-at "bb_busybox.conf")
* (eevnow-at "bb_mknods")
* (eevnow-at "bb_cp_modules")
* (eevnow-at "bb_etc_passwd_group")
* (eevnow-at "bb_etc_profile")
* (eevnow-at "bb_etc_init.d_rcS")
* (eevnow-at "bb_etc_inittab")
date > /tmp/bb/tmp/VERSION
echo '# (find-eevex "busybox.e" "iso-qemu-main")' \
>> /tmp/bb/tmp/VERSION
cp -v /sbin/modprobe /tmp/bb/sbin/modprobe
bb_addlibsfor /tmp/bb/sbin/modprobe
* (eevnow-at "standard-initrd.img")
* (eevnow-at "unpack-initrd.img")
* (eevnow-at "rm-some-initrd.img-modules")
* (eevnow-at "cp-initrd.img-modules")
cd /tmp/
umount /tmp/bb/
* (eevnow-at "iso-mkdirs")
* (eevnow-at "iso-menu.lst")
* (eevnow-at "iso-mkisofs")
* ;; (eevnow-at "sparse-hda.img")
* (eechannel-xterm "QEMU" nil '("-geometry" "79x5"))
sudo chmod 666 /dev/net/tun
sudo chmod 666 /tmp/hda.img
# sudo ~/run-zsh
* (eevnow-at "iso-qemu-run")
# Test mounting from the qemu'ed guest
* (eechannel-xterm "A")
telnet 172.20.0.2
root
root
* (eevnow-at "iso-qemu-run")
#*
* (eechannel-xterm "B")
telnet 172.20.0.2
root
root
#####
#
# Turning off the machine (even in qemu) from the shell
# (Note: "halt" in grub works, apm + busybox's "halt" not yet)
# (find-angg ".zshrc" "aa")
# 2005may03
#
#####
* (eechannel-xterm "B")
telnet 172.20.0.2
root
root
cd /tmp/
fromhost > apm.ko
*
* (eechannel-xterm "C")
cd /lib/modules/2.6.8-1-386/kernel/arch/i386/kernel/
cat apm.ko \
| netcat -q 0 172.20.0.2 1234
* (eechannel-xterm "B")
telnet 172.20.0.2
root
root
cd /tmp/
insmod apm.ko power-off=1
halt
# Kill by hand:
# (find-sh0 "sudo killall -9 qemu")
#####
#
# record the iso image on a CD-RW
#
#####
# «cdrecord» (to ".cdrecord")
# (find-es "cdrom" "cdrecord")
* (eechannel-xterm "A")
cd /tmp/
cdrecord speed=8 -v -v -v -v -v -dev=/dev/hdd /tmp/bb-iso.iso
cd /tmp/
cdrecord speed=8 blank=fast -v -v -v -v -v -dev=/dev/hdd /tmp/bb-iso.iso
# (find-man "cdrecord")
# (find-man "cdrecord" "fixated")
# (find-man "cdrecord" "speed")
# (find-htetfile "CD-Writing-HOWTO.gz")
# (find-htetfile "CD-Writing-HOWTO.gz" " How to create a multi-session CD?")
# (find-htetfile "CD-Writing-HOWTO.gz" "specify the parameter blank=fast")
# (find-es "mini" "plipnfs")
#####
#
# allowing dirs from the host to be NFS-mounted by the guest
# 2005may04
#
#####
# What I changed in my /etc (by hand):
# (find-man "5 exports")
# (find-fline "$ASROOT/etc/exports")
/ 127.0.0.1(rw,async) 10.0.0.4(rw,async) 172.20.0.2(rw,async)
# Do I need this?
# (find-man "5 hosts.allow")
# (find-fline "$ASROOT/etc/hosts.allow")
127.0.0.1
10.0.0.4
172.20.0.2
# (find-fline "/etc/init.d/nfs-common")
# (find-fline "/etc/init.d/nfs-kernel-server")
# (find-fline "/etc/default/nfs-common")
# (find-fline "/etc/default/nfs-kernel-server")
# (find-fline "/etc/rc2.d/")
* (eechannel-xterm "A")
sudo ~/run-zsh
/etc/init.d/nfs-kernel-server restart
/etc/init.d/nfs-common restart
# Test using local mounts
# (find-man "5 nfs")
mkdir /tmp/host/
mount -t nfs 127.0.0.1:/ /tmp/host/; ls /tmp/host/
umount /tmp/host/
mount -t nfs 127.0.0.1:/etc/ /tmp/host/; ls /tmp/host/
umount /tmp/host/
* (eechannel-xterm "QEMU")
sudo ~/run-zsh
* (eevnow-at "iso-qemu-run")
# Test mounting from the qemu'ed guest
* (eechannel-xterm "GUEST")
telnet 172.20.0.2
root
root
cd /tmp/
insmod sunrpc.ko
insmod lockd.ko
insmod nfs.ko
echo '127.0.0.1 localhost loopback mistletoe' > /etc/hosts
mkdir /host
mount -t nfs -o nolock 172.20.0.1:/ /host/
ls /host/
umount /host/
# Note: if I don't use "-o nolock" I get these (kernel?) errors:
# nfs warning: mount version older than kernel
# portmap: server localhost not responding, timed out
# RPC: failed to contact portmap (errno -5).
# portmap: server localhost not responding, timed out
# RPC: failed to contact portmap (errno -5).
# lockd_up: makesock failed, error=-5
# RPC: failed to contact portmap (errno -5).
# lockd_down: no lockd running.
#####
#
# how to try it by downloading just the iso image
# 2005may04
#
#####
gzip -c9 < /tmp/bb-iso.iso \
> /var/www/tmp/bb-iso.iso.gz
#
# (find-fline "/var/www/tmp/")
# «download-iso-run-qemu» (to ".download-iso-run-qemu")
cd /tmp/
wget http://201.8.142.27/tmp/bb-iso.iso.gz
gunzip bb-iso.iso.gz
python <(cat <<'%%%'
image = open("/tmp/hda.img", "w")
image.truncate(1024 * 1048576L)
image.close()
%%%
)
cd /tmp/
qemu -hda /tmp/hda.img \
-cdrom /tmp/bb-iso.iso \
-boot d \
-monitor stdio -m 64 \
-pci
# Then, if tun support exists and if qemu can open /dev/net/tun, it
# should be possible to telnet to the box...
# (find-es "qemu" "tun-tap")
* (eechannel-xterm "GUEST")
telnet 172.20.0.2
root
root
#####
#
# inspect Debian's initrd
# 2005may11
#
#####
# (find-es "initrd" "debian-busybox-initrd")
#*
# «standard-initrd.img» (to ".standard-initrd.img")
# Copy a standard initrd image from /boot/ to /tmp/initrd.img.
# (find-sh "cd /var/lib/dpkg/info/; ls kernel-image-*.list")
# (find-fline "/boot/")
#
cp -v /boot/initrd.img-2.6.8-1-386 /tmp/initrd.img
#*
# «unpack-initrd.img» (to ".unpack-initrd.img")
#
mkdir /tmp/initrdfs
umount /tmp/initrdfiles/dev/pts
umount /tmp/initrdfiles/dev
umount /tmp/initrdfiles/proc
umount /tmp/initrdfs
mount -v -o loop,ro /tmp/initrd.img -t cramfs /tmp/initrdfs
# Cramfs images are hard to use sometimes - among other things, they
# are read-only and they allow hardlinks between directories (most
# other filesystems do not). So we copy the files from the mounted
# image to a directory - and we use tar because "cp -av" doesn't deal
# very well with the hard-linked dirs.
rm -Rf /tmp/initrdfiles/
mkdir /tmp/initrdfiles/
( cd /tmp/initrdfs/ && tar -cf - * ) \
| tar -C /tmp/initrdfiles/ -xf -
cd /tmp/initrdfiles/
# Unmount /tmp/initrdfs/ - with /tmp/initrdfs/ unmounted we can change
# /tmp/initrd.img safely.
#
umount /tmp/initrdfs
#*
# Which modules go there?
tkdiff =(cd /lib/modules/2.6.8-1-386/; find * -type d | sort) \
=(cd /tmp/initrdfiles/lib/modules/2.6.8-1-386/; find * -type d | sort) &
#*
# «about-loadmodules» (to ".about-loadmodules")
# (find-fline "/tmp/initrdfiles/")
# (find-fline "/tmp/initrdfiles/loadmodules")
# (find-fline "/tmp/initrdfiles/linuxrc")
# (find-fline "/tmp/initrdfiles/sbin/init")
# (find-fline "/tmp/initrdfiles/sbin/init" "call /loadmodules")
# (find-fline "/tmp/initrdfiles/lib/modules/2.6.8-1-386/")
# (find-fline "/usr/sbin/mkinitrd" "loadmodules")
#*
# «rm-some-initrdfiles-modules» (to ".rm-some-initrdfiles-modules")
cd /tmp/initrdfiles/
cd lib/modules/2.6.8-1-386/kernel/drivers/
rm -Rv md/ scsi/
#*
# «cp-initrdfiles-modules» (to ".cp-initrdfiles-modules")
cd /tmp/initrdfiles/
cp -R --parents lib/modules/2.6.8-1-386/ /tmp/bb/
#*
#####
#
# Trying to debug busybox (ignore this block)
# 2005apr09
#
#####
# I started this because I couldn't make a telnetd to work on Debian's
# busybox... with busybox-1.00 the built-in telnetd works, but,
# anyway, how do we debug chrooted programs?
#*
chroot /tmp/bb bin/login
#*
# Needs to be run as root
# (ee-once (eeb-gdb-start "/tmp/bb/usr/sbin/" "chroot"))
set args /tmp/bb /bin/login
br main
br applets.c:164
br chroot_main
run
#*
cat > /tmp/bb/etc/issue.net <<'%%%'
Debian GNU/Linux 3.1 initrd %t
%%%
#####
#
# mkinitrd with the new busybox
# 2005apr09
#
#####
# (find-es "initrd" "debian-busybox-initrd")
# (find-fline "/usr/sbin/mkinitrd")
# (find-fline "/usr/sbin/mkinitrd" "if [ $BUSYBOX ]")
# (find-fline "/usr/sbin/mkinitrd" "if [ $BUSYBOX ]" "Curr")
# (find-busyboxsh "./busybox")
Hypothesis: "PATH=$HOME/usrc/busybox-1.00:$PATH mkinitrd ..." will
locate busybox-1.00 before debian's busybox-0.60, and use it. Mkinitrd
gets the list of links from busybox itself, but how does it select in
which dirs they should go?
#####
#
# Debian busybox source (this block is obsolete)
# 2005apr08
#
#####
# (find-status "busybox")
# (find-vldifile "busybox.list")
# (find-udfile "busybox/")
# (find-man "1 busybox")
# (find-udfile "busybox/BusyBox.txt.gz" "\n init\n")
# (find-udfile "busybox/BusyBox.txt.gz" "\n init\n" "controlling tty")
# http://ftp.debian.org/debian/pool/main/b/busybox/busybox_0.60.5-2.2.dsc
#*
rm -Rv ~/usrc/busybox/
mkdir ~/usrc/busybox/
cd ~/usrc/busybox/
dpkg-source -x \
$S/http/ftp.debian.org/debian/pool/main/b/busybox/busybox_0.60.5-2.2.dsc
#*
# (code-c-d "busybox" "~/usrc/busybox/busybox-0.60.5/")
# (find-busyboxfile "")
# (find-busyboxfile "telnet.c")
# (find-busyboxfile "init.c" "static void set_term(int fd)")
# (find-busyboxfile "init.c" "setsid();")
# 2005apr20: qemu doesn't boot the image, maybe there are devices
# missing... I think that there's an option to linux to make it mount
# devfs, but I'll try some mknods first...
# (find-k26file "init/main.c" "/sbin/init")
# (find-esfile "initrd.e" "mknod tty")
# (find-esfile "initrd.e" "mount -v -o loop,ro /tmp/initrd.img")
# Here's a listing of the /dev dir in debian's initrd:
# /tmp/initrdfs/dev(root:pe)# laf
# total 5
# lrwxrwxrwx 1 root root 14 Dec 31 1969 cciss -> ../devfs/cciss
# crw-rw---- 1 root root 5, 1 Dec 31 1969 console
# lrwxrwxrwx 1 root root 12 Dec 31 1969 ida -> ../devfs/ida
# lrwxrwxrwx 1 root root 12 Dec 31 1969 ide -> ../devfs/ide
# lrwxrwxrwx 1 root root 15 Dec 31 1969 mapper -> ../devfs/mapper
# lrwxrwxrwx 1 root root 11 Dec 31 1969 md -> ../devfs/md
# crw-rw-rw- 1 root root 1, 3 Dec 31 1969 null
# lrwxrwxrwx 1 root root 13 Dec 31 1969 scsi -> ../devfs/scsi
#*
# Problems, 2005apr20:
# init is not very happy - Alt-F2 doesn't work, for example
# (find-busyboxfile "")
# (find-busyboxfile "networking/telnetd.c")
# (find-busyboxfile "init/init.c")
# (find-busyboxfile "init/init.c" "static void parse_inittab")
# (find-busyboxfile "docs/BusyBox.txt" "\n init\n")
# (find-busyboxfile "console-tools/openvt.c")
# (find-busyboxfile "util-linux/nfsmount.c")
| netcat -q 0 172.20.0.2 1234
alias w=which
# Local Variables:
# coding: no-conversion
# modes: (fundamental-mode sh-mode emacs-lisp-mode)
# ee-delimiter-hash: "\n#*\n"
# ee-delimiter-percent: "\n%*\n"
# ee-anchor-format: "«%s»"
# End: