= 2011-09-27 = * 為何 rock 要把 bridge.ko 加入 /usr/bin/mkpxeinitrd-net 呢?答案很明顯是跟 brctl 有關! {{{ root@debian:~# lsmod > before root@debian:~# brctl addbr br0 root@debian:~# lsmod > after root@debian:~# diff before after 1a2,3 > bridge 39662 0 > stp 1440 1 bridge }}} {{{ #!diff --- /usr/bin/mkpxeinitrd-net.drbl-virt_bak 2011-09-27 02:48:49.000000000 +0800 +++ /usr/bin/mkpxeinitrd-net 2011-09-27 02:35:36.000000000 +0800 @@ -37,7 +37,8 @@ # uncompress the compress kernel module. This is special for Mandriva case. It uses compressed kernel module, e.g. pcnet32.ko.gz. Before we used modprobe from busybox, we have to uncompress that. Now the modprobe program is from the OS (See variable include_bin_prog_from_server), so we should allow this type of kernel modules. use_compressed_kernel_module="yes" # Some required bin programs to be included in the PXE initrd, which are not provided by busybox or the one provided by busybox does not support the function we want. E.g. sleep (we need "sleep 0.1", while sleep from busybox does not support 0.1 secs). -include_bin_prog_from_server="sleep lspci insmod modprobe rmmod lsmod pkill strings mount umount mount.nfs umount.nfs" +# drbl-virt add +include_bin_prog_from_server='sleep lspci insmod modprobe rmmod lsmod pkill strings brctl ip egrep awk gawk seq fgrep dirname expr bash' # No need to use sudo if we are root if [ $UID -eq 0 ]; then @@ -303,6 +304,9 @@ cp -a --parents $i $initrd/lib/modules/$kernel_ver/ done +# drbl-virt add +cp -a --parents kernel/net/bridge/bridge.ko $initrd/lib/modules/$kernel_ver/ +cp -a --parents kernel/drivers/xen/netback/netloop.ko $initrd/lib/modules/$kernel_ver/ # Deal with firmwares! # The following is borrowed from Debian's /usr/share/initramfs-tools/hook-functions if [ "$copy_all_firmwares" = "yes" ]; then }}} {{{ #!diff --- /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init.drbl-virt_bak 2011-09-27 02:35:36.000000000 +0800 +++ /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init 2011-09-27 02:35:36.000000000 +0800 @@ -244,6 +244,8 @@ done done +# drbl-virt add +bash /bin/start_xen_bridge.sh # clean the tag file [ -f "/dev/sname" ] && rm -f /dev/sname }}} {{{ # cat /usr/lib/mkpxeinitrd-net/initrd-skel/bin/start_xen_bridge.sh #!/bin/bash # drbl-virt add NICs=$(/sbin/ifconfig | grep eth | awk '{print $1}') declare -i NICs_nu=$(echo $NICs |wc -w) NIC="" if [ $NICs_nu -lt 1 ]; then for (( i=0 ; i<$NICs_nu ; i++ )) do NIC_IP=$(ifconfig eth${i} | grep "inet addr" | sed 's/inet addr://g' | sed 's/Bcast.*$//g' | sed 's/^[ ]*//') if [ -n $NIC_IP ]; then NIC="eth${i}" break fi done else NIC=$NICS fi bash /bin/network-bridge start netdev=$NIC }}}