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

Last change on this file since 205 was 205, checked in by rock, 14 years ago

Modify: default VM numbers (the same numbers of drbl clients)

  • Property svn:executable set to *
File size: 5.9 KB
RevLine 
[161]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]
[171]12source /opt/drbl-virt/conf/drbl-virt.conf
[175]13source $Work_Path/functions_drbl_virt
[161]14
15# [Main]
16
[171]17# = 1. Patch DRBL xen env for client =
18# == Shutdown all drbl client ==
[205]19echo ""
[171]20echo "Please check all client are shutdown !!!"
[184]21echo "you can use /opt/drbl/sbin/dcs to shutdown."
[171]22read -p "Push 'Enter' to continue......"
[161]23
[171]24# == Change xen kernel for drbl client ==
25check_xen_nu
26Xen_Kernel=$(echo $Xen_Kernel | sed 's/^vmlinuz-//g' )
[188]27echo $Xen_Kernel > $Work_Home/etc/Xen_Kernel
[171]28# == Copy xen image to /tftpboot/nbi_img/ ==
29echo "copy Xen image & Kernel to /tftpboot/nbi_img/"
[174]30cp /boot/*xen* /tftpboot/nbi_img/
31cp /boot/vmlinuz-${Xen_Kernel} /tftpboot/nbi_img/
32cp /boot/initrd.img-${Xen_Kernel} /tftpboot/nbi_img/
33cp /boot/config-${Xen_Kernel} /tftpboot/nbi_img/
[171]34echo ""
35
36# == Modify PXE booting menu ==
[184]37# if menu doesn't has drbl-virt, then add it
[187]38cat /opt/drbl/sbin/generate-pxe-menu | grep "label drbl-virt" >> /dev/null
[184]39if [  $? != 0 ]; then
[173]40# backup generate-pxe-menu
[174]41cp /tftpboot/nbi_img/pxelinux.cfg/default /tftpboot/nbi_img/pxelinux.cfg/default.drbl-virt_bak
42cp /opt/drbl/sbin/generate-pxe-menu /opt/drbl/sbin/generate-pxe-menu.drbl-virt_bak
[184]43
[173]44generate_PXE_menu="/opt/drbl/sbin/generate-pxe-menu"
45declare -i modify_line=$(cat -n $generate_PXE_menu | grep 'label drbl' | awk 'NR==1 {print $1}')
[177]46# delete default
[189]47sed -i 's/^  MENU DEFAULT/  # MENU DEFAULT/g' $generate_PXE_menu
[173]48# modify menu
49sed -i "${modify_line}i\label drbl-virt" $generate_PXE_menu
50modify_line=$modify_line+1
51sed -i "${modify_line}i\  MENU DEFAULT" $generate_PXE_menu
52modify_line=$modify_line+1
[178]53sed -i "${modify_line}i\  # MENU HIDE" $generate_PXE_menu
54modify_line=$modify_line+1
[173]55sed -i "${modify_line}i\  MENU LABEL DRBL-Virtualization ($Xen, $Xen_Kernel)" $generate_PXE_menu
56modify_line=$modify_line+1
57sed -i "${modify_line}i\  kernel mboot.c32" $generate_PXE_menu
58modify_line=$modify_line+1
59sed -i "${modify_line}i\  append $Xen --- vmlinuz-pxe --- initrd-pxe.img devfs=nomount drblthincli=off selinux=0 nomodeset" $generate_PXE_menu
60modify_line=$modify_line+1
61sed -i "${modify_line}i\  TEXT HELP" $generate_PXE_menu
62modify_line=$modify_line+1
63sed -i "${modify_line}i\  ENDTEXT" $generate_PXE_menu
64modify_line=$modify_line+1
65sed -i "${modify_line}i\ " $generate_PXE_menu
[184]66fi
[171]67
68# = 2. Patch DRBL initrd to support bridge =
[174]69# == Patch /usr/bin/mkpxeinitrd-net (1)Xen network scripts (2)command (3)modules ==
[184]70# backup mkpxeinitrd-net. if already has "drbl-virt add", dones't sed
[187]71cat /usr/bin/mkpxeinitrd-net | grep "# drbl-virt add" >> /dev/null
[184]72if [ $? != 0 ]; then
[174]73cp /usr/bin/mkpxeinitrd-net /usr/bin/mkpxeinitrd-net.drbl-virt_bak
74# copy Xen network scripts
75cp /etc/xen/scripts/network-bridge /usr/lib/mkpxeinitrd-net/initrd-skel/bin/
76cp /etc/xen/scripts/xen-network-common.sh /usr/lib/mkpxeinitrd-net/initrd-skel/bin/
77cp /etc/xen/scripts/xen-script-common.sh /usr/lib/mkpxeinitrd-net/initrd-skel/bin/
78# patch it to copy command
79declare -i modify_line=$(cat -n /usr/bin/mkpxeinitrd-net | grep 'include_bin_prog_from_server=' | awk '{print $1}')
80modify_file="/usr/bin/mkpxeinitrd-net"
[177]81sed -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
[174]82sed -i "${modify_line}i# drbl-virt add" $modify_file
83# patch it to copy modules
84declare -i modify_line=$(cat -n /usr/bin/mkpxeinitrd-net | grep "# Deal with firmwares" | awk '{print $1}')
85sed -i "${modify_line}i# drbl-virt add" $modify_file
86modify_line=$modify_line+1
87sed -i "${modify_line}icp -a --parents kernel/net/bridge/bridge.ko \$initrd/lib/modules/\$kernel_ver/" $modify_file
88modify_line=$modify_line+1
89sed -i "${modify_line}icp -a --parents kernel/drivers/xen/netback/netloop.ko \$initrd/lib/modules/\$kernel_ver/" $modify_file
[171]90
[184]91# == Add start_xen_bridge.sh to run Xen network-bridge (/usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init) ==
[174]92cat <<EOF >/usr/lib/mkpxeinitrd-net/initrd-skel/bin/start_xen_bridge.sh
[177]93#!/bin/bash
[174]94# drbl-virt add
[176]95NICs=\$(/sbin/ifconfig | grep eth | awk '{print \$1}')
96declare -i NICs_nu=\$(echo \$NICs |wc -l)
[174]97NIC=""
[173]98
[178]99if [ \$NICs_nu -lt 1  ]; then
[176]100    for (( i=0 ; i<\$NICs_nu ; i++ ))
[174]101    do
[176]102        NIC_IP=\$(ifconfig eth\${i} | grep "inet addr" | sed 's/inet addr://g' | sed 's/Bcast.*$//g')
103        if [ -n \$NIC_IP ]; then
104            NIC="eth\${i}"
[174]105            break
106        fi
107    done
108else
[176]109    NIC=\$NICS
[174]110fi
[171]111
[177]112bash /bin/network-bridge start netdev=\$NIC
[174]113EOF
[184]114fi
115# == Run start_xen_bridge.sh when booting  ==
[187]116cat /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init | grep "bash /bin/start_xen_bridge.sh" >> /dev/null
117if [ $? != 0 ]; then
[184]118    # backup linuxrc-or-init
119    cp /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init.drbl-virt_bak
120    declare -i modify_line=$(cat -n /usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init | grep "# clean the tag file" | awk '{print $1}')
121    modify_file="/usr/lib/mkpxeinitrd-net/initrd-skel/linuxrc-or-init"
[171]122
[184]123    sed -i "${modify_line}i# drbl-virt add" $modify_file
124    modify_line=$modify_line+1
125    sed -i "${modify_line}ibash /bin/start_xen_bridge.sh" $modify_file
126fi
[175]127
[184]128
[178]129# = 3. enable xend xendomains daemon in DRBL Client =
130if [ -e /opt/drbl/conf/client-extra-service ]; then
131    echo 'service_extra_added="xend xendomains"' >> /opt/drbl/conf/client-extra-service
132else
133    echo 'service_extra_added="xend xendomains"' > /opt/drbl/conf/client-extra-service
134fi
[175]135
[185]136# = 4. enable xend xendomains daemon afterr drblpush =
[178]137# /opt/drbl/sbin/drbl-client-service xend on
138
[185]139# = 5. cp xen kernel & initrd to /home/domains =
140if [ ! -e /home/domains ]; then
141    mkdir /home/domains
142fi
[191]143cp /tftpboot/nbi_img/*xen* /home/domains
144cp /tftpboot/nbi_img/vmlinuz-pxe /home/domains
145cp /tftpboot/nbi_img/initrd-pxe.img /home/domains
[185]146
Note: See TracBrowser for help on using the repository browser.