source: drbl-virt/sbin/drbl_xen_patch.sh @ 174

Last change on this file since 174 was 174, checked in by rock, 15 years ago

Add: Run Xen network-bridge in initrd

  • Property svn:executable set to *
File size: 4.7 KB
Line 
1#!/bin/bash
2# Program:
3#   Path DRBL evironment to support Xen/KVM
4# Author:
5#   Jazz, Rock {jazz, rock}@nchc.org.tw
6# Version:
7#    1.0
8# History:                                                                                         
9#   2010/07/20  Rock    First release (1.0)
10
11# [Source]
12source functions_drbl_virt
13source /opt/drbl-virt/conf/drbl-virt.conf
14
15# [Main]
16
17# = 1. Patch DRBL xen env for client =
18# == Shutdown all drbl client ==
19echo "Please check all client are shutdown !!!"
20read -p "Push 'Enter' to continue......"
21
22# == Change xen kernel for drbl client ==
23check_xen_nu
24Xen_Kernel=$(echo $Xen_Kernel | sed 's/^vmlinuz-//g' )
25echo "/opt/drbl/sbin/drblsrv-offline -s $Xen_Kernel"
26/opt/drbl/sbin/drblsrv-offline -s $Xen_Kernel
27echo ""
28
29# == Re-delpoy drbl client ==
30echo "Re-delpoy drbl client"
31echo "/opt/drbl/sbin/drblpush -c /etc/drbl/drblpush.conf"
32/opt/drbl/sbin/drblpush -c /etc/drbl/drblpush.conf
33echo ""
34
35# == Copy xen image to /tftpboot/nbi_img/ ==
36echo "copy Xen image & Kernel to /tftpboot/nbi_img/"
37cp /boot/*xen* /tftpboot/nbi_img/
38cp /boot/vmlinuz-${Xen_Kernel} /tftpboot/nbi_img/
39cp /boot/initrd.img-${Xen_Kernel} /tftpboot/nbi_img/
40cp /boot/config-${Xen_Kernel} /tftpboot/nbi_img/
41echo ""
42
43# == Modify PXE booting menu ==
44# backup generate-pxe-menu
45cp /tftpboot/nbi_img/pxelinux.cfg/default /tftpboot/nbi_img/pxelinux.cfg/default.drbl-virt_bak
46cp /opt/drbl/sbin/generate-pxe-menu /opt/drbl/sbin/generate-pxe-menu.drbl-virt_bak
47generate_PXE_menu="/opt/drbl/sbin/generate-pxe-menu"
48declare -i modify_line=$(cat -n $generate_PXE_menu | grep 'label drbl' | awk 'NR==1 {print $1}')
49# modify menu
50sed -i "${modify_line}i\label drbl-virt" $generate_PXE_menu
51modify_line=$modify_line+1
52sed -i "${modify_line}i\  MENU DEFAULT" $generate_PXE_menu
53modify_line=$modify_line+1
54sed -i "${modify_line}i\  MENU LABEL DRBL-Virtualization ($Xen, $Xen_Kernel)" $generate_PXE_menu
55modify_line=$modify_line+1
56sed -i "${modify_line}i\  kernel mboot.c32" $generate_PXE_menu
57modify_line=$modify_line+1
58sed -i "${modify_line}i\  append $Xen --- vmlinuz-pxe --- initrd-pxe.img devfs=nomount drblthincli=off selinux=0 nomodeset" $generate_PXE_menu
59modify_line=$modify_line+1
60sed -i "${modify_line}i\  TEXT HELP" $generate_PXE_menu
61modify_line=$modify_line+1
62sed -i "${modify_line}i\  ENDTEXT" $generate_PXE_menu
63modify_line=$modify_line+1
64sed -i "${modify_line}i\ " $generate_PXE_menu
65
66
67# = 2. Patch DRBL initrd to support bridge =
68# == Patch /usr/bin/mkpxeinitrd-net (1)Xen network scripts (2)command (3)modules ==
69# backup
70cp /usr/bin/mkpxeinitrd-net /usr/bin/mkpxeinitrd-net.drbl-virt_bak
71# copy Xen network scripts
72cp /etc/xen/scripts/network-bridge /usr/lib/mkpxeinitrd-net/initrd-skel/bin/
73cp /etc/xen/scripts/xen-network-common.sh /usr/lib/mkpxeinitrd-net/initrd-skel/bin/
74cp /etc/xen/scripts/xen-script-common.sh /usr/lib/mkpxeinitrd-net/initrd-skel/bin/
75# patch it to copy command
76declare -i modify_line=$(cat -n /usr/bin/mkpxeinitrd-net | grep 'include_bin_prog_from_server=' | awk '{print $1}')
77modify_file="/usr/bin/mkpxeinitrd-net"
78sed -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'" $modify_file
79sed -i "${modify_line}i# drbl-virt add" $modify_file
80# patch it to copy modules
81declare -i modify_line=$(cat -n /usr/bin/mkpxeinitrd-net | grep "# Deal with firmwares" | awk '{print $1}')
82sed -i "${modify_line}i# drbl-virt add" $modify_file
83modify_line=$modify_line+1
84sed -i "${modify_line}icp -a --parents kernel/net/bridge/bridge.ko \$initrd/lib/modules/\$kernel_ver/" $modify_file
85modify_line=$modify_line+1
86sed -i "${modify_line}icp -a --parents kernel/drivers/xen/netback/netloop.ko \$initrd/lib/modules/\$kernel_ver/" $modify_file
87
88# == Run Xen network-bridge in booting (/usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init) ==
89cat <<EOF >/usr/lib/mkpxeinitrd-net/initrd-skel/bin/start_xen_bridge.sh
90# drbl-virt add
91NICs=$(/sbin/ifconfig | grep eth | awk '{print $1}')
92declare -i NICs_nu=$(echo $NICs |wc -l)
93NIC=""
94
95if [ $NICs_nu -lt 1  ];
96    for (( i=0 ; i<$NICs_nu ; i++ ))
97    do
98        NIC_IP=$(ifconfig eth${i} | grep "inet addr" | sed 's/inet addr://g' | sed 's/Bcast.*$//g')
99        if [ -n $NIC_IP ]; then
100            NIC="eth${i}"
101            break
102        fi
103    done
104else
105    NIC=$NICS
106fi
107
108sh /bin/network-bridge start netdev=$NIC
109EOF
110# backup
111cp /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init.drbl-virt_bak
112declare -i modify_line=$(cat -n /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init | grep "# clean the tag file" | awk '{print $1}')
113modify_file="/usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init"
114
115sed -i "${modify_line}i# drbl-virt add" $modify_file
116modify_line=$modify_line+1
117sed -i "${modify_line}ish /bin/start_xen_bridge.sh" $modify_file
Note: See TracBrowser for help on using the repository browser.