/usr/sbin/drbl-aoe-serv is in drbl 2.6.15-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 | #!/bin/bash
# Author: Steven Shiau <steven _at_ nchc org tw>
# License: GPL
# Description: Program to start service for AoE images on DRBL server.
DRBL_SCRIPT_PATH="${DRBL_SCRIPT_PATH:-/usr/share/drbl}"
. $DRBL_SCRIPT_PATH/sbin/drbl-conf-functions
[ -e /etc/drbl/drbl-ocs.conf ] && . /etc/drbl/drbl-ocs.conf
[ -e $DRBL_SCRIPT_PATH/sbin/ocs-functions ] && . $DRBL_SCRIPT_PATH/sbin/ocs-functions
#
prog="$(basename $0)"
#
USAGE() {
echo "Usage: $prog [OPTION] {start|stop|restart|status}"
echo "-d, --img-dir DIR Scan the AoE image directory DIR when starting"
echo "Ex:"
echo "To start AoE service for images in default image dir $sanboot_img_dump_dir:"
echo " $prog start"
echo "To start AoE service for images in /work/img/:"
echo " $prog -d /work/img/ start"
echo "To start AoE service for images in /work/img1/ and /work/img2/:"
echo " $prog -d \"/work/img1/ /work/img2/\" start"
echo "To stop AoE service:"
echo " $prog stop"
}
#
start() {
if ! type vblade &>/dev/null; then
[ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
echo "vblade not found!"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo "$msg_program_stop!!"
fi
sys_eth_ports="$(LC_ALL=C get-all-nic-ip --drbl-client-eth-port)"
IP_MAC_TMP="$(mktemp /tmp/ip_mac_tmp.XXXXXX)"
trap "[ -f "$IP_MAC_TMP" ] && rm -f $IP_MAC_TMP" HUP INT QUIT TERM EXIT
parse_dhcpd_conf $IP_MAC_TMP
# The output of parse_dhcpd_confi is like:
# hostname IP ADD MAC ADD
# debian101 192.168.61.1 00:02:e3:53:34:30
# debian102 192.168.61.2 00:02:e3:54:73:39
# image name is like: sanboot.aoe-0-0-for-00-50-56-02-01-02
echo "The AoE image dir: $aoe_img_dir"
for img_dir in $aoe_img_dir; do
for i in $img_dir/*.aoe-*; do
if [ ! -e "$i" ]; then
echo "$i is not a normal file. Skip this."
continue
fi
# If the filename is not the format, skip it
if [ -z "$(basename $i | grep -E "for-([[:alnum:]]+-){5}[[:alnum:]]+$")" ]; then
echo "$i is not in DRBL AoE image file name format. Skip this."
continue
fi
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "AoE image found: $i"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
shelf_no="$(echo $i | grep -Eo "aoe-[[:digit:]]+-[[:digit:]]+-for-.*" | awk -F'-' '{print $2}')"
slot_no="$(echo $i | grep -Eo "aoe-[[:digit:]]+-[[:digit:]]+-for-.*" | awk -F'-' '{print $3}')"
mac_address_dash="$(echo $i | grep -Eo "aoe-[[:digit:]]+-[[:digit:]]+-for-.*" | sed -e 's/^aoe-.*-for-//g')"
mac_address_normal="$(echo $mac_address_dash | sed -e 's/-/:/g')"
mac_name_cfg_for_pxe="01-${mac_address_dash}"
echo "Checking if vblade service for aoe:e${shelf_no}.${slot_no} is running..."
ps_status="$(ps -ef | grep -Ew "vblade[[:space:]]+${shelf_no}[[:space:]]+${slot_no}" | grep -v "grep")"
if [ -n "$ps_status" ]; then
echo "vblade service for aoe.e${shelf_no}.${slot_no} is running. Skip this one"
continue
fi
# Find the right eth port instead of running on all. This can be done by parsing the dhcpd.conf if MAC addresses are used in dhcpd.conf.
client_ip="$(grep -iEw "$mac_address_normal" $IP_MAC_TMP | awk -F' ' '{print $2}')"
if [ -n "$client_ip" ]; then
# We can find the IP address from dhcpd.conf
# The output of "ip route get 192.168.205.10" is like:
# 192.168.205.10 dev eth2 src 192.168.205.254
eth_ports_list="$(ip route get $client_ip | grep -iEo 'dev[[:space:]]+.*src' | awk -F' ' '{print $2}')"
echo "This server uses ethernet port $eth_ports_list to connect client $mac_address_normal"
else
# "range" is used in dhcpd.conf, we have to run vblade on all the available ether port except uplink port.
eth_ports_list="$sys_eth_ports"
echo "No idea which ethernet port on the server connects to client $mac_address_normal. Running virtual blade on all available ethernet ports except uplink port..."
fi
if [ -z "$eth_ports_list" ]; then
[ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
echo "No ethernet port on the server connecting to client $mac_address_normal was found!"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo "$msg_program_stop!!"
fi
echo -n "Starting virtual blade for ${i##*/} on "
for j in $eth_ports_list; do
echo -n "$j, "
vbladed ${shelf_no} ${slot_no} $j $i
rc=$?
if [ "$rc" -gt 0 ]; then
[ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
echo "Error when starting vbladed by: vbladed ${shelf_no} ${slot_no} $j $i"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
continue
fi
done
echo
# Set pxelinux config file
cp -f $PXE_CONF_DEF $PXELINUX_DIR/$mac_name_cfg_for_pxe
hide_reveal_pxe_img "AoE-client" reveal $PXELINUX_DIR/$mac_name_cfg_for_pxe
set-default-pxe-img -i "AoE-client" -c $PXELINUX_DIR/$mac_name_cfg_for_pxe
# Change the line: append aoe:e0.0
drbl-tune-pxecfg-block AoE-client "^([[:space:]]*)append aoe:.*" "\$1append aoe:e${shelf_no}.${slot_no}" $PXELINUX_DIR/$mac_name_cfg_for_pxe
done
done
[ -e "$IP_MAC_TMP" ] && rm -f $IP_MAC_TMP
# Use gpxelinux.0 instead of pxelinux.0 in dhcpd.conf
if ! grep -iEq '^[[:space:]]*filename[[:space:]]*=[[:space:]]*[\"]*gpxelinux.0[\"]*' $DHCPDCONF_DIR/dhcpd.conf; then
echo "Use gpxelinux.0 instead of pxelinux.0 in dhcpd.conf..."
perl -pi -e 's|(^filename[[:space:]]*=[[:space:]]*"*pxelinux.0"*.*)|#$1|g' $DHCPDCONF_DIR/dhcpd.conf
perl -pi -e 's|(^[#]*[[:space:]]*filename[[:space:]]*=[[:space:]]*"*gpxelinux.0"*.*)|filename = "gpxelinux.0";|g' $DHCPDCONF_DIR/dhcpd.conf
# Restart dhcpd service, since different distributions have different names
for serv_st in dhcpd isc-dhcp-server dhcp3-server; do
[ -e "/etc/init.d/$serv_st" ] && /etc/init.d/$serv_st restart
done
fi
} # end of start
stop() {
local pxe_mac_files
echo -n "Stopping vblade process... "
pkill -9 vblade
echo "done!"
#
for i in $PXELINUX_DIR/01-*; do
[ -e "$i" ] && pxe_mac_files="$pxe_mac_files $(basename $i)"
done
# Remove spaces in the line head
pxe_mac_files="$(echo $pxe_mac_files | sed -e "s/^[[:space:]]*//g")"
if [ -n "$pxe_mac_files" ]; then
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "The pxelinux config files used for AoE clients in dir $PXELINUX_DIR/ are: ${pxe_mac_files// /, }"
echo "Do you want to remove them now ?"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "[Y/n] "
read ans_rm_pxelinux_cfg
case "$ans_rm_pxelinux_cfg" in
n|N|[nN][oO]) true ;;
*)
for i in $pxe_mac_files; do
rm -fv $PXELINUX_DIR/$i
done
;;
esac
fi
# Ask if want to use gpxelinux.0 instead of pxelinux.0 in dhcpd.conf
if grep -iEq '^[[:space:]]*filename[[:space:]]*=[[:space:]]*[\"]*gpxelinux.0[\"]*' $DHCPDCONF_DIR/dhcpd.conf; then
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "Since AoE booting service was stopped. Do you want to use pxelinux.0 instead of gpxelinux.0 in your dhcpd.conf ?"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "[Y/n] "
read ans_use_pxelinux_0
case "$ans_use_pxelinux_0" in
n|N|[nN][oO]) true ;;
*)
echo "Use pxelinux.0 instead of gpxelinux.0 in dhcpd.conf..."
perl -pi -e 's|(^[#]*[[:space:]]*filename[[:space:]]*=[[:space:]]*"*pxelinux.0"*.*)|filename = "pxelinux.0";|g' $DHCPDCONF_DIR/dhcpd.conf
perl -pi -e 's|(^filename[[:space:]]*=[[:space:]]*"*gpxelinux.0"*.*)|#$1|g' $DHCPDCONF_DIR/dhcpd.conf
# Restart dhcpd service, since different distributions have different names
for serv_st in dhcpd isc-dhcp-server dhcp3-server; do
[ -e "/etc/init.d/$serv_st" ] && /etc/init.d/$serv_st restart
done
;;
esac
fi
} # end of stop
#
restart() {
stop
echo -n "Wait for 2 secs..."
sleep 2
echo
start
}
status() {
ps -efw | grep -iE "vblade [[:digit:]]+ [[:digit:]]+"
}
##############
#### main ####
##############
#
while [ $# -gt 0 ]; do
case "$1" in
-d|--img-dir)
shift
if [ -z "$(echo $1 |grep ^-.)" ]; then
# skip the -xx option, in case
aoe_img_dir="$1"
shift
fi
;;
-*) echo "${0}: ${1}: invalid option" >&2
USAGE >& 2
exit 2 ;;
*) break ;;
esac
done
#
[ -z "$aoe_img_dir" ] && aoe_img_dir="$sanboot_img_dump_dir"
#
ask_and_load_lang_set
#
case $1 in
start) start;;
stop) stop;;
restart) restart;;
status) status;;
*) echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac
|