pkgloop echo_header "Creating the router ramdisk..." echo_status "Creating the directory structure." outdir="$build_rock/router" rm -rf $outdir mkdir -p $outdir/initrd/bin mkdir -p $outdir/initrd/lib mkdir -p $outdir/initrd/etc mkdir -p $outdir/initrd/tmp mkdir -p $outdir/initrd/dev mkdir -p $outdir/initrd/proc mkdir -p $outdir/initrd/share mkdir -p $outdir/initrd.mnt ln -s . $outdir/initrd/usr ln -s bin $outdir/initrd/sbin chmod 700 $outdir cd $outdir echo_status "Copying program binaries." for x in bash modprobe lsmod uname gawk lspci find openvpn killall sync dhclient \ sysctl mount umount sshd ssh-keygen agetty sleep cat ls ps ln strace \ swapon swapoff mkdir killall5 reboot sed sort dhclient-script ifconfig \ expr hostname route nvi ez-ipupdate pptp rm scp do for y in bin sbin usr/bin usr/sbin; do [ -f $build_root/$y/$x ] && cp $build_root/$y/$x initrd/bin/ done [ ! -f initrd/bin/$x ] && echo_error "Did not find program binary for '$x'." done for x in iproute2 iptables grub ppp do echo_status "Copy entire $x package." while read dummy fn do mkdir -p $( dirname initrd/$fn ) cp $build_root/$fn initrd/$fn done < $build_root/var/adm/flists/$x done echo_status "Copying library files." for x in $( ls initrd/bin/ ) do while read a b c d do [ "$b" = "=>" ] && [ -n "$d" ] && \ cp $build_root/${c#/} initrd/lib/ done < <( chroot $build_root /bin/bash -c \ "cd /; ldd \`type -p $x\`"; ) done echo_status "Copying shutdown script." cp $base/target/$target/shutdown initrd/bin/ chmod +x initrd/bin/shutdown echo_status "Copying rocknet scripts." cp -r $build_root/etc/network initrd/etc/ cp -r $build_root/etc/services initrd/etc/ cp $build_root/sbin/if{up,down} initrd/bin/ echo_status "Copying some terminfo database entries." mkdir -p initrd/share/terminfo/{v,x,l} cp -r $build_root/usr/share/terminfo/v/vt100 initrd/share/terminfo/v/ cp -r $build_root/usr/share/terminfo/l/linux initrd/share/terminfo/l/ cp -r $build_root/usr/share/terminfo/x/xterm initrd/share/terminfo/x/ echo_status "deleting manpages and other stuff." rm -rf initrd/share/man rm -rf initrd/var/adm echo_status "Copying kernel modules." cp -a $build_root/lib/modules initrd/lib/ cd initrd/lib/modules/*/ rm -rf pcmcia kernel/fs kernel/drivers/{bluetooth,cdrom,pcmcia,scsi,sound,usb} rm -rf kernel/sound rm -rf kernel/net/{8021q,appletalk,bluetooth,irda,khttpd,decnet,econet,ipx} rm -rf kernel/drivers/{video,telephony,mtd,message,media,md,input,ide,i2c,ieee1394} rm -rf kernel/drivers/{hotplug,char,block} cd $outdir echo_status "Create init script." echo -e '#!/bin/bash\ncd; exec /bin/bash --login' > initrd/bin/login-shell cp $base/target/$target/init.sh initrd/bin/init chmod +x initrd/bin/login-shell initrd/bin/init cp $build_root/sbin/{hwscan,dumpnetcfg} initrd/bin/ cp $build_root/usr/share/pci.ids initrd/share/ ln -s bash initrd/bin/sh SIZE=$(( 1024 * $ROCKCFG_T_ROUTER_INITRD_SIZE )) REALSIZE=`du -sk initrd | cut -d' ' -f1` if [ $REALSIZE -gt $SIZE ] ; then echo_error "Initrd too small!" echo_status "$REALSIZE kb are needed, but you only want $SIZE kb." echo_status "please re-run ./scripts/Config and increase the initrd size!" exit 1 fi echo_status "Creating initrd image ($SIZE kb)." dd if=/dev/zero of=initrd.img count=$SIZE bs=1024 2>/dev/null mke2fs -qF initrd.img 2>/dev/null mount -o loop initrd.img initrd.mnt cp -a initrd/* initrd.mnt/ umount -d initrd.mnt/ gzip -9 initrd.img mv initrd.img.gz initrd.img echo_status "Copy kernel image." cp $build_root/boot/vmlinuz . echo_status "Create isolinux setup." tar --use-compress-program=bzip2 \ -xOf $base/download/mirror/s/syslinux-3.07.tar.bz2 \ syslinux-3.07/isolinux.bin > isolinux.bin sed -e "s,@INITRD_SIZE@,$SIZE," -e "s,@SERIAL_BAUD@,$ROCKCFG_T_ROUTER_SERIAL_BAUD," \ $base/target/$target/isolinux.cfg > ./isolinux.cfg echo_status "Create iso description." cat > ../isofs.txt <<- EOT BOOT -b isolinux.bin -c boot.catalog BOOTx -no-emul-boot -boot-load-size 4 -boot-info-table DISK1 build/${ROCKCFG_ID}/ROCK/router / EOT if [ "$ROCK_DEBUG_ROUTER_NOCLEANUP" != 1 ]; then echo_status "Cleaning up." rm -rf initrd.mnt/ initrd fi