igor@0: #!/bin/sh igor@0: nata@65: DYNAMIPS_BUILD=yes igor@49: XENOMIPS_FS_BUILD=yes igor@49: CONFIG_FS_BUILD=yes igor@45: IOS_FS_BUILD=yes igor@0: igor@49: process_args() igor@49: { igor@49: true igor@49: } igor@49: igor@7: XENOMIPS_DIR="files/" nata@65: XENOMIPS_IMAGES_DIR="/xentaur/images/" nata@65: IOS_DIR="/xentaur/ios/" igor@15: SSH_OPEN_KEY=files/id_dsa.pub igor@7: igor@0: #Xenomips FS igor@0: XENOMIPS_FS_SIZE=2048k # size in 1k blocks igor@7: XENOMIPS_FS_NAME=${XENOMIPS_IMAGES_DIR}/xenomips1.img igor@0: igor@0: # Config FS igor@7: CONFIG_FS_SIZE=1000k igor@18: CONFIG_FS_NAME=${XENOMIPS_IMAGES_DIR}/xenomips-configXXX.img # XXX will be automagically substitued with igor@43: CONFIG_FS_NUMBER=10 # the number of the Xenomips instance igor@0: igor@0: # IOS FS igor@0: IOS_FS_SIZE=2048k igor@7: IOS_FS_NAME=${XENOMIPS_IMAGES_DIR}/xenomips-ios1.img igor@0: nata@65: DEBIAN_MIRROR=http://127.0.0.1:9999/debian nata@65: DISTRO=lenny nata@65: PACKAGES="udev openssh-server libc6-xen libelf1 libpcap0.8 screen nfs-common quagga tcpdump telnet ntpdate hping3 ntp nmap netcat socat" igor@0: DYNAMIPS_SOURCES=http://www.ipflow.utc.fr/dynamips/dynamips-0.2.7.tar.gz igor@0: DYNAMIPS_BUILD_DIR=dynamips/ igor@61: PIXEMU_SOURCES=http://xgu.ru/download/pemu_public2007-07-02.tar.bz2 igor@61: PIXEMU_BUILD_DIR=dynamips/ nata@65: KERNEL_VERSION="2.6.26-2-xen-686 2.6.18-6-xen-686" #`uname -r` igor@0: igor@0: WORK_DIR=${XENOMIPS_FS_NAME%%.img} igor@7: WORK_DIR2=/tmp/xenomips-build igor@0: igor@17: myecho() igor@17: { igor@17: echo '**************************' igor@17: echo "$@" igor@17: echo '**************************' igor@17: } igor@17: igor@0: build_and_install_dynamips() igor@0: { igor@0: OLD_PWD="`pwd`" igor@20: DESTDIR=${WORK_DIR}/usr igor@0: igor@0: if echo $DYNAMIPS_BUILD | grep -qi ^y igor@0: then igor@0: rm -rf ${DYNAMIPS_BUILD_DIR}/ igor@0: mkdir -p ${DYNAMIPS_BUILD_DIR}/ igor@0: cd ${DYNAMIPS_BUILD_DIR}/ igor@0: wget $DYNAMIPS_SOURCES igor@0: tar xfz dynamips*tar* igor@0: cd dynamips*/ igor@0: perl -p -i -e s@^PCAP_LIB=.*@PCAP_LIB=-lpcap@ Makefile igor@0: make igor@0: else igor@0: cd ${DYNAMIPS_BUILD_DIR}/dynamips*/ igor@0: fi igor@20: make install DESTDIR=${DESTDIR} igor@0: cd ${OLD_PWD} igor@0: } igor@0: igor@61: build_and_install_pixemu() igor@61: { igor@61: DESTDIR=${WORK_DIR}/usr/local/pixemu igor@61: mkdir -p $DESTDIR igor@61: cp /home/igor/pemu/pemu/* $DESTDIR igor@61: } igor@61: igor@61: igor@43: if [ $(id -u) != 0 ] igor@43: then igor@43: echo You are not root. igor@43: echo Please, log in as root or run the script with sudo igor@43: ecit 1 igor@43: fi igor@43: igor@43: igor@43: if echo $XENOMIPS_FS_BUILD | grep -qi ^y igor@43: then igor@43: myecho Preparing the Xenomips filesystem igor@43: dd if=/dev/zero of=${XENOMIPS_FS_NAME} seek=${XENOMIPS_FS_SIZE} bs=1024 count=1 igor@43: mkfs.ext3 -F ${XENOMIPS_FS_NAME} igor@43: mkdir -p ${WORK_DIR} igor@43: mount -o loop ${XENOMIPS_FS_NAME} ${WORK_DIR} igor@43: debootstrap ${DISTRO} ${WORK_DIR} ${DEBIAN_MIRROR} igor@43: cat <<SCRIPT | chroot ${WORK_DIR} sh -s igor@0: unset LANG igor@0: apt-get -y --force-yes install ${PACKAGES} igor@0: /etc/init.d/ssh stop igor@0: cat <<FSTAB > /etc/fstab igor@11: proc /proc proc defaults 0 0 igor@11: tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0 igor@11: igor@0: /dev/hda1 / ext3 ro 0 0 igor@0: /dev/hda2 /xenomips/ios ext3 ro 0 0 igor@0: /dev/hda3 /xenomips/config ext3 rw 0 0 igor@0: FSTAB igor@0: mkdir -p /data/Cisco_IOS /xenomips igor@0: igor@40: cat <<EOF > /etc/sysctl.conf igor@40: net/ipv4/ip_forward=1 igor@40: EOF igor@40: igor@0: cat <<'INTERFACES' > /etc/network/interfaces igor@0: auto lo eth0 igor@0: igor@0: iface lo inet loopback igor@0: up for i in \`ifconfig -a | grep 'eth.*Link encap' | awk '{print \$1}'\`; do ifconfig \$i up ; done || true igor@0: igor@13: #iface eth0 inet dhcp igor@0: INTERFACES igor@0: nata@65: cat <<EOF >> /etc/inittab nata@65: 1h:2345:respawn:/sbin/getty 38400 hvc0 nata@65: EOF nata@65: nata@65: cat <<EOF >> /etc/modules nata@65: iptable_nat nata@65: EOF nata@65: igor@49: #echo /usr/local/bin/xenomips.sh > /etc/rc.local igor@0: cd /etc/rcS.d; ln -s ../init.d/xenomips-init S35xenomips-init igor@0: rm /etc/rc2.d/S*quagga igor@49: cd /etc/rc2.d; ln -s ../init.d/xenomips S99xenomips igor@49: cd /etc/rc3.d; ln -s ../init.d/xenomips S99xenomips igor@49: cd /etc/rc4.d; ln -s ../init.d/xenomips S99xenomips igor@49: cd /etc/rc5.d; ln -s ../init.d/xenomips S99xenomips igor@49: cd /etc/rc0.d; ln -s ../init.d/xenomips K01xenomips igor@49: cd /etc/rc1.d; ln -s ../init.d/xenomips K01xenomips igor@49: cd /etc/rc6.d; ln -s ../init.d/xenomips K01xenomips igor@0: igor@7: #perl -i -p -e s@C_PATH=/etc/quagga@C_PATH=/xenomips/etc/quagga@ /etc/init.d/quagga igor@7: mv /etc/quagga /etc/quagga.ORIG igor@7: ln -s /xenomips/config/etc/quagga /etc/quagga igor@0: igor@61: mkdir -p /xenomips/{ios,config} /var/lib/xenomips /root/.ssh igor@0: igor@7: cat <<PROFILE >> /root/.profile igor@7: TERM=linux igor@0: screen -ls | grep -q Attached && screen -x || screen -ls | grep -q Detached && screen -r igor@7: PROFILE igor@0: SCRIPT igor@0: igor@43: for kernel_version in ${KERNEL_VERSION} 2.6.18-without-PAE-4-xen-686 igor@43: do nata@65: cp -R /lib/modules/${kernel_version} ${WORK_DIR}/lib/modules igor@43: done igor@0: igor@43: cp ${XENOMIPS_DIR}/xenomips-init ${WORK_DIR}/etc/init.d/ igor@49: cp ${XENOMIPS_DIR}/xenomips.sh ${WORK_DIR}/etc/init.d/xenomips igor@49: sudo chmod +x ${WORK_DIR}/etc/init.d/xenomips ${WORK_DIR}/etc/init.d/xenomips-init igor@0: igor@43: cat ${SSH_OPEN_KEY} > ${WORK_DIR}/root/.ssh/authorized_keys igor@43: chmod 600 ${WORK_DIR}/root/.ssh/authorized_keys igor@0: igor@43: build_and_install_dynamips nata@65: #build_and_install_pixemu igor@61: kill $(lsof +D ${WORK_DIR} | awk '{print $2}' | grep -v PID) igor@61: pkill ntpd igor@43: umount ${WORK_DIR} igor@43: fi igor@0: igor@0: igor@0: if echo $CONFIG_FS_BUILD | grep -qi ^y igor@0: then igor@43: mkdir -p ${WORK_DIR} igor@43: mount -o loop ${XENOMIPS_FS_NAME} ${WORK_DIR} igor@43: mkdir -p ${WORK_DIR2} igor@43: cp -a ${WORK_DIR}/etc/quagga.ORIG ${WORK_DIR2}/quagga igor@43: perl -i -p -e 's/=no/=yes/' ${WORK_DIR2}/quagga/daemons igor@43: touch ${WORK_DIR2}/quagga/{zebra,bgpd,ospfd,ripd,ripngd,ospf6d,isisd}.conf igor@61: cp -a ${WORK_DIR}/usr/local/pixemu ${WORK_DIR2}/pixemu igor@43: umount ${WORK_DIR} igor@43: igor@18: myecho Preparing the Xenomips config filesystem igor@41: dd if=/dev/zero of=${CONFIG_FS_NAME} bs=1k count=1 seek=${CONFIG_FS_SIZE} igor@0: mkfs.ext3 -F ${CONFIG_FS_NAME} igor@14: igor@14: mount -o loop ${CONFIG_FS_NAME} ${WORK_DIR} igor@61: mkdir -p ${WORK_DIR}/{dynamips,etc} igor@14: mv ${WORK_DIR2}/quagga ${WORK_DIR}/etc igor@61: mv ${WORK_DIR2}/pixemu ${WORK_DIR}/ igor@61: dd if=/dev/zero of=${WORK_DIR}/pixemu/FLASH bs=1k count=16k igor@14: umount ${WORK_DIR} igor@14: igor@18: myecho Creating $CONFIG_FS_NUMBER copies of the Xenomips config filesystem igor@61: for i in `seq 0 $CONFIG_FS_NUMBER` igor@18: do igor@18: cp ${CONFIG_FS_NAME} `echo ${CONFIG_FS_NAME} | sed s/XXX/$i/` igor@18: done igor@0: fi igor@0: igor@0: igor@0: if echo $IOS_FS_BUILD | grep -qi ^y igor@0: then igor@18: myecho Preparing the filesystem with the IOSes igor@18: dd if=/dev/zero of=${IOS_FS_NAME} bs=1k count=1 seek=${CONFIG_FS_SIZE} igor@0: mkfs.ext3 -F ${IOS_FS_NAME} igor@0: mount -o loop ${IOS_FS_NAME} ${WORK_DIR} igor@0: cp ${IOS_DIR}/* ${WORK_DIR} igor@0: umount ${WORK_DIR} igor@0: fi igor@0: