#!/bin/bash # Program: # Patch DRBL to bridge eth in booting (KVM) # Author: # Jazz, Rock {jazz, rock}@nchc.org.tw # Version: # 1.0 # History: # 2010/10/12 Rock First release (1.0) # [Source] source /opt/drbl-virt/conf/drbl-virt.conf source $Work_Path/functions_drbl_virt # [Main] # = 1. Patch DRBL initrd to support bridge = # == Patch /usr/bin/mkpxeinitrd-net == # backup mkpxeinitrd-net. if already has "drbl-virt add", dones't sed cat /usr/bin/mkpxeinitrd-net | grep "# drbl-virt add" >> /dev/null if [ $? != 0 ]; then cp /usr/bin/mkpxeinitrd-net /usr/bin/mkpxeinitrd-net.drbl-virt_bak # patch it to copy command declare -i modify_line=$(cat -n /usr/bin/mkpxeinitrd-net | grep 'include_bin_prog_from_server=' | awk '{print $1}') modify_file="/usr/bin/mkpxeinitrd-net" sed -i "${modify_line}c\include_bin_prog_from_server='sleep lspci insmod modprobe rmmod lsmod pkill strings brctl ip egrep awk gawk seq fgrep dirname expr bash'" $modify_file sed -i "${modify_line}i# drbl-virt add" $modify_file # patch it to copy modules declare -i modify_line=$(cat -n /usr/bin/mkpxeinitrd-net | grep "# Deal with firmwares" | awk '{print $1}') sed -i "${modify_line}i# drbl-virt add" $modify_file modify_line=$modify_line+1 sed -i "${modify_line}icp -a --parents kernel/net/bridge/bridge.ko \$initrd/lib/modules/\$kernel_ver/" $modify_file # == Add start_kvm_bridge.sh (/usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init) == cat </usr/lib/mkpxeinitrd-net/initrd-skel/bin/start_kvm_bridge.sh #!/bin/bash # drbl-virt add NICs=$(/sbin/ifconfig | grep eth | awk '{print $1}') declare -i NICs_nu=$(echo $NICs |wc -w) for NIC in $NICs do NIC_IP=$(ifconfig $NIC | grep "inet addr" | sed 's/inet addr://g' | sed 's/Bcast.*$//g' | sed 's/^[ ]*//') if [ -n $NIC_IP ]; then break fi done # add bridge and bridge to eth /bin/brctl addbr br0 /bin/brctl addif br0 \$NIC /bin/ifconfig \$NIC 0.0.0.0 up /bin/ifconfig br0 \$NIC_IP up EOF fi # == Run start_kvm_bridge.sh when booting == cat /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init | grep "bash /bin/start_kvm_bridge.sh" >> /dev/null if [ $? != 0 ]; then # backup linuxrc-or-init cp /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init.drbl-virt_bak declare -i modify_line=$(cat -n /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init | grep "# clean the tag file" | awk '{print $1}') modify_file="/usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init" sed -i "${modify_line}i# drbl-virt add" $modify_file modify_line=$modify_line+1 sed -i "${modify_line}ibash /bin/start_kvm_bridge.sh" $modify_file fi